小风福利公众号
最新文章
热门文章
文章详情
LinuxkernelBPF模块的相关漏洞分析
日期:2020/11/11 10:49:21
今年pwn2own上的linux kernel提权漏洞是linux kernel bpf模块的漏洞 ---CVE-2020-8835,更早听说过的与bpf相关的漏洞是CVE-2017-16995。然后在上海参加GeekPwn 云靶场线下挑战赛的时候,也是一道bpf相关的内核题。我和我们队长通宵学习相关知识,最后拿到了这道题全场唯一的一血。 然后紧接着在11月1号,又有国外研究者爆出了bpf的又一个漏洞--CVE-2020-27194,也是内核提权。CVE-2020-27194是linux kernel 5.8.x的通杀洞,和GeekPwn的kernel题一个环境。事后和队长感慨,还好这个洞晚了几天公开,不然我们就拿不到第2名的好名次了(同时损失奖金)。
360团队和漏洞研究者都已经写了CVE-2020-27194的writeup,但是没公布exp(那我就公开一下?)。这个漏洞和GeekPwn那道题的利用原理类似,于是想一起写一篇Writeup描述一下这种漏洞的利用。
BPF基础
关于BPF的相关基础知识,ZDI上CVE-2020-8835的Writeup已经写的足够清晰。然后另外比较一个重要的资料就是 kernel的文档,所以这里不再复述过多。
简单地说, 就是内核里实现了bpf字节码的JIT compiler, 用户可以在用户态编写bpf代码然后经Jit compiler后执行。但是如果不加以限制,就相当于用户可以在内核执行任意代码,显然不符合权限管理模型。于是需要有一个verify的机制(相当于静态程序分析),去检查一些不合法的行为。
其中一个很重要的点就是会对常数变量设置一个取值范围。struct bpf_reg_state
里存储着这样8个变量:
s64 smin_value; /* minimum possible (s64)value */
s64 smax_value; /* maximum possible (s64)value */
u64 umin_value; /* minimum possible (u64)value */
u64 umax_value; /* maximum possible (u64)value */
s32 s32_min_value; /* minimum possible (s32)value */
s32 s32_max_value; /* maximum possible (s32)value */
u32 u32_min_value; /* minimum possible (u32)value */
u32 u32_max_value; /* maximum possible (u32)value */
相关推荐
- 10-23用油猴脚本hook前端危险生成函数
- 10-21父进程欺骗技术
- 05-08通过explorer.exe的后渗透权限维持
- 11-10Weblogic10.3.6.0版本ConsoleHTTP协议远程代
- 05-12轻量级开源SAST工具semgrep分析
- 05-26520_APK_HOOK
- 11-06WebLogic-XMLDecoder反序列化漏洞分析
- 10-20网络创业心态篇
- 11-04XSS实战攻击思路总结
- 11-13一次旁站信息泄露的dedecms站点渗透
- 11-12UEditor编辑器任意文件上传漏洞分析
- 11-17高级的MSSQL注入技巧
- 10-21渗透测试之信息收集
- 05-24如何获得cnvd原创漏洞证书之信息泄露篇(结尾