-
-
[翻译]逆向分析Bandios/Colony木马
-
发表于: 2018-5-26 13:43 3812
-
SHA256:59c662a5207c6806046205348b22ee45da3f685fe022556716dbbd6643e61834
你可以在沙盒网站ANY.RUN获取该样本
在ANY.RUN
沙盒中我们可以看到, 样本程序使用参数-install
创建了一个子进程, 子进程则在%SYSTEM_DIRECTORY%
目录下生成了多个文件.
但如果我们在hybrid analysis平台运行该样本我们却几乎无法得到任何信息, 并且程序只会反复递归执行不会停下.
那我们来深入探索一下看看其中到底发生了什么.
注意: 我在分析完后将一些函数重命名了
在获取必要权限后, 程序会检查是否有-install
参数, 如果没有, 程序就会执行copy_tmp_with_install_arg
函数跟collect_encrypt_send
函数, 否则继续执行iaStorE_and_files
函数
在函数copy_tmp_with_install_arg
里, 它将自身复制到%TEMP%
目录下并带参数-install
继续执行
有趣的是, 使用CreateProcess
函数我们有两种方式来运行程序: CreateProcess(exePath, nullptr, ...);
和CreateProcess(nullptr, exePath, ...);
. 如果我们通过第一种方法来运行程序, 我们得到的命令行字符串会带有双引号, 第二种则不带.
该样本使用第二种方式调用CreateProcess
, 并在进程开始时检查没有引号的参数, 在正常环境下这是可行的, 但是在hybrid analysis
沙盒中却没法正常工作. 最可能的原因是hybrid analysis
在某种程度上钩取了CreateProcess
并在检查完参数后, 修改了某些东西后将参数传递给更底层的函数去, 因此在最后我们得到了不同的命令行字符串, 也就是这个字符串导致了样本的反复递归执行
我们也可以使用这种简单的技术来绕过hybrid analysis
沙盒(当然any.run
除外).
这也是为什么hybrid analysis
失效的原因, 让我们回来继续分析样本.
2018.4.17更新: 该绕过hybrid analysis的方法现已被修复
在带参数(-install
)执行子进程后, 它会调用collect_encrypt_send
函数并开始收集系统信息
获取windows版本信息:
收集系统已安装的浏览器信息:
注意: 就算没有安装Chrome浏览器, Windows 10版本的注册表中也含有 HKEY_CURRENT_USER\Software\Google\Chrome 键, 因此这个方法并不可靠
通过检查HKEY_LOCAL_MACHINE\\SOFTWARE\\%AV_NAME%
键来收集系统已安装的杀毒软件信息:
获取网卡的MAC地址和系统语言:
它将收集到的信息传递给machine_info_AES_base64
函数, 并对信息进行AES
加密和base64
编码(以下将详解这一部分的过程):
在函数machine_info_AES_base64
内它调用CoCreateGuid
来生成8字节的随机数据并加上另一个8字节硬编码值1Q2a3k79
:
样本使用advapi32.dll
的MD5
函数来计算上述的16字节长字符串的md5
哈希值(在8_rand_bytes_8_hard_coded
函数中)
随后, 它使用哈希值作为密钥, 使用AES
算法对系统信息进行加密, 并使用base64
编码已加密内容.
注意:
IDA Pro
插件IDAScope可以极大地帮助我们检测样本中使用了哪些加密算法.
程序随后将已加密并编码过的数据发送给iostream.system.band/dump/io/time.php
:
首部的8个字节是通过调用CoCreateGuid
函数生成的. 我们可以编写简单的解密代码来解密流量内容.
发送完系统信息后, 父进程终止, 但带参数-install
的子进程会继续执行, 在本例中它是继续执行iaStorE_and_files
函数
在调用GetNativeSystemInfo
函数后, 它会根据SYSTEM_INFO.dwOemId
域来解压出对应的32位或64位可执行文件.
检查完系统架构后, 它继续调用write_spoolsr_and_MSdat
函数, 在该函数内它使用0xDD
作为密钥, 从byte_443870
(在64位系统情况下)位置开始解密出PE文件, 生成0x40
字节的随机数据添加到解密文件末尾, 解密后的文件保存为%SYS_DIR%\\spoolsr.exe
, 而之前的加密文件存为%SYS_DIR%\\MS.dat
类似地, 函数KeyHook_usp20_n_dats
解压, 解密并生成了如下文件: KeyHook64.dll
, KH.dat
, usp20.dll
和UP.dat
:
KeyHook64.dll
由KH.dat
解密得到, spoolsr.exe
则是由MS.dat
, usp20.dll
由UP.dat
解密得到.
随后, 它继续从资源中解压出样本数据(在64位系统是0x110
位置, 32位系统是0x108
位置). 这些数据看上去也都是已加密或已压缩的数据:
它随后以提取出的数据和数据长度做参数调用decompress_
函数, IDAscope
告诉我们该函数使用了zlib
算法的相关常量.
看上去这像是一个驱动文件, 保存至C:\Windows\System32\drivers
目录下, 文件名为iaStorE.sys
:
在64位系统中, 它简单地将驱动名填入注册表键\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl\DumpFilters
, 将该驱动作为崩溃转储过滤器安装. 在下次重启后, crashdmp.sys
将会载入该过滤器驱动到转储栈里, 更多有关转储过滤器驱动
的信息请点击这里:
在32位系统中, 它会以创建名为iaStorE
服务的方式来安装该驱动
在解压完文件和安装完驱动后, 该样本退出执行.
所有的相关文件都经过签名, 包括驱动文件. 证书虽然已被其发行机构撤销, 但在Windows上这并不是什么大问题.
感谢你花时间阅读. 你也可以在Reddit上跟大家一起讨论
原文链接:Reversing Bandios/Colony Malware
翻译: 看雪翻译小组 Vancir
校对: 看雪翻译小组 一壶葱茜
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)