
Security research project on fuzzing libpng with OSS-Fuzz. Includes seed corpus analysis, custom read/write fuzzers, and a proof-of-concept exploit for CVE-2014-9495.
그룹 보안 연구 프로젝트
퍼징(Fuzzing)이란: 퍼징은 프로그램에 유효하지 않거나 예상치 못한 또는 무작위 데이터를 입력으로 제공하여 버그와 취약점을 발견하는 자동화된 소프트웨어 테스트 기법입니다. 커버리지 기반 퍼징(Coverage-guided fuzzing)은 코드 커버리지 피드백을 활용하여 다양한 실행 경로를 지능적으로 탐색합니다.
OSS-Fuzz 소개: OSS-Fuzz는 Google의 오픈소스 소프트웨어 대상 지속적 퍼징 서비스입니다. LibFuzzer 및 기타 퍼징 엔진을 사용하여 중요한 오픈소스 프로젝트를 자동으로 테스트하고 취약점을 보고합니다.
이 프로젝트는 Google의 OSS-Fuzz 프레임워크를 libpng 라이브러리에 적용하여 커버리지 기반 퍼징, 코드 커버리지 분석 및 취약점 익스플로잇을 시연합니다.
대상: libpng v1.6.48 (퍼징), v1.5.20 (익스플로잇)
자세한 방법론 및 전체 보고서: report.pdf 참조
전체 지침: Instructions.md 참조
| 지표 | 코퍼스 있음 | 코퍼스 없음 | 개선 |
|---|
| 라인 커버리지 | 41.83% | 24.76% | +17.07% |
| 분기 커버리지 | 35.49% | 21.03% | +14.46% |
| 함수 커버리지 | 50.75% | 34.75% | +16.00% |

개선 1 - 향상된 읽기 퍼저 (submit_improve1)
pngread.c에 +74줄, pngtrans.c에 +73줄개선 2 - 쓰기 퍼저 (submit_improve2)

libpng v1.5.20에서 힙 버퍼 오버플로우를 성공적으로 익스플로잇했습니다:
part4/run.poc.sh├── part1/ # Seed corpus impact analysis
│ ├── run.w_corpus.sh # Run with seed corpus
│ ├── run.w_o_corpus.sh # Run without seed corpus
│ └── report/ # Coverage reports
├── part3/ # Custom fuzzer improvements
│ ├── improve1/ # Enhanced read fuzzer
│ └── improve2/ # New write fuzzer
└── part4/ # CVE-2014-9495 exploitation
├── run.poc.sh # Run exploit
└── write_exploit.c # PoC code
# Part 1: Fuzzing experiments (4 hours each)
cd part1
./run.w_corpus.sh # or ./run.w_o_corpus.sh
# Part 3: Test improvements (4 hours each)
cd part3/improve1 && ./run.improve1.sh
cd part3/improve2 && ./run.improve2.sh
# Part 4: Exploit CVE
cd part4 && ./run.poc.sh
커버리지 보고서 확인:
firefox part1/report/w_corpus/linux/index.html
이 보안 연구 프로젝트는 다음 구성원들이 협력하여 완료했습니다: