本工具通过结构性阻断来缓解 CVE-2026-31431,具体方式为物理重命名内核模块并将其从内存中清除。使用前,请了解以下架构性风险:
/lib/modules/ 目录下部署全新的、存在漏洞的模块,使之前的阻断措施失效。AF_ALG(内核加密 API)可能会破坏依赖内核级硬件加速的特定应用程序或服务(例如专用 VPN、磁盘加密工具或自定义安全工具)。[cite: 3]请自行承担使用风险。 运行 solution.sh 后,请务必验证系统关键功能是否正常。[cite: 3]
一套用于通过 Linux 内核加密 API(AF_ALG)发现、诊断和遏制 LPE(本地权限提升)向量的工具包。
本工具使用结构性阻断来应对 CVE-2026-31431,具体方式为重命名内核模块并将其从内存中清除。主要架构性风险包括:
/lib/modules/ 目录下部署全新的、存在漏洞的模块,使之前的阻断措施失效。请自行承担使用风险。
本仓库提供两个脚本,构成针对通过 AF_ALG(socket(38, 5, 0))进行的权限提升攻击的诊断 → 遏制 → 验证工作流程:
check.sh — 多层安全态势审计(以非特权身份运行)solution.sh — 强制从内存中驱逐 AF_ALG 模块 + 检查物理模块文件(需要 root 权限)restore.sh — 重新加载 AF_ALG 模块并将系统恢复到运行 solution.sh 之前的状态(需要 root 权限)./check.sh
sudo ./solution.sh
sudo ./restore.sh
restore.sh 通过重新加载 AF_ALG 内核模块(af_alg、algif_rng、algif_aead、algif_skcipher、algif_hash)来撤销 solution.sh 的效果。如果物理模块文件(af_alg.ko.xz)已被重命名或删除,脚本将发出警告并提示您手动恢复,然后再尝试加载模块。
在活跃使用 AF_ALG 的在线系统(例如使用 IPsec、dm-crypt/LUKS 或任何硬件加密卸载的系统)上运行 solution.sh 将立即破坏所有内核加密操作。 这包括:
algif_* 套接字接口的容器或应用程序该脚本会强制卸载 AF_ALG 内核模块。内核加密操作将失败,直到系统重启。此脚本仅适用于隔离网络、非生产或一次性系统,用于测试和分析目的。请勿在生产或关键基础设施上运行。
check.sh 除 POSIX shell 和 /proc//sys 外无其他依赖solution.sh 需要 root 权限restore.sh 需要 root 权限af_alg_block.so 需要通过 /etc/ld.so.preload 安装,需要 root 权限此 POC 已在 WSL2 上测试。请注意以下事项:
wsl --shutdown)时会重置所有状态。这包括 solution.sh 的内核模块状态更改、文件重命名、check.sh 结果以及本仓库中的任何本地文件修改。.wslconfig、/etc/wsl.conf 或自动启动脚本(例如 /etc/rc.local)。要彻底关闭 AF_ALG 攻击向量:
将内核模块加入黑名单(最可靠):
echo "blacklist af_alg" | sudo tee /etc/modprobe.d/af_alg-blacklist.conf
或重命名物理文件:
sudo mv /lib/modules/$(uname -r)/kernel/crypto/af_alg.ko.xz \
/lib/modules/$(uname -r)/kernel/crypto/af_alg.ko.xz.bak
通过 sysctl 禁用 AF_ALG:
sudo sysctl -w net.core.af_alg_disabled=1
通过 SELinux / AppArmor 策略阻止创建 AF_ALG 套接字
禁用非特权用户命名空间(容器环境):
sudo sysctl -w kernel.unprivileged_userns_clone=0
通过 LD_PRELOAD 在 socket() 系统调用层面阻止 AF_ALG(WSL2 临时解决方案):
# 系统范围安装(需要 root 权限)
echo /absolute/path/to/af_alg_block.so | sudo tee -a /etc/ld.so.preload
仓库中包含一个预编译的共享库(af_alg_block.so)。它会拦截 socket(2),当域为 (38)时返回 。所有其他套接字调用均原样传递给真实实现。
MIT
| 检查项 | 检查内容 | 严重程度 |
|---|
| 进程上下文 | 当前 UID/GID 及有效能力 | 低 |
| AF_ALG 加密套接字 | 通过 socket(AF_ALG, ...) 访问内核加密 API 的能力 | 高 |
| kptr_restrict | 内核指针在用户空间的可视性 | 中 |
| dmesg_restrict | 内核环形缓冲区访问限制 | 中 |
| SELinux | 强制 / 宽容 / 禁用状态 | 中 |
| /proc hidepid | /proc 是否隐藏其他进程的信息 | 低 |
AF_ALGEAFNOSUPPORT此方法主要适用于 WSL2,因为其单用户语义和重启即重置的行为使系统范围的 LD_PRELOAD 切实可行。在传统的多用户 Linux 系统上,请优先使用方法 1(模块黑名单)——通过 /etc/ld.so.preload 注入会影响系统上的每个进程,并可能静默破坏依赖 AF_ALG 的服务。
注意: 需要 glibc(不支持 musl)。修改 /etc/ld.so.preload 需要 root 权限。移除时需删除文件中的相应行。