
eBPF LSM 프로그램으로, CVE-2026-31431을 완화하기 위해 AF_ALG 소켓 생성을 차단하며, 사용자 공간 데몬이 링 버퍼를 통해 차단된 시도를 기록합니다.
AF_ALG(Linux 커널 암호화 API) 소켓 생성을 차단하고 모든 시도를 링 버퍼를 통해 사용자 공간에 기록하는 BPF LSM 프로그램입니다.
lsm/socket_create 훅에 연결socket(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을 해결합니다. 암호화 소켓에 대한 접근을 제한하여 취약점을 해결합니다.
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를 통해 생성된 리눅스 헤더 |