StrongPity组织伪装驱动程序DriverPack攻击活动分析

StrongPity组织伪装驱动程序DriverPack攻击活动分析

摘要说明

5月下旬,安恒威胁情报中心在日常的高级威胁监测过程中,发现多个冒充合法软件攻击活动。根据攻击特征结合威胁情报中心的分析平台关联其他样本,对样本特征、攻击手法、行为动机、使用技术等综合分析,发现此次攻击方为APT组织Strong Pity。该团伙主要攻击特征为水坑攻击,如将软件下载网站上的合法安装程序替换成木马程序,或者仿冒官方网站的域名进行木马的分发。恶意软件用于定位敏感类型文件,将文件压缩加密后发送到远程服务器。

StrongPity于2016年10月被披露,该组织利用水坑网站发布了恶意版本的WinRAR和TrueCrypt文件加密软件,攻击比利时和意大利的用户。

17年12月,研究人员发现StrongPity新变种正在两个不同国家的ISP(互联网服务提供商)级别的设备上分发,标志着传播方法的改变。

18年3月,又再次在ISP级别设备上发现StrongPity的攻击。StrongPity对土耳其电信(Turk Telekom)网络中的Sandvine/Procera deep packet inspection (DPI)硬件进行了破坏,将土耳其的数百名用户重定向到间谍软件,少数叙利亚用户间接被害。埃及的网络基础设备中也发现类似软件。

19年7月,StrongPity组织利用WinBox(远程管理ROS的软件)安装恶意程序。

虽然5月下旬的样本只是攻击链中的一部分恶意组件,但通过安恒威胁情报平台关联搜索,追踪到该APT组织2020年早期一次攻击的初始载荷,通过分析该样本可得到其较为完整的运行流程。攻击者通过将恶意软件伪装成常用驱动更新软件DriverPack,欺骗受害者下载执行,最终窃取受害者敏感类型文件。

该样本的主要特征为:

1、释放掩饰的合法程序和多个恶意组件;

2、将本地指定类型文件压缩加密后回传C2服务器;

3、从C2服务器请求下载恶意软件资源到本地后创建进程。

以下将对该初始载荷样本进行分析。

样本概述

攻击的初始载荷为一个捆绑了恶意文件的安装包文件“setup.exe”,MD5:7560BC4862C99DE7D33CD3AE6C93BA8A。

“setup.exe”执行后释放4个可执行文件,分别为:

DriverPack-17-Online.exe

65975F0EC8F73437DB3A5374B09A441B

合法程序,DriverPack是一款为Windows平台提供硬件驱动程序的工具;
winslui32.exe

EE0D81AA07BB9AD185D0E72A60AAA7B7

恶意组件,文件描述为“Windows Security Health Host”,上传sft文件;
seceditr.exe

1AB967D62F34DE6CB5C07B6F6BEFC8F3

恶意组件,文件描述为“Windows Security Configuration Editor”,保持持久性;
spools32.exe

MD5E373D3A1C0626680EE079A2C8B214E3D

恶意组件,获取敏感类型文件后压缩加密为sft文件。

执行恶意安装包程序后,前台显示合法程序:

攻击流程

攻击执行初始载荷是伪装成合法软件安装包的间谍软件。执行后将释放到本地的可执行文件创建进程,连接远程服务器下载恶意载荷,上传压缩加密的本地文件。

具体流程如下:

StrongPity(5)

样本分析

setup.exe

“setup.exe”是伪装为DriverPack安装程序的可执行文件,通过释放合法程序和恶意组件,完成多阶段组合的攻击链,最终窃取用户敏感文档。

具体如下:

该程序会创建文件夹

“C:\Users\Administrator\AppData\Local\Temp\ACB-D11C-335AAF”:

接着释放可执行文件:

路径 文件
C:\Users\Administrator\AppData\Local\Temp DriverPack-17-Online.exe
C:\Windows\System32 seceditr.exe、winslui32.exe
C:\Users\Administrator\AppData\Local\Temp\ACB-D11C-335AAF spools32.exe

然后创建合法的“DriverPack-17-Online.exe”进程作为掩饰:

接着将恶意组件“seceditr.exe”创建进程,并传入参数“help”作为首次运行的逻辑:

seceditr.exe

“seceditr.exe”是由“setup.exe”释放并启用的恶意组件,用于保持自身和另一恶意组件的持久性。该恶意组件以“SecEditsrv”为服务名,将自身创建为自启动的系统服务,主要功能是启动另一恶意文件“winslui32.exe”。

具体如下:

当“setup.exe”传入参数“help”创建“seceditr.exe”进程时,通过设置注册服务状态控制函数执行主要功能:

不传参的情况,该恶意软件将本身创建为系统服务:

接着将另一个恶意组件“winslui32.exe”创建为进程,并等待信号:

接收到返回的信号后,进行清理操作,包括:删除创建的系统服务,删除自身文件,退出进程。

winslui32.exe

“winslui32.exe”是“setup.exe”释放恶意的组件,由“seceditr.exe”创建进程。主要用于建立与远程服务器的连接进行数据传输。建立连接后,通过返回的配置文件,解密下一阶段的载荷并执行,并且会上传“spools32.exe”处理的sft文件(“spools32.exe”将在下文中详细介绍)。

具体如下:

该恶意组件会将

“C:\Users\Administrator\AppData\Local\Temp\ACB-D11C-335AAF”路径下的恶意软件“spools32.exe”和“mirvsc.exe”创建为进程。

其中“spools32.exe”是由“setup.exe”释放的恶意组件:

同目录下的“mirvsc.exe”暂未发现样本,考虑为历史样本遗留或后续下载的载荷:

该恶意组件建立HTTP连接,通过POST方法发送

“name=v16_kt19p5_2854603683”

到“https://ms6-upload-serv3[.]com/parse_ini_file.php”,获取返回数据,包括C2命令和可执行文件。

字符串“v16_kt19p5_2854603683”中“v16_kt19p5”为硬编码,“2854603683”为逻辑盘卷区序列号。该字符串可能用于记录设备:

发送

“name=v16_kt19p5_2854603683”

到“https://ms6-upload-serv3[.]com/parse_ini_file.php”

远程服务器返回的数据中,前4个字节为C2指令,4字节后为加密的可执行文件的有效载荷:

C2指令 功能
0x21222324 解密远程服务器返回的数据,保存为文件并执行;
0xDEEFDAAD 给恶意组件“seceditr.exe”返回信号,清除使用痕迹,退出进程。
空数据 POST发送“name=v16_kt19p5_2854603683&delete=ok”

当C2指令为0x21222324时,该恶意组件将从远程服务器返回的数据解密后保存到本地“C:\Users\Administrator\AppData\Local\Temp\ACB-D11C-335AAF”路径下:

通过CreateProcessW执行:

当C2指令为0xDEEFDAAD时,恶意组件将通过CreateProcessW执行命令清除使用痕迹,并退出进程,向远程服务器发送。命令如下:

“cmd.exe/C ping 2.2.5.4-n 5 -w3140 & rmdir /Q /S “C:\Users\Administrator\AppData\Local\Temp\ACB-D11C-335AAF””。

删除创建的文件夹后,退出恶意进程:

但如果远程服务器无返回数据,该组件将通过POST方法发送

“name=v16_kt19p5_2854603683&delete=ok”

到“ms6-upload-serv3[.]com/parse_ini_file.php”:

除了获取远程服务器的数据,该恶意组件还会将“spool32.exe”进程处理的sft文件(将在下文中进行介绍)上传。

具体如下:

该恶意组件会遍历

“C:\Users\Administrator\AppData\Local\Temp\ACB-D11C-335AAF”文件夹,读取sft文件数据,构建HTTP请求包,通过POST方法发送到

“ms6-upload-serv3[.]com/phpinfo.php”。

文件上传成功后,将上传的文件属性从只读隐藏的系统属性修改为正常属性,然后将其删除:

spools32.exe

“spools32.exe”是由“setup.exe”释放恶意组件,由“winslui32.exe”创建进程。主要功能是处理受害设备中的文档,遍历受害设备中的敏感类型文档,压缩加密后储存为sft文件。以便让“winslui32.exe”进程上传到C2服务器。

具体如下:

该恶意组件会先检查自身文件夹中是否有指定的sft文件,有则退出进程:

无则遍历磁盘中的指定类型文件,如PPT、XLS、DOC、RAR、7Z等文档或数据包文件:

接着读取敏感类型文件数据进行压缩,然后创建的“ku.pz”文件写入压缩的数据:

再将“ku.pz”中的数据加密后写入sft文件中:

加密算法为:Byte ^= (Byte>> 4)

将加密后的数据保存为以逻辑盘卷区序列号以及时间作为文件名创建sft文件,设置为只读隐藏的属性。

文件名最后的序号默认为0,并且在文件头中写入“0x4E(N)”作为标识:

sft文件以110,593字节(显示为109KB)为上限,超过的数据将创建新的sft文件保存,sft文件名末尾的序号依次增加:

额外的sft文件文件头以“0x4F(O)”作为标识:

文件设置上限的原因考虑为接收缓冲区的默认值110,592字节

遍历完成本地除系统和软件安装目录(%Windows%、%Windows.old%、%AppData%、%Program Files%、%Program Files (x86)%、%ProgramData%)全部指定类型的文件后,将逻辑盘卷区序列号写入到文件“u1.pz”中储存,退出进程。

关联分析

根据所有情报的综合分析,判断该APT攻击行动的动机主要为获取受害者计算机上敏感文件。攻击团伙伪装合法软件方式和StrongPity历史活动高度相似,代码语言风格、代码功能、TTPs等符合StrongPity团伙的特征。将近期捕捉到的样本与2019年披露的样本对比,代码相似度极高。

下图中,左侧为2019年的样本

(MD5:2062C64DDB1EE195AA4564FA52B9842B),

右侧为5月下旬捕获样本

(MD5:FAA1BA96A35259AF5CDAF48EA76AD984)

1、HTTP报文

2、通过CreateProcess执行命令删除指定文件夹

3、遍历.sft文件

4、C2指令和功能一致

5、解密方式

另外通过对比今年早期和5月的样本,可以发现其变种主要的不同的内容为创建的文件夹路径和释放的恶意组件文件名,C2域名以及发送的字符串。

恶意组件名变化如下,其中今年早期为“spools32.exe”和“mirvsc.exe”,5月为“winmsism.exe”和“sppser.exe”:

文件夹变化如下,其中今年早期为

“C:\Users\Administrator\AppData\Local\Temp\ACB-D11C-335AAF”,5月为“C:\Users\Administrator\AppData\Local\Temp\Panda”:

今年早期样本中出现的字符串为“v16_kt19p5”,5月样本中出现的字符串为“v18_kt68p1”:

总结

可以发现APT组织Strong Pity一直保持活跃状态,仍在持续进行攻击。

该组织会使用水坑攻击,将恶意软件伪装为正常软件,诱导用户下载安装。

用户需注意软件下载渠道,在正规网站下载软件。

附录IOC

MD5:

7560BC4862C99DE7D33CD3AE6C93BA8A

E373D3A1C0626680EE079A2C8B214E3D

90B4DF284BD28909047D179F7A0A3391

B1EFA4B60DD5A320C46BD784CECA2B02

65975F0EC8F73437DB3A5374B09A441B

70D0282007D6366187A4513C1EED8238

FAA1BA96A35259AF5CDAF48EA76AD984

Domain:

ms6-upload-serv3[.]com

hostoperationsystems[.]com

IP:

185.236.202[.]248

91.219.238[.]31