
UART에서 루트까지: U-Boot를 통해 샤오미 C200 침투하기
이 저장소에서 저는 일반적인 노출 핀/테스트 패드 세트 없이도 UART 인터페이스에 접근한 방법을 보여드리겠습니다.
U-Boot와 여러 트릭을 사용하여 초기 단계에서 루트 권한을 얻고,
최종적으로 펌웨어를 덤프하는 방법입니다.
PCB에서 몇 가지 핵심 사항이 분명하게 보입니다.
먼저 UART에 바로 접근할 수 있을 만한 명백한 후보들을 확인했습니다.
Tx, Rx, GND, 전원으로 보이는 테스트 패드 4개가 일렬로 있었지만,
멀티미터로 테스트해 보니 사진에서 보이는 것처럼 잘못된 측정값이 나왔습니다.
나머지 테스트 패드들도 대부분 시도해 보았지만 올바른 측정값을 찾을 수 없어서
전략을 바꿔야 했습니다.
보드에는 더 이상 커넥터가 없고 도움이 될 테스트 패드도 없기 때문에,
프로세서 핀에 직접 연결하여 UART 셸을 얻는 방식으로 가기로 했습니다.
그 프로세서의 데이터시트를 확인하여 UART 프로토콜 핀을 식별했습니다.

이제 보드에서 접지(GND)만 찾으면 다음과 같이 연결하면 됩니다.
이 설정에는 PCBite 프로브와 USB 2 TTL 어댑터를 사용했습니다.

이제 picocom을 사용하여 원하는 UART 셸을 얻을 수 있습니다.
sudo picocom -b 115200 /dev/ttyUSB0
아무 것도 하지 않으면 부팅 로그만 표시되고 부팅 프로세스가 끝난 후에는 셸이 나오지 않았습니다.
그래서 즉시 Enter 키를 눌러 U-Boot를 중단해야 했습니다.
U-Boot 셸에 진입한 후 먼저 환경 변수(environment args)를 출력했습니다.
우리에게 중요한 항목은 다음과 같습니다.
빠르게 루트 접근 권한을 얻기 위해 setenv로 init 명령을 변경하는 트릭을 사용할 수 있습니다.
그러면 linuxrc 바이너리를 실행하는 대신 셸을 얻을 수 있고, 그런 다음 직접 메모리를 로드하여
장치를 부팅할 수 있습니다(사실상 bootcmd 명령을 복사하는 것).
이제 부팅이 완료되면 시스템에서 아무것도 실행되지 않는 초기 셸로 떨어지게 됩니다.
그래서 원래 linuxrc 바이너리를 백그라운드로 실행하고 이 시스템에서 열려 있는 포트가 있는지 확인했습니다.
운이 없었습니다! 카메라는 " 47.237.75.249 "의 클라우드와만 통신하며, 만져볼 수 있는 노출된 웹 인터페이스가 없습니다.
클라우드 통신 바이너리 리버싱은 제 연구 범위를 벗어나기 때문에,
여기서 연구를 마치기로 결정했습니다 :)
펌웨어를 가지고 놀고 싶은 사람들을 위한 약간의 추가 팁입니다.
기존과 동일하게 UART로 설정하되, 이번에는 부팅 없이 플래시에서 RAM으로
메모리를 프로빙하고 로드하기만 하면 됩니다.
그런 다음 RAM 메모리에서 데이터를 출력하고 터미널 출력을 기록합니다
(이번에는 minicom 사용). 이를 파일로 저장한 후 python으로 약간 정리하면
펌웨어를 얻을 수 있습니다. 각 섹션의 이름을 지정할 때 binwalk와 bootargs 정보가 도움이 됩니다.
