philfry/cve-2026-31431-ftrace
GitHub: philfry/cve-2026-31431-ftrace
利用 Linux ftrace 机制构建内核模块,在不依赖 eBPF-LSM 的条件下临时缓解 CVE-2026-31431 漏洞。
Stars: 12 | Forks: 3
# 使用 ftrace 缓解 cve-2026-31431
目前用于缓解 cve-2026-31431 的 ebpf 解决方案需要在启动时设置 `lsm=bpf`,
而这通常不是默认配置。对于 OracleLinux,该选项从 2025 年 12 月起在
**UEKr7u3** 和 **UEKr8u1** 中默认启用。
要检查您是否可以使用 ebpf-lsm 来缓解 _copyfail_,请检查
`/sys/kernel/security/lsm` 中是否包含 `bpf`。
由于我们的部分机器仍在运行稍旧的内核(由于某些原因),
我寻找了其他方法来缓解此安全问题,无论是通过阻止 `AF_ALG/AEAD` 还是直接一次性阻止 `AF_ALG`。
我想到了编写一个内核模块来拦截 `__sock_create` 并阻止 `AF_ALG`,或者拦截 `aead_bind` 并阻止所有请求。
当时的想法是使用 `ftrace` 来实现,这在 **UEKr7** 及更高版本中可用。
要编译这些模块,请尝试以下操作:
```
git clone this_repository
cd this_repository
make
```
对于使用 UEK 的 Oracle Linux,请确保在运行 `make` 之前安装并使用正确的软件包:
```
. /etc/os-release
releasever=${VERSION/.*}
uek=7 # or 8, whatever you use
dnf -y --enablerepo=ol${releasever}_UEKR${uek} install kernel-uek-devel make gcc kernel-headers
# 您可能需要以下之一:
# 针对 oel9/uekr8
. /opt/rh/gcc-toolset-14/enable
# 针对 oel8/uekr7
. /opt/rh/gcc-toolset-11/enable
```
然后加载该模块:
```
# 立即阻止 AF_ALG
insmod /path/to/af_alg_block.ko
# 或仅阻止 AF_ALG/AEAD
insmod /path/to/af_alg_aead_block.ko
```
现在,所有对 `AF_ALG` 的请求或所有 AEAD 绑定(取决于您加载的模块)都应该被阻止,并且所有的尝试都会被记录到日志中。
## 免责声明
我不是内核开发者。我学习了 ftrace 的文档,并通过反复试验构建了这个模块,
直到所有的 `AF_ALG` 请求都被阻止,同时没有影响其他地址族。
我在一些机器上对此进行了测试,对我来说它看起来很稳定。我不保证它同样适用于您,
其他的攻击向量可能会绕过此模块,或者该模块也未必不会导致您的机器变得不稳定。
然而,作为一个快速的修复措施,它可以填补机器最终能够重启之前的这段空档期。
标签:AEAD, AF_ALG, CVE-2026-31431, ftrace, Linux内核模块, LSM BPF, Oracle Linux, UEK, Web报告查看器, 内核加固, 内核开发, 动态追踪, 子域名枚举, 安全渗透, 安全防护, 客户端加密, 漏洞拦截, 漏洞缓解, 系统安全, 网络安全, 隐私保护