:首发先知社区:https://xz.aliyun.com/t/14295
首发作者:qianlan
前言
此次分析的样本从威胁情报渠道获取,经过同源分析关联到APT组织SideWinder使用的后门WarHawk,相比以往样本,此次样本从恶意代码执行流程和功能模块都做了重大修改,目标该组织正在积极的对WarHawk后门武器进行重构。
样本使用了白加黑、DLL劫持两种手法执行恶意代码,恶意代码被嵌入在DLL中,此DLL经“Dbghelp.dll”修改而来,正常exe程序加载被劫持的dll,执行嵌入在DLLmain函数中的恶意代码。
相比于以往的WarHawk后门,此次样本使用了TLS加密通讯,程序中包含着多个并不执行的代码分支,这些分支属于原有的WarHawk后门,在初始化、持久化等执行流程有较大的改变,但是功能模块也并不健全,可能是SideWinder组织打包的一个临时版本后门。
背景
SideWinder(响尾蛇)组织,又名 Rattlesnake 或 T-APT4,据信是有印度背景的APT团伙,其主要针对周边国家政府机构等重要组织开展攻击活动,窃取敏感信息。
WarHawk后门最早是由Zscaler在2022年10月被发现和报告。
目录
公众号不太方便看文章结构,放个目录。
一、样本概述
1.1 样本信息
初始样本是名称为“SIR_206_48_MON_28_03_2024.img”的光盘映像文件,解压可获得两个PE文件。其中exe程序为intel公司的文件图标和过期签名信息白名单程序,文件名后接若干空格掩盖exe后缀,作为诱饵文件诱导用户运行。
而dll文件是在dllmain函数中包含恶意程序的被劫持dll。
1.2 白名单程序exe
exe程序主函数结构如图,用户定义的字符和程序执行与“IntelWiDiUtils64.dll”中部分正常导出函数十分类似,经过分析主要为intel组件相关的程序,并未包含恶意代码。
1.3 DLL劫持
exe程序运行会加载“IntelWiDiUtils64.dll”,正常的IntelWiDiUtils64.dll是Intel WiDi(Intel Wireless Display)的一部分,它是用于管理和支持Intel WiDi功能的动态链接库文件。
但通过导出函数比对,正常“IntelWiDiUtils64.dll”(下图 左)与次样本同名dll(下图 右)导出函数的类型和数量均不一致。取此名的目的是为了迷惑用户认为exe和dll文件均为Intel关联的正常程序,并且在dll文件中内置了恶意功能代码。
通过恶意dll导出函数类型和导出函数比对,发现此动态链接库原型为Dbghelp.dll,并且在原有258个导出函数新增一个WinNextCheckIfConfigIsAttributionWorthy()函数。
同时修改了DLLmain函数内置恶意代码,正常Dbghelp.dll入口函数如图。
恶意“IntelWiDiUtils64.dll”入口如图,可以看到有进程、线程创建,文件管理等敏感操作。
还有一显著的特征是,对被劫持dll所有的原有导出函数做了重定向,重定向函数与原型相比并无修改,只是嵌套了一层调用。
1.4 恶意代码同源分析
样本中包含很多正常执行流程以外的代码,这些不执行的代码分散在不同的分支中。其中一块不执行的代码如下。
其中包含的json格式的待填充字符,以及检查执行代码的时区是否为“巴基斯坦标准时间”功能,与厂商zscaler报告中APT组织SideWinder使用的WarHawk后门一致。
{ "_hwid": "%s", "_computer": "%s", "_username": "%s", "_os": "%s"}
报告原文:
https://www.zscaler.com/blogs/security-research/warhawk-new-backdoor-arsenal-sidewinder-apt-group
其他代码分支也有多处特征WarHawk后门有同源性,但相比于原有的WarHawk后门,整个病毒样本功能并不完善,并且嵌套着以往的部分代码,在病毒开发的角度看来应该是在做迭代,尤其是更新了加密通讯。此样本更像一个临时版本。
1.5 威胁情报同源分析
此次从样本提取到域名“ctd2.police.fia-gov.com”、IP:port“64.46.102.63:8443”
C段地址64.46.102.0/24被APT组织SideWinder大量利用,与情报提及的JA3S测绘端口一致,均为8443端口。测绘语句
cert="636374218887077946883308642409602363854605580376"
以及根域名“fia-gov.com”在同一篇报告中被例举。
二、样本执行流程
2.1 白exe程序加载被劫持的dll
exe程序在导入函数库中加载被劫持dll的WinNextCheckIfConfigIsAttributionWorthy()函数。
函数原型如下,实际上其没有任何功能。系统在加载DLL时会自动调用DLLMain函数,此操作只是为了执行DLLMain中的恶意代码。
将指令断在“IntelWiDiUtils64.dll”DLLMAIN函数入口处,调试恶意代码段。
DLLMAIN函数反汇编代码如图。
2.2 DLLmain函数入口
进入DLLmain函数,创建线程函数执行核心恶意代码。
2.3 反调试操作
单独调试线程函数程序,加载”user32.dll“,数百次循环调用函数”GetForegroundWindow”获取当前窗口的句柄,并且嵌套了sleep操作,判断当前窗口是否发生变化。以及做了无意义的堆内存开辟和释放。
实际上是花指令反调试操作,大量sleep操作减慢程序执行速度,使调试器或沙箱无法按预期运行,也有着一点点反沙箱的意思,再最终执行功能函数。
2.4 初始化
do while计算字符长度。拼接路径”C:programdataIntelIntelWiDiUMS64.exe“,如果目标路径不存在,拼接计划任务创建指令至CommandLine。动态调试查看拼接结果。
"schtasks /create /sc minute /mo 5 /tn IntelWiDiUMS /tr C:\programdata\Intel\IntelWiDiUMS64.exe"
通讯关联的dll库、Winapi函数名称初始化。
2.5 持久化
创建路径”c:programdataIntel”,并将初始的白程序exe文件和恶意dll先后copy在此路径下。创建进程,执行初始化过程中拼接的计划任务创建命令。无限期每隔五分钟执行一次”C:programdataIntelIntelWiDiUMS64.exe“
动态调试如图。
2.6 信息搜集
计算机名、用户的个人文件夹路径、C盘卷序列号。
2.7 网络通讯
2.7.1 API调用初始化
加载在初始化阶段拼接的字符“winhttp.dll”,逐个获取winapi地址,并将地址赋值给了一个变量用作后续调用。
2.7.2 上线数据包初始化
C2地址域名“ctd2.police.fia-gov.com”和IP“64.46.102.63”硬编码于样本中,无限循环间歇发送请求。
将字符“sd=”与系统信息的base64编码拼接。
2.7.3 http请求初始化
拼接硬编码在样本中的http.user-agent参数。
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
链路调用WinHttpOpen 、WinHttpConnect、WinHttpOpenReques、WinHttpQueryOptio、WinHttpSetOption、WinHttpSendRequest发送上线数据包,其中WinHttpOpenReques定义了参数,标志位WINHTTP_FLAG_SECURE,通讯将使用SSL/TLS加密通讯。
2.7.4 tls请求发送
WinHttpConnect完成TCP三次握手、WinHttpSendRequest发送tls建立连接请求。在本地构造环境,捕获通讯流量如图。
如果建立连接成功也会将初始化搜集并编码的主机信息“sg=…”发送至C2。
2.7.5 循环接收服务端指令
tls连接建立完成后,客户端调用inHttpReceiveResponse阻塞等待来自服务端响应,接收到响应包读取响应数据,在堆中分配内存用于存储服务端下发的指令。
调用函数CryptStringToBinaryA,将字符指令转为二进制数据存储于v145中,在通过内存复制将最终的指令码放置于变量 v512中。
通过switch…case结构,解析和执行来自服务端的指令,通过判断数组v512第二个元素的值,来执行功能代码,后续元素则是一些指令参数。
共计5个case选项五个功能模块。
2.8 功能模块
指令码0x01,文件上传。
读取来自服务端的hex流存储为文件,文件流为服务端下发指令数组中第4个元素。
指令码0x02,文件执行。
创建进程执行文件,文件目标为服务端下发指令数组中第4个元素。
指令码0x03,文件下载。
根据给服务端下发的文件路径,从客户端下载文件内容,使用与上线数据包相同的通讯逻辑。指令码0x04,获取盘符信息。
调用winapi GetLogicalDriveStringsW获取系统中所有逻辑驱动器的根目录路径,经过处理后,使用与上线数据包相同的通讯逻辑发送。
指令码0x05,获取指定路径文件信息。
调用FindFirstFileW函数查找指定路径(服务端下发)的文件或文件夹,通过FindNextFileW函数遍历同一路径下的其他文件或文件夹,获取文件信息,经过处理后,使用与上线数据包相同的通讯逻辑发送。
三、IOC
SIR_206_48_MON_28_03_2024.img:
216be0b5a0bbe6066604530539b647b6
IntelWiDiUtils64.dll:
d466c92a9ed1b0dd7a9789d24182b387
ctd2.police.fia-gov[.]com
64.46.102[.]63:8443
参考: hxxps://twitter.com/ginkgo_g/status/1774639942628761827
感谢阅读~
原文始发于微信公众号(帅仔回忆录):首篇报告!APT组织SideWinder(响尾蛇)积极对其后门武器WarHawk进行迭代重构