这个仓库包含了一个严格面向教育与研究目的的震网(Stuxnet)蠕虫重建版本。它是全球安全研究界针对2010年发现的原始二进制样本,投入无数小时逆向工程分析工作的产物。此代码仅供给学术研读、恶意软件分析训练与防御性研究的相关用途。
正文
该仓库是 Stuxnet 蠕虫的一份重建源码,仅用于教育和研究。它基于 2010 年发现的原始二进制样本,汇合全球安全研究社区的大量逆向工作写成。代码仅供学术研究、恶意软件分析和防御研究使用,不是可部署的恶意程序;作者和贡献者不认可任何非法或不道德的使用。
概览
Stuxnet 被公认为第一件以破坏工业控制系统(ICS)为目标的已知网络武器。它专门针对西门子 Step 7 软件和 S7-300/400 PLC,最终通过操控变频驱动器使离心机转子损坏。本仓库由反编译出的二进制重建而来,保留原始逻辑与攻击路径,同时把代码整理得便于阅读和分析。
主要特征: - 目标:西门子 SIMATIC WinCC、Step 7、S7 PLC。 - 传播:U 盘(LNK 漏洞)、网络共享(Print Spooler)、点对点(P2P)。 - 载荷:改写 PLC 块逻辑(OB1/OB35),改变电机频率。 - 隐蔽:使用高级 rootkit(MRxCls.sys、MRxNet.sys)隐藏文件、进程和注册表。
核心组件
- Loader/Dropper:winsta.exe、~WTR4141.tmp。初始感染入口,负责提权并部署其他组件。
- 提权模块:~WTR4132.tmp。利用 Win32k.sys 漏洞获取系统级权限。
- S7 钩子库:s7otbxdx.dll。恶意替换原 s7otbxsx.dll,拦截 Step 7 与 PLC 之间的通信。
- Step7 钩子库:s7aaapix.dll。拦截 Step 7 工程环境中的 AUT API 调用。
- 文件系统 rootkit:mrxcls.sys。通过 SSDT 挂钩隐藏 Stuxnet 的文件、进程和注册表键。
- 网络 rootkit:mrxnet.sys。过滤文件系统请求,隐藏恶意文件并支持 P2P 传播。
- 攻击载荷:s7plcmain。实现损坏离心机的“频率篡改”核心攻击逻辑。
技术架构
高层执行流程如下:
- 阶段 1:初始感染途径(USB/网络)
- 阶段 2:投放器与提权
- 阶段 3:环境检查
- 阶段 4a:发现目标(西门子软件)→ 安装 S7 钩子;阶段 4b:非目标 → 自毁/休眠
- 阶段 5:监视 PLC 写入
- 阶段 6:发现 OB1/OB35 被写入 → 注入载荷
- 阶段 7:修改频率输出
- 阶段 8:对离心机造成物理破坏
- 阶段 9:安装 rootkit(MRxCls)
- 阶段 10:隐藏文件和注册表
- 阶段 11:加载网络模块(MRxNet)
- 阶段 12:P2P 传播
执行流程细节:
- 环境侦察:检查是否装有指定西门子软件以及是否存在目标 PLC(S7-315、S7-417)。
- DLL 注入:拦截 s7blk_write 函数调用。
- 代码注入:当用户向 PLC 下载项目时,恶意代码被附加到 OB1/OB35 块。
- 物理影响:PLC 执行被篡改代码,使相连的可变频驱动器以异常频率转动,造成机械损坏。
构建说明
该代码库只用于在受控虚拟环境中进行静态分析和调试,不应部署到任何关键基础设施。
要求: - 构建环境:Windows 上的 Microsoft Visual Studio 2019/2022,或 mingw-w64。 - 目标系统:Windows XP / Windows 7(驱动兼容)。 - 驱动开发包:编译内核驱动需要 WDK 7600。
构建用户态模块:克隆仓库后,在 winsta 目录中运行 nmake /f Makefile.win 构建主 dropper,再进入 s7otbxdx 目录,用 cl /LD s7otbxdx.c user32.lib ws2_32.lib 编译 S7 钩子库。
用途
本代码的用途包括: - 恶意软件分析:理解高级持续性威胁(APT)中的具体代码逻辑。 - 防御研究:为 ICS 安全工具开发检测特征,如 YARA 规则、Snort 规则。 - 学术研究:考察网络安全与关键基础设施保护的交叉点。
分析环境设置: 1. 隔离环境:使用 VMware 或 VirtualBox 虚拟机,仅启用 Host-Only 网络,断开互联网。 2. 加载模块:用 IDA Pro、Ghidra 或 x64dbg 分析 .dll 和 .sys 文件。 3. 监视活动:用 Process Monitor、Process Hacker 和 Wireshark 观察行为。
许可与法律
本项目以 GNU GPL v3.0 许可发布,详见 LICENSE 文件。
这段代码是安全研究人员为教育目的反编译重建的产物。Stuxnet 原始作者匿名,重建作者不声明对原始恶意软件拥有所有权。代码按“AS IS”提供,不作任何担保;作者不对误用或造成的损害负责。使用本仓库即表示你确认须自行确保遵守所有适用法律和法规。
致谢
本项目离不开全球安全厂商的深入分析与威胁情报: - Symantec(W32.Stuxnet dossier) - Kaspersky Lab(The Stuxnet saga) - ESET(Stuxnet under the microscope) - Amr Thabet 和 Christian Roggia(research-virus/stuxnet)
这是一个学术性重建项目,请用来增强防御,而不是造成伤害。
评论
多数人对发布的疑似Stuxnet代码真实性及技术缺陷提出质疑,较多人借机推荐相关书籍与历史背景。
质疑代码并非真实恶意软件或质量低劣
- 指出代码被拼接为单文件且直接包含“Stuxnet”字样,而真实恶意软件会隐蔽命名,因此怀疑其并非基于实际样本(rep_lodsb)。认可度:少数人
- > 真实样本中绝不会随处出现“Stuxnet”这种字面名,这里却明目张胆,显然是拼凑的(@rep_lodsb)
认为代码存在技术缺陷需改进
- 指出目录过滤未处理异常文件名或符号链接会导致系统崩溃,关键分发表应加锁并在独立缓冲重建以防竞态与对齐错误(monster_truck)。认可度:少数人
- > 目录过滤必须修复,一个怪异文件就能让系统蓝屏,重要结构不能留竞态隐患(@monster_truck)
借机推荐Stuxnet相关书籍与背景
- 多人提及《零日倒计时》一书及有声书,称其改变对关键工业基础设施的认知,并简述该网络武器曾摧毁伊朗近五分之一离心机(kibitzor, beavis000)。认可度:较多人
- > 强烈推荐阅读《零日倒计时》,其中关于首款数字武器的细节引人入胜(@beavis000)
疑问传播路径与逆向起点
- 有人怀疑USB传播可能源于不良经销商预制感染硬件,另有人询问反编译所基于的原始二进制文件(mzs, wiml)。认可度:少数人
期待更多知名恶意软件源码出现
- 有人玩笑式表示等待Pegasus源代码(tonyhart7)。认可度:少数人(玩笑)
有价值的补充
- 用大模型辅助查找或精炼漏洞虽繁琐,但明确“该问什么”仍具价值,且给开放模型真实机器试探破坏颇有乐趣(monster_truck)
- 若投入精力做逆向,最好同时产出文档或导航辅助,提升可读性(broodbucket)
- 网络武器具备一次性全力施展特性,暴露后会被修补或复用(kibitzor)