APT41利用了一个批处理文件来植入恶意代码。这个批处理文件位于共享网络驱动器的游戏开发文件夹中,原本用于将更新上传到游戏服务器。攻击者在这个文件中添加了恶意代码,然后等待开发人员运行它。
当一名开发人员打开了这个被修改的批处理文件时,文件中的恶意代码通过Microsoft Windows Installer工具(MSIExec)下载了一个恶意的MSI安装程序文件。这个MSI文件包含两部分:一个恶意DLL,以及一个配置该DLL持久性的脚本。攻击者使用了一种独特的方式来实现持久性,涉及滥用Windows的组件对象模型(COM)机制。
COM允许不同进程间通信。通过将对象注册到Windows系统并分配唯一标识符(GUID),其他应用可以通过Windows API(如CoCreateInstance)访问该对象暴露的接口。系统中注册的COM对象保存在注册表HKCR键下。
通常攻击者会直接劫持常见的、合法的COM对象并将其替换为恶意的,以实现持久化。这种技术已被安全社区广泛关注和防御,如通过收集常见被滥用的GUID黑名单等。
但APT41采取了一种更隐蔽的方式。他们伪随机生成了两个COM对象并注册到系统:第一个指向一个合法的Windows DLL(AppLockerCSP.dll),第二个指向恶意的DLL,同时将第一个对象配置为重定向到第二个。这样一来,其他程序查询第一个对象时,实际由第二个恶意的对象来处理。
APT41最后创建了一个计划任务,每天去调用第一个看似无害的COM对象,经过重定向后实际触发恶意DLL执行。这个计划任务的描述中并不包含恶意DLL的路径,所以单纯扫描计划任务很难发现异常。安全软件必须能关联COM对象的GUID与实际DLL路径,还要理解COM重定向机制,才能判断出恶意行为,这大大提高了检测难度。
通过分析计划任务描述与COM对象定义,可以找到恶意DLL的植入路径。该路径末尾还利用了NTFS的交替数据流(ADS)特性,将PE文件内容存储在一个名为Zone.Identifier的ADS中,进一步躲避常规文件扫描。提取出ADS中的PE文件后,发现是一个使用RC6算法加密的恶意软件加载器。研究人员花了很大力气,定位到加载器使用的CryptoCycle加密库,并编写脚本解密出最终的恶意负载-一个后门程序。
最后还来了一个假旗(false flag)?
推荐阅读
闲谈
威胁情报
1.威胁情报 – 最危险的网络安全工作
2.威胁情报专栏 | 威胁情报这十年(前传)
3.网络威胁情报的未来
4.情报内生?| 利用威胁情报平台落地网空杀伤链的七种方法
5.威胁情报专栏 | 特别策划 – 网空杀伤链
APT
入侵分析与红队攻防
天御智库
原文始发于微信公众号(天御攻防实验室):APT41的隐蔽潜藏手法