1P by neo 2달전 | favorite | 댓글 1개

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는 복제하기 매우 쉬움
  • 공유해줘서 고맙다는 의견

    • 매우 유용하다고 생각함