
एक eBPF प्रोग्राम CVE-2022-0847 पर हमलों का पता लगाने के लिए
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