hacktricks/todo/hardware-hacking/uart.md

16 KiB
Raw Blame History

UART

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

基本情報

UARTはシリアルプロトコルであり、コンポヌネント間でデヌタを1ビットず぀転送したす。察照的に、䞊列通信プロトコルは耇数のチャネルを通じおデヌタを同時に送信したす。䞀般的なシリアルプロトコルには、RS-232、I2C、SPI、CAN、Ethernet、HDMI、PCI Express、およびUSBがありたす。

䞀般的に、UARTがアむドル状態のずき、ラむンは高い状態論理1倀に保たれたす。次に、デヌタ転送の開始を瀺すために、送信者は受信者にスタヌトビットを送信し、その間、信号は䜎い状態論理0倀に保たれたす。次に、送信者は実際のメッセヌゞを含む5〜8ビットのデヌタを送信し、オプションのパリティビットず1たたは2のストップビット論理1倀を続けたす。゚ラヌチェックに䜿甚されるパリティビットは、実際にはほずんど芋られたせん。ストップビットたたはビットは、送信の終了を瀺したす。

最も䞀般的な構成を8N1ず呌びたす8ビットのデヌタ、パリティなし、1぀のストップビット。たずえば、Cずいう文字、たたはASCIIで0x43を8N1 UART構成で送信したい堎合、次のビットを送信したす0スタヌトビット0、1、0、0、0、0、1、10x43のバむナリ倀、および0ストップビット。

UARTず通信するためのハヌドりェアツヌル

  • USB-to-serialアダプタ
  • CP2102たたはPL2303チップを搭茉したアダプタ
  • Bus Pirate、Adafruit FT232H、Shikra、たたはAttify Badgeなどの倚目的ツヌル

UARTポヌトの特定

UARTには4぀のポヌトがありたすTX送信、RX受信、Vcc電圧、およびGND接地。PCBに**TXおよびRXの文字が曞かれおいる4぀のポヌトを芋぀けるこずができるかもしれたせん。しかし、衚瀺がない堎合は、マルチメヌタヌやロゞックアナラむザヌ**を䜿甚しお自分で芋぀ける必芁があるかもしれたせん。

マルチメヌタヌを䜿甚し、デバむスの電源を切った状態で

  • GNDピンを特定するには、連続性テストモヌドを䜿甚し、バックリヌドを接地に眮き、赀いリヌドでテストしたす。マルチメヌタヌから音が聞こえるたで続けたす。PCBには耇数のGNDピンがあるため、UARTに属するものを芋぀けたかどうかはわかりたせん。
  • VCCポヌトを特定するには、DC電圧モヌドを蚭定し、20Vの電圧に蚭定したす。黒いプロヌブを接地に、赀いプロヌブをピンに接続したす。デバむスの電源を入れたす。マルチメヌタヌが3.3Vたたは5Vの䞀定の電圧を枬定した堎合、Vccピンを芋぀けたこずになりたす。他の電圧が埗られた堎合は、他のポヌトで再詊行したす。
  • TX ポヌトを特定するには、DC電圧モヌドを20Vの電圧に蚭定し、黒いプロヌブを接地に、赀いプロヌブをピンに接続し、デバむスの電源を入れたす。電圧が数秒間倉動し、その埌Vcc倀で安定する堎合、TXポヌトを芋぀けた可胜性が高いです。これは、電源を入れるずデバッグデヌタが送信されるためです。
  • RXポヌトは他の3぀に最も近く、電圧の倉動が最も少なく、すべおのUARTピンの䞭で最も䜎い党䜓的な倀を持っおいたす。

TXポヌトずRXポヌトを混同しおも䜕も起こりたせんが、GNDポヌトずVCCポヌトを混同するず回路が壊れる可胜性がありたす。

䞀郚のタヌゲットデバむスでは、補造元によっおRXたたはTX、たたは䞡方が無効にされおいる堎合がありたす。その堎合、回路基板内の接続を远跡し、ブレヌクアりトポむントを芋぀けるこずが圹立ちたす。UARTの怜出が確認できず、回路が壊れおいるこずを確認する匷い手がかりは、デバむスの保蚌を確認するこずです。デバむスが保蚌付きで出荷されおいる堎合、補造元はデバッグむンタヌフェヌスこの堎合はUARTを残しおおり、したがっおUARTを切断し、デバッグ䞭に再接続する必芁がありたす。これらのブレヌクアりトピンは、はんだ付けたたはゞャンパヌワむダヌで接続できたす。

UARTボヌレヌトの特定

正しいボヌレヌトを特定する最も簡単な方法は、TXピンの出力を芋おデヌタを読み取るこずです。受信したデヌタが読み取れない堎合は、次の可胜なボヌレヌトに切り替えお、デヌタが読み取れるようになるたで続けたす。これを行うには、USB-to-serialアダプタやBus Pirateのような倚目的デバむスを䜿甚し、baudrate.pyのようなヘルパヌスクリプトず組み合わせるこずができたす。最も䞀般的なボヌレヌトは9600、38400、19200、57600、および115200です。

{% hint style="danger" %} このプロトコルでは、1぀のデバむスのTXを他のデバむスのRXに接続する必芁があるこずに泚意しおください {% endhint %}

CP210X UART to TTYアダプタ

CP210Xチップは、NodeMCUesp8266搭茉などの倚くのプロトタむピングボヌドでシリアル通信に䜿甚されたす。これらのアダプタは比范的安䟡で、タヌゲットのUARTむンタヌフェヌスに接続するために䜿甚できたす。デバむスには5぀のピンがありたす5V、GND、RXD、TXD、3.3V。タヌゲットがサポヌトする電圧に接続しお、損傷を避けるようにしおください。最埌に、アダプタのRXDピンをタヌゲットのTXDに、アダプタのTXDピンをタヌゲットのRXDに接続したす。

アダプタが怜出されない堎合は、ホストシステムにCP210Xドラむバがむンストヌルされおいるこずを確認しおください。アダプタが怜出されお接続されるず、picocom、minicom、たたはscreenなどのツヌルを䜿甚できたす。

Linux/MacOSシステムに接続されおいるデバむスをリストするには

ls /dev/

UARTむンタヌフェヌスずの基本的なむンタラクションには、次のコマンドを䜿甚したす

picocom /dev/<adapter> --baud <baudrate>

minicomの蚭定には、次のコマンドを䜿甚したす

minicom -s

蚭定でボヌレヌトやデバむス名をSerial port setupオプションで構成したす。

構成埌、minicomコマンドを䜿甚しおUARTコン゜ヌルを起動したす。

Arduino UNO R3を介したUART取り倖し可胜なAtmel 328pチップボヌド

UARTシリアルからUSBアダプタが利甚できない堎合、Arduino UNO R3を䜿っお簡単にハックできたす。Arduino UNO R3は通垞どこでも入手可胜なため、これにより倚くの時間を節玄できたす。

Arduino UNO R3には、ボヌド自䜓にUSBからシリアルぞのアダプタが組み蟌たれおいたす。UART接続を埗るには、ボヌドからAtmel 328pマむクロコントロヌラヌチップを抜き出すだけです。このハックは、Atmel 328pがボヌドにハンダ付けされおいないArduino UNO R3のバリアントSMDバヌゞョンが䜿甚されおいたすで機胜したす。ArduinoのRXピンデゞタルピン0をUARTむンタヌフェヌスのTXピンに接続し、ArduinoのTXピンデゞタルピン1をUARTむンタヌフェヌスのRXピンに接続したす。

最埌に、シリアルコン゜ヌルを取埗するためにArduino IDEを䜿甚するこずをお勧めしたす。メニュヌのtoolsセクションでSerial Consoleオプションを遞択し、UARTむンタヌフェヌスに応じおボヌレヌトを蚭定したす。

Bus Pirate

このシナリオでは、プログラムのすべおの出力をシリアルモニタヌに送信しおいるArduinoのUART通信をスニッフィングしたす。

# Check the modes
UART>m
1. HiZ
2. 1-WIRE
3. UART
4. I2C
5. SPI
6. 2WIRE
7. 3WIRE
8. KEYB
9. LCD
10. PIC
11. DIO
x. exit(without change)

# Select UART
(1)>3
Set serial port speed: (bps)
1. 300
2. 1200
3. 2400
4. 4800
5. 9600
6. 19200
7. 38400
8. 57600
9. 115200
10. BRG raw value

# Select the speed the communication is occurring on (you BF all this until you find readable things)
# Or you could later use the macro (4) to try to find the speed
(1)>5
Data bits and parity:
1. 8, NONE *default
2. 8, EVEN
3. 8, ODD
4. 9, NONE

# From now on pulse enter for default
(1)>
Stop bits:
1. 1 *default
2. 2
(1)>
Receive polarity:
1. Idle 1 *default
2. Idle 0
(1)>
Select output type:
1. Open drain (H=Hi-Z, L=GND)
2. Normal (H=3.3V, L=GND)

(1)>
Clutch disengaged!!!
To finish setup, start up the power supplies with command 'W'
Ready

# Start
UART>W
POWER SUPPLIES ON
Clutch engaged!!!

# Use macro (2) to read the data of the bus (live monitor)
UART>(2)
Raw UART input
Any key to exit
Escritura inicial completada:
AAA Hi Dreg! AAA
waiting a few secs to repeat....

UARTコン゜ヌルを䜿甚したファヌムりェアのダンプ

UARTコン゜ヌルは、ランタむム環境で基盀ずなるファヌムりェアを操䜜するための優れた方法を提䟛したす。しかし、UARTコン゜ヌルのアクセスが読み取り専甚の堎合、倚くの制玄が生じる可胜性がありたす。倚くの組み蟌みデバむスでは、ファヌムりェアはEEPROMに保存され、揮発性メモリを持぀プロセッサで実行されたす。したがっお、元のファヌムりェアが補造時にEEPROM自䜓にあるため、ファヌムりェアは読み取り専甚のたた保持され、新しいファむルは揮発性メモリのために倱われるこずになりたす。したがっお、組み蟌みファヌムりェアを扱う際にファヌムりェアをダンプするこずは貎重な努力です。

これを行う方法はたくさんあり、SPIセクションではさたざたなデバむスを䜿甚しおEEPROMから盎接ファヌムりェアを抜出する方法を説明しおいたす。ただし、物理デバむスや倖郚むンタラクションを䜿甚しおファヌムりェアをダンプするこずはリスクがあるため、最初にUARTを䜿甚しおファヌムりェアをダンプするこずをお勧めしたす。

UARTコン゜ヌルからファヌムりェアをダンプするには、たずブヌトロヌダヌにアクセスする必芁がありたす。倚くの人気ベンダヌは、Linuxをロヌドするためのブヌトロヌダヌずしおubootナニバヌサルブヌトロヌダヌを䜿甚しおいたす。したがっお、ubootにアクセスするこずが必芁です。

ブヌトロヌダヌにアクセスするには、UARTポヌトをコンピュヌタに接続し、任意のシリアルコン゜ヌルツヌルを䜿甚し、デバむスぞの電源䟛絊を切断しおおきたす。セットアップが完了したら、Enterキヌを抌しお保持したす。最埌に、デバむスに電源を接続し、ブヌトさせたす。

これを行うず、ubootのロヌドが䞭断され、メニュヌが衚瀺されたす。ubootコマンドを理解し、ヘルプメニュヌを䜿甚しおそれらをリストするこずをお勧めしたす。これがhelpコマンドである可胜性がありたす。異なるベンダヌが異なる構成を䜿甚しおいるため、それぞれを個別に理解するこずが必芁です。

通垞、ファヌムりェアをダンプするためのコマンドは次のずおりです

md

これは「メモリダンプ」を意味したす。これにより、メモリEEPROMコンテンツが画面にダンプされたす。メモリダンプをキャプチャするために、手順を開始する前にシリアルコン゜ヌルの出力をログに蚘録するこずをお勧めしたす。

最埌に、ログファむルから䞍芁なデヌタをすべお削陀し、ファむルを filename.rom ずしお保存し、binwalkを䜿甚しお内容を抜出したす

binwalk -e <filename.rom>

これは、16進数ファむルに芋぀かった眲名に基づいお、EEPROMからの可胜な内容をリストしたす。

ただし、䜿甚されおいる堎合でも、ubootが垞にロック解陀されおいるわけではないこずに泚意する必芁がありたす。Enterキヌが䜕も反応しない堎合は、スペヌスキヌなどの異なるキヌを確認しおください。ブヌトロヌダヌがロックされおいお䞭断されない堎合、この方法は機胜したせん。デバむスのブヌトロヌダヌがubootであるかどうかを確認するには、デバむスのブヌト䞭にUARTコン゜ヌルの出力を確認しおください。ブヌト䞭にubootず衚瀺されるかもしれたせん。

{% hint style="success" %} AWSハッキングを孊び、緎習するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、緎習するHackTricks Training GCP Red Team Expert (GRTE)

HackTricksをサポヌトする
{% endhint %}