本文讲的是
“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析,
顽固性木马病毒有感染MBR(磁盘主引导记录)的,有感染VBR(卷引导记录)的,还有用驱动对抗安全软件的,最近则出现了一种连环感染MBR和VBR的新型木马,我们将其命名为“双枪”木马。
1 摘要
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图1
然后判断第一个分区是否为活动引导分区
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图2
是活动分区读取VBR前面两个扇区,判断下引导分区是否为NTFS分区操作系统引导文件是BootMgr 或者是Ntldr。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图3
接下来读取后续的0xf个扇区
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图4
将当前系统的BPB系统更新至恶意代码中同时将恶意代码刷回VBR。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图5
紧接系统读取VBR 控制权转交给VBR部分
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图6
2.1 VBR执行部分
然后执行VBR 代码部分
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图7
再次检查系统文件格式, 检查系统是否支持扩展Int13h。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图8
后续将读取从VBR开始16个扇区到 0x7e00 缓冲区。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图9
随后一个JMP指令被木马修改跳转到恶意代码执行。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图10
恶意代码执行
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图11
为恶意代码执行分配空间
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图12
跳转
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图13
将4ce * 2 = 99c大小的恶意代码解密到刚刚开辟的高端地址执行。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图14
然后跳转到刚刚解密的高端地址执行
解密系统原始VBR部分。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图15
读取磁盘末尾的加密sys文件到0x9300 缓冲区,后续开机部分会解密这部分数据
扇区总数0x5a。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图16
扇区偏移为 0x3a382c41 (磁盘大小为 500GB )
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图17
读取完成后挂钩系统15h中断为后续获得执行机会。
挂钩Int15中断
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图18
挂钩后地址为 9e800+630 = 9ee30
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图19
随后返回到解密的原始VBR处继续执行。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图20
VBR执行后控制转移给了bootmgr加载处为0x2000。
2.2 BootMgr执行部分
BootMgr在获取系统内存信息时候调用Int15 而这个服务被木马挂钩
执行木马挂钩函数。
检测地址是否大于0x9000 bootmgr为 0x2000 且功能号是否E820。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图21
如果EB20 从系统返回结果中隐藏自身高端内存。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
图22
如果是ntldr调用来且功能号位0xE820则搜索。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
对应代码为
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
挂钩后代码为
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
跳转到 9e800 + 5e8 = 9ede8 处继续执行。
该函数主要设置硬件断点 dr0 dr2 dr0针对xp以上系统 dr2针对xp
挂钩Int1后。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
中断函数为 64字节中 低16偏移 高16位段偏移
90000 + F09c = 9F09c
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
设置硬件断点 替换系统中断
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
该Int1中断会被触发多次, 当BootMgr后续代码被自身加载到 0x401000处执行后被触发
当系统控制权由 BootMgr 准备转移 Winload时候被也触发, 这是我们关心的中断。
即将被挂钩的系统函数为:
BootMgr! Archx86TransferTo32BitApplicationAsm
触发的相关指令为:
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
装载系统中断表
被中断 然后 往后 查找特征码 FF D0 查找范围为0x7f 然后
挂钩 。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
该挂钩函数为一个通用函数 :
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
挂钩前函数:
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
当系统执行到BootMgr! Archx86TransferTo32BitApplicationAsm
挂钩后函数跳转到 9ef84处执行 。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
该挂钩函数主要为恢复Archx86TransferTo32BitApplicationAsm,挂钩Winload 里面两处函数 为后续系统进入Winload引导获取执行权限。
挂钩1为 查找特征码 0F 00 D8 实际上为函数 Winload!OslArchTransferToKernel
相关指令为:
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
查找特征码:
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
后续接着查找 0xcb 范围为 0x40 查找处即为 retf指令
将其Patch。
Patch后代码为
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
挂钩2 为 查找特征码 68 12 00 00 E0 , 实际上为函数 Winload!OslpLoadAllModules
中对函数的调用 BlImgAllocateImageBuffer 并保存该函数地址。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
查找特征码
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
并挂钩
挂钩后函数代码为
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
随后返回到系统流程
2.3 Winload执行部分
系统执行到Winload OslpLoadAllModules函数后, 其中偏移177处已经被Inline挂钩
跳转到 9ef1e处执行。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
该函数主要作用
解密 磁盘尾部的0x5a个扇区数据并加载, 调用 BlImgAllocateImageBuffer 申请nt内存地址
解密调用 异或解密。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
并且重定位好文件
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
调用 BlImgAllocateImageBuffer
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
随后系统将执行到 OslArchTransferToKernel,
将控制权交给 Nt 时候 触发第二个挂钩。
执行的函数为 9ed38,
该函数主要为 申请 BK_LDR_CONTEXT 结构 挂入系统Boot驱动加载链
并调用该解密驱动的入口函数。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
3 NT系统加载后
3.1 联网下载改主页驱动
调用解密的驱动 该驱动主要功能为 网上下载另外一个改首页驱动。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
创建下载线程
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
域名解析 分操作系统区分 Vista以上操作 使用Wsk函数 网络收发数据包。
先检测 该驱动是否加载
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
随后会检测该标志
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
联网下载代码
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
自己实现DNS域名解析 向53端口发解析数据包。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
获取磁盘信息
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
计算发送统计数据
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
Base64编码后
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
发送给服务器 获取即将要下载驱动长度,将下载下来的数据异或解密后加载执行。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
而后加载该驱动
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
3.2 改主页驱动
驱动被加载后 创建设备名
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
然后开启线程 检测MBR是否被感染
读取
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
接着使用IOCTL_DISK_GET_DRIVE_GEOMETRY获取磁盘大小。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
然后读取磁盘末尾5a个扇区数据 并将开机驱动异或写入磁盘尾部。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
写入成功后写入MBR 第个扇区后 F个扇区。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
最后写入0号扇区完成感染, 并且会挂钩磁盘底层设备Dispatch钩子保护自身MBR不被改写。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
且会删除Grub启动项
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
改首页部分主要通过挂钩 ProcessNotify注入进程完成。
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
注入的进程名字通过Hash计算
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
注入进程名
![“双枪”狙击:首例连环感染MBR和VBR的顽固木马分析](https://ucc.alicdn.com/notfound.png?x-oss-process=image/resize,w_1400/format,webp)
修复。
完结。
原文发布时间为:2017年7月14日
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。