kernel pwn绕过auditd审计系统
内容提要
作者尝试复现CVE-2017-11176漏洞时遇到了centos 7.4上的问题,关闭auditd后成功复现漏洞。在ubuntu和debian系统中提权较容易,而在centos中较困难。作者分享了一些ROP链条,但由于开启了smap和kaslr无法在实际环境中利用。
延伸解读
auditd 如何阻断提权利用
文章分析指出,CentOS 7.4 默认启用的 auditd 审计系统会在每个系统调用入口检查 context->in_syscall 标志。当漏洞利用通过系统调用进行提权时,该标志被置为 1,而提权后未正常返回,导致 __audit_syscall_exit 未被调用,标志未清零。再次进入系统调用时触发 BUG_ON,造成内核崩溃,使提权失败。这解释了为何在 Ubuntu 和 Debian 上容易成功的 PoC 在 CentOS 上受阻。
绕过 auditd 的关键:补上退出路径
作者提出的绕过方法是在 ROP 链中插入 __audit_syscall_exit 的地址(0xffffffff8111f3e0),手动将 context->in_syscall 置 0。这样,即使提权过程没有正常返回,后续系统调用也不会触发 BUG_ON。该方法需要精确知道目标内核中该函数的地址,并依赖 ROP 链的构造。文章强调,这仅是在关闭 SMAP 和 KASLR 的测试环境中验证,实际环境因保护开启而无法直接利用。
实际利用的限制与变通
作者在总结中明确,由于 CentOS 默认开启 SMAP 和 KASLR,所给出的 ROP 链无法在真实环境中使用。此外,实测中 getshell 后系统会崩溃,因此作者采用先通过 chmod 修改 /usr/bin/vim 的 SUID 权限,待系统重启后再用 SUID 提权。这反映了漏洞利用在现实场景中的局限性,也提示防御方这些保护机制的有效性。
Q&A
CVE-2017-11176漏洞是什么?
CVE-2017-11176是一个Linux内核中的漏洞,可能导致提权问题。
在CentOS 7.4上复现CVE-2017-11176时遇到了什么问题?
在CentOS 7.4上复现时,开启auditd会导致提权失败。
为什么在CentOS中提权较困难?
因为CentOS开启了smap和kaslr保护,这增加了提权的难度。
如何绕过auditd审计系统?
可以通过关闭auditd或在ROP链中增加特定返回地址来绕过auditd。
在Ubuntu和Debian系统中提权是否容易?
在Ubuntu和Debian系统中,提权相对容易,成功率较高。
CentOS的安全性如何?
CentOS的安全性较高,因此企业应用优先选择CentOS。