대외활동 및 팀플/네뷸라 콘테스트

stellarflare (2) 펌웨어 내용 알기

EYEN 2024. 11. 6. 14:06

펌웨어란

 
ROM에 기록되며 하드웨어 장치에 포함된 소프트웨어로, 주로 CPU를 사용하는 전자 기기에 탑재되어 하드웨어를 구동시키는 역할을 함.
 

펌웨어의 구조

부트로더, 커널, 파일 시스템으로 이루어짐
 

부트로더

OS가 실행되기 전 미리 구동되어 커널을 메모리에 로딩하며 주요 하드웨어 기능을 초기화하는 역할을 수행
그래서 하드웨어 의존성이 강해 일반적으로 특정 장비와 함께 제공되며 이에 대한 개발을 위해서는 UART 등의 장비가 필요하다. 이러한 임베디드 장비에서 자주 사용되는 부트로더는 U-Boot, ARMBoot, BLOB 등이 있다.

커널

OS의 핵심 영역 응용 프로그램이 사용할 하드웨어 자원 관리 등 여러 환경 관리를 수행
시스템 자원 관리, 사용자와 하드웨어 간의 인터페이스 역할을 수행한다고 요약할 수 있다. 
 

파일 시스템 

OS가 저장장치에 들어있는 데이터 및 파일들을 체계적으로 관리하기 위해 사용하는 시스템, 특히 임베디드 장비는 주로 리눅스 커널을 사용하기 때문에 모든 커널에서 사용되는 정보들이 파일로서 관리 및 저장되고 사용된다.
 
따라서 파일 시스템의 분석은 임베디드 시스템 분석에 있어 기기의 내부 구조 파악에 핵심적이며, 대부분의 정보가 해당 시스템에 포함되어있기때문에 매우 중요합니다. 그리고 임베디드 장비는 전원이 꺼져도 데이터 유지되도록 플래시 메모리를 사용하므로 주로 squashFS, cramFS 등의 파일 시스템을 사용한다. 
 

펌웨어 분석 준비 과정

펌웨어 구하기
1. 제조사에서 제공한 펌웨어 파일 다운로드 받기
2. 펌웨어 업데이트 패킷 스니핑하기
3. 기기를 구입하여 추출하기 
 
펌웨어를 분석 방법
 
-기기가 없을 때
1. 정적 분석
 파일 시스템에 기기의 작동을 책임지는 서비스 바이너리가 포함되어 있기 때문에 파일 시스템은 필수적. 펌웨어 파일만으로 기기의 구성요소를 분석하려면 hxd프로그램이나 리눅스의 xxd 명령어를 사용해 시그니처를 기준으로 나누어야 한다.
 
이를 자동화해준 툴이 binwalk. 경우에 따라 파일 시스템이 암호화되어 있을 수 있다고 하지만 이 경우 복호화 코드가 부트로더나 커널에 포함되어 있어 분석이 불가능하지는 않다
 
동적 분석: 에뮬레이팅과 펌웨어에 gdbserver를 넣어 디버깅하는 법
- 기기가 있을 때
UART 포트를 통해 쉘에 접근하는 방법. 
But, UART 포트가 PCB에 내장되어 있는 경우 접근이 쉽지 않고, 핀 헤더로만 노출되어 납땜해야하는 경우가 있어 비용 상의 문제가 발생할 수 있다.
따라서! 기기를 구입하여 하드웨어 해킹을 통해 직접 분석하는 것은 에뮬레이팅을 먼저 수행하거나, 명백한 어택 벡터를 찾았을 때 수행하는 것을 추천드린다.  
 
에뮬레이팅: 에뮬레이팅은 특정 시스템을 그대로 복제 및 구현하는 행위로, 임베디드 장비의 하드웨어 기능과 동작을 소프트웨어적으로 모방하는 과정을 의미한다. 실제 하드웨어 없이 해당 시스템에서 실행되는 소프트웨어를 테스트할 수 있다. 이를 QEMU로 수행할 수 있다. QEMU는 여러 아키텍처를 지원하는 오픈소스 머신 에뮬레이터이다.