Analyzing SPI (Serial Peripheral Interface)
1. SPI protocol internals
- Designed for synchronous serial communication between the master and slave devices
- Master controls the clock for all the slaves
- fastest serial clock speed in SPI is half the speed of the master clock
- SPI (Serial Peripheral Interface) implementation standard is not strict
- manufacturers design as their wish
-
Need to look up the datasheet to understand SPI implementation protocol
- SPI advantages
- Speed is not limited (has faster data transmission rates compared to I2C)
- Full-duplex (both read and write data happens at the same time)
- SPI downside
- Single master protocol
- Consists of 3 pins for data transfer and one pin for Chip/Slave select
- increases the overall requirement of space compared to I2C
- when there is no data to read, when there is a write request,
- the slave should send dummy data to make the connection established
2. Pentest objectives
- Get console access
- custom bootloaders are designed to prevent from entering single user mode
- but that can also be bypassed
3. Tools
- SPI Converter/Adapter (any supported FTDI based hardware)
- USB-TTL (or)
- BusPriate (or)
- Attify Badge
- spiflash.py
4. Identify the SPI Flash pinouts
- Open the device
- Visually identify the SPI flash chip on the PCB
- Note the component number printed on the SPI chip
-
Look up online for the datasheet to figure out the pinouts
-
SPI pins
SCK Serial Clock MOSI Master Out Slave In MISO Master In Slave Out SS—Slave Select (Active Low, output from master) - SCK, MISO, and MOSI pins are shared by slaves
- Each SPI slave will have its own unique SS pin
- Master have several SS pins (SS1, SS2, …)
-
Mater-slave connection table
SPI Master SPI Slave SCK SCK MOSI MOSI MISO MISO SS1 SS - Master configures the clock frequency according to the slave’s clock frequency
- Master selects the slave device with a logic level 0 on the SS pin
- Master initiates the communication by sending a bit on the MOSI line
- which is read by the slave
- whereas the slave sends a bit on the MISO line which is read by the master
5. Connecting EEPROM
- Method 1: Hooking
- hook mini probes to the SPI flash
- Method 2: SOIC clip
- use a SOIC clip
- Method 3: Desoldering
- remove SPI flash the from the PCB by de-soldering
- solder it on a EEPROM adapter (or reader)
- use an adapter which is suitable for EEPROM packaging type
-
Adapter (Attify Badge) pin layout
D0 SCK Serial Clock D1 MISO Master In Slave Out D2 MOSI Master Out Slave In D3 CS Chip Select -
Connect the SPI flash pins to the adapter (Attify Badge)
SPI flash Adapter CLK TCK (D0) MOSI/DO TDI (D1) MISO/DI TDO (D2) CS TMS (D3) WP, HOLD, and Vcc 3.3V GND GND - Connect the adapter to the analysis PC via USB
6. Reading data
- Read data from the device using an SPI flash
-
Use the spiflash.py script
/libmpsse ./configure make make install spiflash.py -s 5120000 --read=new.bin
- Dump the contents to a file
7. Writing data
- Write data to the SPI flash
-
Use the spiflash.py script
spiflash.py -s 5120000 -w new.bin