应急响应日记 | 和APT黑客团伙斗智斗勇的一天

警铃大作,队员们放下筷子,来不及擦嘴就集结上车,开往事故现场,扑灭危险,保护人们的生命财产……这样的场面,你肯定在电视里看过不少。

但很多人并不知道,在网络安全领域也有类似的“救火队员”角色——“应急响应团队”

在现实世界里,他们看着就是一个个普通人,静静坐在电脑前,探着脑袋敲键盘,然而当视角转入赛博空间,他们用代码和黑客犯罪团伙拼杀,上演侦查与反侦查的场面。

今天这篇文章由微步应急响应团队投稿,我们润色了一下,试图用最通俗的语言还原一次“救火”过程,让更多人了解这个群体及背后的故事。

警报响起

一个普通的下午,阳光透过窗,懒洋洋地洒在办公桌上,二狗子坐在工位上摸鱼。

屏幕上弹出一个应急响应工单,二狗子虎躯一震瞬间提神:“来活了啊,又是一个APT(高级持续性黑客攻击)。
工单显示:
某大型客户现场的TDP(威胁感知平台-Threat Detection Platform)提示发生过多次APT攻击,并且已有多台设备失陷!需要应急响应人员到现场响应排查。

路边等车的间隙,二狗子点燃一根烟,猛抽两口。

到达现场,经情报分析研判,所有IOC(入侵指标)都指向某个商业APT 团伙“W”(出于保护客户隐私等原因不便透露太具体,姑且先叫“W”),经过深度研判,该 IOC 属于最新狩猎到的关联情报。

用大白话说就是:

这个团伙之前作案用的木马被捕获过,“作案前科”都收录在微步安全云里。

溯源木马背后的团伙

微步在线安全云显示:

这个木马幕后的 APT 团伙“W”这些年非常活跃,包括国内金融、高科技、教育等相关行业的数十个目标都曾被“W”团伙攻陷,相关核心数据被窃取,损失惨重。 

APT 组织“W”非常擅于“伪供应链攻击”。 

“伪供应链攻击”听起来高大上,其实很好理解——先找到一些运维人员常用的运维工具,比如 iterm2、navicat、snailsvn 、rinetd等等。

在程序里植入后门和木马。

挂在网上供人们下载,再投一投广告,优化一下搜索排名,让它们尽可能多曝光。

然后这些工具,就被运维人员开开心心地下载过去使用……

也许是因为缺乏安全意识的运维人员实在太多,也许是因为黑客团伙们的“伪供应链投毒”伪装得太好,该问题影响范围十分广泛

锁定木马进程的“样貌”

既然之前抓到过这个团伙的木马,一顿严刑拷打,就能摸清他们的作案手法。 

具体做法是:把之前捕获到的关联木马文件,放到碗里,哦不,放到虚拟机或者沙箱里运行,默默观察它会做什么(就像如来佛看着掌心里的孙悟空),针对性地提出解决方案。

二狗子发现,这个木马会伪装成一个系统守护进程,叫[rcu_sched]。

就好比小偷伪装成保安或者物业人员,潜入大楼,以此躲避检查。

系统守护进程很多,怎么把伪装的给揪出来呢?二狗子想到一个比较快速的木马排查方法:排查PID

PID是什么呢?

如果操作系统是一栋办公楼,进程是里头进进出出的人,PID就是人们第一次进大楼的打卡次序

当一台电脑启动,第一个启动的进程PID就是0,第二进程PID就是1,第三个进程PID就是2……以此类推。

依照二狗子的经验:如果一个进程的PID大于300,却标榜自己是系统守护进程,就很可疑,大概率是伪装的。

因为系统守护进程总是优先启动的,就像一栋办公楼,最早来的肯定是负责开门的保安大爷、负责打扫的保洁大妈、负责开灯的物业人员。如果一个人中午才来上班,却说自己是负责开门的保安,那肯定有问题。果然,排查到一个PID是1417的进程,疑似木马。

解析这个进程的详细信息,与本地测试关联样本一致(越看嫌疑越大)。

一番分析确认,“妥了,就是它了,这个叫[rcu_sched]的系统守护进程。”

调查到这一步,二狗子嘴角微微上扬告诉一旁的同事和客户:“难度不大,场面可控。”

此时他还不知道,自己即将被打脸。

消失的进程

等到现场上机排查,二狗子发现客户机器上根本没有一个名叫[rcu_sched]的伪造系统守护进程。

???

二狗子懵了。 

这就好比侦查人员前期已经得到确切情报:坏人会以[rcu_sched]的名字混进保安队伍,可是翻遍整个小区的保安名单,根本没有一个叫[rcu_sched]的人。 

难道是情报有误?资产没定位好?不可能啊,情报在前期已经确认无误,告警频率持续稳定也都符合感染特征,客户反馈终端定位没错,而且有关终端的其他辅助告警也有。 

难道是刚才在虚拟机里复现木马,流程没走完,导致漏掉了木马后面的隐藏动作?也不会啊。 二狗托着腮,闭上双眼,陷入沉思…… 

“为什么,谁能告诉我为什么?……”

冥冥之中,脑海里传来一个声音指引着二狗子:

“真相只有一个,我知道了,是预加载劫持隐藏!” 

传说中的“预加载劫持隐藏”,是一种隐藏进程的方法。

 利用修改一些参数,让恶意的动态库先于系统标准库加载,以达到架空系统标准库中相关函数的目的,最终实现对特定进程的隐藏。 

用一个不太准确但易于理解的比喻:

 小偷混进小区以后,弄了一个假的物业办公室和一份假的物业人员名单,一旦有人来查,就主动带他们到假的办公室,看假的名单,从而隐藏自己。

二狗翻开自己的“小本本”,里头详细记录着关于 Linux 预加载劫持链接库隐藏的方法和解法(不懂技术的读者感受一下就好):

按照里头的方法一顿操作,再重新查看所有系统守护进程,大于300 的系统守护进程果然出现,名字:[rcu_sched]

木马功能分析

经过分析,这个进程名叫[rcu_sched] 的木马具有文件下载功能,和内核模块交互隐藏文件,新增 DNS,修改 DNS,删除文件、创建文件,隐藏进程等功能,具有反弹加密后的 shell 功能。

简单来说,就是隐藏自己,窃取数据,接受远程命令以及下载更新木马组件。然而魔高一尺,道高一丈,二狗子只轻轻敲下几个命令,后门和木马便灰飞烟灭。

为了避免之后发生类似情况,二狗子也给客户提供一些安全加固的建议:

  • 建议做好威胁检测联动阻断,同时有序做好内部网络区域权限划分隔离和资产管理。
  • 建议实时或定期更新补丁/版本,并测试资产接口只对内部网络区域开放。
  • 建议内部建立统一且唯一办公终端软件来源,且有关软件工具必须来源官网下载并做好安全审核(千万不要下载使用来历不名的软件了)
  • 做好内部安全设备运营。

从客户单位出来,二狗子望着天边一团火烧云,又点燃一根烟:“呼——又是充实的一天呢,一会儿到家吃点儿什么好……”他背着双肩包,很快消失在熙熙攘攘的下班人流之中,这是他普通的一天。

前一篇一文了解“扁鹊见魏文侯”中的开发安全知识
后一篇谷歌今起强制实施安卓APP隐私保护新政