缓冲区溢出漏洞对内核模块不起作用



我过去曾对用户级进程进行过缓冲区溢出攻击。但是,如果我尝试溢出易受攻击的内核模块的缓冲区,这似乎效果不佳。这是我的工作:

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

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

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

因此,为了将shellcode放入内核中

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

最新更新