目前针对缓解 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 来实现。
要编译这些模块,请尝试以下操作:
git clone this_repository
cd this_repository
make
对于使用 UEK 的 Oracle Linux,请确保在运行 make 之前安装并使用正确的软件包:
. /etc/os-release
releasever=${VERSION/.*}
uek=7 # 或 8,取决于您使用的版本
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 请求都被阻止,且不影响其他地址族。
我在一些机器上进行了测试,对我来说它看起来很稳定。我不保证它对您也有效, 其他攻击向量可能会绕过此模块,或者该模块不会导致您的机器不稳定。
不过,这是一个快速修复方案,可以填补机器最终能够重启之前的这段时间。