一个用于检测和防御针对 CVE-2022-0847 攻击的 eBPF 程序。
在内核空间,该程序检测 splice() 系统调用,如果此类系统调用包含一个管道作为输出 fd,且管道缓冲区的标志被设置为 PIPE_BUF_FLAG_CAN_MERGE,则会提交一个事件。在用户空间,该程序会杀死调用 splice() 的对应进程,并覆写 /proc/sys/vm/drop_caches 以清除页面缓存。
已在 Ubuntu Server 20.10(内核 5.8.0-25)上测试。
clang -g -O2 -target bpf -D__TARGET_ARCH_x86_64 -I/usr/src/linux-headers-5.8.0-25/include -I/usr/include -c ./splice.bpf.c -o splice.bpf.o
bpftool gen skeleton ./splice.bpf.o > splice.skel.h
clang -I/usr/include -c splice.c -o splice_epbf.o
clang splice_epbf.o -lbpf -lelf -lz -o splice_epbf