AD

CVE_2016_0728利用经验及影响

0x01概述

       CVE-2016-0728是由keyring功能中的引用泄漏/内存管理所引起的。驱动器在内核中保存或缓存安全数据、认证密钥、加密密钥和一些其他的数据时,必须使用到keyring功能,系统会调用接口-keyctl
       Linux kernel 3.8及更高版本中,keyrings功能中存在引用泄露引起的本地权限提升漏洞。成功利用后可执行内核代码,从较低权限提升到root权限。

0x02 cve_2016_0728溢出问题

cve_2016_0728.c 编译时需要keyutils.h头文件,该文件在linux系统内默认是没有安装,所有编译时会报错:
xxxx@xxxx:~$ gcc cve_2016_0728.c -o cve_2016_0728 -lkeyutils -Wall
cve_2016_0728.c:8:22: fatal error: keyutils.h: No such file or directory
compilation terminated.

是否可以使用预先编译好的exp文件

       攻击者在没有rootsudo权限的机器上尝试提升权限,是否可以在一个有各类头文件的设备上编译好EXP代码,然后在目标上执行获取root权限呢?
       通过查看POC代码可以发现,利用时的变量必须预先定义,而这些和linux的发行版本及内核的不同而不同,所以目标设备的正确利用地址必须在编译EXP代码之前包含在内。
       #define COMMIT_CREDS_ADDR (0xffffffff81094250)
#define PREPARE_KERNEL_CREDS_ADDR (0xffffffff81094550)
通过下标可以看到不同的内核对应的不同的地址:
Linux Distro
Kernel Version
COMMIT_CREDS_ADDR
PREPARE_KERNEL_CRED
Ubuntu 14.04.3 LTS
3.13.0-74-generic
ffffffff81090e10
ffffffff81091110
Ubuntu 12.04.5 LTS
3.2.0-70-generic
ffffffff81092c00
ffffffff81092eb0
Ubuntu 12.04.5 LTS
3.2.0-76-generic
ffffffff81092c30
ffffffff81092ee0
Ubuntu 12.04.5 LTS
3.2.0-97-generic
ffffffff81092e60
ffffffff81093110

如上,地址会基于内核和发行版本的变化而变化。此外,root权限需要获取到正确的地址,如下内容:
xxxxx@xxxx:~$ cat /proc/kallsyms | grep -i commit_cr
0000000000000000 T commit_creds
0000000000000000 R __ksymtab_commit_creds
0000000000000000 r __kcrctab_commit_creds
0000000000000000 r __kstrtab_commit_creds
xxxx@xxxx:~$ sudo cat /proc/kallsyms | grep -i commit_cr
ffffffff81090e10 T commit_creds
ffffffff81b080d0 R __ksymtab_commit_creds
ffffffff81b23e68 r __kcrctab_commit_creds
ffffffff81b33356 r __kstrtab_commit_creds

0x03android的影响

       使用受影响内核版本的android设备是存在威胁的,但要利用该漏洞进行攻击还比较复杂。2016120日,android安全工程师Adrian Ludwig编写了一个博客,提到android的补丁将会更新到开源代码并提供给运营商。同时他提到,受影响的android设备要比最初报道的数量少,运行android5.0及以上版本的设备不受该漏洞影响,应该Android SELinux安全策略会阻止第三方代码访问受影响的代码。运行android4.4及以前版本的设备中Linux kernel 3.8不包含存在漏洞的代码,

0x04附录

keyring

       Linux密钥保留服务,keyrings功能是驱动程序用于保留或缓存安全数据、身份验证密钥、加密密钥及其他内核数据的方法。在 Linux 2.6 中引入,是在 Linux 平台上处理身份验证、密码学、跨域用户映射和其他安全问题的出色的新方法。

https://www.solutionary.com/resource-center/blog/2016/01/zero-day-in-linux-kernels/

评论

此博客中的热门博文

简单粗暴导出小米便签

我——终于一个人了

多种方法绕过POWERSHELL的执行策略