安全路透社
当前位置:安全路透社 > 网络转载 > 正文

史上反侦察力最强木马“隐魂”:撑起色情播放器百万推广陷阱

1摘要

近期,360安全中心紧急预警了一款感染MBR(磁盘主引导记录)的“隐魂”木马,该木马捆绑在大量色情播放器的安装包中诱导网民下载,入侵后劫持浏览器主页并安插后门实现远程控制。据统计,短短两周内,“隐魂”木马的攻击量已达上百万次,是迄今传播速度最快的MBR木马。

与疯狂的肆虐趋势相对应的,是“隐魂”木马超高的反侦察能力和极其复杂的制作技术:

从感染方式上来说,不同于恶意程序直接写入MBR的木马,“隐魂”入侵后选择了关机回调的方式伺机启动。电脑关闭前一刻是不少安全软件的监管盲区,“隐魂”就是趁这个空挡植入磁盘底层。同时,它还启动了多达5个白利用文件,以此与安全软件进行对抗。

从攻击手段上来说,“隐魂”木马使用了多个漏洞组合,这是在以往MBR木马中前所未见的。其中,于2015年曝光的老版本Adobe提权漏洞威力格外惊人,它能绕过不少安全软件直接在内核中执行任意代码,是黑客攻击的一个大杀器。

从反侦察能力上来说,“隐魂”可以说是迄今为止的集大成者,它的写入过程完全依靠驱动,不会留下任何落地驱动文件;它会通过RPC远程调用的方式创建进程,木马源头很难被追溯。更值得一提的是,“隐魂”的执行过程十分复杂,在每次写入动作之前,都会小心翼翼地检测电脑上是否存在网络抓包工具、进程监控工具、调试器、反汇编工具、虚拟机等,如果存在上述情况之一,就会即刻停止感染执行,很大程度上避免了被安全研究者逆向追踪。

“隐魂”的活跃量已经直逼暗云系列木马,复杂性和查杀难度则创造了史上新高。目前,360安全卫士已经率先拦截查杀了该木马,反病毒专家经过紧急分析,终于抓到了“隐魂”的狐狸尾巴,以下是对该木马的详细技术分析。

2感染分析

2.1加载图片

 该安装包为一个播放器,带有一定播放功能,可能为二次打包的。

在运行该安装包后,会调用加载读取释放出来的JPG图片。

验证图片完整性:

EggShell FreeBuf.COM

图1

然后将图片末尾数据拷贝到内存

EggShell FreeBuf.COM

图2

解密前数据为:

EggShell FreeBuf.COM

图3

判断进程调试信息后异或0×93解密出代码:

EggShell FreeBuf.COM

图4

判断调试器信息代码为:

EggShell FreeBuf.COM

图5

2.2 ShellCode1

为异或 0×93后代码  代码大小为0x2d4。

异或后代码为:

EggShell FreeBuf.COM

图6

对应代码为:

EggShell FreeBuf.COM

图7

找Kernel32基地址

EggShell FreeBuf.COM

图8

而后申请内存准备执行第二块ShellCode 大小为0×5800。

EggShell FreeBuf.COM

图9

调用第二块ShellCode:

EggShell FreeBuf.COM

图10

2.3 ShellCode2

入口处代码为:

EggShell FreeBuf.COM

图11

填充导入表并检测内核调试器是否开启:

EggShell FreeBuf.COM

图12

检测内核调试:

EggShell FreeBuf.COM

图12

对应结构体为:

EggShell FreeBuf.COM

图13

然后查找导入表中unzGetCurrentFileInfo64 挂钩:

 

EggShell FreeBuf.COM

图14

挂钩:

EggShell FreeBuf.COM

图15

等安装包后续解压文件时候触发获取执行机会。

EggShell FreeBuf.COM

图16

获取额外数据为第三块ShellCode并比对hash值是否一致,

然后调用自身函数解密数据并拷贝ShellCode3到内存:

EggShell FreeBuf.COM

图17

而后设置安装CID环境变量值并 IAT挂钩CreateProcessW。

EggShell FreeBuf.COM

图18

当安装进程创建时候 CreateProcessW IATHook被执行,恢复钩子 并执行第三块

ShellCode。

EggShell FreeBuf.COM

图19

创建线程执行,并且对调试器隐藏线程创建,并将下载地址传入。

EggShell FreeBuf.COM

图20 

执行入口点函数

EggShell FreeBuf.COM

图21

2.4 ShellCode3

ShellCode3为自定义的文件格式 类似于PE 自身实现文件导入表 重定位修正。

执行入口点:

EggShell FreeBuf.COM

图22

修正导入表:

EggShell FreeBuf.COM

图23

检测调试工具信息:

EggShell FreeBuf.COM

图24

其中 IsKdDebuggerEnabled 依然为 KUSER_SHARED_DATA 结构标志KdDebuggerEnabled是否为0。

检测常用工具软件:

EggShell FreeBuf.COM

图25

常用工具集合为  一旦发现便不再感染。

EggShell FreeBuf.COM

图26

接着检查下是否已经被感染防止再次感染,并且读取之前设置的CID环境变量信息

EggShell FreeBuf.COM

图27

调用网络相关函数下载之前的URL网址感染包

EggShell FreeBuf.COM

图28

而后准备执行下载下来的第四块ShellCode。

申请执行内存:

 

EggShell FreeBuf.COM

图29

执行函数

 

EggShell FreeBuf.COM

图30

2.5 ShellCode4

执行:

EggShell FreeBuf.COM

图31

然后解压里面带的相关资源:

EggShell FreeBuf.COM

图32

解压执行先对文件进行校验:

EggShell FreeBuf.COM

图33

通过节点名查找资源信息:

EggShell FreeBuf.COM

图34

而后申请执行空间。尽可能申请高端地址, 将第一块执行文件(ShellCode5) 大小为 0×23810拷贝入内存准备执行 :

EggShell FreeBuf.COM

图35

执行

EggShell FreeBuf.COM

图36

2.6 ShellCode5

ShellCode5 为公共部分代码 用于加载NE文件 和修正导入表 ,并设置好参数

参数通过共享内存设置的。

获取Kernel32基地址并且获取

LoadLibraryA,GetProcAddress,VirtualAlloc,VirtualFree函数地址。

 

EggShell FreeBuf.COM

图37

获取函数地址:

EggShell FreeBuf.COM

图38

Hash算法:

EggShell FreeBuf.COM

图39

而后申请执行内存高端地址 为第六块Shellcode准备空间.

EggShell FreeBuf.COM

图40

而后设置调用参数

EggShell FreeBuf.COM

图41

而后将NE文件入口点设置在堆栈上等函数返回后就执行第六块ShellCode

EggShell FreeBuf.COM

图42

2.7 ShellCode6

该部分模块主要为释放白利用模块根据不同参数执行不同代码,

 会检测调试器 对抗虚拟机,并且利用字体加载漏洞来加载驱动。

入口点函数为:

EggShell FreeBuf.COM

图43

在入口点会检测SMEP是否启用 为后续执行代码做准备

EggShell FreeBuf.COM

图44

Win7以下系统忽略该标志

 EggShell FreeBuf.COM

图45

然后进入白利用相关文件释放函数,该函数会读取SessionId 获取调试标志

一旦检测到被调试就退出。

EggShell FreeBuf.COM

图46

而后会读取系统信息,

配置文件是否忽略虚拟机标志。

EggShell FreeBuf.COM

图47

判断虚拟机方法为:

EggShell FreeBuf.COM

图48

具体实现为:

EggShell FreeBuf.COM

图49

EggShell FreeBuf.COM 

图50

然后判断CPUID信息

是否为这几类虚拟机。

EggShell FreeBuf.COM

图51

获取BIOS信息判断虚拟机

EggShell FreeBuf.COM

图52

如果不是则释放五个白利用中一个,

将文件写到Appdata目录。

EggShell FreeBuf.COM

图53

而后调用 COM IShellWindows接口运行该白利用:

EggShell FreeBuf.COM

图54

启用该进程后会加载白利用的DLL  该白利用DLL 又会创建线程以不同参数(参数还是通过共享内存设置)执行 ShellCode6:

 EggShell FreeBuf.COM

图55

再次运行自身(该白利用文件):

EggShell FreeBuf.COM

图56

执行后将ShellCode6 的NE代码共享到新创建的白利用进程:

EggShell FreeBuf.COM

图57

而后通过APC方式执行该部分代码:

EggShell FreeBuf.COM

图58

然后创建rundll32进程依然是执行ShellCode6,

Rundll32命令行为:

EggShell FreeBuf.COM

图59

依然通过 NtMapViewOfSection将Shellcode6执行代码共享到Rundll32

EggShell FreeBuf.COM

图60

直接通过 SetThreadContext修改EIP实现自身代码运行

EggShell FreeBuf.COM

图61

执行是ShellCode6

这次函数为:

EggShell FreeBuf.COM

图62

首先找到Null驱动的 FastIo 派遣函数表:

EggShell FreeBuf.COM

图63

找到NULL驱动入口点后

通过特征搜到 FastIoDispatch 而后作为参数传入。

EggShell FreeBuf.COM

图64

而后执行  执行第七块ShellCode

EggShell FreeBuf.COM

图65

2.8 ShellCode7

入口点创建线程并执行:

EggShell FreeBuf.COM

图66 

线程函数为获取漏洞溢出资源信息  加载带有漏洞的atmfd.dll 驱动文件

EggShell FreeBuf.COM

图67

而后调用 AddFontMemResourceEx 调用加载 atmfd.dll 驱动文件:

EggShell FreeBuf.COM

图68

触发漏洞函数为:

EggShell FreeBuf.COM

图69

覆盖前函数表:

EggShell FreeBuf.COM

图70

下写断点:

EggShell FreeBuf.COM

图71

而后函数表为:

EggShell FreeBuf.COM

图72

0x7ff6079b  该处函数为:

EggShell FreeBuf.COM

图73

而后触调用读取函数直接发该ShellCode内核执行为ShellCode8:

EggShell FreeBuf.COM

图74

2.9 ShellCode8

功能主要负责加载后面的 NE执行文件

获取Nt基地址:

EggShell FreeBuf.COM

图75

而后获取相关函数地址修正导入表 重定位:

EggShell FreeBuf.COM

图76

将入口点作为参数传入  ExQueueWorkItem 执行。

2.10 ShellCode9

为驱动函数入口点  主要作用是接受应用层来的写磁盘驱动,加载并执行该驱动

获取NTLdr信息。

EggShell FreeBuf.COM

图77

 而后创建设备名跟应用层交互:

EggShell FreeBuf.COM

图78

当应用层传来 0×220004  IO控制码时候。

EggShell FreeBuf.COM

图79

 QueueWorkItem加载该驱动:

EggShell FreeBuf.COM

图80

加载

EggShell FreeBuf.COM

图81

修正并加载篡改MBR驱动执行

EggShell FreeBuf.COM

图82

2.11 ShellCode10

创建设备名

EggShell FreeBuf.COM

图83

注册DPC 注册关机回调  在最后一次关机回调中写入MBR:

EggShell FreeBuf.COM

图84

关机回调中直接发给磁盘底层设备:

EggShell FreeBuf.COM

图85

设备信息为

EggShell FreeBuf.COM

图86

3 尾声

“隐魂”就像一个幽灵,所过之处不留任何痕迹。近段时间,MBR顽固木马的活跃性增高,它的查杀难度本就很高,如果配合多种反侦察和对抗技术,随时有可能形成爆发局势,危害将不亚于勒索病毒。

为了预防“隐魂”木马,360安全中心建议网友:应及时为包括Adobe在内的常用软件更新升级,避免黑客利用老版本软件的漏洞实施攻击;网络上流传的色情播放器大多夹带了木马病毒,切勿因一时贪恋而掉入桃色陷阱;同时,如果发现浏览器页面无故被篡改或锁定、电脑出现异常卡慢等情况,最好使用360安全卫士等软件进行查杀,以防“隐魂”通过远程控制对个人数据和财物造成更大的损失。

EggShell FreeBuf.COM

图87

未经允许不得转载:安全路透社 » 史上反侦察力最强木马“隐魂”:撑起色情播放器百万推广陷阱

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册