Vatson112/deny-af-alg-bpf

GitHub: Vatson112/deny-af-alg-bpf

基于 eBPF LSM 的内核级防护程序,通过拦截并拒绝 AF_ALG 套接字创建来缓解 CVE-2026-31431 漏洞,同时提供进程级审计日志。

Stars: 1 | Forks: 0

# deny-af-alg-bpf ## 描述 BPF LSM 程序,用于阻止 `AF_ALG`(Linux 内核加密 API)套接字的创建,并通过环形缓冲区将所有尝试记录到用户空间。 ### 功能 - 挂载到 `lsm/socket_create` 钩子 - 使用 `-EPERM` 拒绝所有 `socket(AF_ALG, ...)` 调用 - 将结构化事件(pid, comm)发送到 BPF 环形缓冲区 - 用户空间守护进程读取环形缓冲区并记录到 stderr(由 systemd journal 消费) ### 组件 程序 - `deny_af_alg.bpf.c` - 主要拦截逻辑,在 bpf(内核空间)中工作 - `deny_af_alg.user.c` - 用户空间程序 - 加载 bpf 程序 - 连接到暴露的环形缓冲区 - 获取有关拒绝访问的信息并记录到 stdout Systemd - `deny-af-alg.service` - 主服务,包含用户空间应用程序和 bpf 程序 - `deny-af-alg-bpf.service` - 旧版服务,通过 bpftool 工作,不包含日志记录功能 ### CVE 修复信息 此 eBPF 程序解决了 **CVE-2026-31431**。它通过限制对加密套接字的访问来修复该漏洞 ### 要求 需要支持 lsm 的 bpf ``` #cat /sys/kernel/security/lsm lockdown,capability,yama,selinux,bpf ``` ### 构建 通过 Makefile 构建 ``` make ``` 构建产物放置在项目根目录中: | 文件 | 描述 | |------|-------------| | `deny_af_alg` | 用户空间守护进程 | | `deny_af_alg.bpf.o` | 编译后的 BPF 对象文件 | | `deny_af_alg.skel.h` | 生成的 BPF 骨架头文件 | | `vmlinux.h` | 通过 btf 生成的 Linux 头文件 | ### 通过命令行运行 ``` sudo ./deny_af_alg ``` 输出 ``` Listening for AF_ALG socket create attempts... (Ctrl-C to stop) BLOCKED pid=12345 comm=python3 ``` ### 通过 systemd 运行 将 `deny-af-alg.service` 文件和二进制文件复制到目标机器。 通过 systemd 运行 ``` systemctl start deny-af-alg.service ``` ### 仅通过 bpftool 手动运行 bpf 程序 ``` 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 ```
标签:AF_ALG, BPF LSM, bpftool, BTF, clang, CVE-2026-31431, Docker镜像, libbpf, Linux内核安全, llvm, Ring Buffer, socket 过滤, systemd, Web报告查看器, 入侵防御, 内核态, 内核模块, 加密接口限制, 安全合规, 安全资源, 安全防护, 客户端加密, 漏洞缓解, 用户态, 系统调用 Hook, 网络与系统安全, 网络代理