paper: https://yuanxzhang.github.io/paper/syzdirect-ccs23.pdf
challenge
- 不同于针对用户态软件的DGF(定向灰盒模糊测试),用户态程序的入口点只有一个,但是内核却有很多个(430多个系统调用作为入口,以及4200多个变体);
- 参数的准备,系统调用对了,参数不对还是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)来表示:
- 文件路径;
- family;
- type;
对于系统调用变体,我们可以通过解析其参数来获取其所需的资源;
具体做法就是提取所有的常量参数;
对于内核函数,通过分析间接调用的目标来确定资源,将函数表中的所有函数作为anchor funciton,但是虚表到由常量创建的资源之间仍然有差距,