# Fuzzing 101 기초

> Clean Markdown view of GeekNews topic #17108. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=17108](https://news.hada.io/topic?id=17108)
- GeekNews Markdown: [https://news.hada.io/topic/17108.md](https://news.hada.io/topic/17108.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-10-07T09:47:29+09:00
- Updated: 2024-10-07T09:47:29+09:00
- Original source: [github.com/antonio-morales](https://github.com/antonio-morales/Fuzzing101)
- Points: 1
- Comments: 1

## Topic Body

### 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가 있음

## Comments



### Comment 29758

- Author: neo
- Created: 2024-10-07T09:47:29+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41747979) 
- 링크된 글은 11분 정도 소요되는 읽을거리로, golang의 접근 방식과의 차이점이 흥미로움
  - golang에서는 테스트를 실행하듯이 간단하게 퍼징을 실행할 수 있어, 특정 애플리케이션이나 라이브러리의 부분을 쉽게 타겟팅할 수 있음
  - 이러한 방식은 많은 기존 기술들을 불필요하게 만듦

- 퍼징을 더 효과적으로 안내하는 기술에 대해 궁금함
  - 최선의 방법은 시드 코퍼스를 제공하고 최상의 결과를 기대하는 것처럼 보임

- Heartbleed가 목록에 없다는 점이 놀라움
  - Heartbleed는 복제하기 매우 쉬움

- 공유해줘서 고맙다는 의견
  - 매우 유용하다고 생각함
