1. 테스트 환경 구축
1.1 설치
- apt-get install binwalk로 tool을 설치해준다.
- 실습을 위해 예시가 되어줄 펌웨어(iptime) [ Ring AX 14.16.0 다운로드 ] 를 설치한다.
- 이제 binwalk 명령어를 통해 펌웨어를 분석해줄 수 있다.
1.2 Firmware 개념
펌웨어는 소프트웨어를 하드웨어화 한 것으로 다양한 상황에 대응이 가능하며 하드웨어 내부의 제어 부분에 저장공간을 만들어 논리 회로의 기능을 보강하거나 대신할 수 있는 프로그램을 넣을 수 있다.
- Firmware의 대략적인 구조는 다음과 같다.
- boot loader: 하드웨어 부팅에 필요한 기본 요소
- kernel: 운영체제의 커널과 같은 역할을 수행하는 영역
- File system: 펌웨어의 기능이 포함되어 있는 영역
- other: 데이터 저장 공간 등 기타 영역
- Firmware 가 탑재된 시스템
- Firmware 는 소형 임베디드 시스템의 ROM 에 저장되어 실행되는 소프트웨어
- 일반적으로 firmware 가 탑재된 시스템은
- 하드웨어 자원이 부족하다. (프로세서 처리 능력, 기억장치 용량)
- 보조 기억장치가 없다.
- 운영체제를 사용하지 않는다.
- 입출력 디바이스에 대한 제어 기능을 수행한다.
2. Firmware 분석
2.1 binwalk 기본 명령어 학습
2.1.1 binwalk [펌웨어 파일 명]
: 펌웨어 파일 시그니처 분석
소형 IoT 기기에서는 기존 컴퓨터에서 이용하는 파일 시스템 방식과 달리 더 가벼운 시스템을 사용해야한다.몇가지 종류가 있지만, Squashfs나 creamfs를 자주 사용한다고 한다.
2.1.2 binwalk -a [펌웨어 파일 명]
: 펌웨어의 아키텍처를 분석하는 명령어이다. 보통 소형 장비의 경우 arm-m시리즈를 많이 사용한다고 한다. 해당 펌웨어 또한 arm cpu를 사용한다.
2.1.3 binwalk -E [펌웨어 파일 명]
: 데이터 엔트로피를 분석하는 기능이다. 엔트로피 분석으로 기대할 수 있는 것은 저장소의 어떤 부분을 이용하고 있는지 파악이 가능하고, 암호화 유무를 확인할 수 있다.
: 주어진 데이터 블록을 대상으로 얼마나 random한지 분류하는 방법으로 binwalk에서는 1에 가까울 수록 데이터 블록이 random하고 0에 가까울 수록 random하지 않다. 임베디드 리눅스에서 bootcode, kernel, file system 부분은 압축, 암호화된 데이터로 구성되어 있고 각각 블록 사이에는 패딩값이 존재한다. 압축, 암호화된 데이터는 상대적으로 랜덤한 값으로 구성되어 있기 때문에 패딩값에 비해서 엔트로피가 높다.
2.1.4 binwalk -e [펌웨어 파일 명]
: 펌웨어 파일 추출 옵션으로 [_펌웨어 파일 명]으로 디렉토리가 생성된다.
보통 이 경우 파일 시스템이 그대로 떨어지곤 한다. 그러나 ubi파일로 떨어지는 경우가 있다.
첫 번째 Ax에서는 파일 시스템을 제대로 떨굴 수 없었지만 두 번째 A8에선 파일 시스템을 정상 추출할 수 있었다. 정상 추출된 파일에서는 squashfs 파일 시스템을 볼 수 있다.
3.1 FMK(firmware-mod-kit)
3.1.1 설치
https://github.com/rampageX/firmware-mod-kit
git에서 FMK 파일을 다운로드 해주고 압축을 푼 후
[cd firmware-mod-kit/src → ./configure → make] 명령어로 설치를 완료해준다.
(./configure 잘안돼서 생략했을 때도 정상 작동함)
3.1.1 sh
내부에 여러 sh 파일을 볼 수 있고 이 중 extrract-firmware.sh를 통해 첨웨어를 추출할 수 있다.
사용 예시> 안에 bin 파일 가져와서 사용하면 fmk 파일 안에 추출이 가능하다.
binwalk로는 못했던 cramfs 파일도 fmk로 추출 가능하다.
트러블 슈팅
참조
https://ppou.tistory.com/12
https://liveyourit.tistory.com/70
'IOT hacking' 카테고리의 다른 글
RTSP 스트리밍 프로토콜 CVE 리스트업 (0) | 2022.09.21 |
---|---|
JTAGluator 사용법 (0) | 2022.08.19 |
[fmk 설치]error: missing liblzma header files (0) | 2022.08.16 |
[Iot]Make Me Hack 유투브 강의 번역 정리(1,2강) (0) | 2022.08.02 |