photodoc1960/wyvern

GitHub: photodoc1960/wyvern

一款被动只读的家庭与小型办公网络哨兵工具,通过行为基线学习和多阶段信号关联来检测 AI 驱动的自适应计算机蠕虫特征。

Stars: 4 | Forks: 0

# 🐉 Wyvern — 被动式 AI 蠕虫网络哨兵 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/2efdcb4535050013.svg)](https://github.com/photodoc1960/wyvern/actions/workflows/ci.yml) [![Docker](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/2e4f4ca1da050019.svg)](https://github.com/photodoc1960/wyvern/actions/workflows/docker.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) ![Python](https://img.shields.io/badge/python-3.10%2B-blue) ![Tests](https://img.shields.io/badge/tests-123-brightgreen) ![Coverage](https://img.shields.io/badge/coverage-88%25-brightgreen) Wyvern 是一个用于家庭和小型办公室 LAN 的**被动、只读**网络监控器和异常检测器。它监控内部流量,跟踪每台设备,学习什么是“正常”状态,并在发现 **AI 驱动的自适应计算机蠕虫**的行为特征时,发出带有威胁评分的警报——也就是 Guan 等人在《AI Agents Enable Adaptive Computer Worms》([arXiv:2606.03811](https://arxiv.org/abs/2606.03811))中所描述的“多伦多 AI 蠕虫”。 它使用 **scapy**(捕获)、**dpkt**(分析)和 **Flask**(仪表板)构建,正是一款防御性蓝队工具应有的样子。 ## ⚖️ Wyvern 会做什么,不会做什么 Wyvern **只负责观察、警报和建议。** 根据设计,它**永远不会**: - 修改任何设备、终止进程或删除文件; - 更改网络设置、防火墙规则或凭据; - 发送攻击流量或主动探测主机。 它建议的每一项修复都是**需要您手动执行的操作**。它提供的唯一会更改状态的操作是允许*您*将设备标记为“可疑”以便进行更密切的监控。**仅限在您拥有或获得授权监控的网络上运行它。** ## 为什么会有这个工具 2026 年,多伦多大学、Vector Institute、剑桥大学和 ServiceNow 的研究人员展示了首个**自我维持的、AI 驱动的自适应计算机蠕虫**——并明确将其留下的网络特征命名为*"网络监控和入侵检测的具体目标。"* 保护云端 LLM 的供应商端安全控制,对于在*被盗* GPU 上运行开放权重模型的蠕虫来说是**结构性无效**的,而商业 EDR 对大多数家庭来说是遥不可及的。家庭和小型办公室网络——扁平化、缺乏监控、充满了脆弱的 IoT 设备——成为了软肋。 Wyvern 的存在是为了给这些所有者一个应对的机会:一个免费、被动、只读的哨兵,专门监控这些特征并用通俗易懂的语言告诉您该怎么做。阅读完整的[威胁模型](docs/THREAT_MODEL.md)。 ## 一段话概述威胁 传统的蠕虫携带*固定*的漏洞利用集合;修补它们,蠕虫就会停止。而 AI 蠕虫携带了一个由 LLM 驱动的 agent,能够在运行时对每个目标进行推理——它会发现主机、选择漏洞利用、建立立足点、提权并**复制**,在 Linux、Windows 和 IoT 设备之间跳跃。至关重要的是,概念验证*并非*为了隐藏而构建,因此它留下了具体的网络特征(论文第 5 节):**非标准端口上的信标回调、自动化 SSH 公钥注入,以及跨主机的系统性凭据重用**——此外,从其架构来看,还包括**端口/主机扫描、横向移动、从非 GPU 设备代理到被攻陷的 GPU 主机的 LLM 推理**,以及**在通常处于空闲状态的设备上执行代码**(打印机、摄像头、NAS、ICS 传感器)。Wyvern 会检测这些行为并将它们**融合**为一个单一的 AI 蠕虫判定。 ## 快速开始 ``` pip install -r requirements.txt # scapy, dpkt, Flask, flask-cors, PyYAML # 安全的无权限 demo:合成完整的 worm 爆发并进行检测 python -m wyvern simulate # 同上,但打开 live dashboard python -m wyvern simulate --web # http://127.0.0.1:8787 # 分析您已有的 capture python -m wyvern replay capture.pcap --web # 实时监控(需要 capture 权限) sudo python -m wyvern monitor -i eth0 ``` **永久运行它** — Docker、Compose、强化的 systemd unit、单行安装程序和 Prometheus `/metrics` 均记录在 [docs/DEPLOYMENT.md](docs/DEPLOYMENT.md) 中: ``` docker build -t wyvern . && docker run -d --net=host \ --cap-drop=ALL --cap-add=NET_RAW --cap-add=NET_ADMIN \ -e WYVERN_INTERFACE=eth0 -v wyvern-data:/data wyvern # ...或者: curl -fsSL https://raw.githubusercontent.com/photodoc1960/wyvern/main/install.sh | sudo bash ``` `simulate` 演示会打印如下报告: ``` THREAT LEVEL: CRITICAL Critical threat: AI-worm propagation signatures on 2 device(s) Likely compromised device: 192.168.1.50 • 192.168.1.50 (workstation) — Critical score=100 [WORM SUSPECT] stages: beacon_callback, credential_reuse, discovery, lateral_movement, ssh_key_injection → Isolate 192.168.1.50 from the network immediately ... • 192.168.1.30 (printer) — Critical score=100 [WORM SUSPECT] stages: ... idle_device_exec, inference_proxy ... ``` ## 检测原理 每个检测器针对一种蠕虫行为,并用一个**阶段**标记其警报。所有检测都在标准化、不可变的事件上运行——绝不是原始数据包——因此它们非常纯粹并经过了全面的单元测试。 | 检测器 | 蠕虫行为 (论文) | 触发条件… | |---|---|---| | `port_scan` | 网络/主机**发现** | 一台主机在 **>50 个端口 / 5 分钟**内发起 SYN | | `lateral_movement` | **横向移动** | 一台主机在 **>10 个内部 IP / 小时**内建立连接 | | `credential_spray` | **跨主机重用凭据** (§5) | 对多台主机进行身份验证 (SSH/SMB/RDP/WinRM),或快速重试 | | `ssh_key_injection` | **SSH 公钥注入** (§5) | 从空闲/从未使用过 SSH 的设备发起 SSH 扇出 | | `inference_api` | **推理代理** (Fig. 1) | **来自非 GPU 设备**的 LLM 推理 (`/v1/chat/completions`, vLLM/ollama 端口) | | `beacon` | **非标准端口上的信标回调** (§5) | 到非标准端口的低抖动定期回调 | | `idle_exec` | **自我复制 / 代码执行** | 打印机/路由器/NAS/摄像头开始**发起**连接 | | `dns_anomaly` | C2 查询 | 查询激增、NXDOMAIN 突发、疑似 DGA 的域名 | ### 复合签名 `worm_signature` 关联器是核心部分。没有任何单一行为可以证明蠕虫的存在——但是**一台设备同时表现出多个阶段**就可以证明。它会在一个时间窗口内跟踪每个设备所表现出的不同阶段,并进行升级: - **≥ 2 个阶段 → 高风险** "AI-worm propagation" (AI 蠕虫传播) 判定 - **≥ 3 个阶段 → 严重风险**,指出**可能被攻陷的设备** 它还编码了论文表 1 中蠕虫的漏洞利用指纹(SMB 445、Docker 2375、Redis 6379、ActiveMQ 61616、Exim 25、Jupyter 8888、PrintNightmare、Modbus 502、Marimo 2718 等),以识别蠕虫真实的漏洞利用流量。 ### 基线学习 对于每台设备,Wyvern 会在 24 小时的窗口内(可配置)学习其“正常”状态:它主动连接的端口、内部对等端、域名、数据包速率包络、活动时间,以及它是否*曾经*发起过推理调用或身份验证扇出。检测器利用这些信息将原始活动转化为*偏离该设备自身正常状态*的程度,并抑制误报。基线在重启后会保留。 ### 威胁评估与修复 警报按设备汇总为**低 / 中 / 高 / 严重**级别,包含 0-100 的评分、观察到的蠕虫阶段以及**手动**修复步骤: ## 仪表板 `--web` 提供了一个深色、支持离线的 Flask 仪表板(无外部 CDN): - **径向网络拓扑**(呼应论文中的传播树)——半径 ∝ 威胁程度,红色脉冲环 = 蠕虫嫌疑对象,红色边缘 = 蠕虫服务流; - 通过 Server-Sent-Events 流式传输的**实时威胁时间轴**; - **设备表格**,带有 OS/供应商/角色指纹和一键式“监控 / 可疑”开关; - 导出为 JSON 或 CSV 的**取证导出**。 ## CLI 参考 ``` wyvern simulate [--web] [--pcap OUT] # synthetic worm outbreak (safe demo) wyvern replay PCAP [--web] [--realtime] [--speed N] wyvern monitor [-i IFACE] [--no-web] [--no-learn] wyvern report # print current assessment from stored data wyvern export OUT [--format json|csv] # forensic bundle / alert CSV wyvern -c config.yaml # use a config file ``` ## 配置 复制 [`config.example.yaml`](config.example.yaml),进行编辑,并使用 `-c` 传递。您可以声明已知的 `gpu_hosts`(以消除推理误报),调整每个阈值,设置 `internal_cidrs`,并配置警报。**密钥绝不会保存在文件中**——SMTP 密码只会从 `WYVERN_SMTP_PASSWORD` 中读取。 ## 架构 ``` capture/ scapy live capture + dpkt frame decoding -> normalised events models/ immutable Device / Alert / Event / Profile dataclasses tracking/ device registry + passive OS/role fingerprinting (OUI, TTL, DHCP) baseline/ 24h per-device behavioural learning + persistence detectors/ 8 stage detectors + the worm_signature correlator assessment/ threat scoring + manual remediation storage/ SQLite + append-only JSONL forensic log + exporters alerting/ desktop notifications + optional email digest (off by default) engine/ Monitor orchestrator + SSE bus web/ Flask dashboard (topology, timeline, devices, export) simulate/ synthetic Toronto-worm trace generator (demo + tests) ``` 流水线:**捕获 → 解码 → 跟踪与学习 → 检测 → 关联 → 评估 → 存储 + 警报 + 仪表板。** 一切都通过 `Monitor.process_event` 汇集,这也是 replay、模拟器和测试驱动它的方式——测试时不需要实时网络接口或 root 权限。 ## 测试 ``` make test # 123 tests make cov # coverage report (88% line coverage) ``` 测试套件涵盖了解码(针对 dpkt 制作的数据帧)、每个检测器(高于/低于阈值 + 负面用例)、指纹识别、基线学习和持久性、威胁评分、存储,以及一个完整的端到端集成测试,该测试会重放合成的蠕虫追踪记录并断言其是否达到“严重”判定。 ## 限制与实事求是 - 加密的 payload 是不透明的;SSH 密钥注入和凭据检测是**行为推断**(扇出模式),而不是 payload 检查。 - 被动 OS/角色指纹识别是启发式的(OUI + TTL + DHCP + 服务端口)。 - 阈值出厂时带有合理的默认值;请调整它们并声明您的 `gpu_hosts`,以适应您的网络并减少误报。 - 未来的、经过隐蔽强化的蠕虫可能会抑制这些特征——论文指出概念验证(PoC)故意没有这样做。Wyvern 针对的是当前确实存在的特征。 ## 文档 | 文档 | 内容 | |---|---| | [威胁模型](docs/THREAT_MODEL.md) | 为什么会有这个工具、蠕虫介绍、Wyvern 能/不能看到什么 | | [10 分钟部署](docs/DEPLOYMENT.md) | 在哪里捕获、配置、学习、警报 | | [警报含义](docs/ALERTS.md) | 每个警报的处理手册 + 触发时该怎么做 | | [设计](docs/DESIGN.md) | 架构、数据模型、线程、测试 | | [贡献](CONTRIBUTING.md) | 开发设置 + 编写您自己的检测器的指南 | | [更新日志](CHANGELOG.md) | 版本发布历史 | ## 参考文献 Jonas Guan, Tom Blanchard, Hanna Foerster, Hengrui Jia, Gabriel Huang, Nicolas Papernot. *AI Agents Enable Adaptive Computer Worms.* arXiv:2606.03811 (2026). University of Toronto · Vector Institute · University of Cambridge · ServiceNow. ## 许可证 MIT — 详见 [LICENSE](LICENSE)。请负责任地使用,仅在您获得授权监控的网络上使用。
标签:AI蠕虫检测, Flask, IP 地址批量处理, PE 加载器, Scapy, 自定义请求头, 请求拦截, 逆向工具