MAvinash24/esp32-iot-fuzzing-lab
GitHub: MAvinash24/esp32-iot-fuzzing-lab
面向 ESP32 的 IoT 安全实验平台,通过 BLE 和 MQTT 双协议模糊测试帮助发现嵌入式设备的输入验证缺失与缓冲区溢出等安全漏洞。
Stars: 0 | Forks: 0
# ESP32 IoT Fuzzing 实验室 (BLE + MQTT)
一个综合的 IoT 安全项目,通过以下两种方式演示**在 ESP32 上进行协议 Fuzzing**:
* **低功耗蓝牙 (BLE)**
* **MQTT (消息队列遥测传输)**
本项目通过向 ESP32 设备发送**畸形和随机的 payload** 并分析其行为,从而模拟真实世界的攻击。
## 概述
本仓库结合了两种主要的 IoT 通信协议:
| 协议 | 角色 | 攻击类型 |
| -------- | ------------- | ----------------------- |
| MQTT | 基于网络 | Broker 介导的 Fuzzing |
| BLE | 基于设备 | 直接 GATT Fuzzing |
## 系统架构
### MQTT 工作流
```
Python MQTT Fuzzer (Kali)
↓
Mosquitto Broker
↓
ESP32 Client
↓
Payload Processing & Detection
```
正确执行顺序:
```
1. Start Broker
2. Start ESP32
3. Run Python Fuzzer
```
注意:
如果 broker 不可用,ESP32 将重试连接。
### BLE 工作流
```
ESP32 (BLE Server)
↓
BLE Scan (Discover Device)
↓
BLE Client Connect
↓
BLE Fuzzer (GATT Writes)
↓
Payload Analysis
```
正确执行顺序:
```
1. Start ESP32 BLE Server
2. Scan for device
3. Connect & Fuzz
```
重要提示:
与 MQTT 不同,BLE 是**基于连接**的。
## 项目结构
```
esp32-iot-fuzzing-lab/
│
├── ble_fuzzer.py # BLE fuzzing script
├── ble_scan.py # BLE device scanner
├── ble-server.ino # ESP32 BLE server
│
├── esp32-mqtt-fuzzing-lab/
│ ├── esp32_mqtt.ino # ESP32 MQTT client
│ └── mqtt-fuzzing.py # MQTT fuzzing script
│
└── README.md
```
# MQTT Fuzzing 设置
## 需求:
* Mosquitto Broker
* Python (paho-mqtt)
* ESP32
* WiFi 网络
* Arduino IDE
## 安装说明
### 安装 Mosquitto
```
sudo apt update
sudo apt install mosquitto mosquitto-clients -y
```
启动 broker:
```
sudo systemctl start mosquitto
```
### 安装 Python 依赖
```
python3 -m venv venv
source venv/bin/activate
pip3 install paho-mqtt
```
### 配置 IP 地址
查找你的系统 IP:
```
ip a
```
更新 IP 地址在以下文件中:
* `mqtt-fuzzing.py`
* `esp32_mqtt.ino`
### 上传 ESP32 代码
* 打开 Arduino IDE
* 选择 **ESP32 Dev Module**
* 上传 `esp32_mqtt.ino`
* 打开串口监视器 (115200)
### 运行 MQTT Fuzzer
```
python3 mqtt-fuzzing.py
```
## MQTT 输出
### Kali
```
[+] Sent: random_payload
[+] Sent: AAAAAAAA...
```
### ESP32
```
Message received: Hello
Large payload detected! Simulating crash...
```
## MQTT 洞察
* 检测畸形 payload
* 模拟崩溃/重启
* 演示缺乏输入验证
# BLE Fuzzing 设置
## 需求
* ESP32
* Arduino IDE
* Python (bleak)
* 蓝牙适配器
(VMware 用户:请使用 USB 蓝牙适配器。)
## 安装说明
### 安装依赖
```
sudo apt update
sudo apt install bluetooth bluez
pip3 install bleak
```
启动蓝牙:
```
sudo systemctl start bluetooth
```
验证:
```
hciconfig
```
### 上传 BLE 服务端代码
* 打开 Arduino IDE
* 上传 `ble-server.ino`
预期结果:
```
BLE Server Started...
```
### 扫描设备
```
python3 ble_scan.py
```
查找:
```
ESP32_BLE_FUZZ
```
复制 MAC 地址。
### 运行 BLE Fuzzer
编辑 MAC 地址在:
```
ble_fuzzer.py
```
(重要提示:请使用正确的 Service UUID 和 Characteristic UUID)
运行:
```
python3 ble_fuzzer.py
```
## BLE 输出
### Kali
```
Connected to ESP32
[1] Sent: random payload
```
### ESP32
```
Received BLE Data (len=140)
WARNING: Large malformed payload detected!
Potential overflow attempt!
```
## BLE 检测逻辑
| Payload 大小 | 行为 |
| ------------ | ---------------- |
| < 50 字节 | 正常 |
| > 50 字节 | 警告 |
| > 120 字节 | 溢出尝试 |
# 演示的安全弱点
* 无 MQTT 认证
* 无 TLS 加密
* BLE 特征值在未经授权的情况下可写
* ESP32 上无输入验证
* 容易受到畸形 payload 的攻击
# 核心功能
* 双协议 Fuzzing (BLE + MQTT)
* ESP32 上的实时检测
* 随机 payload 生成
* 轻量级且易于运行
* 非常适合学术演示
# 涵盖的概念
* IoT 安全测试
* BLE GATT 协议
* MQTT 协议
* Fuzz 测试
* 缓冲区溢出模拟
# 说明
# 常见问题
## MQTT 无法连接
确保:
```
sudo systemctl start mosquitto
```
检查 IP 地址和端口 (1883)
## BLE 无法工作
```
BleakBluetoothNotAvailableError
```
修复方法:
* 使用 USB 蓝牙适配器(针对虚拟机)
* 将其连接到虚拟机
## 权限错误
```
sudo -E python3 ble_fuzzer.py
```
# 未来改进
* GUI 仪表盘
* 多设备 Fuzzing
* 攻击日志记录
* Wireshark 集成
* 自动化漏洞报告
# 总结
本项目提供了一个**完整的 IoT Fuzzing 实践实验室**,涵盖:
* 网络级攻击 (MQTT)
* 设备级攻击 (BLE)
使其成为一个**强大的网络安全 + 嵌入式系统项目**。
## 作者
Avinash
标签:Arduino, BLE, CISA项目, ESP32, Fuzzing, GATT, IoT Fuzzing, IoT安全, Mosquitto, Python, 协议模糊测试, 安全实验室, 安全测试, 嵌入式安全, 插件系统, 攻击性安全, 无后门, 模糊测试工具, 模糊测试框架, 物联网安全, 畸形报文, 硬件安全, 网络协议分析, 蓝牙低功耗, 逆向工具