介绍
该样本在VT上首次提交时间为2021年9月9日,奇安信红雨滴团队此前对该样本出过一篇分析报告,使用了与海莲花(OceanLotus)APT组织相似代码混淆方法。出于对该样本的好奇,于是从app.any.run上找到了该样本并分析一波。
IOC
文件名:MSVCR100.dll
MD5:1dbd3e88bc5cb77a7401cb49b44f554e
SHA-1:844264bd15330e7d887051e7a7d062fdef72f49b
SHA-256:f19c7115755ed90c0ad5dfc9321b44aa43228e80a2cd5bc714fc6a1ddcd0d3a6
文件名:4keanigbMSVCR100.dll
MD5:c7b6c3eedb55f4f2170ece002c45091c
SHA-1:c11dd1d35c4664ff5951e5156537e0f3c4b8a759
SHA-256:bf3e495f43a6b333b10ae69667304cfd2c87e9100de9d31365671c7b6b93132e
文件名:bpvefoccMSVCR100.dll
MD5:7ccae006a305efeff74b9be596abbb56
SHA-1:2e27f4c4f4d7bfb3514cf441ca85906e43232de0
SHA-256:2a6a1a026dcff8bf52e6df64d48f5ffaadbd29e4317b753a16c3e291abc7e80d
文件名:cyk33yqhMSVCR100.dll
MD5:fed42946a526d3985e3d03b9b9d71b7b
SHA-1:45f1169dee09b2b1aa1701d3916648973b407204
SHA-256:2c5f0286c075fd383582d64fda62d84e1001cf91682daa0befa7ff61e73413ac
关于MSVCR100.dll样本的分析
混淆类型
类型1
mov eax, large fs:0
push eax
mov ecx, ecx
mov large fs:0, esp
nop
nop
nop
push ecx
mov [ebp+var_10], ecx
mov ecx, ecx
mov ecx, [ebp+var_10]
mov eax, eax
...
mov eax, [ebp+var_10]
mov ecx, [ebp+var_C]
mov large fs:0, ecx
类型2
push ecx
mov ecx, eax
sub ecx, 2
pop ecx
jnz loc_xxx
...
mov eax, [ebp+0Ch]//固定值
push ebx
mov ebx, eax
sub ebx, 1
pop ebx
jnz loc_xxx
test byte_xxx, 4
jns short loc_xxx
...
类型3
call sub_xxx
...
sub_xxx:
cmp dword_1004CD90, 159AE73Eh//数据段的固定值与立即数比较
jns short loc_xxx + 1
...
push ebx
mov ebx, eax
and ebx, eax
pop ebx
setnz cl
mov ecx, ecx
mov eax, ecx
retn
...
此外,样本中还存在一些垃圾函数对逆向造成干扰。
代码分析
分析CTM – Escrow Contract Agreement.exe文件,VT查询报读率为0,发现其导入报毒率48的MSVCR100.dll样本。CTM – Escrow Contract Agreement.exe只是一个恶意dll的加载器,本身是一个word文档打包后的exe文件,文档内容带有诱导性。CTM – Escrow Contract Agreement.exe样本在tmainCRTStartup中调用MSVCR100.dll中的initterm_e函数,而该函数创建一根线程执行特定任务(任务函数被混淆,地址为loc_100052CF)。
在任务函数loc_100052CF中,该样本创建C:ProgramDataMicrosoftMessenge目录,以及三个子目录4keanigb、bpvefocc,和cyk33yqh。
将最初的CTM – Escrow Contract Agreement.exe和MSVCR100.dll文件的文件属性设置为hide。
在每个子目录下再释放一组exe文件和dll文件,其中exe文件和原本的CTM – Escrow Contract Agreement.exe文件相同,都只是dll样本的载体,而释放的三个dll样本功能具不相同。
通过CoCreateInstance函数创建任务服务,设置定时任务,在用户登陆PC后每十分钟执行一次bpvefocc目录下的样本bpvefocc.exe。
在完成文件释放后,进程自动结束自身。
4keanigb目录下MSVCR100.dll样本的分析
同样是沿着initterm_e函数往下分析,其先是在收集感染主机上的信息,内容包括:系统信息、网络适配器的信息、主机Mac地址、IP地址、制造商、计算机名、用户名,以及Program Files和Program Files (x86)目录下的子目录和文件名信息。
其中函数sub_10006B4B处负责获取系统目录。
其中函数sub_10006B4B处负责收集系统信息和硬件信息,而函数sub_1000AF2A获取计算机名和用户名。
函数sub_1000A616收集遍历到的的子目录和文件名列表。
对于收集上来的信息使用函数sub_1004C7D8进行加密,再调用base64进行编码。
动态加载winhttp.dll库,使用https协议将收集到的信息发送给C2服务器,上传C2地址为https://gifted-boulder-transport.glitch.me/HrwQA1。
在发送完收集到的 信息后,调用函数sub_10002B94进行360秒的休眠,寻找当C:ProgramDataMicrosoftMessenge目录下是否存在7z压缩文件,然后进行解压缩。
bpvefocc目录下MSVCR100.dll样本的分析
该样本的主要功能在函数loc_10001037中,其首先确认是否存在C:ProgramDataMicrosoftMessenge目录,若存在则寻找该目录下的exe文件并通过CreateProcessW函数启动。在将另外两个个组件都启动后就结束自身。该组件与此前设置的定时任务配合实现在受害者主机持久化劫持。
cyk33yqh目录下MSVCR100.dll样本的分析
该样本中的_initterm_e函数中同样创建一根线程执行任务,其中任务函数首先检查是否存在oisothda目录,若是不存在则休眠300秒。
使用https协议从gifted-boulder-transport.glitch.me/Zqw4D2上下载文件,可是我这里下载的压缩文件要么失败要么是损坏的。C2服务器应该是不在了,导致无法进行下一步分析。
总结
在感染该样本后,首先查看目录下是否出现隐藏属性的word打包exe文件,并查看是否在C:ProgramData目录下出现MicrosoftMessenge子目录,若存在以上现象则证明确实存在感染。如果要清除该恶意样本,需要先打开任务计划程序删除新建的定时任务,删除整个MicrosoftMessenge目录的内容,同时杀死任务管理器中三个恶意组件对应的进程。该样本的混淆程度确实恶心,增加了逆向定位到该样本恶意代码的难度,并且混淆样式较多导致想要通过特征码匹配的方式去混淆几乎是不可能的。
参考
https://ti.qianxin.com/blog/articles/Obfuscation-techniques-similar-to-OceanLotus/
end
招新小广告
ChaMd5 Venom 招收大佬入圈
新成立组IOT+工控+样本分析 长期招新
原文始发于微信公众号(ChaMd5安全团队):CTM – Escrow Contract Agreement攻击样本分析