Winnie论文笔记

Eutopia's Blog

Posted by Eutopia on December 20, 2023

Winnie

解决问题

对当下Windows系统软件的fuzz没有合适的方法。提出了Winnie对Windows闭源软件进行fuzzing。

主要贡献

  • 提出了Winnie,可以对Windows闭源软件进行模糊测试
  • 实现了windows系统的fork方法,使得可以不用每次执行都得从头开始,提高了fuzzing效率,其中fork新进程的速度达到310次/s显著高于windows自带CreateProcess91.9次/s,与WSL的fork速度相近。

尚存不足

  • 由于闭源特性,无法全自动,需要人工参与fuzzer代码的生成

具体细节

image-20231220090115449

  • 生成fuzz代码
    • Target Identification:确认二进制程序中可以用于fuzz的输入点(读取用户输入的api或函数)
    • Call-seq Recovery:恢复目标程序中函数体内对各个相关targetfunction调用的顺序(类似于fudge)
    • Argument Correction:恢复函数体的传入参数
    • Control-Data-flow:根据控制流和数据流依赖建立函数中各个api的关系。控制流依赖使用了静态分析,数据流依赖考虑了api的返回值与后面的api参数值的关系(直接用于下一个api参数,指针指向值作为下一个api参数)
  • fork
    • 新建进程需要与CSRSS进程连接才能正常运行。
    • 验证fork的子进程确实能够继承父进程变量值;fork实现是CoW(copy-on-write)
    • 解决了多线程的问题。
  • fuzzing
    • 使用了fullspeed fuzzing来收集代码覆盖率(根据遇到新的代码块来测算)
    • image-20231220091346384