bishesh-droid/jtag_uart_fuzzer
GitHub: bishesh-droid/jtag_uart_fuzzer
一个轻量级Python工具,用于对嵌入式设备的UART串口接口进行模糊测试,帮助发现命令注入、缓冲区溢出等安全漏洞。
Stars: 0 | Forks: 0
# JTAG/UART Fuzzer(侧重 UART)
本项目提供了一个 Python 脚本,旨在通过 UART(通用异步收发传输器)接口执行基本的模糊测试。模糊测试涉及向目标系统发送格式错误、意外或随机的数据,以发现漏洞或不稳定的行为。该工具对于针对嵌入式设备、IoT 设备以及其他暴露 UART 控制台或通信端口的硬件进行安全研究尤为有用。
## 功能特性
* **UART 通信:** 通过 UART 建立并管理与目标设备的串行通信。
* **随机数据生成:** 生成随机字节序列作为模糊测试的输入。
* **持续模糊测试:** 向目标发送生成的数据流并监控任何响应。
* **简单的输入/输出:** 提供了一种直接的方式来与 UART 接口交互并观察设备反应。
## 什么是 JTAG 和 UART?
* **UART(Universal Asynchronous Receiver/Transmitter):** 这是一种简单、常见的硬件通信协议,用于两个设备之间的串行数据交换。在嵌入式系统上,它通常提供用于调试、日志记录或配置的低级控制台访问。
* **JTAG(Joint Test Action Group):** 一种更高级的接口,主要用于集成电路的调试、测试和在线编程。虽然功能强大,但直接对 JTAG 进行模糊测试要复杂得多,通常需要专门的硬件和对目标内部架构的深入了解。本项目专门专注于更易于访问的 **UART 接口进行模糊测试。**
## 为什么要对 UART 进行模糊测试?
嵌入式设备,从路由器到智能家电,在开发过程中通常暴露 UART 端口用于调试或内部通信。如果这些端口在生产环境中处于暴露且未受保护的状态,它们可能会成为重要的攻击向量:
* **命令注入(Command Injection):** 发送意外的命令或数据可能触发非预期功能或绕过安全检查。
* **拒绝服务:** 格式错误的输入可能导致设备崩溃,从而导致临时或永久性的拒绝服务。
* **缓冲区溢出/内存破坏:** 提供超大或特制的数据可能利用内存处理漏洞,可能导致任意代码执行。
* **信息泄露:** 模糊测试可能导致设备转储敏感的内部状态或不打算公开的错误消息。
通过对 UART 接口进行模糊测试,安全研究人员可以在这些漏洞被野外利用之前主动识别它们。
## 系统要求
* **Python 3.x:** 模糊测试脚本使用 Python 编写。
* **硬件:**
* **具有 UART 的目标设备:** 暴露 UART 通信端口的嵌入式设备(例如路由器、IoT 设备、开发板)。
* **USB 转串口适配器:** 一种硬件适配器(例如基于 FTDI、PL2303 的适配器),用于将计算机的 USB 端口连接到目标设备的 UART 引脚(TX、RX、GND)。
* **连接线:** 用于将适配器连接到目标设备的适当跳线或电缆。
* **操作系统:** 适用于 Linux、macOS 和 Windows。
## 安装
1. **克隆仓库:**
git clone https://github.com/yourusername/jtag_uart_fuzzer.git
cd jtag_uart_fuzzer
2. **创建虚拟环境(推荐):**
python -m venv venv
source venv/bin/activate # 在 Windows 上,使用 `venv\Scripts\activate`
3. **安装依赖项:**
pip install -r requirements.txt
这将安装 `pyserial` 库,该库对于串行通信至关重要。
4. **安装软件包:**
pip install -e .
这使得 `uart-fuzzer` 命令在您的终端中可用。
## 依赖项
* **`pyserial`**:一个 Python 库,为不同操作系统提供串口后端支持。它用于与目标设备的所有串行通信。它将通过 `requirements.txt` 自动安装。
## 使用方法
该工具通过 `uart-fuzzer` 命令行工具进行控制。
### 开始之前:硬件设置
1. **识别 UART 引脚:** 在您的目标设备上,找到 UART TX(发送)、RX(接收)和 GND(接地)引脚。
2. **连接适配器:** 将您的 USB 转串口适配器连接到这些引脚。确保 TX 对 RX、RX 对 TX 的连接正确。
3. **确定串口:** 将 USB 转串口适配器插入计算机。识别其分配的串口:
* **Linux/macOS:** 通常是 `/dev/ttyUSB0`、`/dev/ttyACM0` 或 `/dev/cu.usbserial-XXXX`。
* **Windows:** 通常是 `COM1`、`COM2` 等。
4. **确定波特率:** 找到目标设备 UART 接口的正确波特率(常见值包括 9600、19200、38400、115200)。
### 运行 Fuzzer
开始模糊测试:
```
uart-fuzzer fuzz --port /dev/ttyUSB0 --baudrate 115200 --length 10 --num-packets 100
```
* `--port`:**(必需)** 连接到目标设备的串口。
* `--baudrate`:**(必需)** 通信波特率(例如 9600、115200)。
* `--length`:(可选)要发送的每个随机数据包的长度(默认值:10 字节)。
* `--num-packets`:(可选)要发送的数据包数量。使用 0 进行持续模糊测试(默认值:0)。
脚本将发送随机数据并打印从设备接收到的任何响应。监控目标设备是否出现崩溃、重启或异常行为。
## 项目结构
```
.
├── jtag_uart_fuzzer/
│ ├── __init__.py
│ ├── main.py # Main command-line interface and entry point
│ └── fuzzer.py # Core logic for serial communication and fuzzing
├── tests/
│ └── test_fuzzer.py
├── requirements.txt
├── setup.py
└── README.md
```
## 运行测试
要运行包含的单元测试,请使用 `pytest`:
```
python -m pytest tests/
```
## 许可证
该项目目前没有许可证。
## 注意事项
* **物理访问:** 此工具需要物理访问目标设备的 UART 端口。
* **调试:** 对于更高级的分析,请将此 fuzzer 与硬件调试器(如 JTAG 调试器)结合使用,以捕获崩溃并检查寄存器和内存。
* **损坏风险:** 模糊测试可能导致设备崩溃、变得不稳定甚至变砖。请谨慎行事,并且仅在您被授权测试的设备上进行。
* 此工具旨在用于授权的安全研究、道德黑客攻击和教育目的。在测试任何设备之前,请确保您拥有适当的授权。
标签:Fuzzing, IoT, JTAG, Python, UART, 串口通信, 协议分析, 固件安全, 嵌入式系统, 文档安全, 无后门, 权限提升, 物联网安全, 硬件安全, 硬件黑客, 调试接口, 逆向工具