
ARMO 的安全研究人员发现了 Linux 运行时安全工具中的一个重要漏洞,这个漏洞源于io_uring接口,这是一种异步 I/O 机制,可以完全绕过传统的系统调用监控。研究表明,攻击者可以利用这个盲点在大多数现有安全解决方案无法检测到的情况下进行操作。
该团队开发了一个名为“Curing”的概念验证 rootkit,它完全通过 io_uring 操作来运行,成功地避开了包括Falco、Linux 上的Microsoft Defender for Endpoint在内的主要安全工具的检测,并且需要为像 Tetragon 这样的工具进行特殊配置。该 rootkit 展示了完整的命令和控制功能,而没有进行任何安全工具通常会监控的传统系统调用。
我们展示了我们的研究,关于如何有效地绕过 Linux 运行时检测工具。这项研究与任何 Linux 环境都相关,特别是在现代云原生环境中。
io_uring 接口是在 Linux 内核5.1中引入的,旨在通过用户空间和内核空间之间的共享环形缓冲区来提供高性能的异步 I/O。与传统依赖系统调用的 Unix I/O 操作不同,io_uring 使用这些环形缓冲区作为主要的通信机制,有效地创建了一个绕过传统监控方法的替代路径。
这项研究建立在 Daniel Teixeira 的早期工作之上,他在 2022 年首次展示了 io_uring 的规避潜力,但 ARMO 的团队现在已经创建了第一个功能齐全的 rootkit 来证明实际威胁。io_uring 接口目前支持 61 种不同的操作,包括通常会触发安全警报的关键网络和文件系统函数。
测试表明,开源和商业安全解决方案都存在广泛的漏洞。Falco,一个广泛用于运行时安全监控的 CNCF 毕业项目,由于依赖系统调用钩子,对基于 io_uring 的操作完全无效。Falco 的维护者已经承认了这个问题,并正在开发基于 LSM 的插件来填补空白。Linux 上的 Microsoft Defender for Endpoint 也显示出了类似的盲点,未能检测到各种恶意活动,包括敏感文件访问、恶意软件部署和通过 io_uring 执行的加密货币挖矿操作。研究人员指出,只有可能会使用到 Fanotify 钩子的文件完整性监控模块提供了一些检测能力。
这项研究暴露了当前基于eBPF的安全方法的基本局限性,到许多供应商都已经采用了这种方法。虽然 eBPF 为构建安全代理提供了性能和安全优势,但其验证器约束经常推动供应商采用直接挂接到系统调用的最简单实现方法。
这种直接的方法提供了快速的可见性,但假设系统调用将始终被用于安全相关的操作。io_uring 的绕过表明,随着内核接口的发展,这种假设越来越不可靠。研究人员强调,安全供应商需要超越简单的系统调用监控,以保持对现代规避技术的有效防范。
ARMO 的研究确定了几种检测基于 io_uring 攻击的方法。最有希望的长期解决方案涉及实施 KRSI(Kernel Runtime Security Instrumentation,内核运行时安全工具),它建立在 Linux 安全模块框架之上,通过 LSM 钩子而不是系统调用监控提供更可靠的覆盖。
可选的检测策略包括监控异常的 io_uring 使用模式,因为大多数合法应用程序通常不使用这个接口。然而,这种方法需要仔细实施,以避免在动态环境中产生误报。安全团队还可以识别内核堆栈中的备选钩子点,尽管这需要更深入的内核内部专业知识。研究人员还建议遵循 Windows 安全模型,其中 Microsoft 从不可靠的 SSDT 钩子转向结构化通知例程,以保证回调执行。Linux 的 KRSI 代表了类似的演变,提供了更一致的安全事件覆盖,更难通过创造性的系统调用规避来绕过。
这个漏洞对云原生环境具有特别的意义,其中 Linux 构成了容器化基础设施的基础。容器编排平台和微服务架构的广泛部署意味着单一的安全盲点可能会对整个部署产生连锁反应。这项研究强调了安全解决方案需要与不断发展的内核特性保持前向兼容,而不是依赖于传统的监控方法。随着内核接口继续扩展新的异步机制和性能优化,无法适应的安全工具将在保护方面留下越来越大的空白。
原文链接:
https://www.infoq.com/news/2025/09/linux-security-rootkit/
评论