接到毒鼠C2外连的告警通知,上机排查。
根据恶意 IP 定位进程:
这个 GameBox.exe 是什么鬼东西?
后续中毒终端又弹窗:
这下确认了 143.92.32.165 关联的程序是 GameBox.exe。开始全局搜索这个 GameBox.exe ,没搜到。
(这是中毒终端用户的原话)
好,很显然这里是没有的。
但是我就是不信邪。凭空消失的吗?
现在知道它在 C盘用户目录下,那就一个个找。突然想起来触发告警之后中毒终端安装了天擎,去查一下天擎日志,看到了具体路径:
顺藤摸瓜找到对应的目录,目录下只有一个 config 文件夹,在 dynmic 下面还有一个 .cfg 的配置文件,这个也是毒鼠客户端会生成的。:
这里基本可以判断确实是毒鼠远控了,因为毒鼠真有这个文件。
另外从设备捕抓到的流量特征确实也能看到:
形如这种
[Asm] 纯文本查看 复制代码
0f000000****00000000ca00**
就是毒鼠心跳包的特征。
种种迹象,判断毒鼠无疑。
话说回来,找不到 GameBox.exe 这个程序。回到最前面的文件夹下面,找到了:
直接看看不到,用终端看还能看不到吗?这不是出来了吗?隐藏了。
原来是设置成 SHR 了。
[Asm] 纯文本查看 复制代码
S = System(系统文件)
H = Hidden(隐藏文件)
R = Read-only(只读)
就显示出来了。还能找不到你?
解除系统属性和隐藏属性后可以正常看到文件:
好,找到这个病毒文件,那到底怎么来的呢?继续找,查一下浏览器:
这个时间变了的原因是我点过,所以更新了。这个的时间在告警时间之前,所以有可疑。
唔~在我本地访问直接被卡巴拦截了:
退出卡巴之后访问:
这看着就像一个钓鱼网站。
点击下载:
会下载一个名为 ynxzb2.6-9.361.zip 的压缩包。
哟,自己跳转的咩?
而且还有一个奇怪的行为,就是在这个页面停留,就会一直自动下载这个 ynxzb2.6-9.361.zip。
==我没有操作,只停留在这个页面,它一直在下载。==
简单分析一下:
你很会啊:
ynxzb2.6-9.361.exe 行为分析:
首先改个名字,做一下 monitor 的监测:
看看都释放了什么东西:
好家伙,还不忘了在桌面释放一个 Winrar 的快捷方式图标的文件:
实际上这个还是一个 exe 可执行文件:
打开临时文件夹目录:
找到了,就是这个。所以中毒就是因为访问了 winrar 伪造钓鱼网站。
继续分析,这两个最新的,所以可以单独分析:
这个 GameBox.exe 显示是 2013 年的:
带腾讯的签名?
根据前面中毒终端的文件,我有一个大胆的推测,就是 GameBox.exe 运行时需要调用 Utility.dll ,然后攻击者劫持了 dll,变成了 GameBox.exe 先调用 Utility.dll ,Utility.dll 再调用 DuiLib_u.dll,实际上 DuiLib_u.dll 应该就是原来的 Utility.dll,现在的 Utility.dll 的内容被替换了,加载 GameBox.exe 的时候直接加载的 Utility.dll。
我猜测的逻辑是:
[Asm] 纯文本查看 复制代码
原本:
GameBox.exe + Utility.dll
现在:
GameBox.exe + Utility.dll(被攻击者替换) + DuiLib_u.dll(原Utility.dll)
为啥一直要读取这个 007 呢?
不是很理解,但是目前有两个 exe 需要分析一下:
一个是 winrarcn-1.4.0sc.exe,一个是 GameBox.exe。
先来看看这个 winrarcn-1.4.0sc.exe,看起来是正经人:
和官网下载的名称一样,大小也一样。
[Asm] 纯文本查看 复制代码
certutil -hashfile xxx.exe md5
好家伙,给你装正版了。md5一样的,证明这个文件就不用分析了,剩下的就是这个 GameBox.exe。
GameBox.exe 静态分析:
32位:
QQgameBox:
不对,按照我们前面的猜测,这个应该是 dll 的白加黑上线。
因为毒鼠的生成界面是这样的:
大胆用白加黑的方式,怎么生成的就怎么逆向。所以最可疑的还是这个 Utility.dll 。
扔到沙箱看一下:
和我的判断基本一致。
测试了一下,逆不成功。其他的 dll 倒是逆向成功了,很疑惑。(后面证实了这个dll加了壳所以没有直接反编译成功。)
因此这个 GameBox.exe 也是无辜的,只是调用了这个 dll,很符合白加黑上线的场景。
那就直接做行为分析:
打开了监控软件之后很快它就显示损坏了,但是不开的话它就按照正常逻辑落地到对应的盘中,看来也有反分析。
(先把这几个文件放在 temp 目录下,然后过一小会就移动到下面这个目录中)
可以看到它在不停变 pid。
ynxzh.exe 是这个 GameBox.exe 的父进程:
这个程序还在运行:
防护软件看到执行了命令:
[Asm] 纯文本查看 复制代码
powershell -Command "Add-MpPreference -ExclusionPath 'C:\Users\Administrator\AppData\Roaming\client'"
这个 PowerShell 命令的核心作用是将指定路径添加到 Windows Defender 的排除项列表中,简单说就是让 Windows 自带的杀毒软件忽略对 C:\Users\Administrator\AppData\Roaming\client 这个目录的所有扫描(包括实时防护、全盘扫描、快速扫描等)。
然后上线。
好,该看的都看了,现在要看一下这个 Utility.dll:
好家伙,我说怎么回事,原来是这样:
用新版本 die 查壳发现用了 Themida 加壳。这种商业壳我是没办法了。
从内存里面dump出来试试先:
用 Process Hacker(现在已经改名为 systeminformer)
在内存里面看一下哪些是 RWX(可读可写可执行)
4个内存段 dump 出来。
和这个匹配了:
找到了一个 Themdia 脱壳:
解开之后整个包都清新了:
现在开始正式做静态分析:
从导出函数 入手:
0xfec3410 重命名为 DropPayloadFiles(将同级释放的木马组件隐藏至 %APPDATA%\client 并使用Powershell将其添加至Windows Defender白名单免杀)
0xfec1380 重命名为 CheckPersistenceTaskExists(检测木马持久化计划任务 Batteries)
0xfec16c0 重命名为 InstallPersistenceTask(把木马写入计算机定时的计划任务中)
0xfec2ec0 重命名为 MainMaliciousThread(每5秒检查一次 GameBox.exe 是否在运行的守护线程)
0xfec3600 重命名为 LoadAndExecuteShellcode(核心的加载并拉起解密Shellcode阶段)
GetSystemInfo 检查 dwNumberOfProcessors > 3 (至少 4 核)。
GlobalMemoryStatusEx 检查物理内存至少大于 4GB (防常见云端轻量沙盒)。
0xfec11f0 重命名为 DecryptShellcode(解密Shellcode的算法函数)
加解密这部分它用的是外部文件:user.dat。
在这个位置找到了加解密的密钥和偏移量:
IV:
[Asm] 纯文本查看 复制代码
6d29efe0e68250ac5a348af37a0e79bf
key:
[Asm] 纯文本查看 复制代码
547256b719c07efa4d60dd9b890029aaad26f25fdbbfc1c088d19a551341bc17
写一下加解密脚本:
[Python] 纯文本查看 复制代码
from Cryptodome.Cipher import AES
import binascii
key = binascii.unhexlify("547256b719c07efa4d60dd9b890029aaad26f25fdbbfc1c088d19a551341bc17")
iv = binascii.unhexlify("6d29efe0e68250ac5a348af37a0e79bf")
with open("user.dat", 'rb') as f:
ciphertext = f.read()
生成 AES CBC 模式 cipher 解密
cipher = AES.new(key, AES.MODE_CBC, iv)
plaintext = cipher.decrypt(ciphertext)
依 PKCS7 规范剪裁尾部多余 padding
pad_len = plaintext[-1]
if pad_len <= 0x0F:
plaintext = plaintext[:-pad_len]
with open("user.dat.decrypted.bin", 'wb') as f:
f.write(plaintext)
该 Shellcode 为实现免杀和脱离环境依赖,采用了三类关键的隐蔽技术:
1、不使用易被查杀的静态导入地址表(IAT),而是通过读取 PEB 内存结构遍历模块链表,找到 kernel32.dll 的基地址;
2、避开字符串特征检测,用基于 131 常数的 dbj2 变体哈希算法,遍历 kernel32 导出表(EAT)动态寻址所需函数;
3、哈希匹配出渗透所需的 kernel32、WS2_32 模块下的核心 API,将这些 API 绑定到栈内存构建虚拟系统接口,实现无特征的动态调用。
一旦底层函数系统架构拼装完毕,Shellcode 继续使用一种名叫 Egg-Hunter 的高级搜索定位策略获取自己的设置。
在使用形如以下的执行代码获得自我的代码地址:
[Asm] 纯文本查看 复制代码
call sub_6b2 ; 跳转进函数
sub_6b2:
pop eax ; 从调用栈取出返回地址,变相获取到自身的EIP实时虚拟地址
ret
之后,它利用得到的 EIP 将内存指针不停增量向高地址方向在相对范围内(偏移 0x5208 限制距离)搜寻特定的 codemark。
这是一个采用完整“分体免杀/侧加载/内存加载”设计思想的高级恶意远控攻击。加载器在规避各种常见杀软拦截并通过 PowerShell 将自身放入免杀区后,实现了权限驻留和计划任务持久化;最后,真正用于命令和控制执行的核心被多层 AES 加密并采用纯 Shellcode 在内存无文件执行,其手法复杂隐蔽。针对此类攻击需注意利用其核心网络 IOC (143.92.32.165:443) 和本地计划任务 (Batteries) 在内网进行大面积排查清除。
总结
经过对病毒的分析,有以下总结:
1、下载的 winrar 是钓鱼木马,运行后会释放两个主要程序,一个是真实的木马程序,一个是真实的winrar官方安装包,winrar官方安装包通过快捷键图标安装,木马静默安装。
2、木马下面的 gamebox.exe 是腾讯QQ的游戏盒子,正经带签名的白程序,只是被白加黑劫持了dll,真正有害的是 Utility.dll 这个文件,并且上线的 shellcode 是外部文件 user.dat 这个文件,Utility.dll被加了商业壳themdia,user.dat做了加密混淆,但是经过还原是 aes-cbc加密算法,已经得到了密钥和偏移量。
3、经过还原 shellcode,发现木马做了以下事情:
[Asm] 纯文本查看 复制代码
1.添加计划任务。
2.把自身路径添加到杀毒软件白名单。
3.做了持久化控制并设置了病毒守护进程。
4.检测计算机环境以对抗分析。
5.发现病毒进程被杀了之后5秒钟内拉起计划任务重新启动进程。
4、病毒分析中木马只外连了两个ip两个端口,均为同一ip:143.92.32.165,同一端口:443,流量特征符合毒鼠C2远控。
5、恶意IOC:
[mw_shl_code=asm,true]143.92.32.165
https://www.cn-winrar[.]com/
https://pub-d5f429fd6fbb483bb516b823774282fb.r2[.]dev[/mw_shl_code]