Indspl0it/RTOSploit
GitHub: Indspl0it/RTOSploit
RTOSploit 是一个面向嵌入式RTOS固件的自动化安全测试框架,解决固件漏洞发现和利用的软件仿真问题。
Stars: 10 | Forks: 2
作者: Santhosh Ballikonda
RTOSploit 是一个面向嵌入式 RTOS 系统的固件安全测试框架。它完全以软件形式提供静态分析、CVE 关联、漏洞评估、Payload 生成、固件仿真和覆盖率引导的模糊测试——无需物理硬件。 **支持的 RTOS:** FreeRTOS、ThreadX、Zephyr、ESP-IDF、RTEMS(仅检测) **支持的架构:** ARM Cortex-M (M0/M3/M4/M7/M33)、RISC-V (RV32I/RV64)、Xtensa、MIPS、AArch64 **二进制格式:** ELF、Intel HEX、Motorola S-Record、原始二进制 ### 功能支持情况 | 能力 | 任意固件(ELF 或原始 .bin) | 针对 QEMU 的固件 | 通过 Unicorn + PIP | |---|---|---|---| | RTOS 指纹识别 | 是(字符串 + 符号) | 是 | 否 | | CVE 关联 | 是(59 个捆绑 CVE) | 是 | 否 | | 外设检测 | 是(6 层引擎) | 是 | 否 | | 漏洞扫描 | 是(15 个模块,静态) | 是 | 否 | | Payload/ROP 生成 | 是 | 是 | 否 | | 仿真并启动 | 否(需要匹配的机器) | 是 | 是(无模型) | | 覆盖率引导的模糊测试 | 否 | 是(约 3-5 次执行/秒) | 是(约 200+ 次执行/秒) | ## 目录 1. [用途](#purpose) 2. [架构](#architecture) 3. [特性](#features) 4. [安装](#installation) 5. [快速开始](#quick-start) 6. [仿真引擎](#emulation-engines) 7. [CLI 参考](#cli-reference) 8. [漏洞扫描器](#vulnerability-scanners) 9. [机器配置](#machine-configurations) 10. [配置](#configuration) 11. [CI/CD 集成](#cicd-integration) 12. [文档](#documentation) 13. [开发](#development) 14. [故障排除](#troubleshooting) 15. [致谢](#acknowledgements) 16. [许可证](#license) ## 用途 嵌入式 RTOS 固件(FreeRTOS、ThreadX、Zephyr)运行在数十亿设备上——医疗植入物、汽车 ECU、工业 PLC、物联网网关——然而针对这些目标的安全测试工具却分散、依赖硬件且昂贵。RTOSploit 提供了一种纯软件替代方案。 **典型工作流程:** 1. **分析** — 指纹识别 RTOS、版本、MCU、堆分配器、MPU 配置、外设 2. **关联 CVE** — 与来自 NVD 的 59 个捆绑漏洞进行匹配 3. **评估漏洞** — 运行 15 个漏洞扫描器(堆损坏、MPU 绕过、BLE 溢出) 4. **生成 Payload** — ARM Thumb2/RISC-V Shellcode、ROP 链、协议数据包 5. **仿真** — 在 QEMU(交互式)或 Unicorn(高速)中启动固件 6. **模糊测试** — 覆盖率引导的模糊测试,带崩溃去重和中断注入 7. **报告** — 用于 CI/CD 的 SARIF 格式,用于审查的 HTML 格式 步骤 1-4 适用于任何固件二进制文件。步骤 5-7 需要 QEMU 支持的机器或 Unicorn 引擎。 **RTOSploit 不做什么:** - 在物理硬件上运行漏洞利用程序——这是一个纯软件的分析和评估工具 - 完整的符号执行——我们使用轻量级寄存器跟踪,而非 angr 风格的分析 - Linux 固件分析——仅适用于 RTOS 和裸机 - 硬件在环测试——无 JTAG/SWD 集成 ## 架构 RTOSploit 根据使用场景有两条执行路径: ``` ┌──────────────────────────┐ │ Firmware Binary │ │ (ELF / HEX / SREC / raw) │ └────────────┬─────────────┘ │ ┌─────────────────┼─────────────────┐ ▼ ▼ ▼ ┌──────────────┐ ┌─────────────┐ ┌──────────────┐ │ Static │ │ CVE │ │ Vulnerability│ │ Analysis │ │ Correlation │ │ Scanners │ │ │ │ │ │ │ │ Fingerprint │ │ 59 bundled │ │ 15 modules │ │ Heap detect │ │ CVEs from │ │ FreeRTOS (6) │ │ MPU check │ │ NVD for │ │ ThreadX (3) │ │ Peripheral │ │ FreeRTOS │ │ Zephyr (6) │ │ detection │ │ ThreadX │ │ │ │ (6 layers) │ │ Zephyr │ │ + Payload │ │ │ │ ESP-IDF │ │ generation │ └──────────────┘ └─────────────┘ └──────────────┘ │ │ │ └─────────────────┼──────────────────┘ │ Works on ANY firmware ▲ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ Requires emulation ▼ │ ┌─────────────────┼─────────────────┐ ▼ ▼ ┌───────────────────┐ ┌───────────────────┐ │ QEMU Engine │ │ Unicorn Engine │ │ │ │ │ │ Full system │ │ CPU-only │ │ NVIC, SysTick │ │ PIP-driven MMIO │ │ Machine-specific │ │ FERMCov coverage │ │ GDB debugging │ │ Interrupt sched. │ │ UART forwarding │ │ Snapshot/restore │ │ │ │ │ │ ~3-5 exec/sec │ │ ~200+ exec/sec │ │ │ │ │ │ For: interactive │ │ For: automated │ │ debug, QEMU- │ │ fuzzing, real │ │ targeted firmware │ │ hardware firmware │ └─────────┬─────────┘ └─────────┬─────────┘ │ │ └───────────────┬───────────────────┘ ▼ ┌──────────────────────────┐ │ Coverage-Guided │ │ Fuzzing Engine │ │ │ │ AFL-style edge bitmap │ │ Crash dedup (PC+CFSR) │ │ Multi-worker parallel │ │ Corpus management │ └────────────┬─────────────┘ ▼ ┌──────────────────────────┐ │ Post-Processing │ │ │ │ Crash triage │ │ Input minimization │ │ Coverage visualization │ └────────────┬─────────────┘ ▼ ┌──────────────────────────┐ │ Reporting │ │ │ │ SARIF 2.1.0 (CI/IDE) │ │ HTML (human review) │ │ JSON (API/scripting) │ └──────────────────────────┘ ``` ## 特性 ### 静态分析 适用于任何固件二进制文件——无需 QEMU,无需符号。 | 分析内容 | 可发现信息 | |----------|--------------| | RTOS 指纹识别 | FreeRTOS、ThreadX、Zephyr、ESP-IDF、RTEMS——类型、版本、置信度 | | MCU 检测 | nRF52、STM32F4、ESP32、LPC、SAM、RP2040 | | 堆分配器 | FreeRTOS heap_1–heap_5、ThreadX 字节池、Zephyr 板块 | | MPU 配置 | ARM Cortex-M MPU 区域、可执行/可写重叠 | | 外设检测 | 6 层引擎:符号、字符串、重定位、MMIO 寄存器、二进制签名、设备树 | | 字符串提取 | RTOS 标记、SDK 引用、错误消息 | ### CVE 情报 - 包含 FreeRTOS、ThreadX、Zephyr 和 ESP-IDF 的 59 个捆绑 CVE - 版本感知匹配,包含底层 RTOS 查找(ESP-IDF 包含 FreeRTOS CVE) - NVD API 同步获取最新漏洞 - VulnRange — CTF 风格的 CVE 复现挑战,带渐进式提示 ### 漏洞评估与 Payload 生成 15 个漏洞扫描器模块,通过静态分析检测漏洞模式并生成具体制品。 | 类别 | 数量 | 产出 | |----------|-------|----------| | 堆损坏 | 4 | 溢出缓冲区、伪造元数据、写原语 | | MPU 绕过 | 2 | 权限提升 Payload、ROP 链 | | ISR 劫持 | 1 | 向量表重定向 Payload | | BLE 漏洞利用 | 4 | 畸形广播、L2CAP、ASCS 数据包 | | 内核攻击 | 2 | TCB/线程入口覆写、系统调用链 | | 侦察 | 2 | 用户空间配置检测、竞争条件 | 独立的 Payload 工具:ARM Thumb2 和 RISC-V Shellcode 模板(NOP 滑雪道、无限循环、MPU 禁用、VTOR 重定向)、ROP gadget 查找器(带坏字符过滤)、XOR 和无空字节编码器。 ### 固件仿真 两个引擎用于不同使用场景——详见[仿真引擎](#emulation-engines)。 **QEMU** — 全系统仿真,支持 GDB 调试、UART 转发和机器特定外设。适用于交互式分析和针对 QEMU 支持的机器构建的固件。 **Unicorn** — 仅 CPU 仿真,带外设输入回放(PIP)。所有 MMIO 读取返回模糊测试控制的值,并对状态寄存器轮询进行智能重放。适用于高速自动化模糊测试真实硬件固件。 ### 覆盖率引导的模糊测试 - AFL 风格的 64KB 边覆盖率位图 - 中断感知覆盖(FERMCov)— 分离 ISR 边和程序边,减少 75-88% 的误报唯一路径 - 轮询式中断调度,带 WFI/WFE 检测 - 崩溃检测:未映射内存访问、权限违规、无限循环、超时 - 崩溃去重:PC + CFSR + 附近 PC + 回溯栈帧匹配 - 种子语料库管理,带覆盖率引导的变异 - 多工作进程并行执行 - 实时仪表盘:执行次数/秒、崩溃计数、覆盖率百分比 ### 模糊测试后分析 - **崩溃分类** — 可利用性分类:可利用、可能可利用、可能不可利用、未知 - **输入最小化** — 自动将崩溃输入缩减为最小复现案例 - **覆盖率可视化** — 终端或 HTML 中的指令级命中图 ### 报告 | 格式 | 用途 | 集成 | |--------|---------|------------| | SARIF 2.1.0 | 机器可读 | GitHub 代码扫描、VS Code、Azure DevOps | | HTML | 人类可读 | 高管审查、分享 | | JSON | API 消费 | 脚本、工具链 | CI 退出码:`0` = 清晰,`1` = 发现结果超过阈值,`2` = 错误。 ### 交互模式 带上下文菜单的箭头键 TUI。加载固件后,RTOSploit 会自动检测格式、RTOS、架构和 MCU。Metasploit 风格的控制台,带 Tab 补全、命令历史和选项验证。 ## 安装 **要求:** - Python 3.10+ - QEMU 7.0+,且 PATH 中包含 `qemu-system-arm`(用于 QEMU 引擎) - 可选:`unicorn` Python 包(用于 Unicorn 引擎) **从源代码安装:** ``` git clone https://github.com/Indspl0it/RTOSploit cd RTOSploit python -m venv .venv source .venv/bin/activate pip install -e ".[dev]" ``` **安装 QEMU (Debian/Ubuntu):** ``` sudo apt install qemu-system-arm qemu-system-misc ``` **安装 QEMU (macOS):** ``` brew install qemu ``` **安装 Unicorn 引擎(可选,用于高速模糊测试):** ``` pip install unicorn ``` 平台特定说明请参见 [docs/installation.md](docs/installation.md)。 ## 快速开始 **分析任意固件:** ``` rtosploit analyze -f firmware.elf --all ``` **扫描已知 CVE:** ``` rtosploit cve scan -f firmware.elf ``` **模糊测试针对 QEMU 机器的固件:** ``` rtosploit fuzz -f firmware.elf -m mps2-an385 --timeout 300 ``` **模糊测试真实硬件固件(Unicorn + PIP):** ``` rtosploit fuzz -f real-product.elf --engine unicorn --timeout 300 ``` **完整的 CI/CD 扫描:** ``` rtosploit scan -f firmware.elf --fuzz-timeout 120 --format sarif --output results --fail-on high ``` **交互模式:** ``` rtosploit ``` ## 仿真引擎 ### QEMU — 交互式调试 当固件针对支持的机器且您希望与其交互时使用 QEMU。 **使用时机:** - 针对 mps2-an385、lm3s6965evb、microbit、stm32f4 或其他 QEMU 机器构建的固件 - 您需要 UART 输出、GDB 断点或单步调试 - 观察固件行为的交互式分析 **QEMU 提供什么:** - 完整的 ARM Cortex-M 系统:NVIC、SysTick、机器特定外设 - 用于实时调试的 GDB 远程桩 - HAL 函数拦截(跨 STM32、nRF5、Zephyr 的 112 个函数) - 可用时的 SVD 支持的寄存器模型 - UART/串行转发到 TCP 端口 **命令:** ``` rtosploit emulate -f firmware.elf -m mps2-an385 --gdb rtosploit rehost -f firmware.elf -m mps2-an385 rtosploit fuzz -f firmware.elf -m mps2-an385 --timeout 300 ``` ### Unicorn — 高速模糊测试 当固件针对真实硬件(nRF52840、STM32F407 等)或需要速度时使用 Unicorn。 **使用时机:** - 不匹配 QEMU 机器的真实产品固件 - 吞吐量重要的自动化模糊测试活动 - 您希望所有外设 I/O 由模糊测试器控制 **Unicorn 提供什么:** - 仅 CPU 仿真(ARM Thumb2)— 无机器特定外设 - 外设输入回放(PIP)— MMIO 读取返回模糊测试控制的值,对状态寄存器轮询进行 2 位重放优化 - FERMCov — 中断感知的边覆盖率,消除 75-88% 的误报唯一路径 - 轮询式中断调度,带 WFI/WFE 处理 - 快速快照/恢复,用于模糊测试迭代重置 **命令:** ``` rtosploit rehost -f real-product.elf --engine unicorn rtosploit fuzz -f real-product.elf --engine unicorn --timeout 300 ``` ### 引擎对比 | | QEMU | Unicorn | |---|---|---| | 吞吐量 | 约 3-5 次执行/秒 | 约 200+ 次执行/秒 | | 真实硬件固件 | 需要匹配的机器 | 通过 PIP 工作 | | 调试 | GDB、断点、UART | 无交互式调试 | | 外设建模 | 机器原生 + HAL 钩子 | PIP(模糊测试驱动) | | 覆盖率 | 基本块位图 | AFL 边 + FERMCov | | 最佳用途 | 交互式分析 | 自动化模糊测试 | ## CLI 参考 ### 全局标志 | 标志 | 描述 | |------|-------------| | `--version` | 显示版本横幅 | | `-v, --verbose` | DEBUG 级别日志记录 | | `-q, --quiet` | 仅警告和错误 | | `--json` | 机器可读的 JSON 输出 | | `--config PATH` | 自定义配置文件 | ### 命令 | 命令 | 描述 | |---------|-------------| | `analyze` | 静态固件分析(RTOS、堆、MPU、外设) | | `cve` | CVE 关联(`scan`、`search`、`update`) | | `scan-vuln` | 漏洞扫描(`list`、`info`、`check`、`run`) | | `payload` | Shellcode 和 ROP 生成(`shellcode`、`rop`) | | `emulate` | 带可选 GDB 的 QEMU 仿真 | | `rehost` | 外设感知的重定宿(QEMU 或 Unicorn) | | `fuzz` | 覆盖率引导的模糊测试(QEMU 或 Unicorn) | | `triage` | 崩溃分类和输入最小化 | | `debug` | 在 GDB 下重放崩溃(`debug crash`) | | `coverage` | 覆盖率可视化(`stats`、`view`) | | `report` | SARIF 和 HTML 报告生成 | | `scan` | 完整的 CI/CD 管道(分析 → CVE → 模糊测试 → 分类 → 报告) | | `console` | Metasploit 风格的交互式 REPL | | `svd` | SVD 文件操作(`parse`、`download`、`generate`) | | `vulnrange` | CVE 复现实验室(`list`、`start`、`hint`、`solve`) | 运行 `rtosploit标签:AES-256, ARM架构, CVE关联, exploit生成, payload生成, Python, QEMU, RISC-V, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 内联执行, 固件仿真, 固件分析, 固件安全, 外设检测, 安全测试, 实时操作系统, 嵌入式系统, 攻击性安全, 无后门, 漏洞评估, 灰盒模糊测试, 物联网安全, 自动化报告, 覆盖率引导模糊测试, 身份验证强制, 逆向工具, 逆向工程, 静态分析