펌웨어를 추출해야 화이트박스 테스팅이 가능
bootloader : 시스템 취약점 확인 부팅과정중 취약한 함수를 사용하는지? 같은것들
filesystem : 지원 명령어를 확인하거나 관리자페이지 화이트박스 테스트가 가능함
펌웨어 추출
- 제조사에서 제공하는 펌웨어 다운로드
- 자동/수동 업데이트가 될때 패킷 스니핑
- UART 포트를 통해 쉘 접근 후 dd 명령으로 덤프
- JTAG 포트로 접속
- 논리적 취약점을 이용하여 shell 접근 권한 획득 후 추출
- Flash Memory 덤프
- ISP, ICSP(프로그래밍 인터페이스)를 이용하여 추출
업데이트 시 패킷 스니핑
패킷 스니핑 방법
when?
기기를 재부팅할때 최신버전 체크
매월1일 등 특정 기간이 지났을때
파워키+리셋키와 같이 특수한 방법으로 기기를 켤때
how?
포트미러링, TWIN IP, ARP Spoofing
UART 포트를 통해 쉘 접근 후 dd와 같은 덤프명령어 사용
TX : 데이터 송신 핀
RX : 데이터 수신 핀
GND : 그라운드 or 어스 or 접지
- 연결된 두 기기의 전위차를 없애주는 역할을 한다.
VCC : 전압 (전원을 넣을 수 있음)
uart to usb 케이블
Red Wire == VCC (+5V)
Black Wire == GND
Green Wire == TXD
White Wire == RXD
UART 포트 찾는법
UART 포트는 다양한 모양이 있을 수 있다. ex) 오디오잭, 9핀시리얼포트, USB안에 포함
USB포트는 기본적으로 저항값에 따라 연결된 기기를 구별하기 때문에 저항을 맞춰주고 RX, TX, GND를 제작하여 USB로 연결하면 UART 포트를 사용할 수 있다.
- PCB기판에 적혀있는지 확인. UART나 RS232, RSxxx 으로 적혀있거나 TX, RX 적혀있음
- 4핀만 따로 나와있으면 UART일 가능성이 높다. (핀이 아닌 패드로 존재할 수 있음)
- 데이터시트 확인 후 선 따라가기
- 멀티미터로 통전 테스트 확인 (확실한 +, - 를 찾아야함 == 전원, LED소자 등)
정확한 핀 역할 찾기
- VCC는 전원을 공급해줘야 하기 때문에 다른 포트보다 기판에 연결된 케이블이 두껍다.
- 기판 뒷면에서 주변이 차단되어있거나 모양이 다른 포트는 VCC 이고, 동그란것중 점선은 GND이다.
- 멀티미터 ???
라즈베리파이는 4번핀이 VCC, 6번핀이 그라운드, 8번핀이 TX, 10번핀이 RX이다.
UART로 접근하는 방법 (라즈베리파이 3b+)
라즈베리파이 3버전부터 uart로 블루투스
Raspbian 이미지의 경우 mmcblk0p1은 첫 번째 파티션 (부팅 파일이있는 FAT 파티션)
이고 mmcblk0p2는 루트 파일 시스템이있는 ext4 파티션입니다
~$ sudo dd bs=4096 if=/dev/mmcblk0p2 of=rasbian.img
bs : 한번에 읽고 쓸 최대 바이트 크기 지정
if : 덤프할 파일
of : 저장할 위치
자주사용되는 baud-rate
9600(빈도높음), 19200, 38400, 57600, 115200(빈도높음)
쉘 획득 방법
- 매직키를 이용해 쉘획득 (리버싱을 통해 매직키 확인)
http://hasu0707.nflint.com/blog/?p=877
iptime 부팅 시 xdiag 키보드입력하고 4번 ATE Mode를 선택한 뒤 재부팅하면 <RealTek> 쉘이 떨어진다.
help 로 명령어를 확인할 수 있고, d, dd, dw 명령어로 위치와 길이를 지정하면 해당 메모리를 읽어올 수 있는데, 부트로더부터 읽어온 뒤 파이썬으로 파싱해서 HEX to BIN을 통해 bin파일로 변환하고 FMK나 binwalk로 분석하면 된다.
https://openwrt.org/docs/techref/bootloader/realtek
* 0x80000000 주소부터 읽을 수 있다.
연습할 수 있는 펌웨어
IoTGoat
DVRF(Damn Vulnerable Router Firmware)
명령어
binwalk
# binwalk xxx.bin : 파일 시그니쳐 확인
# binwalk -e xxx.bin : 펌웨어를 알려진 형식으로 자동 추출 (./_xxx.bin.extracted/)
# binwalk -A xxx.bin : 실행 가능한 opcode 패턴검색 (파일 아키텍쳐 확인가능)
# binwalk -z xxx.bin : 파일 카빙 확인
# binwalk -E xxx.bin : 파일 엔트로피 계산
fmk
# extract-firmware.sh xxx.bin : fmk 디렉터리에 펌웨어 추출. ./fmk/rootfs/ 디렉터리 안에 파일시스템 존재
# build-firmware.sh ./fmk/ : 펌웨어 리패키징
펌웨어 writing
https://dokkodai.tistory.com/163
'임베디드' 카테고리의 다른 글
전기 기초 (0) | 2020.03.12 |
---|---|
공부 시 참고할만한 사이트 및 대상 (0) | 2019.09.03 |