一个 BPF LSM 程序,用于阻止 AF_ALG(Linux 内核加密 API)套接字的创建,并通过环形缓冲区将所有尝试记录到用户空间。
lsm/socket_create 钩子-EPERM 拒绝任何 socket(AF_ALG, ...) 调用程序
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。它通过限制对加密套接字的访问来解决该漏洞。
需要在 LSM 中启用 BPF
#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 骨架头文件 |
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
vmlinux.h | 通过 BTF 生成的 Linux 头文件 |