追踪以 CVE-2021-35394 作为投递载体的、彼此无关联的 IoT 僵尸网络家族——发现、关联与方法论。
本仓库之所以存在,是因为某个漏洞恰好让这些僵尸网络 对一个被动传感器可见——而不是因为它们彼此之间 存在关联。CVE-2021-35394(Realtek SDK 命令注入,UDP/9034)是 入选标准:某个家族之所以在范围内,是因为观察到它 针对受监控网络尝试利用此漏洞。一旦某个家族 进入范围,追踪便沿着该家族自身的基础设施和行为 尽可能延伸——暂存服务器、投放脚本、其他样本—— 即使这些活动本身并非此 CVE。该漏洞是被监视的那扇门, 而不是对其背后之物的断言。
目前的发现涵盖六个代码上相互独立的家族,它们共享这同一个 漏洞:Condi、cling、goonbakk(又名 lucy_meow)、RondoDox,以及两个 尚未命名的家族(暂以“family D”和“family E”追踪,待命名 决定——见 NAMING.md)。
METHODOLOGY.md 观察偏差——在得出结论前必读
HANDOFF.md 会话连续性状态
analysis/<family>/ 逆向工程参考记录,每个家族一份文档
analysis/comparison.md 跨家族图示,三级置信度
samples/manifest.csv 本地样本集的生成索引(仅哈希)
samples/README.md manifest 约定 + 其自身所展示的内容
tools/inventory.py 从样本目录重新生成 manifest
两层,刻意分离。analysis/ 是二进制文件的行为,
由人工从 Ghidra 中写出。samples/ 是样本集
所持有的内容,通过扫描生成——头部、哈希、构建 ID、
来源。第二层保持最新成本低廉(python tools/inventory.py),并能捕捉第一层无法捕捉的东西:哪些投放
名称是同一构建,哪些“样本”根本不是二进制文件,哪个
Ghidra 程序对应哪个投放文件。从清单中得出的
发现会被提升到相关的 analysis/ 文档中,
而不是留在 CSV 里。
添加一个家族就是在 analysis/ 下建一个目录,并且一旦其暂存
主机基于证据被归因,就在 tools/inventory.py 的
FAMILY_BY_HOST 中加一行,并在
samples/README.md 的归因表中加一行。
METHODOLOGY.md——这个数据集内嵌了一个真实的观察偏差
(我们能看到的利用向量仅限 UDP 且无需监听器;
这些家族使用的其他所有向量都需要完成 TCP 握手,
而样本集这一侧此前无法提供)。在从本仓库中任何其他内容
得出结论之前,请先读它。
goonbakk 是主名,lucy_meow 是别名
(同一家族——相同的 ChaCha20 密钥/nonce/计数器怪癖和配置
表)。“family D”和“family E”仍需要真实名称(后者
已被充分刻画:Go、Botnet/ 模块树、C2
位于 :9111、磁盘上的 sysd)——在自行发明之前,先检查 Akamai 的报告是否
已为 E 命名。docs/families/<family>.md——每个家族的散文式概述
(能力、IOC、别名),即 analysis/ 向上链接到的层hunts/——Security Onion / NSM 查询,保持可运行,
而不是在散文中引用iocs/——每个家族的机器可读网络/主机指标。
文件指标部分已被 samples/manifest.csv 涵盖;
缺口在于 C2 端点和投放套件指纹yara/——检测规则analysis/comparison.md 涵盖了其中代码/能力的那一半已定论,勿再争论(完整列表见 HANDOFF.md):
样本仅含哈希——没有功能性恶意软件进入 git
历史,由 .gitignore 强制执行;不以“Mirai 谱系”作为组织
原则;CVE-2021-35394 是入选标准,而非范围。