syzDirect


paper: https://yuanxzhang.github.io/paper/syzdirect-ccs23.pdf

challenge

  1. 不同于针对用户态软件的DGF(定向灰盒模糊测试),用户态程序的入口点只有一个,但是内核却有很多个(430多个系统调用作为入口,以及4200多个变体);
  2. 参数的准备,系统调用对了,参数不对还是fuzz不到目标位置;

overview

入口识别

在什么设备上操作,在设备上做何种操作;

key insight: we can match kernel functions with syscalls based on what resources they operate on
and how they operate on the resource

静态分析CFG搞不定间接调用,到了函数表就停了,

利用我们的模型,

资源建模:(为什么要操作建模、资源建模?🤔)

syzlang和内核源码中对于资源的命名可能不同,所以不能直接用,因此打算使用资源创造函数中的不变量( invariants)来表示:

  1. 文件路径;
  2. family;
  3. type;

对于系统调用变体,我们可以通过解析其参数来获取其所需的资源;

具体做法就是提取所有的常量参数;

对于内核函数,通过分析间接调用的目标来确定资源,将函数表中的所有函数作为anchor funciton,但是虚表到由常量创建的资源之间仍然有差距,

系统调用间的依赖推断

系统调用参数的恢复


文章作者: q1ming
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 q1ming !
  目录