
CVE-2022-0847에 대한 공격을 탐지하는 eBPF 프로그램
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