
커버리지 기반 퍼저로, UEFI NVRAM 변수를 대상으로 Qiling 에뮬레이션과 AFL++를 사용하여 자동화된 입력 변형 및 충돌 탐지를 통해 펌웨어 취약점을 발견합니다.
UEFI NVRAM 변수를 위한 간단한 커버리지 기반 퍼저입니다.
Qiling과 AFL++를 기반으로 합니다.
Itai Liba (@liba2k)와 Assaf Carlsbad (@assaf_carlsbad)가 작성했습니다.
이미지 빌드:
docker build -t efi_fuzz .
환경 테스트:
docker run -v $PWD:/efi_fuzz -it efi_fuzz sh -c "cd efi_fuzz/tests/ && pytest -s -v -W ignore::DeprecationWarning"
환경 사용:
docker run -v $PWD:/efi_fuzz -it efi_fuzz sh -c "cd /efi_fuzz ; bash"
에뮬레이트된 NVRAM 환경 준비 (rom 이미지를 제공해야 함):
python3 scripts/prepare_nvram.py rom.bin nvram.pickle
NVRAM 변수를 위한 초기 코퍼스 준비:
python3 scripts/prepare_afl_corpus.py rom.bin afl_inputs
퍼저 드라이 런 수행:
python3 efi_fuzz.py <target> <nvram> <varname> <seed>
성공하면 본격적인 퍼징 진행:
afl-fuzz -i afl_inputs/<varname> -o afl_outputs/ -U -- python3 efi_fuzz.py <target> <nvram> <varname> @@
Windows에서 실행하는 경우 WSL을 설치하세요. 때때로 느릴 수 있는 원래 WSL보다 WSL2를 권장합니다. Windows 10의 전체 설치 지침은 여기에서 확인할 수 있습니다: https://docs.microsoft.com/en-us/windows/wsl/install-win10
WSL 배포판 내에서 C 소스 코드를 컴파일하는 데 필요한 일부 패키지를 설치합니다:
sudo apt install build-essential automake
Unicorn 모드 지원과 함께 AFL++를 설치합니다.
3.1. 저장소 클론:
git clone https://github.com/AFLplusplus/AFLplusplus
3.2. 핵심 AFL++ 바이너리 빌드:
make
3.3. Unicorn 지원 기능 빌드:
cd unicorn_mode
./build_unicorn_support.sh
3.4. 모든 것 설치:
make install
퍼징하려는 UEFI 펌웨어를 획득하고 압축을 풉니다. 실제로 이 작업이 수행되는 전체 기술적 세부 사항은 여기 또는 여기를 참조하세요.
퍼저를 클론하고 필요한 종속성을 설치합니다:
git clone https://github.com/Sentinel-One/efi_fuzz
pip install -r efi_fuzz/requirements.txt
오염 전파를 위해 Triton이 필요합니다.
Triton 설치 지침은 여기에서 찾을 수 있습니다:
https://triton.quarkslab.com/documentation/doxygen/#install_sec
에뮬레이트된 NVRAM 환경 준비:
python scripts/prepare_nvram.py rom.bin nvram.pickle
NVRAM 변수를 위한 초기 코퍼스 준비:
python scripts/prepare_afl_corpus.py rom.bin afl_inputs
퍼저 드라이 런 수행:
python efi_fuzz.py <target> <nvram> <varname> <seed>
성공하면 본격적인 퍼징 진행:
afl-fuzz -i afl_inputs/<varname> -o afl_outputs/ -U -- python efi_fuzz.py <target> <nvram> <varname> @@
-e, --end: 에뮬레이션 종료 주소를 지정합니다.-t, --timeout: 에뮬레이션의 새 타임아웃 값을 ms 단위로 지정합니다.-o, --output: 디버깅 목적으로 출력 형식을 지정합니다. 유효한 값: trace, disasm, debug, off (기본값: off).-n, --no-sanitize: 메모리 sanitizer를 비활성화합니다 (기본값: False).-u, --track-uninitialized: Triton 및 오염 전파를 통해 초기화되지 않은 메모리를 추적합니다 (실험적!).-x, --extra-modules: 대상의 종속성을 충족하기 위해 로드할 추가 모듈 목록입니다.UEFI 펌웨어 일반 및 efi_fuzz 에 대한 추가 정보는 여기에서 확인할 수 있습니다: