"fuzzing against machine" 도서를 읽고 정리한 내용입니다.
퍼징의 기본 개념
QEMU(Quick Emulator)를 사용하는 이유는, 펌웨어를 가지고 에뮬레이팅하면 실제로 기기를 가지고 있지 않아도 테스트할 수 있기 때문이다. 플레이스테이션이나 닌텐도 등 비싼 기기를 보유하지 않아도 에뮬레이터를 통해 PC에서 동작할 수 있는 것처럼 말이다.
취약점에는 버퍼 오버플로우, 포맷 스트링 취약점, 힙 오버플로우 등이 있다. 이러한 취약점을 발견하는 과정은 매우 지루(tedious)한 과정이다. 그래서 퍼저(fuzzer)라는 툴을 이용한다. 퍼저는 프로그램을 실행하고, 다른 입력값(input)을 넣으면서 프로그램의 충돌(crash)을 관찰(monitoring)한다. 퍼징의 성과를 향상하기 위해 이력값을 변이(mutate)하기도 한다.
퍼징 환경 세팅하기
Git
소프트웨어 버전 관리 시스템이다.
Python3
프로그래밍 언어.
build-essential
우분투/데비안(Ubuntu/Debian) 리눅스 환경에서 사용할 수 있는 컴파일 소프트웨어 패키지이다.
다음과 같은 명령으로 설치할 수 있다. (우분투 기준)
apt-get install git python3 build-essential
QEMU
에뮬레이터 소프트웨어이다. 중간 표현(Intermediate Representation, IR)을 사용해 이러한 명령을 표현한다. 주어진 시스템이나 바이너리의 명령을 변환해 IR로 변환하고, 아키텍처에 맞게 컴파일하거나 인터프리터를 통해 IR 명령어를 해석한다.
apt-get install qemu
AFL(American Fuzzy Lop)
퍼징과 취약점 연구를 위한 사실상 표준이다. 구글 보안 엔지니어가 사내에서 사용할 목적으로 개발했다.
AFL은 초기 입력값을 진화시켜 AFL을 스마트하게 하는 유전 알고리즘(genetic algorithm)을 따른다. 또한 퍼징된 프로그램이 생성한 크래시 덤프(crash dump)를 분석하기 위한 제품군도 제공한다.
AFL++는 AFL의 향상된 버전으로 QEMU와 같은 풀 시스템 에뮬레이터에 연결하는 패치를 포함한다.
git clone https://github.com/google/AFL.git
cd AFL && make
Ghidra
기드라는 디스어셈을러로 IDA Pro를 대체할 수 있는 무료 툴이다. Java로 작성되어 Java11 SDK가 필요하다.
wget https://corretto.aws/downloads/latest/amazon-corretto-11-x64-linux-jdk.tar.gz
- tar.gz 파일 압축 해제
tar xvf <JDK distribution .tar.gz>
- 환경변수 영구 등록
vi ~/.bashrc
export PATH=<path of extracted JDK dir>/bin:$PATH
JDK가 설치되면 https://ghidra-sre.org/에 방문해 기드라를 다운받는다.
GDB Multiarch and GEF/Pwndbg
GDB는 리눅스 시스템의 표준 디버거이다. 다른 아키텍처의 바이너리를 디버그하려면 multiarch 버전을 설치해야 한다. 그리고 플러그인을 설치해 보기 좋게 한다.
apt-get install gdb-multiarch
그리고 https://github.com/apogiatzis/gdb-peda-pwndbg-gef 를 다운로드하거나 clone해서 install.sh 를 실행한다.
Avartar2
임베디드 시스템을 조작하는데 도움을 주는 파이썬 프레임워크이다. Avartar2, AFL, QEMU 덕에 삼성 폰의 CP(connection processor)에서 취약점을 발견하기도 했다.
OpenWrt
베이스밴드(데이터 전송시 신호 변조하지 않는 방식) 라우터를 위한 리눅스 운영 체제다. 2000여 개 기기를 지원하므로 OpenWrt의 취약점은 수백만 유저의 위험으로 이어질 수 있다. 풀 시스템 에뮬레이션을 수행하고 몇몇 취약점을 찾을 수 있다.
참고자료
Antonio Nappa , Eduardo Blázquez - Fuzzing Against the Machine
'보안 > fuzzing' 카테고리의 다른 글
[하드웨어 해킹] 퍼징 기술 (0) | 2024.01.15 |
---|---|
[하드웨어 해킹] 퍼징과 분석 기술 - 심볼릭 실행 (0) | 2024.01.11 |
[하드웨어 해킹] QEMU 실행 모드 (1) | 2024.01.11 |
[하드웨어 해킹] QEMU (2) | 2024.01.09 |
[하드웨어 해킹] 에뮬레이션(emulation)이란? (1) | 2024.01.09 |