首页
社区
课程
招聘
3CX供应链攻击样本分析
发表于: 2023-4-8 18:22 17080

3CX供应链攻击样本分析

2023-4-8 18:22
17080

图片描述
3CXDesktopApp.exe 会侧加载 ffmpeg.dll,ffmpeg.dll 中包含恶意代码,也包含正常的功能。

创建名为 AVMonitorRefreshEvent 的事件,修改当前模块的文件名,将 d3dcompiler_47.dll 文件侧加载到系统中 。
图片描述
读取 d3dcompiler_47.dll 中加密的 Shellcode,该 Shellcode 以 8 字节序列 "0xFE 0xED 0xFA 0xCE 0xFE 0xED 0xFA 0xCE" 开始
图片描述
用 RC4 算法解密 d3dcompiler_47.dll 中加密的shellcode ,密钥为 3jB(2bsG#@c7
图片描述

d3dcompiler_47.dll (MD5:82187AD3F0C6C225E2FBA0C867280CC9),在此 dll 中可定位到加密的shellcode
图片描述

解密之后的 dll(MD5:9B406B9CE0DF2D7D88EEAB56E14B333B)
图片描述
DllGetClassObject 会分配一段内存之后,创建一个新的线程并启动该线程
图片描述
在新线程中,首先获取系统时间,并转换为64位的整数,该整数作为生成随机数所需的种子,根据指定文件是否可访问来读取或写入一个名为 "manifest" 的文件,写入内容为随机数据
图片描述
打开注册表 HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography,读取 MachineGuid 的键值数据,获取计算机的唯一标识符
图片描述
下载 ico 文件,图标编号会在运行时随机生成 (rand()% 15 + 1),并直到图标成功下载,下载地址:https://raw.githubusercontent.com/IconStorages/images/main/icon[1-15].ico
图片描述
从文件末尾向后搜索,直到遇到标记 “$” ,提取标记之后的数据,然后 base64 解码,AES-GCM 解密其 C2 配置
图片描述

其中一个 ICO 文件末尾文件内容如下:
图片描述
该 ICO 文件 MD5:1640f48cc05c58f4cc077503a5361cea,来自 https://unit42.paloaltonetworks.com/3cxdesktopapp-supply-chain-attack/
解密脚本:https://github.com/volexity/threat-intel/blob/main/2023/2023-03-30%203CX/attachments/decrypt_ico.py
图片描述
解密结果为:https://azureonlinestorage.com/azure/storage ,这是其中一个 C2 地址。通过 C2 服务器下载 config.json 配置文件,最终会产生最终有效载荷文件,包括ICONICSTEALER、DAVESHELL、SIGFLIP、POOLRAT、TAXHAUL、COLDCAT、VEILEDSIGNAL

ICONICSTEALER 为64位的 dll (MD5:7FAEA2B01796B80D180399040BB69835),
DllGetClassObject 函数中包含恶意代码,通过 NetWkstaGetInfo、RtlGetVersion 获取当前计算机的工作站信息和当前操作系统的版本信息
图片描述
将获取的数据格式化,以便于向 C2 传输数据
图片描述
检索 AppData\Local\Google\Chrome\User Data、AppData\Local\Microsoft\Edge\User Data 、AppData\Local\BraveSoftware\Brave 目录下的 History 文件和 AppData\Roaming\Mozilla\Firefox\Profiles 下的 places.sqlite 文件,即查找 Chrome、Edge、Brave、Firefox 浏览器的储存历史记录的数据库文件
图片描述
复制数据库文件,然后通过执行SQLite语句 SELECT url, title FROM urls ORDER BY id DESC LIMIT 500 、SELECT url, title FROM moz_places ORDER BY id DESC LIMIT 500 在 urls 和 moz_places 表中查询 url 和 title 字段,并按照 id 值的倒序进行排序,返回前 500 条记录,再把相关数据发送至 C2 服务器
图片描述

https://www.splunk.com/en_us/blog/security/splunk-insights-investigating-the-3cxdesktopapp-supply-chain-compromise.html
https://unit42.paloaltonetworks.com/3cxdesktopapp-supply-chain-attack/
https://news.sophos.com/en-us/2023/03/29/3cx-dll-sideloading-attack/

注:根据最新调查报告以及相关信息,修正之前内容
根据 Mandiant 等近期发布的调查报告,3CX供应链攻击事件是一次“双供应链攻击”,在Mandiant的调查报告中,ICO中C2地址会下载payload,即除ICONICSTEALER外,还有其他恶意程序,如:DAVESHELL、SIGFLIP、POOLRAT、TAXHAUL、COLDCAT、VEILEDSIGNAL
此处对 POOLRAT 进行简单分析

MD5:451c23709ecd5a8461ad060f6346930c

图片描述
该样本函数名称清晰明了
创建守护进程
图片描述
初始化,并加载配置,如果加载失败则调用 SetConfig 设置默认配置,并保存配置文件,之后会调用 ProcHibernate 函数,创建线程v3并调用ProxyThread 函数,接着创建四个工作线程并调用WorkThread函数,最后等待所有线程结束后释放内存。
图片描述
LoadConfig 函数,即加载配置,从配置文件中加载配置内容,并存储在 m_Config 中,字符串包含路径 /private/etc/krb5d.conf
图片描述
SetConfig 函数,即设置配置参数,可以看到URL地址,https:[//]airbseeker[.]com/rediret[.]php、https:[//]globalkeystroke[.]com/pockbackx[.]php、https:[//]www[.]woodmate[.]it/administrator/help/en-GB/bins/tags/taghelper[.]php;利用 SaveConfig 函数保存配置文件
图片描述
ProcHibernate函数为在满足特定条件时,使系统进入休眠状态
图片描述
ProxyThread 函数为在检测C2地址的可用性并尝试连接,根据连接结果和系统状态进行相应处理。随机生成一个0到4之间的随机整数作为索引值,即随机选择其中一个C2地址;检测当前系统状态,如果是休眠状态,检查URL是否可用,不可用则会根据返回的错误码,进行相应处理(MSG_Sleep、MSG_Hibernate、MessageThread),如果地址可用,则先等待一段时间,检测重连次数,如果重连次数未达到最大值,则进入下一轮连接尝试。否则,调用CustomSleep函数根据配置文件中的设置决定是否进入休眠状态,并将m_ConnectReason设为2,表示连接失败。当系统状态不为休眠状态时,函数等待一段时间后继续执行循环。如果系统状态为退出状态,则函数返回0,结束执行。
图片描述
WorkThread 函数为核心函数。当URL地址连接可用时,会接收指令并执行相应操作。
图片描述
图片描述
后面通过对C2关联分析,实际上 POOLRAT 与之前微步在线的报告 朝鲜半岛APT组织Lazarus在MacOS平台上的攻击活动分析中提到的类型2的示例样本是同一个样本......
同时,与深瞻情报实验室近期的报告 疑似3CX供应链攻击组织相关联的Linux样本分析中的linux样本,尤其是在指令操作部分,存在着代码复用


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2023-5-14 21:26 被megaparsec编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (1)
雪    币: 2948
活跃值: (30846)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2023-4-13 09:09
1
游客
登录 | 注册 方可回帖
返回
//