快速摘要

  • AF_ALG,一个用于用户空间加密的内核接口,正在 Linux 内核 7.2 中被弃用。
  • 内核开发者认为 AF_ALG 加密接口带来了巨大的安全攻击面,而实际收益甚微。
  • 弃用并非因为 AF_ALG 本身有缺陷,而是成本效益比发生了变化。用户空间库(如 OpenSSL)已经能更好地完成工作,因此没有理由为了少数仍使用它的程序而保留一个特权内核接口。
  • cve-2026-31431
  • 2.6.git

Linux 内核 7.2 弃用 AF_ALG

Linux 内核开发者正在推动弃用 AF_ALG 加密接口,这是持续减少内核攻击面、提升整体系统安全性的努力的一部分。

AF_ALG 允许用户空间应用程序访问 Linux 内核实现的加密算法。虽然该接口最初旨在提供对内核加密服务和硬件加速功能的便捷访问,但开发者现在认为,与它引入的安全风险和维护负担相比,它提供的实际收益有限

尽管 AF_ALG 在当前 Linux 发行版中仍然可用,但弃用过程已经开始。最近的补丁记录了其弃用,并移除了诸如零拷贝支持和硬件加速器卸载等关键功能。这些变更预计将出现在 Linux 内核 7.2 中。

在本文中,我们将探讨为什么 Linux 开发者想要淘汰 AF_ALG 功能,以及推动这一决定的安全考量。

编者注: 截至 2026 年 6 月,Linux 7.1 处于发布候选阶段(RC6)。Linux 7.2 尚未发布,其合并窗口也未开启。本文描述的 AF_ALG 弃用已*获得批准并排入内核加密子系统树,目标是在 Linux 7.2 合并窗口(预计于 2026 年 6 月中旬开启)中合并,Linux 7.2 稳定版预计在 2026 年 8 月下旬发布。*

为什么 Linux 内核开发者想要弃用 AF_ALG

Linux 开发者日益面临一个难题:漏洞被发现的速度比以往更快。现代分析工具,包括 AI 辅助安全研究和大型语言模型(LLM),能够比过去更快地识别错误和潜在攻击路径。

AF_ALG 弃用讨论中,Linux 内核开发者 Eric Biggers 指出了不断变化的漏洞格局,并引用了最近的例子,如 Copy Fail (CVE-2026-31431) 漏洞。Copy Fail 是一个逻辑缺陷,允许一个 732 字节的 Python 脚本在几乎所有运行自 2017 以来构建的内核的主流 Linux 发行版上获得 root 权限。

Eric 认为,现代漏洞发现技术使得大型内核攻击面在提供有限实际价值的情况下越来越难以合理化。

因此,Linux 开发者更加重视尽可能减少攻击面。AF_ALG 被引为一个子系统的例子,其长期安全成本可能超过收益。

零拷贝支持的问题

AF_ALG 首批被移除的功能之一是它的零拷贝能力。

零拷贝设计可以通过允许内核直接操作用户空间应用程序提供的内存(而不是创建中间副本)来提高性能。然而,这种方法也带来了安全挑战。

AF_ALG 的零拷贝实现允许用户空间直接对页缓存页请求加密操作,并使得在加密操作进行时内存可能被修改。这创造了可能导致检查时间到使用时间(TOCTOU)漏洞的条件。

这个问题尤其严重,因为 AF_ALG 可以操作基于文件的内存映射。在某些场景下,这可能允许攻击者在加密操作进行时针对敏感文件,例如 su 二进制文件。

为了降低这种风险,开发者正在移除 AF_ALG 的零拷贝支持,并用更安全的内核内部数据副本替代。

硬件卸载未带来预期收益

另一个提议的变更涉及硬件加密加速。

AF_ALG 最初旨在通过内核加密子系统提供对专用加密加速器硬件的访问。然而在实践中,开发者发现这些加速器驱动增加了复杂性、维护成本,并引入了额外的安全风险。

他们还指出,AF_ALG 对于硬件加速器来说并不是一个特别高效的接口,而且这种用法在实际部署中相对罕见。

因此,AF_ALG 对加密加速器卸载的支持正在被移除,作为更广泛弃用工作的一部分。

为什么鼓励开发者使用用户空间加密库

对于大多数应用程序,用户空间加密库如 OpenSSL 和类似项目已经提供了成熟、维护良好的常见加密算法实现。

使用用户空间库避免了暴露额外的内核攻击面,同时简化了开发和维护。这符合 Linux 长期以来的设计原则:不需要在内核中运行的功能应尽可能保留在用户空间

开发者指出,仍然依赖 AF_ALG 的应用程序相对较少。讨论中提到的一个例子是 iwd,即 Intel 无线守护进程。鼓励开发者将剩余的 AF_ALG 用户迁移到用户空间加密库。

Linux 用户应该做什么

对于大多数 Linux 用户来说,AF_ALG 弃用本身不需要立即采取行动。该接口在当前发行版中仍然可用,完全移除将在未来的内核版本中进行。

然而,像 Copy Fail 这样的页缓存漏洞需要紧急关注。所有用户应尽快应用其发行版的内核更新以防范这些漏洞。

除了应用最新的内核补丁,开发者和系统管理员应开始评估其软件是否依赖 AF_ALG,并考虑在最终移除之前迁移到用户空间加密库。

具体步骤:

  • 立即修补 Copy Fail 及类似错误: 从你的 Linux 发行版安装最新的内核更新。上游修复已于 2026 年 4 月合并,现在所有主要发行版均可获得。
  • Copy Fail 的临时缓解措施: 如果无法立即更新内核,可以通过在内核配置中设置 CONFIG_CRYPTO_USER_API_AEAD=n,或禁用 algif_aead 模块来禁用特定的易受攻击模块。这可以阻止被利用的 AEAD 接口,而不会禁用整个 AF_ALG。
  • 完全禁用 AF_ALG(可选): 如果你的应用程序完全不使用 AF_ALG,禁用更广泛的 CONFIG_CRYPTO_USER_API 选项可以移除整个接口。这是为维护自定义内核的用户提供的构建时选项。
  • 审查 AF_ALG 依赖: 识别任何依赖 AF_ALG 的应用程序,并在最终弃用落地到未来内核版本之前评估迁移选项。

总结

提议的 AF_ALG 弃用反映了 Linux 内核开发的更广泛趋势:减少复杂性,移除那些创造安全风险但缺乏足够实际收益的功能。

通过消除零拷贝支持、移除硬件卸载功能,并鼓励迁移到用户空间加密库,Linux 内核开发者旨在缩小内核的攻击面并降低未来的安全风险。

AF_ALG 尚未消失,但内核维护者正计划弃用它。开发者认为其长期成本超过了收益,弃用过程现已开始。

参考资料:

  1. AF_ALG 弃用补丁 - 内核 cryptodev 树 (Eric Biggers)
  2. Linux 7.2 推进弃用 AF_ALG 因“巨大攻击面”,移除卸载功能
  3. Linux AF_ALG 加密代码移除零拷贝支持