bod09/RP2350-Storage-Bridge
GitHub: bod09/RP2350-Storage-Bridge
RP2350 存储桥接通过硬件隔离实现安全检查与内容预览,防止主机接触受信USB设备。
Stars: 0 | Forks: 0
# RP2350 存储桥接
**安全检查 USB 驱动器,避免电脑暴露于风险中。**
将不受信任的 USB 闪存盘插入 RP2350 —— 而不是你的电脑。RP2350 读取驱动器的文件系统,并通过串口将文件列表、预览和下载内容流式传输到浏览器。你的电脑永远不会挂载该驱动器,永远不会运行其文件系统驱动程序,也永远看不到来自设备的原始 USB 流量。
为事件响应、安全研究、隔离网络环境以及任何希望在插入前先查看内容的人而设计。
## 安全模型
| 威胁 | 存储桥接的缓解方式 |
|------|-------------------|
| **自动运行 / 恶意代码执行** | 驱动器不会被电脑挂载 —— 无自动运行、无外壳扩展、无缩略图处理程序 |
| **文件系统驱动程序漏洞** | 操作系统文件系统驱动(NTFS、exFAT 等)从不接触驱动器。RP2350 上的 FatFS 在隔离环境中解析文件系统 |
| **恶意 USB 设备攻击** | 驱动器连接到 RP2350 的 USB 主机端口,而非你的电脑。你的电脑仅看到一个标准 HID 键盘 + CDC 串口设备 |
| **内容检查** | 内置文件预览(文本、图片、音频、视频、PDF、十六进制编辑器)允许你在不下载的情况下检查内容。魔术字节不匹配检测会标记扩展名与实际内容不符的文件 |
| **可疑文件检测** | 已知危险扩展名(.exe、.bat、.ps1、.vbs、.scr、autorun.inf 等)会带有警告图标标记。递归安全扫描并可导出扫描报告 |
| **熵分析** | 香农熵计算可标记可能被混淆的恶意软件(如加密、压缩或打包的文件) |
| **文件哈希** | 设备端 SHA-256 哈希 —— 在不下载的情况下验证文件完整性 |
| **EXIF 元数据** | 查看并从 JPEG 图像中剥离 EXIF 元数据 —— 在下载前移除 GPS 坐标、相机信息等识别数据 |
| **浏览器沙箱** | 所有文件渲染均在浏览器的沙箱环境中进行 —— 即使预览恶意文件,也无法突破浏览器沙箱 |
### 限制
- RP2350 固件本身会处理来自不受信任驱动器的 USB 数据包和文件系统数据。精心构造的驱动器理论上可能利用固件(TinyUSB USB 主机栈、FatFS 解析器)。这并非防病毒软件。
- 仅支持 FAT12/16/32 和 exFAT 文件系统。NTFS、ext4、HFS+ 等驱动器无法读取。
- 魔术字节检测覆盖常见文件类型,但并非穷举。这是尽力而为的启发式方法,而非特征码扫描器。
- 文件预览在浏览器中渲染内容。虽然处于沙箱环境,但预览不受信任的 HTML/SVG/JS 文件意味着在浏览器渲染器中执行这些代码。
## 功能特性
- **文件浏览器** — 以列表或网格视图浏览目录,支持上传、下载、重命名、删除文件
- **文件预览与编辑** — 文本编辑器、带缩放功能的图片查看器、音频/视频播放器、PDF 查看器、完整十六进制编辑器(支持字节级编辑)
- **多文件 ZIP 下载** — 选择多个文件并打包为单个 ZIP 存档下载
- **剪贴板粘贴上传** — 直接将图片或文件从剪贴板粘贴到文件浏览器
- **文件夹大小** — 显示目录的递归总大小(在设备上计算)
- **SHA-256 哈希** — 在设备端计算文件哈希以验证完整性
- **安全扫描** — 递归威胁扫描、警告图标、熵分析、魔术字节不匹配检测、可导出扫描报告
- **EXIF 查看与剥离** — 检查并从 JPEG 图像中移除 EXIF 元数据
- **递归删除** — 一次性删除目录及其所有内容
- **格式化驱动器** — 从设置页面重新格式化驱动器
- **键盘快捷键** — 方向键、Enter、Delete、Ctrl+A、退格键导航
- **隔离网络指示器** — 视觉确认通过 RP2350 访问驱动器,而非直接连接电脑
- **PWA 支持** — 可安装为独立应用并支持离线缓存
## 访问 Web 应用的方式
提供两种选项,均使用相同的 Web Serial 协议:
1. **托管方式**:访问 [GitHub Pages 站点](https://bod09.github.io/RP2350-Storage-Bridge) — 首次加载后支持 PWA 离线缓存。
2. **隔离网络 / 受限环境**:从 [Actions](../../actions) 工件下载 `storage-bridge.html` 并在 Chrome 中本地打开。通过 `file://` 运行,无需联网。
## 硬件
- **开发板**:[Waveshare RP2350-USB-A](https://www.waveshare.com/rp2350-usb-a.htm)
- **芯片**:RP2350(双核 Cortex-M33),520KB SRAM,2MB 闪存
- **原生 USB(端口 0)**:设备模式连接至电脑 —— 复合 HID 键盘 + CDC 串口
- **PIO USB(端口 1,GPIO 12/13)**:主机模式 —— 支持 USB 大容量存储设备
**注意:** 为可靠的 USB 主机操作,请对 D+ 引脚上的 R13(1.5k 上拉电阻)进行脱焊。
## 架构
```
[USB Flash Drive] --USB-A--> [RP2350-USB-A] --USB--> [PC]
PIO USB Host Native USB Device
FatFS filesystem CDC Serial + HID Keyboard
|
[Web Browser]
Web Serial API
File Browser UI
Content Preview
Security Scanning
```
RP2350 在不受信任的 USB 驱动器与电脑之间充当硬件防火墙。你的电脑仅通过标准串口协议与 RP2350 通信,永远无法直接访问驱动器的 USB 接口。
## 构建固件
```
# 首次:初始化子模块
git submodule update --init --recursive
cd firmware
mkdir build && cd build
cmake ..
make -j$(nproc)
# 将 storage_bridge.uf2 闪存到设备
```
预编译的 UF2 文件也可从 [GitHub Actions](../../actions) 工件中获取。
**依赖项:** ARM GCC 工具链、CMake 3.13+
## Web 应用
### 开发(多文件,ES 模块)
```
cd web
python3 -m http.server 8080
# 在 Chrome/Edge 中打开 http://localhost:8080
```
### 打包为单文件(用于发布 / 离线使用)
```
# 需要 esbuild:npm i -g esbuild
python3 tools/bundle.py
# 输出:web/dist/storage-bridge.html(约 37 KB)
```
**浏览器要求:** Chrome 或 Edge(支持 Web Serial API)
## CI/CD
GitHub Actions 运行两个独立的工作流:
- **构建固件**(`firmware/**` 变更):编译固件并上传 `.uf2` 和打包后的 Web 应用作为工件
- **部署 Web 应用**(`web/**` 变更):将 Web 应用部署到 GitHub Pages
## 串口协议
基于换行符分隔的 JSON,通过 CDC 串口传输。命令如下:
| 命令 | 描述 |
|------|------|
| `{"cmd":"ls","path":"/"}` | 列出目录 |
| `{"cmd":"read","path":"/file.txt","offset":0,"length":8192}` | 读取文件块(Base64 编码) |
| `{"cmd":"write","path":"/file.txt","offset":0,"data":"...","done":true}` | 写入文件块(Base64 编码) |
| `{"cmd":"mkdir","path":"/dir"}` | 创建目录 |
| `{"cmd":"delete","path":"/file.txt"}` | 删除文件/目录 |
| `{"cmd":"rename","from":"/old","to":"/new"}` | 重命名/移动 |
| `{"cmd":"dirsize","path":"/dir"}` | 递归目录大小 |
| `{"cmd":"hash","path":"/file.txt"}` | SHA-256 文件哈希 |
| `{"cmd":"rmdir","path":"/dir"}` | 递归删除目录 |
| `{"cmd":"format"}` | 格式化驱动器 |
| `{"cmd":"df"}` | 磁盘可用空间 |
| `{"cmd":"eject"}` | 安全卸载 |
| `{"cmd":"status"}` | 驱动器状态 |
| `{"cmd":"bootloader"}` | 重启至 UF2 Bootloader |
标签:EXIF元数据, FatFS, meg, RP2350, USB安全, 串行通信, 信息安全, 内容检查, 反病毒扫描, 存储设备隔离, 安全浏览, 数字取证, 文件哈希, 文件系统解析, 文件预览, 气隙环境, 熵分析, 硬件防火墙, 自动化脚本, 自定义脚本