零基础syzkaller挖掘Linux内核漏洞( 三 )


ip link set ens33 downip link set ens33 name eth0ip link set eth0 up
再次使用 进行fuzz,效果会好很多,至于根本原因笔者目前也并未分析源码,以后可能会更新 。
五、fuzz Linux驱动程序
5.1 编译驱动

零基础syzkaller挖掘Linux内核漏洞

文章插图
在test.c中存在一个堆溢出的demo:
编译内核模块的时候,涉及到一个linux 的问题 。(比如说我在5.4.0的系统下编译5.17的驱动)所以这里的如下:
CONFIG_MODULE_SIG=nobj-m += test.oEXTRA_CFLAGS += -fno-stack-protector -no-pieall:make -C /lib/modules/5.17.0-rc3-00316-gb81b1829e7e3/build M=$(PWD) modules
创建目录test,将test.c和拷贝到目录下,运行make命令 。
如果找不到
/lib//5.17.0-rc3-00316-路径,在linux源代码目录下执行make/lib/命令即可 。
将test.c拷贝到linux//char目录下:
在char目录下的文件中添加如下配置:
config TEST_MODULEtristate "Heap Overflow Test"default yhelpThis file is to test a buffer overflow.
在char目录下的中添加obj-$() += test.o 。
进入linux源码目录重新make,编译后使用boot.sh启动虚拟机,进入proc目录,可以看到test,表明成功编译代码并加载 。
5.2 添加规则
进入/sys/linux/目录,新建.txt,文件内容如下所示:
include open$proc(file ptr[in, string["/proc/test"]], flags flags[proc_open_flags], mode flags[proc_open_mode]) fdread$proc(fd fd, buf buffer[out], count len[buf])write$proc(fd fd, buf buffer[in], count len[buf])close$proc(fd fd)proc_open_flags = O_RDONLY, O_WRONLY, O_RDWR, O_APPEND, FASYNC, O_CLOEXEC, O_CREAT, O_DIRECT, O_DIRECTORY, O_EXCL, O_LARGEFILE, O_NOATIME, O_NOCTTY, O_NOFOLLOW, O_NONBLOCK, O_PATH, O_SYNC, O_TRUNC, __O_TMPFILEproc_open_mode = S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH
回到目录,编译syz-和syz-:
make bin/syz-extractmake bin/syz-sysgen
使用syz-生成.const文件:
bin/syz-extract -os linux -sourcedir "/home/test/git/linux" -arch amd64 proc_operation.txt
生成了.txt.const内容如下:
接下来执行如下命令:
bin/syz-sysgenmake cleanmake //这里参考上面
修改my.cfg文件,在其中加上如下字段:
"enable_syscalls": ["open$proc","read$proc","write$proc","close$proc"],
5.3 fuzz linux 驱动程序
使用bin/syz- - my.cfg命令:
将其识别为空指针解引用错误 。
六、总结
从使用体验来讲这个框架进行漏洞发掘还是存在一定难度,尤其对一些具有复杂接口的内核模块来说更是如此,并且是使用go编写的增加了学习成本,但它确实挖出了不少漏洞值得学习 。
参考链接:
1、 环境搭建:
#%E4%B8%89%E3%80%-%E6%B5%8B%E8%AF%95
2、的安装与运行:
%E7%9A%84%E5%AE%89%E8%A3%85%E4%B8%8E%E8%BF%90%E8%A1%8C/
3、从0到1开始使用进行Linux内核漏洞挖掘:
#%E5%B0%9D%E8%AF%95%E4%BD%BF%E7%94%%E6%8D%95%E6%8D%89%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E5%86%85%E6%A0%B8%E5%A0%86%E6%BA%A2%E5%87%BA
4、LinuxPwn III:使用进行漏洞挖掘:
#0x02-%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8-
5、使用测试Linux内核:
【零基础syzkaller挖掘Linux内核漏洞】使用测试Linux内核 | I'm dev