hacktricks/todo/hardware-hacking/spi.md

90 lines
8.7 KiB
Markdown

# SPI
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## Basic Information
SPI (Serial Peripheral Interface)는 IC(집적 회로) 간의 단거리 통신을 위해 임베디드 시스템에서 사용되는 동기식 직렬 통신 프로토콜입니다. SPI 통신 프로토콜은 클럭 및 칩 선택 신호에 의해 조정되는 마스터-슬레이브 아키텍처를 사용합니다. 마스터-슬레이브 아키텍처는 EEPROM, 센서, 제어 장치 등과 같은 외부 주변 장치를 관리하는 마스터(일반적으로 마이크로프로세서)로 구성되며, 이들은 슬레이브로 간주됩니다.
여러 슬레이브가 마스터에 연결될 수 있지만 슬레이브끼리는 서로 통신할 수 없습니다. 슬레이브는 클럭 및 칩 선택의 두 핀으로 관리됩니다. SPI는 동기식 통신 프로토콜이므로 입력 및 출력 핀은 클럭 신호를 따릅니다. 칩 선택은 마스터가 슬레이브를 선택하고 상호작용하는 데 사용됩니다. 칩 선택이 높을 때 슬레이브 장치는 선택되지 않으며, 낮을 때는 칩이 선택되어 마스터가 슬레이브와 상호작용하게 됩니다.
MOSI(마스터 아웃, 슬레이브 인) 및 MISO(마스터 인, 슬레이브 아웃)는 데이터 전송 및 수신을 담당합니다. 데이터는 MOSI 핀을 통해 슬레이브 장치로 전송되며, 이때 칩 선택은 낮게 유지됩니다. 입력 데이터는 슬레이브 장치 공급업체의 데이터 시트에 따라 명령, 메모리 주소 또는 데이터가 포함됩니다. 유효한 입력이 있을 경우 MISO 핀은 마스터로 데이터를 전송하는 역할을 합니다. 출력 데이터는 입력이 끝난 다음 클럭 주기에서 정확히 전송됩니다. MISO 핀은 데이터가 완전히 전송될 때까지 또는 마스터가 칩 선택 핀을 높게 설정할 때까지 데이터를 전송합니다(이 경우 슬레이브는 전송을 중단하고 마스터는 그 다음 클럭 주기 이후로는 듣지 않습니다).
## Dumping Firmware from EEPROMs
펌웨어 덤프는 펌웨어를 분석하고 그 안의 취약점을 찾는 데 유용할 수 있습니다. 종종 펌웨어는 인터넷에서 사용할 수 없거나 모델 번호, 버전 등과 같은 다양한 요인으로 인해 관련성이 없습니다. 따라서 물리적 장치에서 직접 펌웨어를 추출하는 것이 위협을 탐색하는 데 구체적으로 도움이 될 수 있습니다.
직렬 콘솔을 얻는 것은 유용할 수 있지만, 종종 파일이 읽기 전용인 경우가 있습니다. 이는 다양한 이유로 분석을 제약합니다. 예를 들어, 패키지를 전송하고 수신하는 데 필요한 도구가 펌웨어에 없을 수 있습니다. 따라서 이진 파일을 추출하여 리버스 엔지니어링하는 것은 실현 가능하지 않습니다. 따라서 시스템에 전체 펌웨어를 덤프하고 분석을 위해 이진 파일을 추출하는 것이 매우 유용할 수 있습니다.
또한, 레드 팀 활동 중 장치에 물리적으로 접근할 때 펌웨어를 덤프하면 파일을 수정하거나 악성 파일을 주입한 다음 메모리에 다시 플래시하는 데 도움이 될 수 있으며, 이는 장치에 백도어를 심는 데 유용할 수 있습니다. 따라서 펌웨어 덤프를 통해 잠금 해제할 수 있는 수많은 가능성이 있습니다.
### CH341A EEPROM Programmer and Reader
이 장치는 EEPROM에서 펌웨어를 덤프하고 펌웨어 파일로 다시 플래시하는 데 사용되는 저렴한 도구입니다. 이는 컴퓨터 BIOS 칩(단순히 EEPROM임) 작업에 인기 있는 선택입니다. 이 장치는 USB를 통해 연결되며 시작하는 데 최소한의 도구가 필요합니다. 또한 일반적으로 작업을 빠르게 완료하므로 물리적 장치 접근에도 유용할 수 있습니다.
![drawing](../../.gitbook/assets/board\_image\_ch341a.jpg)
CH341a 프로그래머와 EEPROM 메모리를 연결하고 장치를 컴퓨터에 연결합니다. 장치가 감지되지 않는 경우 컴퓨터에 드라이버를 설치해 보십시오. 또한 EEPROM이 올바른 방향으로 연결되어 있는지 확인하십시오(일반적으로 VCC 핀을 USB 커넥터와 반대 방향으로 배치) 그렇지 않으면 소프트웨어가 칩을 감지할 수 없습니다. 필요시 다이어그램을 참조하십시오:
![drawing](../../.gitbook/assets/connect\_wires\_ch341a.jpg) ![drawing](../../.gitbook/assets/eeprom\_plugged\_ch341a.jpg)
마지막으로 flashrom, G-Flash(GUI) 등의 소프트웨어를 사용하여 펌웨어를 덤프합니다. G-Flash는 최소한의 GUI 도구로 빠르며 EEPROM을 자동으로 감지합니다. 이는 문서와 많은 조작 없이 펌웨어를 신속하게 추출해야 할 때 유용할 수 있습니다.
![drawing](../../.gitbook/assets/connected\_status\_ch341a.jpg)
펌웨어를 덤프한 후 이진 파일에 대한 분석을 수행할 수 있습니다. strings, hexdump, xxd, binwalk 등의 도구를 사용하여 펌웨어 및 전체 파일 시스템에 대한 많은 정보를 추출할 수 있습니다.
펌웨어에서 내용을 추출하기 위해 binwalk를 사용할 수 있습니다. Binwalk는 헥스 서명을 분석하고 이진 파일에서 파일을 식별하며 이를 추출할 수 있는 기능이 있습니다.
```
binwalk -e <filename>
```
The can be .bin 또는 .rom 도구 및 구성에 따라 다릅니다.
{% hint style="danger" %}
펌웨어 추출은 섬세한 과정이며 많은 인내가 필요합니다. 잘못 처리하면 펌웨어가 손상되거나 완전히 지워져 장치가 사용 불가능해질 수 있습니다. 펌웨어를 추출하기 전에 특정 장치를 연구하는 것이 좋습니다.
{% endhint %}
### Bus Pirate + flashrom
![](<../../.gitbook/assets/image (910).png>)
Pirate Bus의 PINOUT이 SPI에 연결할 **MOSI****MISO** 핀을 나타내더라도 일부 SPI는 핀을 DI 및 DO로 나타낼 수 있습니다. **MOSI -> DI, MISO -> DO**
![](<../../.gitbook/assets/image (360).png>)
Windows 또는 Linux에서 [**`flashrom`**](https://www.flashrom.org/Flashrom) 프로그램을 사용하여 다음과 같은 명령을 실행하여 플래시 메모리의 내용을 덤프할 수 있습니다:
```bash
# In this command we are indicating:
# -VV Verbose
# -c <chip> The chip (if you know it better, if not, don'tindicate it and the program might be able to find it)
# -p <programmer> In this case how to contact th chip via the Bus Pirate
# -r <file> Image to save in the filesystem
flashrom -VV -c "W25Q64.V" -p buspirate_spi:dev=COM3 -r flash_content.img
```
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks 지원하기</summary>
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
</details>
{% endhint %}