1 概述
安天CERT近期监测到多起APT组织DarkPink针对印度尼西亚外交部门及菲律宾军事部门的攻击活动。DarkPink(又称saaiwc)组织最早在2021年年中开始活跃,其主要攻击目标为柬埔寨、印度尼西亚、马来西亚、菲律宾、越南、波斯尼亚和黑塞哥维那等国家的外交、军事等部门及行业。
本次发现的攻击活动的初始样本均为打包的ISO文件,按照攻击流程可分为两类:一类是采用DLL侧加载的方式,释放包含恶意XML文件载荷并通过修改注册表实现持久化。恶意DLL还会创建计划任务定时注销登录用户,在登录Windows用户时,通过调用MSBuild.exe(Microsoft 生成引擎)启动恶意载荷KamiKakaBot[1],实现远程控制功能;另一类采用DLL侧加载攻击的方式进行初始攻击,恶意DLL解密出PE文件并在内存中加载执行,内存中的PE文件会将启动代码添加至注册表中实现持久化,启动代码用于解密并启动恶意载荷TelePowerBot[1],实现远程控制功能。
2 样本分析
2.1 使用KamiKakaBot的攻击活动
2.1.1 诱饵信息
攻击者使用名为“~MSTIP ROTCU Roster of Cadets and List of Training Staff_emb.doc”(意为“MSTIP ROTCU学员名册和培训人员名单”)的诱饵文档,用来伪装成菲律宾马卡蒂科学技术学院预备役军官训练团的学员名册和培训人员名单。图 2‑1 伪装成菲律宾马卡蒂科学技术学院预备役军官训练团的学员名册和培训人员名单的诱饵文档
攻击者使用名为“Availability of HPA Parade Ground.pdf”(意为“HPA 阅兵场的可用性”)的诱饵文档,用来伪装成菲律宾首都地区社区防御集团请求使用HPA 阅兵场的文档。
图 2‑2 伪装成菲律宾首都地区社区防御集团请求使用HPA 阅兵场的文档
攻击者使用名为“~Concept Note Strategic Dialog Version 30.1.docx”(意为“概念说明战略对话版本 30.1”)的诱饵文档,用于伪装成印尼-德国战略会话内容相关的诱饵。
图 2‑3 伪装成印尼-德国战略会话内容相关的诱饵文档
攻击者使用名为“009 -Visit of Norwegian senior diplomats to Jakarta 6-9 February.pdf”(意为“009-挪威高级外交官于2月6日至9日访问雅加达”)的诱饵文档,用来伪装成挪威皇家大使馆发送关于外交官访问雅加达的诱饵,根据诱饵文件内容猜测,攻击目标为印度尼西亚共和国外交部或相关人士。
图 2‑4 伪装成挪威皇家大使馆发送关于外交官访问雅加达的诱饵文档
攻击者使用名为“~Concept note - A Sustainable Forum - Building the Online Resources of the EAMF 16 Dec 2022_emb.doc”(意为“概念说明-可持续论坛-建设EAMF的研究能力2022年12月16日”)的诱饵文档,用来伪装成发件人MA. THERESA P. LAZARO(菲律宾外交部负责双边关系和东盟事务的副部长)的身份,诱饵内容与“澳大利亚关于扩大东盟海事论坛提案的修订概念说明”相关,根据其内容及收件人猜测其攻击目标为东盟高管会的领导人或相关人士。
图 2‑5 澳大利亚关于扩大东盟海事论坛提案的修订概念说明相关内容的诱饵文档图 2‑6 建设 EAMF(扩大东盟海事论坛)的研究能力相关内容的诱饵文档
2.1.2 攻击流程
DarkPink组织构造包含恶意代码及诱饵文件的ISO镜像,通过鱼叉式钓鱼等方式投递到目标机器,诱导用户打开镜像中伪装成文档的exe文件,以DLL侧加载的形式加载恶意模块。恶意模块运行后会读取诱饵文档尾部的数据,解密出XML格式的文件,并建立持久化机制,每当用户登陆时,调用PowerShell打开MSBuild.exe文件执行恶意XML文件,将XML文件中存放的数据解密后加载到内存中执行。解密后的数据为KamiKakaBot[1],用于与Telegram通信并实现浏览器数据窃取、命令执行等功能。
图 2‑7 攻击流程图
2.1.3 样本标签
表 2‑1 ISO中包含的恶意模块MSVCR100.dll
病毒名称 | |
原始文件名 | |
MD5 | c431ddc7ed614effd8e2ae816107de3f |
处理器架构 | AMD AMD64 |
文件大小 | 41.00 KB (41984 bytes) |
文件格式 | Win64 DLL |
时间戳 | 2022-12-21 16:12:05 UTC |
数字签名 | 无 |
加壳类型 | 无 |
编译语言 | x64 Microsoft Visual C++ v14.29 - 2019 - DLL |
VT首次上传时间 | 2023-02-01 03:41:10 UTC |
VT检测结果 | 41/69 |
2.1.4 详细分析
该组织采用DLL侧加载的形式加载恶意模块以规避检测,加载的恶意模块伪装成MSVCR100.dll(Visual Studio 2010的一个动态链接库文件)。
图 2‑8 DLL侧加载
恶意模块加载后,查找当前目录下的满足以下条件的文件:
- 含有隐藏、只读、系统属性;
- 文件名中包含“.doc”和“~”;
- 文件名中不包含“$”。
图 2‑9 查找待解密的文件
恶意模块从诱饵文件尾部读取数据并进行十六进制异或0xCA的操作,直至遇到0x00停止。
图 2‑10 读取文件尾部数据并进行异或操作
恶意模块将处理后的数据写入到%temp%目录下的wct1FDA.tmp文件中,该文件的内容如下图所示。
图 2‑11 wct1FDA.tmp文件的内容
文件生成后通过cmd命令打开诱饵文档,用以假扮正常的文档打开操作。
图 2‑12 通过cmd命令打开诱饵文档
恶意模块新建环境变量MS、TMPT、PSS,后续设置到注册表中的PowerShell代码会使用到环境变量的值。
图 2‑13 设置环境变量
恶意模块通过创建计划任务,感染机器于每周星期三、星期五的13:15强制注销,使用户需要重新登录,执行PowerShell指令。
图 2‑14 创建计划任务
恶意模块设置注册表SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell的值,在登录Windows用户时启动恶意代码。
图 2‑15 登录启动
PowerShell调用MSBuild.exe加载XML文件。首先解码base64数据,并将每个字节xor十进制248,解密后得到KamiKakaBot[1]的修改版本。而后通过GetExportedTypes与InvokeMember方法匹配到程序中的PRLiSNFR方法执行。
图 2‑16 XML文件
KamiKakaBot[1]执行后,首先收集当前设备名、用户名以及部分字符串,而后获取与Telegram通信的API KEY和CHAT ID。
图 2‑17 获取通信所需的内容
KamiKakaBot[1]样本内部存在字符串解密函数,解密函数通过FNV算法进行hash处理调用该函数的函数名,而后进行移位操作并同设定好的数值相加获取到字符串在数组中的位置,进而获取解密后的字符串。
图 2‑18 字符串解密函数及压缩后的数组
KamiKakaBot[1]通过Telegram回传数据。
图 2‑19 KamiKakaBot用于回传数据的函数
KamiKakaBot[1]判断%LOCALAPPDATA%\desktop.ini.dat文件是否存在。若不存在,创建该文件并以“main.APIKEY中的第15字节后15个字节长度的字符串”+“:0”的形式写入到文件中,并将该文件设置为隐藏属性。若存在,读取文件内“:”前面的内容并与main.APIKEY中的第15个字节后15个字节长度的字符串进行比较,相同则返回“:”后面的内容,不同则修改该文件的内容,以“main.APIKEY中的第15个字节后15个字节长度的字符串”+“:0”的形式存储,并将其设为隐藏属性。
图 2‑20 判断是否为首次执行
KamiKakaBot[1]通过requestMessageID函数的返回值来判断当前机器是否首次感染当前版本的KamiKakaBot,将是否首次感染的信息与Chrome、Edge、Firefox浏览器的数据发送至Telegram,等待回传至受害机的数据。
图 2‑21 KamiKakaBot发送上线包
KamiKakaBot[1]接收从Telegram回传的数据,并对数据进行解析判断以实现对应的功能,下表为KamiKakaBot中的指令及对应功能:
表 2‑2 指令及对应功能
指令 | 功能 |
SHOWUP | 回传当前机器名与用户名 |
GETBRWS | 获取Chrome、Edge、FireFox浏览器数据 |
TOKENNEW | 更新APIKEY的值,并将其重新写入到%LOCALAPPDATA%\desktop.ini.dat |
XMLNEW | 更新XML文件或执行cmd命令 |
2.2 使用TelePowerBot的攻击活动
2.2.1 诱饵信息
诱饵文档名为“20220410_Microsoft Security Update.pdf”。该文档为仿冒微软安全更新主题的文档,从诱饵文档的正文内容可以看出此次攻击活动为针对菲律宾军事领域的攻击活动。
图 2‑22 伪装成微软安全更新主题的诱饵文档
2.2.2 攻击流程
DarkPink组织构造包含恶意代码及诱饵文件的ISO镜像,通过鱼叉式钓鱼等方式投递到目标机器,诱导用户打开镜像中伪装成文档的exe文件,以DLL侧加载的形式加载恶意模块。恶意模块运行后会读取诱饵文档尾部的数据,解密出PE文件并在内存中加载执行,内存PE文件负责打开诱饵文档以及将启动代码添加至注册表实现持久化。在每次开机后启动代码均会执行,解密出TelePowerBot[1]恶意载荷实现收集信息、命令执行功能。
图 2‑23 攻击流程图
2.2.3 样本标签
表 2‑3 ISO中包含的恶意模块MSVCR100.dll
病毒名称 | |
原始文件名 | |
MD5 | 8af6f5e22806766c530dcc8420e60f29 |
处理器架构 | AMD AMD64 |
文件大小 | 11.00 KB (11264 bytes) |
文件格式 | Win32 DLL |
时间戳 | 2022-07-14 03:16:16 UTC |
数字签名 | 无 |
加壳类型 | 无 |
编译语言 | Microsoft Visual C++ v7.10 - 9.0 DLL ( 8B ) |
VT首次上传时间 | 2022-09-27 09:20:58 UTC |
VT检测结果 | 41/69 |
2.2.4 详细分析
攻击者同样采用DLL侧加载的方式规避检测,加载的恶意模块将会从诱饵文件尾部读取数据并进行解密操作。
图 2‑24 提取隐藏在诱饵文档尾部的加密数据
解密后的数据为PE文件,在内存中加载PE文件并执行。
图 2‑25 内存中加载PE文件
加载到内存中的PE文件执行后首先会创建互斥量,而后通过cmd命令打开诱饵文档掩饰恶意行为。
图 2‑26 创建互斥量,打开诱饵文档
修改注册表,设置后续脚本运行所需读取的环境变量,并通过设置UserInitMprLogonScript键值实现持久化。为.abcd后缀的文件添加文件关联,从而每次系统启动时链接到启动代码,启动代码主要通过SyncAppvPublishingServer.vbs运行PowerShell代码,异或解密base64编码的数据并执行。
图 2‑27实现持久化机制
在系统每次启动后执行该命令,base64数据解码后进行异或解密。
图 2‑28 base64数据解密后的内容
脚本经过解混淆后,对存放的base64数据解码并解压缩,最终执行的载荷为TelePowerBot[1]。脚本运行后首先会判断与api.telegram.org的连接状态,而后将收集受害机的基本信息并传回Telegram。之后每隔一分钟循环同Telegram通信,接收命令并将命令结果回传至Telegram。
图 2‑29 恶意载荷TelePowerBot的内容
3 关联分析
结合DarkPink组织以往攻击活动样本分析,在攻击流程和使用的攻击组件方面均具有高度相似性,但细节上存在一定程度变化。
本次攻击活动中的XML文件和先前版本的内容及功能大致相同,但在解码base64的后续载荷数据后,又多进行一次异或操作。
图 3‑1 XML文件不同点(左侧为以往攻击活动的XML文件,右侧为本次攻击活动的XML文件)
.NET载荷功能基本相同,但同比先前版本增加了字符串加密函数,提高分析难度。
图 3‑2 .NET载荷中的字符串加密函数
4 威胁框架映射
DarkPink组织相关攻击活动的行为技术点的ATT&CK框架图谱如下所示:
本次活动共涉及ATT&CK框架中9个阶段的16个技术点,具体行为描述如下表:
ATT&CK阶段/类别 | 具体行为 | 注释 |
初始访问 | 网络钓鱼 | 采用钓鱼攻击的形式将ISO文件投递至受害者机器 |
执行 | 诱导用户执行 | 诱导用户打开ISO中仿冒文档的exe文件 |
持久化 | 利用自动启动执行引导或登录 | 修改Winlogon注册表的shell键值,每当用户登录时启动恶意程序 |
持久化 | 引导或登录初始化脚本 | 将启动代码添加至注册表项HKCU\Environment\UserInitMprLogonScript以建立持久性 |
持久化 | 事件触发执行 | 修改.abcd后缀文件的默认关联,在打开具有.abcd后缀文件时执行指定命令 |
防御规避 | 反混淆解码文件或信息 | KamiKakaBot中存在加密的字符串,并由内置的解密函数执行解密 |
防御规避 | 执行流程劫持 | DLL侧加载 |
防御规避 | 仿冒 | 构造双扩展名文件,仿冒文档 |
防御规避 | 利用受信的开发工具执行 | 通过MSBuild构造恶意代码执行 |
凭证访问 | 窃取Web会话Cookie | 获取Chrome、Edge、Firefox浏览器数据 |
发现 | 发现系统信息 | 获取操作系统类型、操作系统版本、计算机产品名称等信息 |
发现 | 发现系统网络配置 | 获取与api.telegram.org的连接状态,获取受害机ip |
收集 | 收集本地系统数据 | 获取设备名和当前用户名 |
收集 | 数据暂存 | 收集到的浏览器数据暂存到%temp%\wdat{0}.dat中 |
命令与控制 | 利用合法Web服务 | 通过Telegram传输命令 |
数据渗出 | 使用Web服务回传 | 通过Telegram回传收集的数据 |
5 总结
DarkPink组织自2021年年中以来,一直处于活跃状态,持续针对东南亚地区进行攻击,且目前使用到的工具几乎均为其自研工具。在近期发现的攻击活动中,攻击者通过DLL侧加载的形式释放后续载荷并实现持久化操作,利用受信的开发工具MSBuild.exe或者直接利用加密的PowerShell脚本启动恶意载荷,且到目前为止,发现受感染的主机与攻击者之间均是基于Telegram API进行通信。在近期发现的攻击活动中存在两类攻击载荷,PowerShell载荷TelePowerBot[1]与.NET载荷KamiKakaBot[1]。本次发现的KamiKakaBot和先前版本相比,功能基本相同,但新增了字符串加密函数以隐藏部分特征。从上述内容可以看出,该组织在按照其原有的攻击模式进行攻击的同时也会对其自研工具做出调整,以便适应不同的攻击目标,进行更加隐蔽、持久的间谍活动。
参考资料:
- Group-IB:Dark Pink
https://www.group-ib.com/blog/dark-pink-apt/