UART 해킹, 래빗(rabbit) 사용해서 쉘 획득하기
- 임베디드
- 2020. 3. 3. 18:46
QEMU에 펌웨어를 올릴 수 있다면 좋겠지만, 그럴 수 없다면 UART해킹을 통해 쉘획득을 하는 방법을 사용할 수 있다. 래빗을 사용해서 PC 상에서 UART 기기 쉘획득을 하려면, IPcam -> 래빗(rabbit) -> PC 순서대로 연결을 해주어야 한다.
필요한 장비는 아래와 같다.
- UART 기기 (ex. 포스팅에서는 IPCam을 사용)
- 래빗 (rabbit) : PC와 UART 기기를 연결하기 위함
- 점퍼케이블 : 래빗과 UART 기기를 연결하기 위함
- 기타... (드라이버..?)
UART 기기의 UART 핀 위치 확인
먼저 기기를 뜯어서 UART 핀 위치를 확인해준다.
보통 4핀 배열이면 UART 핀이라고 의심할 수 있는데 4핀 배열이 여러개 있는 장비도 있는 듯 하다. 나는 직접 IoT 장비를 뜯어본건 이번이 처음인데 다행히도 4핀 배열이 하나밖에 없어서 UART Pin 위치 확인은 쉽게 됐다. UART Pin 위치 확인이 힘들다면 임베디드 디바이스 Serial Port Hacking의 모든 것! 이 PPT 자료를 확인하면 도움이 많이 될 것이다.
LED를 이용한 UART 핀 종류 (GND,VCC,TX,RX) 확인
UART는 총 4개의 핀을 사용하는데 GND, VCC, TX, RX로 구분하는데 GND는 그라운드, VCC는 전압, TX는 데이터 송신 핀, RX는 데이터 수신핀이다. 그런데 여기서 나도 많이 헷갈렸던 부분인데 구글링을 해보니, TX와 RX는 PC 입장에서와 UART 기기 입장에서의 그 의미가 다르다. PC 입장에서의 TX는 데이터 송신이고 기기 입장에서는 데이터 송신이다. (RX는 반대) 그래서 나중에 핀 연결할 때 보면 TX는 RX에 연결해주고 RX는 TX에 연결해주게 된다.
Pin 종류가 4핀 배열에 같이 써져있는 경우도 있지만 위 사진처럼 구분을 해줘야 하는 경우도 있다. 연구실 친구가 LED를 이용해서 UART 핀 종류 (GND, VCC, TX, RX) 구분하는 방법을 알려주어서 그 방법대로 진행했다. LED의 긴 부분을 GND로 생각하고 점퍼 케이블에 꽂아준다.
경우의 수가 여러가지가 있지만, GND(회색 케이블)를 특정 핀에 꼽고 나머지 케이블을 하나씩 옮겨가며 꼽았을 때 2번은 LED 불이 들어오고 1번은 불이 안들어오는 경우가 있다. 이때의 회색 케이블을 꼽은 핀이 GND 핀이고 불이 들어오지 않은 핀을 RX라고 생각하면 된다.
그리고 나머지 TXD와 VCC는 어차피 경우의 수가 2가지라서 GND와 RX만 맞게 연결해준 후 때려맞춰?주었는데 정확히 구분하는 방법은 위에 링크했던대로 임베디드 디바이스 Serial Port Hacking의 모든 것! 이 PPT 자료에 자세히 설명되어있다.
래빗(rabbit) - UART 기기 연결
이제 핀 식별도 어느정도 끝났으니 래빗(rabbit)과 UART 기기를 연결할 차례이다. GND <-> GND, VCC <->VCC, RX <-> TX, TX <-> RX 를 연결해주어야 한다. 아래 래빗을 보면, 앞면은 연결 부분이 6개이고 뒷부분은 4개인데 어떤것으로 해줘야되는지 몰라서 둘다 해봤는데 (UART 기기마다 다른듯) 내가 사용한 IPCam은 뒷면의 4개짜리에 연결해주어야 정상적으로 연결이 되는 것을 확인했다.
래빗과 기기의 UART 핀을 전부 연결했다면, 마지막으로 래빗을 PC에 꽃아주기만 하면 된다.
드라이버 설치 및 XShell 설정
장치 관리자에 들어가면 아래와 같이 UART USB를 찾아서 COM 몇인지도 확인해주고 클릭해 들어가서 관련 드라이버를 설치해주거나 업데이트 해준다.
그리고 터미널 소프트웨어에서 설정을 해줘야 하는데 여기서는 XShell을 사용했다. 등록정보>연결에 프로토콜을 SERIAL로 설정해준다.
그리고 연결>SSH>SERIAL에 시리얼 포트 연결 설정을 해주는데 Port는 아까 장치 관리자에서 확인한대로 설정해주고 Baud Rate은 직접 본인이 사용한 장비가 몇인지 찾아줘야 한다. Data Bits, Stop Bits는 잘 모르겠어서 default에서 변경하지 않았다.
UART 연결 및 쉘획득
어떤 메시지라도 떠야 되는데 아무것도 뜨지 않고 세션이 아예 끊겨버리거나 하면 UART 핀 연결이 잘못된 것일지도 모르니 다시 확인해봐야 한다. 그리고 제대로 연결이 된 후에도 네트워크 연결이 안됐다는 메시지만 계속 떠서 삽질을 좀 했는데 기기 재부팅을 해주고 인터럽트를 계속 주니까 아래와 같이 login이 떴고 default로 로그인할 수 있었다. (여기서 root 권한을 얻는 것은 또다른 문제이지만 해당 포스팅은 쉘획득이 목표이므로 여기서 마무리하도록 한다!)
'임베디드' 카테고리의 다른 글
binwalk -e 에러, 'sasquatch -p 1 -le -d '%%squashfs-root%%' (0) | 2020.03.01 |
---|---|
QEMU, 펌웨어를 이용한 가상 공유기 환경 구축 (MIPS) (4) | 2020.02.24 |
바이너리 디핑 플러그인, bindiff를 사용한 펌웨어 패치 분석 (0) | 2020.02.21 |
펌웨어 분석을 위한 binwalk, fmk 사용법 (0) | 2020.02.18 |