开源硬件安全研究利器 Tigard 使用(上)
概述
Tigard 是一款基于 FT2232H 芯片的多协议、多电压的开源硬件黑客工具。通过结合常用的引脚、带标签的线束、板载电平转换和逻辑分析仪进行连接,它专为连接到目标硬件上的低速接口并与之通信而设计。
Tigard 对所有最常用的接口以及功能的支持结合到一个简单的板上。作为数十种基于 FTDI 芯片的其他硬件工具的直接替代品,它原生支持许多常用硬件工具,如 OpenOCD、FlashROM 等。
Tigard 支持 20% 的功能,这些功能支持 80% 的常见硬件黑客任务,这些任务涉及使用各种协议,这些任务涉及到使用不同的协议。无论是刚入门的硬件黑客,还是只需要一个快速简单的解决方案,Tigard 都可以作为首选。
文档和硬件文件可以在 Tigard GitHub 存储库中找到。
特性和规格
- USB Type C 高速 (480 Mbps) 接口
- FTDI FT2232HQ 双路高速 USB 转多用途 UART/FIFO IC芯片
- 主端口用于 UART,包括对所有流量控制信号的访问
- 辅助端口用于 SWD、JTAG、SPI 和 I²C 的接头之间共享
- 高性能定向电平转换器(1.8v - 5.5v )
- 可以在板载 1.8 V、3.3 V、5.0 V 和板外 vTarget 电源之间进行选择
- 可以在 SPI/JTAG 和 I²C/SWD 模式之间进行选择
- 用于观察设备级信号的逻辑分析仪 (LA) 端口
- 指示灯帮助调试
软件支持
总的来说,Tigard 已经支持 x232H 系列芯片的多个工具和库。包括:
- 用于 UART 访问的 USB 串行驱动程序
- 用于 JTAG 的 OpenOCD 和 UrJTAG
- Flashrom、PyFtdi/PySpiFlash、LibMPSSE 和其他 SPI 接口工具
- 支持 I²C 接口的 LibMPSSE 和 PyFtdi/PyI2CFlash
由于与众多工具的直接兼容性,Tigard 特定工具无需与任何目标交互。如果你确实需要使用Tigard自定义工具或脚本,它应该可以与任何其他 FT2232H 接口板配合使用。
使用场景
- 连接到你在家庭自动化设备上找到的串行控制台
- 将 SPI 闪存芯片的内容转储到机顶盒中
- 通过 JTAG 引脚上使用 GDB 修改内存中的代码,这样可以通过 UART 引脚连接到拆开的儿童玩具上,从而绕过登录提示
- 使用 I²C 与 OLED 显示器交互,同时通过 LA 端口使用 BitMagic 逻辑分析仪观察事务
示例
UART 串口与路由器交互
UART 有4个pin(VCC, GND , RX, TX), 用的TTL电平, 低电平为0(0V)、高电平为1(3.3V或以上),由于路由器不需要供电,在通电情况下,VCC 口可以不接。判断 GND , RX, TX 后,需要注意的是,在 TTL 电平模式下,UART 转换接口上的 RX、TX 口与路由器设备的 UART 口的RX和TX是需要反接的。
将 Tigard 的 VTGT 开关设置为5v, VTGT led 灯呈蓝色。
Tigard 通过 type-c 口连接到计算机后,出现了两个 COM 端口,选择第一个(COM5)。
选择COM5端口并设置波特率。
成功与路由器进行交互。
SPI 接口读写路由器 flash
标准的 SPI/I2C 标头的方向与标准的8针 SPI 闪存芯片上的引脚相同,另一端使用夹子连接路由器的芯片。
在模式选择开关上选择 SPI/JTAG。先将路由器断开电源,可以使用 Tigard 进行供电,将 VTGT 拨到3.3v即可。
将 Tigard 通过 type-c 接口连接树莓派后,使用dmesg
命令可以看到 Tigard 设备。
Flashrom 是 SPI 闪存转储常用的工具。可以看到成功找到 flash 芯片并转储 4096kB 。
time flashrom -p ft2232_spi:type=2232H,port=B,divisor=4 -r chip.bin
利用 binwalk 工具对 dump 出来的固件进行解包提取文件系统。
JTAG 读写 STM32 芯片固件
JTAG 的引脚排列顺序与 FTDI I/O 引脚标记的顺序相同,以便与其他 x232H 分线板保持一致。CORTEX 接头也作为标准 ARM 10 针 JTAG 接头进行接线。在模式选择开关上选择 JTAG,这确保 TDI 和 TDO 是分开的,如果使用 SWD,则模式开关选择SWD,将 DI 和 DO 引脚与电阻器 R16 连接以形成双向 SWDIO 引脚,详细用法查看Github文档说明。
配合 OpenOCD 工具,用于 ARM、 MIPS 和其他体系结构的片上调试。配置文件tigard-jtag.cfg
:
1 | interface ftdi |
利用 OpenOCD 读取固件
将读取的固件,使用 IDA 分析
参考
https://www.crowdsupply.com/securinghw/tigard
https://github.com/tigard-tools/tigard
https://iot-security.wiki/hardware-security/debug/serial-port.html