UART로 펌웨어 접근해보기 (tistory.com)

 

UART로 펌웨어 접근해보기

장비들의 펌웨어를 얻는 방법은 여러가지가 있다. 1. 제조사가 제공하는 펌웨어 받기 제조사에서는 펌웨어의 주기적인 패치를 내놓고 그것을 자신들의 홈페이지에서 제공하는 경우가 왕왕 있다

laoching.tistory.com

 

장비들의 펌웨어를 얻는 방법은 여러가지가 있다.

1. 제조사가 제공하는 펌웨어 받기

제조사에서는 펌웨어의 주기적인 패치를 내놓고 그것을 자신들의 홈페이지에서 제공하는 경우가 왕왕 있다.

보안적인 측면에서 권장 사항은 자체적으로 업데이트를 하는 것인데, 그 이유로는 낮은 버전의 펌웨어를 사용자 임의로 올려버릴 수 있기 때문이다.

2. 자동/수동 업데이트 시 network packet sniffing

요즘 나오는 기기들을 보면 거의 다 자체 앱이 있고 거기서 업데이트를 지원한다. 업데이트를 눌러놓고 패킷을 스니핑해보자. 사실 이 방법은 요즘에 나온 기기들이라면 거의 다 불가능하다.

제조사마다 업데이트 서버와 통신을 할텐데 암호화 통신을 한다면 우리는 중간에 패킷을 가로채도 펌웨어 파일을 찾을 수 없기 때문

network pacekt capture는 wireshark나 network miner 같은 툴이 있는데, 이 프로그램들에서 파일을 뽑는 방법은 각각 다르다.

wireshark는 File - Export Objects 메뉴에서 가능하고 network miner는 그냥 pack capture만 해도 파일을 뽑을 수 있다.

network miner가 이 부분에서 간편하다고 생각한다.

3. UART나 JTAG 같은 디버깅 포트를 이용한 shell 접근

이 방법을 이용하기 위해서는 장비의 회로 기판을 뜯어봐야 한다. 운이 좋으면 돌출되있고 RX, TX라고 적혀있는 핀을 바로 찾을 수 있을텐데 그게 바로 UART pin이다.

권장 보안 정책은 회로 기판을 구성하고 있는 녀석들의 식별이 불가능하도록 마스킹을 지우고, 돌출되어 있는 핀들을 없애야 한다. 

또 이 핀과 통신하기 위해서는 'USB to TTL'이라는 장비가 필요하다. 장비라고 해서 그렇지 그냥 케이블이다.

 

실제 장비에서 UART PINUSB to TTL

위에 회로들을 보면 돌출되어 있는 경우도 있고 2번째 사진처럼 돌출된 부분이 없는 경우가 있다. 그 경우에는 'USB to TTL'의 피복을 벗겨서 접촉시키던지 해야한다.

그리고 각 핀마다 전원, 접지, RX, TX 역할을 하기 때문에 회로에서 각각의 핀 식별과 'USB to TTL'에서도 식별을 해야한다.

RX, TX는 아래와 같이 연결해줘야 한다.

A와 B가 연결한다면 A의 TX는 B의 RX에, A의 RX는 B의 TX에 연결해주자.

Receive, Transmit의 약자입니다... 받고..보내는...그런..

UART로 컴퓨터와 통신해보자

만약 RX, TX도 제대로 붙이고 컴퓨터에 연결했다면 putty나 Xshell 같은 프로그램으로 serial 통신을 해봅시다.

serial 통신을 할 경우에는 baudrate라는 것을 맞춰줘야 합니다. baudrate는 초당 보내는 데이터의 수를 의미하고 UART에서는 high/low를 구분할 수 있는 clock 역할을 합니다.

만약 장비의 baudrate와 맞지 않게 설정을 하면 아래와 같이 나옵니다. 알아볼 수 없는 녀석들이 나옵니다.

baudrate를 찍어서 맞췄다면 아래처럼 알아볼 수 있는 글자들이 나옵니다.

운이 좋으면 바로 shell을 얻고 펌웨어 분석이 가능하지만, 제가 분석한 장비는 바로 shell을 얻을 수 없었습니다.

여러분들은 출시된지 오래된 장비를 뜯어보세요..

 

4. MCU의 TX, RX에 직접 접근해보기

만약 회로 기판에 UART, JTAG가 없다면 어떡하냐... 바로 MCU에 직접 접근해야 합니다. 회로를 보면 MCU(micro control unit)가 보일겁니다. 검정색 등딱지에 다리를 엄청 많이 가진 녀석입니다. 

이 녀석이 머리입니다. 모든 기능을 담당하는데요, 아래는 제가 분석한 장비에 있던 MCU의 data sheet입니다.

MCU를 보면 품명이 적혀있을겁니다. 그것의 data sheet를 얻어내면 각 핀의 역할을 알 수 있고 직접 접근이 가능합니다.

너무 오래된 녀석이면 data sheet 구하기가 쉽지는 않습니다. 근데 오래된 장비면 UART 식별이 쉽게 가능해서 이 단계까지 오지 않을 겁니다.

5. Flash memory desoldering 후 dump

최후의 보루입니다. 회로에서 Flash memory를 납땜을 녹여서 제거해내고 data sheet를 참고해서 아두이노나 라즈베리파이에 연결해서 덤프를 뜨는 겁니다. 

Flash memory 안에 있는 모든 것들을 볼 수 있기 때문에 확실한 방법이긴 한데요, 다시 재조립해서 무사히 동작한다는 보장이 없습니다. 인두기, 땜납 등 특수한 장비가 필요하기도 합니다.

블로그 이미지

wtdsoul

,