UART 해킹기초 mongii@grayhash
UART 란? Universal asynchronous receiver/transmitter 범용비동기송 / 수신기 직렬 (Serial) 통신프로토콜 데이터송신 / 수신시각각하나의 LINE 만이용 하드웨어통신규약의한종류 프로토콜이매우간단함
UART 의장점들 프로토콜이단순하다. 관련프로그램구하기가쉽다. Putty, Xshell, 하이퍼터미널, 관련장비를구하기가쉽다. USB-to-Serial, USB-to-UART
해커가 UART 를통해얻을수있는것들 커널, OS 메시지 취약점공략에필요한각종정보획득 디버그메시지 Ex> printf( initializing network adaptor ok\n ); 오류메시지 Ex> Segmentation fault, command not found
해커가 UART 를통해얻을수있는것들 Hidden or Setting Menu 부트로더 (Bootloader) 펌웨어획득 새로운펌웨어 Writing 커맨드쉘 (Command Shell) 펌웨어, 바이너리획득 동적분석가능
UART 해킹을위한필요장비 USB to Serial Rabbit http://bit.ly/29wtgof 점퍼케이블 http://bit.ly/29exctc
UART 해킹을위한필요장비 멀티테스터 DM-300A http://bit.ly/29vyfxz Logic Analyzer https://www.saleae.com/ http://bit.ly/29ywzzw
UART Pin 의구성 총 4 개의핀사용 TX : 데이터송신핀 RX : 데이터수신핀 GND : 그라운드 VCC : 전압 TX 와 RX 는항상자신의입장에서봐야한다. PC 의 TX : PC 에서데이터송신 공유기의 TX : 공유기에서데이터송신
UART 연결절차요약 관련 USB 드라이버설치 CP2102, PL2303, FTDI 등 점퍼케이블연결 터미널소프트웨어설치 Putty Xshell screen 연결정보설정및연결수행
접속설정 COM 포트번호 Baudrate Data Bits Stop Bits Parity
UART 연결 USB-UART 연결및터미널프로그램실행
실습 IPTIME UART 연결 1. IPTIME 에서 UART 핀을찾아보세요. 2. UART 연결을시도해보세요. 주의 : UART 장비의 VCC 핀은사용하지않습니다.
UART 핀찾기
1. PCB 의식자로확인
1. PCB 의식자로확인
1. PCB 의식자로확인
2. 4 핀배열로확인 * 핀이아닌 PAD 로존재할수도있다.
3. Datasheet 를보고핀따라가기
3. Datasheet 를보고핀따라가기
3. Datasheet 를보고핀따라가기 멀티테스터활용
RX/TX/VCC/GND 핀찾기
1. 멀티테스터로찾기 5v( 혹은 3.3v) 가잡힐때의 (-) 리드선 = GND (+) 리드선 = VCC or TX 나머지하나 : RX
2. LED 를이용한방법 LED에불이들어올때 LED의 (-) 극 : GND 지속적으로불이들어오는핀 : VCC 전원 ON 시깜빡이는핀 : TX 나머지하나 : RX
3. PCB 의특성을이용한방법 PCB 의배경 ( 초록바탕 ) 부분의특성 일반적으로윗면혹은아랫면은모두 GND( ) 사용빈도가높은 - 를용이하게제공하기위함 회로의노이즈를줄이기위함 즉, PCB 윗면혹은아랫면으로연결된핀은 GND RX 와 TX 는라인으로 MCU 에연결되어있음 VCC 는 PCB 의다른층으로연결이되어있음
3. PCB 의특성을이용한방법
4. 멀티테스터통전테스트로찾기 멀티테스터를통전테스트모드로설정 PCB 내의확실한 (+) 혹은 (-) 에연결 소리가나는지확인 Datasheet 가있는 IC 의 (+) 혹은 (-) 에연결 소리가나는지확인
4. 멀티테스터통전테스트로찾기
Baudrate 찾기
Baudrate( 보레이트 ) Clock 을사용하지않기때문에 HIGH/LOW 를구분할수있는기준필요 Baudtate = 1 초에몇개의 HIGH/LOW 신호를보낼것이냐를정의 높을수록데이터전송속도가빨라짐
Baudrate 찾기 자주사용되는값 Brute Force 115200 ( 가장많음 ) 57600 38400 19200 9600 신호분석기를이용한방법 ( 차후진행 )
깨진글자가나오는경우 Baudrate 가안맞을경우 올바른값으로맞춰준다 GND 가안맞을경우 GND 핀을제대로연결해준다
VCC 를연결하는이유 어댑터없이간편하게전원공급 방향 : UART 장치 대상기기 전원이들어와있는상태라면 VCC 는불필요 즉, VCC 는그냥서비스!
과거의 UART 오래된 desktop PC 에서나볼수있는..
대표적인 UART 장비들 시리얼모뎀 시리얼마우스
UART<->PC 연결을위한장비 시리얼포트, 케이블 OS 상에 COM(n) 으로잡힘 하지만요즘 PC, 노트북엔시리얼포트가없음 12000 원
UART<->USB 변환칩 주요제품 FT232 (FTDI) PL2303 CP2102 USB to Serial 장비안에존재 각각에맞는드라이버사용필요
전기신호분석하기 (UART 프로토콜분석 )
Logic Analyzer 소개 전기신호를캡쳐하여 0 과 1 로보여주는장비
UART 신호분석실습
아두이노 UART 프로그래밍 void setup() { Serial.begin(9600); } void loop() { Serial.print("A"); delay(1000); }
UART 의 TX 핀스니핑
Logic Analyzer 연결 GND = GND CH0 = TX
Saleae Logic Analyzer 설치 https://www.saleae.com/
Logic Analyzer 실행 Connected 확인
신호분석시작 Speed, duration 설정후 Start 버튼클릭
신호분석시작
UART 의 TX 핀스니핑결과 1 초간격의신호반응을볼수있음 보이지않으면마우스휠 ( 혹은키보드 +/-) 로조정
마우스휠을이용하여확대
신호를비트단위로구분
시작비트와종료비트
데이터비트분석 0b01000001 = 0x41 = A
설정변경이필요한경우
TX 핀의기본상태는 HIGH 다. TX 핀과 GND 에 LED 를연결했을때빛이나는이유
신호분석을통해 baudrate 알아내기 9600 : 100us 14400 : 69us 38400 : 26us 57600 : 17us 115200 : 8.6us
스마트폰 UART 해킹실습
스마트폰 JIG JIG 란? 다른무언가를연결하기위한틀
스마트폰 JIG 제한된 usb 핀들로여러가지기능을구현 충전 Usb OTG(On-the-go) Audio Dock Download mode 그리고 UART USB 핀의저항값을체크하여구분
JIG 의활용성 루팅카운트초기화 루팅카운트가 0 이아닐경우 A/S 에지장 UART 모드부팅 강제다운로드모드부팅 Audio Dock 모드 Enable
갤럭시 S 의 JIG 기능 마이크로 USB 포트의저항값을변경하여숨겨진기능사용가능 http://forum.xda-developers.com/showthread.php?t=820275
FSA9480 USB switch chip
FSA9480
JIG Cable 만들기
Micro USB 핀연결방법 http://commons.wikimedia.org/wiki/file :Micro-USB.jpg
Micro USB 핀연결방법
Micro USB 커넥터 http://devicemart.co.kr/goods/view.php?seq=29454
크기별저항 http://devicemart.co.kr/goods/view.php?seq=1963
619Kohm 만들기
JIG 회로연결
USB-UART 연결
Shell 확인
CPU 에바로 UART 연결하기
IPTIME CPU 에바로연결하기 시연영상 https://www.youtube.com/watch?v=obdgjryem04
UART on Audio jack
UART on Audio jack UART 포트가 Audio Jack 형태인경우가있음
Audio Jack UART 예제
동영상 https://www.youtube.com/watch?v=nhawn8xvvqe
Nexus UART on Audio jack welcome to mako bootloader [90] cable type from shared memory: 8 [130] reboot_mode restart reason = reboot [320] kernel @ 80208000 (5677280 bytes) [330] ramdisk @ 81800000 (357803 bytes) [330] get_display_kcal = 0, 0, 0, x [330] Booting Linux [340] Power on reason 65281 [340] Power on reason 65281 [340] booting linux @ 0x80208000, ramdisk @ 0x81800000 (357803) [350] cmdline: console=ttyhsl0,115200,n8 androidboot.hardware=mako lpj=67677 uart_console=enable lcd_maker_id=primary lge.hreset=off lge.reset=mode_reset gpt=enable lge.kcal=0 0 0 x lge.rev=rev_11 mdm_force_dump_enabled androidboot.emmc=true androidboot.serialn[ 0.000000] Booting Linux on physical CPU 0 [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 3.4.0-perf-g7ce11cd (android-build@vpbs1.mtv.corp.google.com) (gcc version 4.6.x-google 20120106 (prerelease) (GCC) ) #1 SMP PREEMPT Tue Jan 29 11:41:33 PST 2013 [ 0.000000] CPU: ARMv7 Processor [510f06f2] revision 2 (ARMv7), cr=10c5387d [ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache [ 0.000000] Machine: QCT APQ8064 MAKO [ 0.000000] Truncating memory at 0xc0000000 to fit in 32-bit physical address space [ 0.000000] memory pool 3 (start fe9ff000 size 1600000) initialized [ 0.000000] Initialized persistent memory from 88700000-887fffff [ 0.000000] Memory policy: ECC disabled, Data cache writealloc [ 0.000000] socinfo_init: v6, id=109, ver=1.1, raw_id=1817, raw_ver=1817, hw_plat=8, hw_plat_ver=65536 [ 0.000000] accessory_chip=0 hw_plat_subtype=1
월패드 UART 해킹영상 https://www.youtube.com/watch?v=usyakfpspks
UART 해킹방어책 Disable UART hardware port when product release Disable UART codes in the software Authenticate UART communication
결론 UART 는하드웨어해킹의시작! 기기로부터많은것들을얻어낼수있다! 운이좋으면 Shell 도획득할수있다!
감사합니다.