USB Fuzzer — 基于 Raspberry Pi Zero 2 W 的便携式 USB 协议 Fuzzing 与设备模拟工具(开源 · 网页操控)
[AI 整理声明]本文基于作者的项目文档与开发实践由 AI 辅助整理输出核心内容与数据均来自作者本人。目录硬件部署设备模拟USB Fuzz日志系统信息架构注意USB 是整机设备的通用外设入口主机侧的 USB 协议栈枚举、描述符解析、类驱动历来是内核攻击面——一个畸形描述符或控制传输就可能让主机崩溃、卡死甚至提权。USB Fuzzer 就是用来对这一层做协议 fuzzing 与设备模拟的便携工具用 Raspberry Pi Zero 2 W 把自己伪装成 USB 设备接进待测主机全程用浏览器操控走树莓派自带的 Wi-Fi不用接显示器和键盘。GitHubhttps://github.com/cstriker1407/usb_fuzzer硬件Raspberry Pi Zero 2 Wmicro-USB 数据口与供电口分开没有 VBUS 冲突一根 micro-USB ↔ USB-A/USB-C 数据线树莓派USB口 → 待测主机 USB Host 口PWR IN口单独供 5V部署烧录 Raspberry Pi OS / Debian64-bitImager 里预置好 SSH然后sudobashscripts/provision.sh# 安装依赖 systemd 服务 编译 raw-gadget 配 dwc2sudoreboot# 打开 http://pi-ip:10001provision.sh配好三个开机自启单元usbd.serviceroot 守护、usbfuzzer-web.serviceuvicorn、usbfuzzer-net.service开机联网。开机联网Wi-Fi 凭据填在/etc/usbfuzzer/network.conf范围内有已知 Wi-Fi 就连否则自动建热点usb_fuzzer_MAC 尾字节默认密码12345678。插上待测机、手机连热点即可操作不依赖实验室网络。开发机预览无硬件pipinstallfastapi0.110uvicorn[standard]0.29bashscripts/run-dev.sh# http://localhost:10001设备模拟/Fuzz 在真机上才跑设备模拟ConfigFS 实现8 类真实 USB 设备界面卡片式平铺键盘指定按键序列或随机「猴子」模式可设次数 种子便于复现鼠标含滚轮同样支持随机模式媒体键 / 手柄标准 HIDU盘上传任意文件作为盘内容读写 / 只读 / 光盘CDROM模式可选串口CDC ACM双向收发USB 网卡CDC ECM给待测主机分配 DHCP建一个「假网络」MIDI循环音阶同一时刻只有一个 gadget 能绑定 UDC设备模拟与 Fuzz 互斥。USB Fuzzraw-gadget 实现逐字节构造响应对待测主机的 USB 协议栈发畸形枚举三种变异策略描述符变异对 Device / Configuration / Interface / Endpoint 描述符做字段变异控制传输变异在 EP0 控制传输阶段注入异常响应混合随机两者随机叠加**三档强度**低单处变异/ 中 / 高每用例叠加 2 处畸形的复合变异capture→fuzz导入真实 USB 设备的原始描述符从/sys/bus/usb/devices/*/descriptors读出的 hex 或二进制作为基线对待测主机打「真实设备画像」的畸变枚举避免因设备不合理而在早期枚举阶段就被拒绝。主机侦察scan呈现一个合法设备被动记录待测主机枚举时发来的每个控制请求判断主机认它为哪类、走到哪一步。隐藏不适用的参数进度显示「侦察中…」。异常用例记录原始字节可回放复现。本地错误如 UDC 忙与待测主机反馈明确区分。日志每个 Fuzz 会话逐用例落盘 JSONL包含用例编号、变异类型、原始字节、待测主机响应与时间戳日志可筛选、下载选中用例可单独回放。保留轮转防写满 SD 卡。系统信息「系统信息」页显示当前 Wi-Fi / 热点模式、SSID、IP、MAC、UDC 状态与资源占用架构两进程设计控制面Wi-Fi/网页与数据面USB解耦浏览器 │ Wi-Fi HTTP :10001 WebSocket ▼ web 进程 (FastAPI) 代理命令给 usbd把事件广播给所有浏览器 │ IPC (Unix socket) ▼ usbd 进程 (root) 独占 UDC跑引擎写 JSONL 日志 │ USB (dwc2 OTG, peripheral) ▼ 待测主机 DUT这样拆分的好处是隔离fuzz 把待测主机打挂时网页与日志依然存活web 崩了不影响在跑的会话usbd 崩了由 systemd 拉起。注意本工具仅用于已授权的测试——自己的设备或有明确书面许可的系统USB fuzzing 可能导致待测主机崩溃、数据损坏甚至变砖测试前做好数据备份摄像头UVC暂停dwc2 在当前内核6.18上拒绝启动 UVC 等时端点udc_start -19是内核限制代码保留待后续支持已经过一轮多智能体对抗式代码审查修复了 12 个确认缺陷含大日志撑爆 IPC 64KB 上限、会话删除卡死守护进程、会话收尾竞态等当前版本 v1.2.0MIT 开源。