揭秘PlushDaemon:利用EdgeStepper中间人攻击劫持网络设备

ESET研究人员发现了一个名为EdgeStepper的新型网络植入物,被中国背景的PlushDaemon APT组织用于执行中间人攻击。该工具通过劫持DNS查询,将软件更新流量重定向到攻击者控制的基础设施,从而部署SlowStepper后门。

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所示的数据。

1
2
3
[cheat]
toPort = 1090
host = "ds20221202.dsc.wcsset[.]com"

图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指定的端口:

1
iptables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-port <value_from_toPort>

然后,它发布一个命令,在该端口上接受数据包:

1
iptables -t filter -I INPUT -p udp --dport <value_from_toPort> -j ACCEPT

终止时,它通过发布以下命令移除之前设置的规则:

1
2
iptables -t nat -D PREROUTING *
iptables -t filter -D INPUT -p udp --dport <value_from_toPort> -j ACCEPT

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请求发送到:

1
ime.sogou.com/update/latest/new_version?tp=2&c=0&s=<OS_ID_number>&mac=<identifier>

URL中参数的含义如下:

  • tpc的值默认硬编码为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
  • 对第二个请求的响应中,十六进制的魔数值为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请求进行下载。
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计