Embedded 기기 리버싱 - 펌웨어 리버싱
# 펌웨어 획득
- 벤더 홈페이지 다운
- 플래시메모리 덤프
# 펌웨어 분석 툴
- binwalk
root@kali:~/Desktop# binwalk -h
Binwalk v1.2.2-1 Craig Heffner, http://www.devttys0.com Usage: binwalk [OPTIONS] [FILE1] [FILE2] [FILE3] ... Signature Analysis: -B, --binwalk Perform a file signature scan (default) -R, --raw-bytes=<string> Search for a custom signature -A, --opcodes Scan for executable code signatures -C, --cast Cast file contents as various data types -m, --magic=<file> Specify an alternate magic file to use ... |
1) 펌웨어 시그니처 분석
root@kali:~/Desktop# binwalk n604s_kr_9_942.bin
DECIMAL HEX DESCRIPTION
-------------------------------------------------------------------------------------------------------------------
46692 0xB664 LZMA compressed data, properties: 0x5D, dictionary size: 16777216 bytes, uncompressed size: 209044 bytes
131072 0x20000 TRX firmware header, little endian, header size: 28 bytes, image size: 3788800 bytes, CRC32: 0x75B1E9D4 flags: 0x0, version: 1
131100 0x2001C LZMA compressed data, properties: 0x5D, dictionary size: 65536 bytes, uncompressed size: 4378624 bytes
1565732 0x17E424 CramFS filesystem, little endian size 2351104 version #2 sorted_dirs CRC 0x9ee064f0, edition 0, 1954 blocks, 376 files
2) 펌웨어 아키텍쳐 분석
root@kali:~/Desktop# binwalk -A n604s_kr_9_942.bin | head -10
DECIMAL HEX DESCRIPTION
-------------------------------------------------------------------------------------------------------------------
9280 0x2440 MIPSEL instructions, function epilogue
9376 0x24A0 MIPSEL instructions, function epilogue
9992 0x2708 MIPSEL instructions, function prologue
10028 0x272C MIPSEL instructions, function epilogue
10276 0x2824 MIPSEL instructions, function prologue
10280 0x2828 MIPSEL instructions, function epilogue
10288 0x2830 MIPSEL instructions, function prologue
3) 펌웨어 엔트로피 분석
root@kali:~/Desktop# binwalk -E n604s_kr_9_942.bin
4) 펌웨어 파일시스템 추출
root@kali:~/Desktop# dd if=./n604s_kr_8_96.bin of=n604s_fs.bin bs=1 skip=1565732
2124820+0 records in
2124820+0 records out
2124820 bytes (2.1 MB) copied, 2.60455 s, 816 kB/s
root@kali:~/Desktop# file n604s_fs.bin
n604s_fs.bin: Linux Compressed ROM File System data, little endian size 2121728 version #2 sorted_dirs CRC 0x9094e641, edition 0, 1646 blocks, 353 files
5) 펌웨어 파일시스템 마운트
root@kali:~/Desktop# mkdir /n604fs
root@kali:~/Desktop# mount -t cramfs ./n604s_fs.bin /n604fs/
mount: warning: /n604fs/ seems to be mounted read-only.
root@kali:~/Desktop# cd /n604fs/
root@kali:/n604fs# ls
bin cramfs default dev etc home lib linuxrc ndbin plugin proc save sbin tmp usr var
6) 파일시스템 분석 후 fmk 를 이용하여 바이너리 수정/파일시스템 추가 등 조작 후 build
7) 만들어진 new-firmware.bin 이미지를 업데이트(관리자 페이지 수동 업데이트)
8) 간혹 업데이트 시 에러가 발생하는 경우 부트코드에서 검증을 수행하는 것
- 간단한 체크섬 (우회 쉬움)
- 암호화 (우회 어려움)
** 맥에서 바로 UART 시리얼 통신 확인하기
# screen /dev/tty.usbmodemfa2321 115200
# 부트코드 리버싱
=====================
- 펌웨어에서 부트코드 분리
# dd if=~~ of=~~ skip=~~ count=~~ bs=1
- 부트코드 아키텍쳐, load address, size 지정
=> file 명령, binwalk 결과값 이용
- load address 찾는 법
=> 부트코드이므로 bss 섹션 초기화 과정이 있을 것
=> li(or la), $0x80001000 등의 코드가 2번 연속으로 나오고 move $a1, $zero 루프 등으로 초기화 하는 부분을 찾음
=> 부트코드 | bss 섹션 과 같은 구조이므로 bss 섹션 시작주소에서 부트코드 사이즈를 빼 주면 시작주소가 나옴
=> bss 섹션 시작주소 - 부트코드 사이즈 = 부트코드 시작주소
- 부트중 펌웨어 해쉬값 검증 코드 등을 찾아서 패치
'Reversing' 카테고리의 다른 글
DBI - pin & pintool (4) | 2017.05.22 |
---|---|
DBI - Frida 를 이용한 DBI (3) | 2016.09.07 |
Windbg 기본 - (3) 분석시 유용한 명령어들 (2) | 2016.03.01 |
WinDBG 심볼 간편 설정 (0) | 2016.03.01 |
Windows Kernel Reversing - Object 분석 (0) | 2015.01.28 |