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 |
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
| 生成されたBPFスケルトンヘッダー |
vmlinux.h | btf経由で生成されたLinuxヘッダー |