GN⁺: Fuzzing 101 기초
(github.com/antonio-morales)Fuzzing-101
구조
- 연습 1: Xpdf, CVE-2019-13288, 120분, Afl-clang-fast, Afl-fuzz, GDB
- 연습 2: libexif, CVE-2009-3895, CVE-2012-2836, 6시간, Afl-clang-lto, Fuzz 라이브러리, Eclipse IDE
- 연습 3: TCPdump, CVE-2017-13028, 4시간, ASan, Sanitizers
- 연습 4: LibTIFF, CVE-2016-9297, 3시간, 코드 커버리지, LCOV
- 연습 5: Libxml2, CVE-2017-9048, 3시간, 사전, 기본 병렬화, 커맨드라인 인자 퍼징
- 연습 6: GIMP, CVE-2016-4994, 보너스 버그, 7시간, 지속적 퍼징, 상호작용 애플리케이션 퍼징
- 연습 7: VLC 미디어 플레이어, CVE-2019-14776, 6시간, 부분 계측, 퍼징 하네스
- 연습 8: Adobe Reader, 8시간, 폐쇄형 소스 애플리케이션 퍼징, QEMU 계측
- 연습 9: 7-Zip, CVE-2016-2334, 8시간, WinAFL, 윈도우 애플리케이션 퍼징
- 연습 10 (최종 도전): Google Chrome / V8, CVE-2019-5847, 8시간, Fuzzilli, 자바스크립트 엔진 퍼징
변경 로그
- 2022년 2월 14일: 연습 5의 'wget' 오타 수정
- 2021년 11월 25일: 연습 3 업데이트 및 수정
이 과정은 누구를 위한 것인가?
- 퍼징 기본기를 배우고자 하는 사람
- 실제 소프트웨어 프로젝트에서 취약점을 찾고자 하는 사람
요구 사항
- 리눅스 시스템과 인터넷 연결 필요
- 기본적인 리눅스 기술 권장
- 모든 연습은 Ubuntu 20.04.2 LTS에서 테스트됨
- 이 과정에서는 Michał "lcamtuf" Zalewski의 AFL의 새로운 포크인 AFL++ 사용
퍼징이란?
- 퍼즈 테스트(또는 퍼징): 프로그램에 무작위/변형된 입력값을 제공하고 예외/충돌을 모니터링하는 자동화된 소프트웨어 테스트 기법
- AFL, libFuzzer, HonggFuzz는 실제 응용 프로그램에서 성공적인 퍼저의 예시
- 커버리지 기반 진화적 퍼저: 코드 커버리지 데이터를 수집하고 비교하여 새로운 실행 경로를 찾는 입력값을 선택
커버리지 기반 진화적 퍼저
- 진화적: 진화 알고리듬에서 영감을 받은 메타휴리스틱 접근법으로, 초기 하위 집합(시드)의 진화와 변형을 통해 새로운 충돌을 찾음
- 커버리지 기반: 코드 커버리지 데이터를 수집하고 비교하여 새로운 실행 경로를 찾는 입력값을 선택
감사
- 도움을 준 사람들: Xavier RENE-CORAIL, Alan Vivona, Jason White, Octavio Gianatiempo, van Hauser, Marc Poulhiès, Xu Hanyu, tclan126, epi052, Jeremias Gomes
연락처
- 도움이 필요하거나 제안 사항이 있는 경우 GitHub Security Lab Slack의
#fuzzing
채널에 참여
GN⁺의 정리
- 이 과정은 퍼징의 기본 개념을 배우고 실제 소프트웨어에서 취약점을 찾는 데 유용함
- AFL++와 같은 도구를 사용하여 다양한 실제 사례를 통해 퍼징 기술을 익힐 수 있음
- 퍼징은 소프트웨어의 안정성과 보안을 강화하는 데 중요한 역할을 하며, 이 과정은 이를 위한 실용적인 접근법을 제공함
- 유사한 기능을 가진 도구로는 libFuzzer와 HonggFuzz가 있음
Hacker News 의견
-
링크된 글은 11분 정도 소요되는 읽을거리로, golang의 접근 방식과의 차이점이 흥미로움
- golang에서는 테스트를 실행하듯이 간단하게 퍼징을 실행할 수 있어, 특정 애플리케이션이나 라이브러리의 부분을 쉽게 타겟팅할 수 있음
- 이러한 방식은 많은 기존 기술들을 불필요하게 만듦
-
퍼징을 더 효과적으로 안내하는 기술에 대해 궁금함
- 최선의 방법은 시드 코퍼스를 제공하고 최상의 결과를 기대하는 것처럼 보임
-
Heartbleed가 목록에 없다는 점이 놀라움
- Heartbleed는 복제하기 매우 쉬움
-
공유해줘서 고맙다는 의견
- 매우 유용하다고 생각함