patar56/mqtt-fuzzer

GitHub: patar56/mqtt-fuzzer

基于 Claude Code 构建的 AI 驱动 MQTT 协议模糊测试 agent,能够自主设计并执行跨 broker 安全评估活动,自动发现漏洞并生成加固方案。

Stars: 0 | Forks: 0

# MQTT 安全 Agent **UCLA ECE 202C — IoT 安全期末项目** 一款基于 **Claude Code**(Anthropic 的 CLI)构建的 AI 驱动 MQTT broker 安全评估工具。该 agent 能够自主设计模糊测试活动、构建原始 MQTT 数据包、针对 Docker 托管的在线 broker 执行有状态的多客户端攻击,并生成结构化的漏洞报告——所有这些都完全通过 Claude Code 终端中的自然语言提示词来驱动。 ## 工作原理 本项目使用了一个在 `.claude/agents/mqtt-protocol-fuzzer.md` 中定义的**自定义 Claude Code 子代理**(`mqtt-protocol-fuzzer`)。与运行传统的 Python CLI 不同,你可以使用 `@agent-mqtt-protocol-fuzzer` 提示词直接通过 Claude Code 终端与 agent 进行交互。该 agent 能够对 MQTT 协议进行推理,编写并执行模糊测试脚本,启动 Docker 容器,并生成报告——所有这一切都可以在一个对话轮次中自主完成。 ``` You (Claude Code terminal) │ └─ @agent-mqtt-protocol-fuzzer │ ├─ Reasons about MQTT protocol state machines ├─ Writes fuzzing scripts (raw TCP, no paho dependency) ├─ Spins up / verifies Docker broker containers ├─ Executes multi-client coordinated attack scenarios ├─ Analyzes broker responses and classifies vulnerabilities └─ Writes campaign reports to reports/ ``` ## 研究基础 本项目综合了以下五篇论文的发现与技术: | 论文 | 贡献 | |---|---| | [Burglars' IoT Paradise](https://ieeexplore.ieee.org/document/9152645) (IEEE S&P 2020) | MQTT 漏洞分类法 (V1–V6) | | [MQTTactic](https://www.usenix.org/conference/usenixsecurity22/presentation/chen-bin-mqtt) (USENIX Sec 2022) | 授权逻辑缺陷类别 | | [FUME](https://dl.acm.org/doi/10.1145/3548606.3560570) (CCS 2022) | 带有响应反馈的有状态模糊测试引擎 | | [MGPTFuzz / LLM Protocol Fuzzing](https://www.ndss-symposium.org/ndss-paper/large-language-model-guided-protocol-fuzzing/) (NDSS 2024) | LLM 引导的协议规范解析 → FSM 提取 | | FirmAgent (2026) | 混合模糊测试 + LLM agent 推理循环 | ## 仓库结构 ``` mqtt-security-agent/ ├── .claude/ │ └── agents/ │ └── mqtt-protocol-fuzzer.md # Subagent definition (tools, system prompt) ├── agent/ │ ├── spec/mqtt_spec.py # Protocol FSM, vulnerability taxonomy │ ├── fuzzing/engine.py # Campaign 1 fuzzing engine │ ├── vulnerabilities/attacks.py # 7 targeted attack classes (V1–V7) │ └── broker/ │ ├── connector.py # Raw TCP MQTT packet builder │ └── docker_mgr.py # Docker broker lifecycle management ├── campaign2_fuzzer.py # Campaign 2 fuzzing engine ├── campaign3_fuzzer.py # Campaign 3 multi-broker fuzzer ├── campaign_final_fuzzer.py # Final campaign: multi-client differential fuzzer ├── config/ │ ├── mosquitto_hardened_final.conf # Hardened Mosquitto configuration │ ├── acl_hardened_final.conf # Hardened ACL file │ ├── emqx_hardened_final.conf # Hardened EMQX configuration (HOCON) │ ├── nanomq_hardened_final.conf # Hardened NanoMQ configuration │ └── hivemq_hardening_notes.md # HiveMQ hardening guidance (XML-based) ├── scripts/ │ ├── verify_mitigations.py # Campaign 3 PASS/FAIL verifier │ └── verify_mitigations_final.py # Final campaign verifier (28 checks, 4 brokers) ├── reports/ # All campaign outputs (see below) ├── docker/ │ ├── docker-compose.yml │ └── mosquitto/mosquitto.conf # Intentionally permissive config for research └── tests/ └── test_packet_builder.py # 37 unit tests (protocol encoding) ``` ## 前置条件 - 已安装并完成身份验证的 [Claude Code CLI](https://claude.ai/code) - 正在运行的 Docker Desktop - Python 3.10+(用于 agent 执行的模糊测试脚本) - Python 包:`paho-mqtt`(仅用于活动 1 的分析——后续活动使用原始套接字) ``` git clone https://github.com/patar56/mqtt-security-agent.git cd mqtt-security-agent pip install -r requirements.txt ``` ## 使用方法 所有交互均通过 **Claude Code 终端**进行。在此项目目录中打开 Claude Code,并使用 `@agent-mqtt-protocol-fuzzer` 调用模糊测试 agent。 ### 启动模糊测试活动 ``` @agent-mqtt-protocol-fuzzer Spin up a Docker container with an MQTT broker and launch a fuzzing campaign to find vulnerabilities. ``` 该 agent 将会: 1. 在 Docker 中拉取并启动 `eclipse-mosquitto:2.0.18`,并使用宽松的配置 2. 运行基于生成和基于变异的模糊测试 3. 执行来自学术文献的针对性漏洞攻击 4. 将结果写入 `reports/` ### 针对特定的 broker 或漏洞类别 ``` @agent-mqtt-protocol-fuzzer Run the session hijacking attack (V3) against the broker on localhost:1884. ``` ### 多 broker 活动 ``` @agent-mqtt-protocol-fuzzer Run a fuzzing campaign against Mosquitto, EMQX, HiveMQ CE, and NanoMQ. Produce a cross-broker comparison matrix. ``` ### 请求缓解措施 ``` @agent-mqtt-protocol-fuzzer Produce hardened configs and a mitigation guide for all confirmed vulnerabilities. ``` ### 继续先前的活动 该 agent 会在会话之间保持记忆。结合任何后续提示词使用 `@agent-mqtt-protocol-fuzzer`,它将会从先前的发现处继续执行。 ## 活动历史与结果 本项目共进行了四次活动,每一次都在先前的方法论基础上进行了构建。 ### 活动 1 — Mosquitto 2.0.18(285 个测试用例) 基于语法的生成式模糊测试 + 变异模糊测试 + 学术漏洞复现。 | 漏洞 | 名称 | CVSS | 结果 | |------|------|------|--------| | V1 | Unauthorized Will Message Exploitation | 7.5 | 已确认 | | V2 | Retained Message Poisoning | 6.5 | 已确认 | | V3 | ClientID Session Hijacking | 8.1 | 已确认 | | V4 | Wildcard Subscription Eavesdrop (`#`) | 7.2 | 已确认 | | V5 | QoS 2 Duplicate Message Injection | 5.3 | 未确认(符合规范) | | V6 | $SYS Topic Information Disclosure | 4.3 | 已确认 | | V7 | Zero-Length ClientID Spec Violation | 6.0 | 未确认(符合规范) | **异常率:** 41.4% (118/285) | **Broker 崩溃次数:** 0 ### 活动 2 — Mosquitto 2.0.18(84 个测试用例) 扩展了攻击面:凭据字段、共享订阅、QoS 状态机、连接泛洪、指纹识别。 | 漏洞 | 名称 | CVSS | 结果 | |------|------|------|--------| | V8 | Unauthenticated Credential Acceptance | 6.5 | 已确认 | | V9 | Shared Subscription Namespace Abuse | 5.4 | 已确认 | | V10 | QoS State Machine Leniency (PID=0) | 4.3 | 已确认 | | V11 | Session Persistence Resource Accumulation | 5.3 | 已确认 | | V17 | Broker Configuration Fingerprinting | 3.7 | 已确认 | **累计已确认漏洞:10** ### 活动 3 — 4 个 Broker,978 个测试用例 多 broker 测试:Mosquitto、NanoMQ、HiveMQ CE 2024.3、EMQX 5.0.0。外加 10 个新的漏洞类别以及针对所有先前发现的具体缓解措施。 | 漏洞 | 名称 | CVSS | |------|------|------| | V18 | Oversized CONNECT silent drop | 6.5 | | V19 | 500 subscriptions per packet granted | 5.3 | | V20 | 104,931 PUBLISH/sec — no rate limiting | 7.5 | | V21 | PINGREQ keepalive abuse | 5.3 | | V22 | QoS 2 silently downgraded to QoS 0 | 5.4 | | V24 | 1 PUBLISH → 263 copies (overlapping subs) | 7.5 | | V26 | Null bytes / invalid UTF-8 in topic names | 6.5 | | V27 | keepalive timeout enforcement gap | 5.3 | | V28 | Will self-delivery cross-client injection | 6.8 | | V31 | QoS 2 in-flight session hijacking | 8.1 | **累计已确认漏洞:20** **跨 broker 重点:** - V1、V3、V8、V11 在**全部四个 broker** 上均已确认——属于 MQTT 协议设计默认值,而非实现 bug - EMQX 5.0.0:§2.3.1 的最严重违规者(接受 PUBACK/PUBREC/PUBREL/PUBCOMP 中的 PID=0) - HiveMQ CE:唯一能正确拒绝 PID=0 的 broker - EMQX:正确阻止了 `#` 通配符订阅(V4 未确认) ### 最终活动 — 全部 4 个 Broker,差分模糊测试(100 次 broker 运行) 从根本上重新设计的模糊测试工具(`campaign_final_fuzzer.py`,1,849 行代码,使用原始套接字,无 paho 依赖)。相较于先前活动的主要改进: - **有状态多客户端协调** — 通过 `threading.Barrier` 实现 Publisher / Subscriber / Attacker / Observer 角色 - **差分测试** — 将相同输入并行扇出到所有 4 个 broker;自动对比响应特征 - **7 个模糊测试模块:** 多客户端 (M)、竞态/时序 (R)、MQTT v5 滥用 (V5)、QoS 2 深度状态 (Q)、版本混合 (X)、状态反馈变异 (SFB)、链式攻击 (C) **最终活动新发现:** | 发现 | 细节 | Broker | |---------|--------|-----------| | R1 | 当 DUP 与 PUBREL 发生竞态时,NanoMQ 会发送 2 份 QoS 2 PUBLISH | NanoMQ | | C2 | 消息放大:在 4 个重叠过滤器下,EMQX 3倍,NanoMQ 4倍 | EMQX, NanoMQ | | V51 | 接受无限制的 `SessionExpiry`(MQTT v5) | EMQX | | V52 | 无限制地接受 `UserProperty` 泛洪 | EMQX, HiveMQ | | V53 | 针对越界 Topic Alias 的分歧 reason code | EMQX vs HiveMQ | | V54 | v3.1.1 broker 静默接受 v5 CONNECT 字段 | Mosquitto, NanoMQ | **分歧率:** 64%(16/25 的差分测试显示出 broker 分歧) **最终 broker 风险排名:** HiveMQ CE 2024.3(最低) < EMQX 5.0.0 < Mosquitto 2.0.18 ≈ NanoMQ ## 项目总计 | 指标 | 数值 | |--------|-------| | 活动次数 | 4 | | 总测试用例 | 1,447 | | 已测试 MQTT broker | 4 (Mosquitto, NanoMQ, HiveMQ CE, EMQX) | | 已确认漏洞 | 20+ | | Broker 崩溃次数 | 0 | | 生成的加固配置 | 4(每个 broker 一份) | ## 报告与输出 所有报告均位于 `reports/`。包含原始 JSON 结果以供复现。 | 文件 | 描述 | |------|-------------| | `fuzzing_campaign_report.md` | 活动 1 叙述报告 | | `vulnerability_report.md` | 活动 1 漏洞深度分析 | | `fuzzing_campaign2_report.md` | 活动 2 叙述报告 | | `vulnerability_report_campaign2.md` | V8–V17 深度分析 | | `fuzzing_campaign3_report.md` | 活动 3 叙述报告 | | `vulnerability_report_campaign3.md` | V18–V31 深度分析 | | `mitigations_campaign3.md` | V1–V17 缓解指南 | | `multi_broker_report_campaign3.md` | 跨 broker 对比矩阵 (C3) | | `fuzzing_final_campaign_report.md` | **主叙述报告 — 包含全部 4 次活动** | | `vulnerability_report_final.md` | **最终漏洞目录** | | `multi_broker_final_report.md` | **最终的跨 broker 分析** | | `ai_conversation_log.md` | 用于提交的完整 AI 交互日志 | | `figures/*.png` | 6 项可视化(记分卡、时间线、矩阵) | | `fuzzing_raw_results*.json` | 每次活动的原始测试数据 | ## 纵深防御模型 缓解措施分层跨越 4 个层级,加固配置位于 `config/`: | 层级 | 控制 | 实现 | |------|---------|----------------| | 1 — 身份验证 | 谁可以连接 | `allow_anonymous false`、密码文件、TLS 客户端证书 | | 2 — 授权 | 谁能向何处发布/订阅何种内容 | ACL 文件、拒绝通配符、拒绝 `$SYS/#`、按客户端划分的命名空间 | | 3 — 资源控制 | 防范 DoS | `max_connections`、`max_inflight_messages`、`message_size_limit`、`persistent_client_expiration` | | 4 — 网络 | 边界防御 | 要求使用 mTLS、broker 位于私有网络、防火墙在外部阻断端口 1883 | 运行自动化验证器以检查缓解状态: ``` python scripts/verify_mitigations_final.py # 在所有 4 个 brokers 上运行 28 项检查,输出 PASS/FAIL + JSON ``` ## 运行单元测试 ``` python -m pytest tests/ -v # 37 项通过 (protocol packet encoding) ```
标签:CISA项目, Claude Code, MQTT协议, 人工智能代理, 物联网安全, 请求拦截, 逆向工具