缓冲区溢出漏洞不适用于内核模块

时间:2012-09-26 04:13:06

标签: kernel-module buffer-overflow exploit

我过去曾为用户级进程做过缓冲区溢出攻击。但是,如果我尝试溢出易受攻击的内核模块的缓冲区,这似乎不会很好。这是我的所作所为:

有一个易受攻击的内核模块,我可以将其作为文件打开并对其进行读/写。写操作在没有边界检查的情况下完成。所以我做一个写操作并溢出缓冲区并覆盖返回地址作为具有我的shellcode的环境变量的地址。但是出了点问题。内核崩溃,重启后我打开/ var / log / messages,发现eip正确指向我覆盖的地址。但它仍然崩溃说“无法处理虚拟地址处的内核空指针取消引用” 这会发生什么原因?为什么不将控件重定向到覆盖的返回地址?

注意:我在带有exec-shield和ASLR关闭的redhat enterprise linux上运行了这个。

1 个答案:

答案 0 :(得分:4)

内核无法在不执行内核退出的情况下跳转到用户地址,因为它在特权模式下运行,其配置与用户空间不同(例如,不同的分页表,CPU权限位等)。

因此,为了将shellcode放入内核,你必须将shellcode打包到写入驱动程序的缓冲区中(并复制到内核中),并以某种方式获取它的地址。如果您可以访问内核映射,这并不难,但最近Linux发行版已开始锁定对此类敏感信息的访问,从而使得利用内核错误变得更加困难。