小组安全研究项目
关于模糊测试: 模糊测试是一种自动化软件测试技术,向程序提供无效、意外或随机数据,以发现缺陷和漏洞。导向覆盖的模糊测试利用代码覆盖反馈,智能地探索不同的执行路径。
关于 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
本次安全研究项目由以下人员协作完成: