EngineerAbdullahBinZafar/stm32-hal-fuzzer

GitHub: EngineerAbdullahBinZafar/stm32-hal-fuzzer

一个针对STM32物理硬件的HAL函数自动化边缘情况与压力测试工具,用于发现固件底层的崩溃和未定义行为。

Stars: 0 | Forks: 0

**STM32 HAL 函数自动化边缘情况与压力测试工具** [![CI 状态](https://img.shields.io/github/actions/workflow/status/EngineerAbdullahBinZafar/stm32-hal-fuzzer/ci.yml?branch=main&style=for-the-badge&logo=githubactions&logoColor=white)](https://github.com/EngineerAbdullahBinZafar/stm32-hal-fuzzer/actions) [![许可证: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)](https://opensource.org/licenses/MIT) [![MCU: STM32](https://img.shields.io/badge/MCU-STM32_All_Series-03234B?style=for-the-badge&logo=stmicroelectronics&logoColor=white)](https://st.com) [![Python 3.10+](https://img.shields.io/badge/Python-3.10+-3776AB?style=for-the-badge&logo=python&logoColor=white)](https://python.org) *你的 HAL 代码在正常输入下运行良好。但在边缘情况下它能幸存吗?* [为什么要对 STM32 进行模糊测试?](#-why-fuzz-your-stm32-hal) • [功能特性](#-features) • [快速开始](#%EF%B8%8F-quick-start) • [系统架构](#-architecture) • [输出报告](#-sample-output-report)
## 🤔 为什么要对你的 STM32 HAL 进行模糊测试? 固件崩溃并非随机发生——它们只是你没有测试到的边缘情况: - 使用无效 GPIO 端口调用 `HAL_GPIO_WritePin` → **硬件错误 (Hard Fault)** - 使用 `Size = 0` 调用 `HAL_UART_Transmit` → **未定义行为** - 在未初始化的定时器上调用 `HAL_TIM_PWM_Start` → **静默失败** 手动测试永远无法覆盖无效输入的所有组合。**`stm32-hal-fuzzer` 会自动生成数千个此类边缘情况输入**,在已连接的 STM32 上运行它们,监控崩溃和挂起情况,并生成精美的诊断报告。 ## ✨ 功能特性 | 功能 | 描述 | |:---|:---| | 🎲 **自动化边缘情况生成** | 为任何 HAL 函数生成边界值、空指针和溢出输入 | | 📡 **实时 UART 监控** | 监控 STM32 的调试 UART,以检测崩溃特征和硬件错误处理程序 | | ⏱️ **超时检测** | 检测函数挂起(在可配置的超时时间内无响应) | | 📊 **HTML 诊断报告** | 为每个测试用例生成带有颜色编码的通过/失败报告 | | 🔌 **零固件修改** | 通过一次性烧录的轻量级测试工具运行——无需改动你的 HAL 代码 | ## ⚡️ 快速开始 ``` # 1. Clone fuzzer git clone https://github.com/EngineerAbdullahBinZafar/stm32-hal-fuzzer.git cd stm32-hal-fuzzer pip install -r requirements.txt # 2. Flash test harness 固件到你的 STM32 # (STM32F407 的预构建 .bin 位于 /firmware/) # 3. 对目标 HAL 模块运行 fuzzer python -m stm32_fuzzer.fuzz \ --port /dev/ttyACM0 \ --baud 115200 \ --target HAL_UART \ --iterations 500 # 4. 打开生成的报告 open output/report.html ``` ## 📐 系统架构 ``` flowchart TB A["🐍 Fuzzer Engine\n(Python)"] -->|"Generate Edge Cases"| B["Input Corpus\n(Boundary, Null, Overflow)"] B -->|"Serial Commands"| C["🔌 UART Bridge\n(USB-to-Serial)"] C -->|"HAL Function Calls"| D["⚡ STM32 Target\n(Test Harness .bin)"] D -->|"Pass / Crash / Hang"| C C -->|"Response Monitoring"| A A -->|"Aggregate Results"| E["📊 HTML Report\n(output/report.html)"] ``` ## 📋 示例输出报告 ``` ========================================== STM32 HAL Fuzzer — Run Report Target: HAL_UART_Transmit Iterations: 500 | Duration: 42.3s ========================================== ✅ PASS [0001] Size=1, Data=0x00 (2.1ms) ✅ PASS [0002] Size=255, Data=0xFF (2.4ms) ❌ CRASH [0047] Size=0, Data=0x00 → Hard Fault detected! ⏱️ HANG [0203] Size=256, Data=random → Timeout (5000ms) ✅ PASS [0498] Size=128, Data=random (2.2ms) ------------------------------------------ Summary: 497 Pass | 1 Crash | 1 Hang | 1 Error Report saved to: output/report_20250506.html ========================================== ``` ## 🤝 贡献指南 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 和 [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)。 **公开赏金任务:** - 支持对 STM32 SPI 和 I2C HAL 的模糊测试 - 集成 OpenOCD 以实现基于 JTAG 的崩溃检测 - 提供在每次固件提交时进行自动化模糊测试的 CI 模板 ## 📄 许可证 MIT 许可证 — 详见 `LICENSE`。 ## 👤 作者 由 **Engineer Abdullah Bin Zafar** 构建 — [GitHub](https://github.com/EngineerAbdullahBinZafar) · [LinkedIn](https://linkedin.com/in/abdullah-bin-zafar) *如果你在崩溃进入生产环境之前将其捕获,请留下一个 ⭐!*
标签:ASM汇编, CISA项目, HAL库, MCU, Python, STM32, 压力测试, 固件测试, 固件漏洞挖掘, 多模态安全, 嵌入式安全, 微控制器, 无后门, 物联网安全, 硬件安全, 硬件安全测试, 硬件故障注入, 边界测试, 逆向工具