ESET研究人员发现了PlushDaemon APT组织使用的一种网络植入物,用于执行中间人攻击。我们将其命名为EdgeStepper,它会将所有DNS查询重定向到外部恶意劫持节点,从而将原本用于软件更新的合法基础设施流量有效重定向到攻击者控制的基础设施。
本博文要点:
- 我们分析了网络植入物EdgeStepper,以了解PlushDaemon攻击者如何入侵其目标。
- 我们分析了LittleDaemon和DaemonicLogistics,这两个下载器负责在Windows机器上部署该组织的标志性后门SlowStepper。
PlushDaemon背景
PlushDaemon是一个至少自2018年开始活跃的、与中国有关的威胁行为者,从事针对中国、台湾、香港、柬埔寨、韩国、美国和新西兰的个人和实体的间谍活动。PlushDaemon使用我们追踪为SlowStepper的自定义后门,其主要初始访问技术是通过我们称为EdgeStepper的网络植入物将流量重定向到攻击者控制的服务器,从而劫持合法更新。此外,我们观察到该组织还通过Web服务器漏洞获取访问权限,并于2023年实施了一次供应链攻击。
概述
2024年,在研究PlushDaemon的活动集群(包括韩国VPN服务的供应链入侵事件)时,我们注意到一个提交到VirusTotal的ELF文件包含了来自PlushDaemon基础设施的两个子域名。该文件名为bioset,之前很可能托管在一个被多个威胁行为者入侵的服务器上。请注意,在提交到VirusTotal的同一天,一位研究员(@James_inthe_box)在推特上发布了关于托管bioset的服务器上存在开放目录的消息,因此该样本很可能是正在调查该目录内容的研究员上传到VirusTotal的。
被其开发者内部命名为dns_cheat_v2,我们代号为EdgeStepper的bioset,是PlushDaemon的中间人攻击工具,它将目标网络中机器的DNS流量转发到恶意DNS节点。这使得攻击者能够将软件更新流量重定向到劫持节点,该节点向合法软件发出指令以下载恶意更新。
受害者分析
图1展示了根据ESET遥测数据,自2019年以来通过恶意更新被PlushDaemon入侵的受害者的地理分布。
图1. 受害者地理分布
PlushDaemon入侵了位于以下地区的个人和组织:
- 美国 (2019)
- 台湾 (2021, 2024)
- 中国 (2021–2024),包括北京的一所大学和一家台湾电子产品制造商
- 香港 (2023)
- 新西兰 (2023)
- 柬埔寨 (2025),包括一家汽车行业的公司和一家日本制造公司的分支机构
中间人攻击概述
首先,PlushDaemon入侵其目标可能连接的网络设备(例如路由器);这种入侵很可能是通过利用设备运行软件中的漏洞,或通过弱/已知的默认管理凭据实现的,从而使攻击者能够部署EdgeStepper(可能还有其他工具)。
EdgeStepper开始将DNS查询重定向到恶意DNS节点,该节点验证DNS查询消息中的域名(例如来自搜狗拼音的info.pinyin.sogou.com)是否与软件更新相关,如果是,则回复劫持节点的IP地址。或者,我们也观察到一些服务器同时是DNS节点和劫持节点;在这些情况下,DNS节点用自己的IP地址回复DNS查询。
请注意,由于我们深入研究过搜狗拼音软件更新被劫持的情况,因此后续将继续以此为例。许多其他流行的中国软件也通过EdgeStepper被PlushDaemon以类似方式劫持其更新。
图2说明了PlushDaemon能力部署的最初几个阶段。
图2. 攻击初始阶段示意图
更新软件通过HTTP与劫持节点通信,而不是与搜狗的合法基础设施通信;劫持节点回复指令,例如,从 http://ime.sogou.com/popup_4.2.0.2246.dll 下载一个DLL文件,如图3所示。
图3. 更新劫持过程的流量捕获
该软件向ime.sogou.com发送HTTP GET请求以尝试获取DLL;然而,通信再次被重定向到劫持节点,该节点提供popup_4.2.0.2246.dll,而实际上这是LittleDaemon DLL。该过程如图4所示。
图4. 更新劫持的最后阶段示意图
图5显示了劫持节点提供LittleDaemon的情况。
图5. 更新劫持过程的流量捕获
EdgeStepper
根据二进制文件中的符号,EdgeStepper最初被称为dns_cheat_v2。它是使用开源GoFrame框架以Go语言开发的,并编译为适用于MIPS32处理器的ELF文件。需要重点注意的是,EdgeStepper不太可能是部署在受感染网络设备上的唯一组件。遗憾的是,我们没有入侵链中其他组件的样本。
EdgeStepper首先从/etc/bioset.conf获取并解密配置数据。对于解密,它使用AES CBC,密钥和IV是字符串"I Love Go Frame!",该字符串被GoFrame库在其实现中用作默认IV。
解密后的配置揭示了如图6所示的数据。
|
|
图6. 解密后的配置
参数的含义如下:
toPort指定EdgeStepper将监听的端口,host指定解析为DNS节点IP地址的域名,DNS查询数据包将被转发到该节点。
此外,EdgeStepper二进制文件中有一个配置块(图7),似乎在代码的任何地方都未引用。host字段中的域是test.dsc.wcsset[.]com,解析为47.242.198[.]250。我们观察到从2021年到2022年,该IP地址是恶意更新的来源:即劫持节点。截至本文撰写时,该域名仍解析到该IP地址。
图7. EdgeStepper中未使用的配置块
加载配置后,EdgeStepper初始化Distributor系统和Ruler系统。
Distributor
Distributor解析配置中host字段域名关联的IP地址,并调用Ruler系统。Distributor的工作流程如图8所示。
图8. EdgeStepper工作流程
通过Ruler系统,Distributor将端口53上的流量重定向到端口1090,将自己建立为DNS代理。
当从潜在受害者的设备收到DNS消息时,它会检查该消息是否符合RFC规范(可能只是为了验证数据包确实来自DNS协议)。
然后将数据包转发到恶意DNS节点。
最后,它将DNS节点的回复转发给设备。
Ruler
Ruler系统使用iptables命令来发布新规则,并在攻击结束时移除它们。首先,它发布一条规则,将设备上端口53的所有UDP流量重定向到配置中toPort指定的端口:
|
|
然后,它发布一个命令,在该端口上接受数据包:
|
|
终止时,它通过发布以下命令移除之前设置的规则:
|
|
LittleDaemon
LittleDaemon是通过劫持更新部署在受害者机器上的第一阶段。我们观察到DLL和可执行文件两种版本,两者都是32位PE文件。LittleDaemon的主要目的是与劫持节点通信以获取我们称为DaemonicLogistics的下载器。LittleDaemon不建立持久化机制。
首先,它验证SlowStepper后门是否正在系统上运行。如果没有,LittleDaemon通过向服务器(通常是劫持节点)发出HTTP GET请求下载DaemonicLogistics,通过组合XOR操作进行解密,然后执行它。
请求可以发送到两个合法域名(ime.sogou.com 或 mobads.baidu.com)或IP地址119.136.153.0。所有三个目标的资源路径都是/update/updateInfo.bzp。对于合法域名,预计流量将被EdgeStepper重定向到劫持节点。
DaemonicLogistics
DaemonicLogistics是由LittleDaemon下载并在内存中执行的位置无关代码。其主要目的是下载并部署SlowStepper植入物。
当DaemonicLogistics向服务器(通常是劫持节点)发送请求时,服务器会回复一个HTTP状态码,DaemonicLogistics将其解释为命令,并执行表1中列出的操作。
表1. DaemonicLogistics支持的命令
| 代码 | 执行的操作 |
|---|---|
| 200 | 下载SlowStepper,不检查是否存在名为360tray.exe的进程(360安全卫士的一个组件)。 |
| 205 | |
| 206 | |
| 208 | |
| 203 | 下载名为plugin.exe的文件并执行(在我们的测试中,服务器未请求下载此文件)。 |
| 207 | 检查是否存在名为360tray.exe的进程,如果不存在则下载SlowStepper。 |
| 202–300 | 默认执行命令200。这些可能是未实现的命令。 |
初始HTTP GET请求发送到:
|
|
URL中参数的含义如下:
tp和c的值默认硬编码为2和0。s字段为一个字节,是标识操作系统版本号的数字。mac字段为六个字节,是机器以太网或Wi-Fi适配器的MAC地址值,如果获取失败则随机生成;该值可能被服务器用作标识符。
在我们的分析过程中,我们观察到服务器回复了状态码207,对此DaemonicLogistics回复了另一个请求到ime.sogou.com/update/latest/new_version?tp=1&g=15&c=0。在这种情况下,URL的tp=1&g=15&c=0部分是硬编码的。
服务器回复了状态码202。DaemonicLogistics继续执行两个请求以下载SlowStepper载荷文件,首先是ime.sogou.com/update/file6.bdat,然后是ime.sogou.com/update/file2.bdat。
服务器第一个和第二个响应中的载荷数据以魔数值开头:
- 对第一个请求的响应中,十六进制的魔数值为
50 4B 03 04 0A 1B 2C 3D(PK\3\4\A\1B\2C\3C):- DaemonicLogistics主动检查从服务器接收到的数据的前八个字节是否与此魔数值匹配。如果为真,它将数据写入
%PROGRAMDATA%\Tencent\QQUpdateMgr\UpdateFiles\logo.gif。
- DaemonicLogistics主动检查从服务器接收到的数据的前八个字节是否与此魔数值匹配。如果为真,它将数据写入
- 对第二个请求的响应中,十六进制的魔数值为
47 49 46 38 39 61 10 10(GIF89a\10\10):- DaemonicLogistics并不专门检查此魔数值:当对上一个魔数值的检查不匹配时,它会处理数据并使用XOR操作组合进行解密。数据包含根据解密数据中指定的路径写入磁盘的文件。
结论
我们分析了EdgeStepper网络植入物,该植入物使PlushDaemon具备了中间人攻击能力,能够劫持目标网络中机器的更新。我们还分析了LittleDaemon和DaemonicLogistics工具,它们共同在Windows机器上部署SlowStepper植入物。这些植入物使PlushDaemon有能力入侵世界各地的目标。
如需咨询我们在WeLiveSecurity上发布的研究,请通过threatintel@eset.com联系我们。 ESET Research提供私有的APT情报报告和数据订阅服务。有关此服务的任何咨询,请访问ESET威胁情报页面。
IoCs
完整的入侵指标和样本列表可在我们的GitHub仓库中找到。
文件
| SHA-1 | 文件名 | ESET检测名 | 描述 |
|---|---|---|---|
| 8F569641691ECB3888CD4C11932A5B8E13F04B07 | bioset | Linux/Agent.AEP | EdgeStepper。 |
| 06177810D61A69F34091CC9689B813740D4C260F | bioset.conf | Win32/Rozena.BXX | EdgeStepper加密配置。 |
| 69974455D8C13C5D57C1EE91E147FF9AED49AEBC | popup_4.2.0.2246.dll | Win32/Agent.AGXK | LittleDaemon。 |
| 2857BC730952682D39F426D185769938E839A125 | sogou_wubi_15.4.0.2508_0000.exe | Win32/Agent.AFDT | LittleDaemon。 |
网络
| IP | 域名 | 托管服务提供商 | 首次出现 | 详情 |
|---|---|---|---|---|
| 8.212.132[.]120 | ds20221202.dsc.wcsset[.]com | Alibaba (US) Technology Co., Ltd. | 2024‑07‑12 | DNS/劫持节点。 |
| 47.242.198[.]250 | test.dsc.wcsset[.]com | Alibaba Cloud LLC | 2024‑07‑12 | DNS/劫持节点。 |
MITRE ATT&CK 技术
此表使用MITRE ATT&CK框架第18版构建。
| 战术 | ID | 名称 | 描述 |
|---|---|---|---|
| 资源开发 | T1583.001 | 获取基础设施:域名 | PlushDaemon使用EdgeStepper将流量重定向到特定子域,这些子域是PlushDaemon在wcsset[.]com上基础设施的一部分。 |
| T1583.002 | 获取基础设施:DNS服务器 | PlushDaemon基础设施的一部分用于托管其恶意DNS节点。 | |
| T1583.004 | 获取基础设施:服务器 | PlushDaemon已获取服务器来托管其DNS/劫持节点和C&C服务器。 | |
| T1608.001 | 准备能力:上传恶意软件 | PlushDaemon将其有效载荷托管在DNS/劫持服务器上。 | |
| 初始访问 | T1659 | 内容注入 | PlushDaemon的劫持节点处理被劫持的流量,并向合法软件回复指令以下载诸如LittleDaemon之类的恶意软件。 |
| 执行 | T1106 | 原生API | DaemonicLogistics使用ShellExecute API执行SlowStepper植入物。 |
| 防御规避 | T1070.004 | 指示器移除:文件删除 | LittleDaemon的一些变体可以删除自身。 |
| T1036.005 | 伪装:匹配合法名称或位置 | DaemonicLogistics创建名为Tencent的子目录来存储其文件。 | |
| T1036.008 | 伪装:伪装文件类型 | DaemonicLogistics和SlowStepper的加载器可以解密伪装成ZIP和GIF文件的文件。 | |
| T1027.009 | 混淆文件或信息:嵌入式有效载荷 | 伪装成ZIP和GIF的文件包含嵌入式加密组件。 | |
| T1027.013 | 混淆文件或信息:加密/编码文件 | SlowStepper植入物的组件在磁盘上是加密的。 | |
| 发现 | T1518.001 | 软件发现:安全软件发现 | DaemonicLogistics检查是否存在360tray.exe——360安全卫士的一个组件。 |
| T1016 | 系统网络配置发现 | DaemonicLogistics尝试获取以太网或Wi-Fi适配器的MAC地址。 | |
| T1057 | 进程发现 | DaemonicLogistics列出进程。 | |
| 命令与控制 | T1071.001 | 应用层协议:Web协议 | LittleDaemon和DaemonicLogistics使用HTTP与其服务器通信。 |
| T1573 | 加密通道 | LittleDaemon通过HTTP下载加密的DaemonicLogistics,后者通过HTTP下载加密的SlowStepper植入物。 | |
| T1665 | 隐藏基础设施 | LittleDaemon和DaemonicLogistics通过向合法域名发送HTTP请求进行下载。 |