
eBPF LSM-программа, которая блокирует создание сокетов AF_ALG для смягчения CVE-2026-31431, с пользовательским демоном, логирующим отклонённые попытки через кольцевой буфер.
BPF LSM-программа, которая блокирует создание сокетов AF_ALG (криптографический API ядра Linux) и логирует все попытки через ring buffer в пользовательское пространство.
lsm/socket_createsocket(AF_ALG, ...) с кодом -EPERMПрограммы
deny_af_alg.bpf.c — основная логика блокировки, работает в BPF (пространство ядра)deny_af_alg.user.c — программа пользовательского пространства
Systemd
deny-af-alg.service — основной сервис, содержит приложение пользовательского пространства и BPF-программуdeny-af-alg-bpf.service — устаревший сервис, работает через bpftool, не содержит логированияЭта eBPF-программа устраняет CVE-2026-31431. Она закрывает уязвимость путём ограничения доступа к криптографическим сокетам
Необходим BPF в LSM
#cat /sys/kernel/security/lsm
lockdown,capability,yama,selinux,bpf
Примечание о
vmlinux.h:vmlinux.hгенерируется на сборочной машине.
Если вы нацелены на другое ядро, перегенерируйте его на целевой машине перед сборкой:
bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h
Сборка через makefile
make
Артефакты сборки размещаются в корне проекта:
| Файл | Описание |
|---|---|
deny_af_alg | Демон пользовательского пространства |
deny_af_alg.bpf.o | Скомпилированный BPF-объект |
deny_af_alg.skel.h | Сгенерированный заголовочный файл BPF-скелета |
vmlinux.h | Сгенерированные заголовки Linux через btf |
sudo ./deny_af_alg
вывод
Listening for AF_ALG socket create attempts... (Ctrl-C to stop)
BLOCKED pid=12345 comm=python3
Скопируйте файл deny-af-alg.service и бинарный файл на целевую машину.
Запуск через systemd
systemctl start deny-af-alg.service
bpftool prog loadall deny_af_alg.bpf.o /sys/fs/bpf/deny_af_alg autoattach
Подготовка
dnf install -y bpftool libbpf-devel clang llvm kernel-devel
Компиляция
bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h
clang -O2 -g -target bpf -D__TARGET_ARCH_x86 -I/usr/include/bpf -c deny_af_alg.bpf.c -o deny_af_alg.bpf.o
Проверка
bpftool prog list | grep deny_af_alg
sudo cat /sys/kernel/debug/tracing/trace_pipe