树莓派-穷人的硬件黑客工具(翻译)

文章目录
  1. 1. 0x00 介绍
  2. 2. 0x01 设置树莓派
  3. 3. 0x03 调试器-JTAG/SWD
    1. 3.1. 安装openOCD
    2. 3.2. JTAG
  4. 4. 0x04 参考

0x00 介绍

本文将介绍如何使用Raspberry Pi完成SPI、I2C、JTAG/SWD和JTAGenum通信,这里我将使用Raspberry Pi Zero,因为它足够便宜和小。

0x01 设置树莓派

在本节开始之前,我建议你先开启你的树莓派并从树莓派配置选项中启用SPI、I2C、GPIO功能,你可一参考这个链接完成设置。

在下面Pin#针脚图中的编号是硬件位置编号而非GPIO接口编号。




在树莓派中克隆这个项目代码:https://github.com/arunmagesh/raspi-sec-tool

## 0x01 SPI 串行外设接口
树莓派自带SPI接口,硬件测试中最常见的测试是利用SPI通信接口提取目标设备Flash闪存数据。常用的软件工具是flashrom,支持多种flash。我们将使用树莓派的bcm2385处理器/dev/spidev0.0 实现SPI Flash读取和写入。

安装:

1
2
3
4
sudo apt-get install build-essential pciutils usbutils libpci-dev libusb-dev libftdi1 libftdi-dev zlib1g-dev subversion libusb-1.0-0-dev
svn co svn://flashrom.org/flashrom/trunk flashrom
cd flashrom
make


连接:

CS – 24
MISO – 21
MOSI – 19
CLK – 23
3.3v – 17



从flash中读取数据:
flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=512 -r spi_dump.bin




不要忘记设置spispeed=512。
现在你可以使用binwalk或者fmk分析提取到的固件。

## 0x02 I2C 集成电路总线连接

I2C通信类似于SPI,但它只使用两条线进行通信——SDA/SCL。每个设备都通过使用其内部 i2c 地址进行访问。这里我们以 I2C EEPROM 为例,看看我们如何读写内存。i2ctools 是 Linux 软件包的一部分,因此无需安装任何东西。

连接:
SDA – 3
SCL – 5
VCC – 1
VSS – A0 – A1 – A2 – A3 – WP – 6



获取设备的I2C地址
i2cdetect -y 1




本例中地址为0x50,-y 1表明你使用了哪些i2c的引脚,本例中使用 i2c-1。
现在使用eeprog工具读取和写入EEPROM。
wget http://darkswarm.org/eeprog-0.7.6-tear5.tar.gz
tar -xvf eeprog-0.7.6-tear5.tar.gz eeprog-0.7.6-tear12/
cd eeprog-0.7.6-tear12/
make
sudo make install

写入数据:
echo "hello" | ./eeprog -f -16 -w 0 -t 5 /dev/i2c-1 0x50
-w 数据偏移选项
-t 写入延迟


读取数据:
./eeprog -x /dev/i2c-1 0x50 -16 -r 0x00:0x10



0x03 调试器-JTAG/SWD

JTAG/SWD 是允许开发人员调试微控制器或微处理器的标准接口。从攻击者的角度来看,拥有调试权限意味着完全控制了设备,攻击者可以转储设备内部数据或动态更改内存。让我们看看仅使用 Raspberry pi 访问 JTAG 和 SWD接口。我们使用开源工具 openOCD与调试器进行交互。
连接:
JTAG:

TCK – 23
TMS – 22
TDI – 19
TDO – 21
SRST – 12
GND – 20

SWD:

SWDIO – 18
SWCLK – 22
SRST – 12
GND – 14

安装openOCD

1
2
3
4
5
git clone git://git.code.sf.net/p/openocd/code openocd
cd openocd/
./bootstrap
./configure –enable-maintainer-mode –enable-bcm2835gpio –enable-sysfsgpio
make & sudo make install

耐心等待一会就回安装完成。

JTAG

JTAG 的配置文件随 openOCD 包一起提供。只需带上目标 cfg文件运行它就会连接到JTAG。
openocd -f interface/raspberrypi-native.cfg -f target/stm32f4x.cfg




现在你可以使用gdb连接并调试设备。

### SWD

openocd -f raspberrypi_swd.cfg -f target/stm32f4x.cfg
raspberrypi_swd.cfg 位于你之前下载的 git 文件夹中。



现在你可以使用gdb连接并调试设备。

### JTAGenum

在大部分设备中,很少能找到 JTAG 接口和引脚所在的位置。因此我们使用JTAGenum 工具扫描设备的所有引脚并告诉你哪些引脚是 TMS-TCK-TDI-TDO。如果你没有目标设备的开发文档,这将非常有用。
安装:
1
2
3
4
git clone https://github.com/cyphunk/JTAGenum
cd JTAGenum
source JTAGenum.sh
scan


需要使用3 – 5 – 7 – 11 – 13 – 15及ground引脚。
这将需要一些时间,因为 GPIO 非常慢。



成功找到。



我花的时间。


伙计们,这就是全部。如果我发现更多关于使用 Raspberry Pi 作为其他很酷的东西的信息,我会更新。
我们设计了一个板子,可以在没有杂乱电线的情况下执行这些操作。如果你碰巧遇到 Aseem Jakhar,你可以得到一个。



译注:国内也有人设计了板子,淘宝有卖 https://www.muselab-tech.com/geekgong-ju-ba-shu-mei-pai-bian-cheng-duo-gong-neng-diao-shi-shao-lu-qi/

0x04 参考

原文链接:https://payatu.com/using-rasberrypi-as-poor-mans-hardware-hacking-tool