hardenedlinux.org 项目的开发人员发布了一款名为 'userland-exec' 的新工具包。该工具包能够在 Linux 系统启用了内核级安全防护的情况下,执行任意 ELF 二进制文件。
该工具包包含一个远程代码执行 (RCE) 的概念验证 (PoC) 示例,能够绕过基于文件系统的安全控制(如 'noexec' 挂载选项)以及 SELinux 和 AppArmor 等强制访问控制 (MAC) 系统。
通过完全在用户空间内完成执行过程,该工具包避开了内核的执行路径。这使得内核无法检测到 'execve(2)' 系统调用,从而让安全监控工具和审计日志无法察觉到新进程的存在。
绕过内核强制执行
传统的 Linux 加固手段依赖内核在启动新进程时执行限制。而 'userland-exec' 采用了一种不同的方法:它解析目标 ELF 头部,并使用 'mmap' 或 'memfd_create' 将程序段直接映射到当前进程的地址空间中。
开发人员在文档中表示:“一旦在进程内部实现了任意代码执行,基于文件系统和以 execve 为核心的控制措施在很大程度上就形同虚设。”
该工具包还包含一种绕过 'W^X'(写与执行不可兼得)保护机制的方法。它利用一种特殊的信号处理程序,在加载过程中临时将内存权限从 'PROT_EXEC' 更改为 'PROT_WRITE',随后又恢复原始权限以规避检测。
为了演示该漏洞,开发人员发布了一个名为 'rce_demo' 的示例,其中包含一个存在漏洞的 TCP 服务器。该演示通过格式化字符串泄露和栈缓冲区溢出漏洞来劫持控制流并执行有效载荷 (payload)。
该工具包支持两种主要的执行模式:'disk 模式'(将有效载荷写入文件)和 'memfd 模式'(使用 'memfd_create' 在内存中完全运行有效载荷)。后者在物理磁盘上不留任何痕迹,使得取证工具极难检测到此类攻击。
由于该工具包是就地替换现有进程映像,'ps' 或 'top' 等系统监控工具仍会显示原始且合法的进程名称及上下文。这使得未经授权的代码能够伪装成受信任的服务进行运行。