| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- openwrt
- Router
- Pwnable
- memory
- UART
- Slab free list poisoning
- 익스플로잇
- Cross-cache attack
- kernel exploit
- 공유기
- linux ring 권한 구조
- exit handler overwrite
- hardware hakcing
- e
- SMM
- tp link
- fini array
- Kernel
- 라우터
- protection ring
- 커널
- ROP
- physmap
- mips
- tl mr 100
- System Management Mode
- mr 100
- exploit
- Today
- Total
haehet
UART: A First Step into Router Hardware Analysis 본문
최근 라우터 분석을 진행하면서 단순히 펌웨어를 풀고 바이너리를 정적 분석하는 것만으로는 한계가 있다는 생각이 들었다. (특히 하드웨어 의존적인 기능이 존재하는 LTE 라우터 등..)
따라서 이번 글에서는 동적 분석을 하기 위해 UART가 무엇인지부터 라우터 기판에서 UART 핀을 찾는 방법, 멀티미터로 핀을 구분하는 과정, 핀헤더 납땜, USB-UART 어댑터 연결, 그리고 serial console을 통해 부팅 로그를 확인하는 전체 흐름을 정리해보겠다. (실습은 지인에게 받은 TP link Archer C50으로 진행한다.)
1. 직렬 통신과 병렬 통신
장치끼리 데이터를 주고받으려면 서로 같은 통신 방식을 사용해야 한다. 이때 데이터를 전송하는 방식은 크게 병렬 통신(Parallel)과 직렬 통신(Serial)으로 나눌 수 있다.
병렬 통신은 여러 개의 선을 사용해서 여러 비트를 동시에 전송하는 방식이다. 예를 들어 8비트 데이터를 한 번에 보내려면 8개의 데이터 라인이 필요하다. 한 번에 많은 데이터를 보낼 수 있으므로 빠르다는 장점이 있지만 그만큼 많은 핀이 필요하다.
반대로 직렬 통신은 데이터를 한 비트씩 순서대로 전송한다. 한 번에 하나의 비트만 보내기 때문에 병렬 통신보다 단순하고 필요한 선의 개수도 적다.

임베디드 장비에서는 핀 수와 회로 복잡도가 중요하기 때문에 적은 선으로 통신할 수 있는 직렬 통신이 자주 사용된다. UART도 이런 직렬 통신 방식 중 하나이다.
2. 동기식 통신과 비동기식 통신
직렬 통신은 다시 동기식과 비동기식으로 나눌 수 있다.
동기식 통신은 데이터 라인과 함께 클럭 라인을 사용한다. 통신하는 장치들이 같은 클럭을 기준으로 데이터를 주고받기 때문에 타이밍을 맞추기 쉽다. 대표적인 예로 SPI, I2C가 있다.

비동기식 통신은 별도의 클럭 라인을 사용하지 않는다. 대신 송신자와 수신자가 미리 정해둔 속도와 데이터 형식을 기준으로 통신한다.(Baud Rate) UART는 이 비동기식 직렬 통신 방식에 속한다.
3. UART란?

만약 UART 콘솔이 활성화되어 있다면 부트로더 로그, 커널 부팅 로그, init 과정, 서비스 실행 로그 등을 직접 확인할 수 있다. 경우에 따라서는 U-Boot 같은 bootloader에 접근하거나, login prompt를 확인하거나, root shell을 얻을 수도 있다.
4. UART 핀 구조
라우터 기판에서 UART 후보 핀을 찾으면 보통 3핀 또는 4핀 형태로 노출되어 있다. 일반적인 UART 연결에서 중요한 핀은 TX, RX, GND, VCC이다.

먼저 TX는 Transmit의 약자로 데이터를 내보내는 핀이다. 라우터의 TX 핀에서는 부팅 로그나 콘솔 출력이 나온다. 라우터 입장에서 TX는 자신이 외부로 데이터를 보내는 선이다. 따라서 PC에서 라우터의 출력을 확인하려면 라우터의 TX를 USB-UART 어댑터의 RX에 연결해야 한다.
반대로 RX는 Receive의 약자로 데이터를 받는 핀이다. 라우터의 RX 핀은 외부에서 들어오는 입력을 받는다. 우리가 터미널에서 키보드로 입력한 명령어는 USB-UART 어댑터의 TX를 통해 라우터의 RX로 전달된다. 따라서 라우터에 명령을 입력하려면 라우터의 RX와 어댑터의 TX를 연결해야 한다.
여기서 중요한 점은 TX와 RX는 같은 이름끼리 연결하는 것이 아니라 교차 연결해야 한다는 것이다. TX는 데이터를 보내는 핀이고 RX는 데이터를 받는 핀이므로 한쪽 장치의 TX는 다른 장치의 RX로 연결되어야 한다.


5. Multimeter로 UART 핀 구분하기
멀티미터란?
UART 핀을 구분하기 전에 먼저 멀티미터에 대해 알아보자. 멀티미터는 전압, 저항, 전류, 도통 여부 등을 측정할 수 있는 전자 측정 장비이다.

위와 같이 3개의 단자가 존재하는데 가장 기본적으로 사용하는 단자는 COM과 VΩmA이다.
COM은 common의 약자로 기준점 역할을 하는 단자이다. 검은색 프로브를 여기에 연결한다. 전압을 측정할 때는 이 COM을 기준으로 다른 지점의 전압을 측정하게 된다.
VΩmA 단자는 전압, 저항, 도통 측정에 사용하는 단자이다. 빨간색 프로브를 여기에 연결한다. UART 핀을 찾을 때는 대부분 이 단자를 사용하면 된다.
멀티미터의 도통 모드를 이용해 GND핀 식별하기

먼저 라우터의 전원을 끈 상태에서 멀티미터를 도통 모드로 설정한다. 그리고 검은색 프로브는 기판에서 GND일 가능성이 높은 부분에 댄다. 예를 들어 랜 포트의 금속 쉴드, USB 포트의 금속 부분, 전원 어댑터 잭의 바깥쪽 금속 부분 등은 보통 GND와 연결되어 있다.
그 다음 빨간색 프로브를 UART 후보 핀에 하나씩 대본다. 이때 특정 핀에서 멀티미터가 삐 소리를 내면, 그 핀은 기준으로 잡은 GND와 전기적으로 연결되어 있다는 뜻이다. 따라서 해당 핀을 GND 핀으로 판단할 수 있다.


GND핀을 찾은 이후에는 간단하다. 전압 측정을 통해 나머지 핀들을 식별하거나 혹은 위와 마찬가지로 MCU의 데이터 시트를 구한 후 TX, RX 핀과 연결된 부분을 확인하면 된다.
6. USB-UART 어댑터 연결하기
위에서 UART의 핀을 전부 식별했다면 이제 USB-UART 어댑터를 연결하면 된다. USB-UART의 선에 각각이 무슨 역할을 하는 지 안써있을 수 있는데 보편적으로 검은색이 GND, 하약색이 RX, 빨간색이 VCC, 초록색이 TX이다.

7. 마무리
이번 글에서는 UART에 대해서 알아보았다. 이번 글을 작성하면서 UART연결을 처음 해봤는데 납땜을 하다가 실수를 하여서 RX핀이 망가져 셸에 입력을 하는 것은 실패하였다.ㅏㅏㅏ 다음 글에서는 (만약 무선 라우터를 구할 수 있다면) 라우터 내부 분석 글을 쓰고 아니면 지금 UART를 연결한 Archer c50에 openwrt를 올리는 글을 작성해보겠다. (아니면 무선 통신에 대한 글을 올릴 수도 있따.)
https://learn.sparkfun.com/tutorials/serial-communication#wiring-and-hardware
'Embedded' 카테고리의 다른 글
| TP-Link TL-MR100 LTE router 분석 (0) | 2026.05.17 |
|---|
