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, 网络与系统安全, 网络代理