avatar

目录
HW中的一枚CS马

bootst.exe - ac90cc56404ff775fecc0b424f0cbdd0

基本信息

File Name File Size File Type MD5
bootst.exe 146,432 Byte ac90cc56404ff775fecc0b424f0cbdd0

载入IDA时,可看见样本的PDB路径:

C:\Users\F14eE7E\source\HW\loaders\x64\Release\launcher.pdb

从PDB路径可发现可能与HW有关

动态行为

在C:\Users\Public下写入一个文件$WINRE_BACKUP_DATA

链接C2地址:204.139.220.35.bc.googleusercontent.com:10002

样本分析

样本为64位PE文件,无壳,由C\C++编译链接

获取系统信息、获取内存使用情况,使用DeviceIoControl获取第一物理磁盘的参数信息(介质类型,柱面数,每个柱面的磁道,每个磁道的扇区和每个扇区的字节)

从样本的资源中读取内容,资源名“DD”

创建文件”C:\Users\Public\$WINRE_BACKUP_DATA”

将从资源读取出的内容保存到新创建的文件”C:\Users\Public\$WINRE_BACKUP_DATA”

调用ShellExecuteW执行释放出的文件C:\Users\Public\$WINRE_BACKUP_DATA

因释放出的文件结构问题,直接调用ShellExecuteW执行失败

申请两块内存,将释放出的文件读取0x800字节到内存中

读取到内存中通过解密,读取出Shellcode

申请内存,将Shellcode拷贝到内存中,修改内存属性,创建新线程执行代码

Shellcode

通过PEB动态获取函数地址

解密出ShellCode中IP地址:35.220.139.204

发送Http请求到C2地址

再次申请内存空间

从C2地址读取文件,写入到申请的内存中,读取多次,依次写入内存中

动态修复第二段Shellcode,解密前:

解密后:

跳转到刚解密出的内容执行,解密出的文件是一个不完整的DLL文件

通过HASH动态获取API地址,获取到GetProcAddress地址后大量获取API地址

再次申请一块内存,在内存中反射加载DLL文件执行代码

释放掉前面申请的内存,清除前阶段Shellcode痕迹

获取目标主机的IP地址、计算机名、用户名、当前进程名

再次从内存中解密出C2地址:35.220.139.204

尝试访问C2地址的一个”/jquery-3.3.1.min.js”

根据C2地址的.js文档内容执行命令,根据木马特征来看,为Cobalt Strike生成的木马

总结

样本为一个64位exe文件,运行后从资源中取出数据,进行解密后生成一段Shellcode,在内存中加载执行Shellcode,动态获取大量API,解密出一个PE头损坏的DLL文件,进行动态修补后在内存中反射加载执行DLL,在获取后续内容时,C2中的对应url已经404,未能获取到后续内容。通过木马特征,可分析出木马为Cobalt Strike一键生成的木马。

文章作者: Yenn_
文章链接: https://0xdf1001f.github.io/2020/09/19/HW%E4%B8%AD%E7%9A%84%E4%B8%80%E6%9E%9ACS%E9%A9%AC/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wei's Blog

评论