ebpf

在研究uprobe的过程中,发现了Linux内核一个好用的功能。
在上一篇文章中,我自己改了一版BPF程序的代码bpftest.c,代码也在上一篇文章中放出来了,但是一个完整的BPF程序,还需要一个用户态的loader,也就是需要有一个读取BPF程序给我们数据的程序。
最近在研究eBPF,做一下学习笔记。
内核研究与开发是计算机底层处于与硬件打交道的部位,ebpf可以理解为是内核开发的一个模块。
漏洞是由于ebpf模块的整数扩展问题导致可以一段指令绕过verifier的检测,进而向内核注入任意的执行代码,导致本地提权。这里就不在介绍ebpf的基础知识了,网上资料很多,可以学习一波。
2020年4月份,ZDI收到一个Linux 内核eBPF模块越界读写漏洞的披露,编号为ZDI-20-1440,影响版本Linux 内核版本4.9~4.13,在Debian 9上应用相关版本的内核。根据ZDI 120天的漏洞披露原则,产商并未给出回应,所以此漏洞现未有相关漏洞补丁,以0day状态被披露。
eBPF是Linux内核中的一个模块,主要作用是实现包过滤功能。
这篇文章中,参考zdi上的writeup, 我会分析这个漏洞的成因,然后写一下这个洞的 exp, 纯属个人笔记,理解有误的地方欢迎指正。