
Ein eBPF-Programm zur Erkennung von Angriffen auf CVE-2022-0847
Ein eBPF-Programm zur Erkennung und Abwehr von Angriffen auf CVE-2022-0847.
Im Kernelraum erkennt das Programm splice()-Systemaufrufe. Wenn ein solcher Systemaufruf eine Pipe als Ausgabe-FD enthält und die Flags des Pipe-Puffers auf PIPE_BUF_FLAG_CAN_MERGE gesetzt sind, wird ein Ereignis gemeldet. Im Benutzerraum beendet das Programm den entsprechenden Prozess, der splice() aufruft, und überschreibt /proc/sys/vm/drop_caches, um den Page-Cache zu leeren.
Getestet auf Ubuntu Server 20.10 mit Kernel 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