序言
在 Linux 安全领域,管理员不断地在保护敏感系统资源和可访问性之间寻求微妙的平衡。近年来,通过 Linux 进程能力提升权限已成为一个备受关注的有用途径。虽然传统的类 Unix 权限对访问权限提供了粗粒度的控制,但进程能力提供了一种细致的方法,允许特定进程在无需完全 root 访问权限的情况下拥有提升的权限。
本出版物深入研究了通过 Linux 进程能力提升权限的复杂世界,揭示了其机制、影响以及在加强系统安全方面不可或缺的作用。组织需要了解 Linux 功能如何通过权限提升增加其攻击面,以及如何使用免费和开放的检测功能有效地监控入侵尝试。
Linux 进程能力
Linux 进程能力允许用户微调在 Linux 系统上运行的进程的权限。传统上,Linux 使用简单的二进制方法来处理进程权限:进程要么以完全 root 权限(超级用户)运行,要么以普通用户的有限权限运行。
但是,这种二进制方法需要对安全用例具有更高的灵活性,特别是那些仅需要提升某些操作权限的用例。为了解决这个问题,Linux 引入了能力,允许进程拥有传统上与 root 用户相关的权限子集。这些能力使用“替代用户,执行”(sudo
)子系统进行管理。相比之下,进程能力提供了一种更精细的方式来授予进程特定的权限。sudo
命令允许用户临时提升其权限,以超级用户或其他用户的身份执行管理任务。
以下是 Linux 进程能力的工作原理
-
基于角色的权限:在传统的 Unix 安全模型中,超级用户(root)对所有系统资源和操作具有不受限制的访问权限。任何以 root 权限运行的进程都可以在系统上执行任何操作。
-
基于能力的权限:通过能力,特定的权限从 root 用户的权限中分离出来,可以单独分配给进程。这允许进程仅被授予执行其任务所需的特定权限,而不是授予它们完全的 root 访问权限。可以将能力分配给单个可执行文件或正在运行的进程。当启动可执行文件时,可以将其配置为保留或删除某些能力。同样,可以使用
setcap
(用于设置文件能力)或capsh
(用于创建能力 shell 包装器)等工具从正在运行的进程中添加或删除能力。 -
能力组:Linux 能力分为不同的类型,每种类型代表一组不同的权限。能力的一些示例包括
CAP_SYS_ADMIN
(执行一系列系统管理任务)、CAP_NET_ADMIN
(配置网络接口)和CAP_DAC_OVERRIDE
(绕过文件读/写权限检查)。 -
有效和允许的能力:每个进程都有两组能力——有效集和允许集。有效集决定了进程在任何给定时间可以使用哪些能力,而允许集决定了进程可以通过权限提升获得哪些能力。
-
能力边界集:能力的边界集定义了进程可以获取的能力的上限,即使是通过权限提升也是如此。这是一种安全功能,旨在防止未经授权地提升权限。
Linux 进程能力提供了一种更精细的方式来管理权限,通过减少进程的攻击面来增强安全性,同时仍然允许它们执行必要的任务 - 当然,这取决于操作员的错误!它们在某些操作需要提升的权限的情况下特别有用,但授予完全的 root 访问权限是过度的,并且可能存在风险。
通过 Linux 进程能力提升权限
通过 Linux 进程能力提升权限涉及利用错误配置或漏洞来获得超出进程预期用途的额外权限。虽然能力旨在为权限管理提供更精细和更安全的方法,但它们仍然可能被滥用或错误配置,从而导致潜在的安全风险。本节将探讨通过进程能力可能发生的一些权限提升方式。
- 错误设置的能力:如果一个可执行文件被分配了它不需要执行其预期功能的权限,攻击者可能会通过运行该文件来利用这一点来获得额外的权限。
- 风险:攻击者可能会利用错误配置,其中二进制文件被分配了不必要的设置用户标识 (
setuid
) 能力。攻击者可以通过执行二进制文件来访问这些能力,从而可能提升其权限。 - 示例:假设一个 setuid 二进制文件
/usr/bin/example_binary
设置了CAP_SYS_ADMIN
能力。如果此能力是不必要的,攻击者可以通过执行二进制文件并获得提升的权限来利用此能力。
- 能力泄漏:有时,能力会从其父进程泄漏。如果父进程拥有的能力超出了必要范围,并且派生了一个子进程,则该子进程可能会继承这些能力,从而可能使其拥有的权限超出预期。
- 风险:如果一个特权父进程在不删除不必要的能力的情况下派生一个子进程,它可能会继承它不需要的能力。
- 示例:Web 服务器进程由于其要求而以提升的权限运行,但会派生一个子进程来处理用户请求。当 Web 服务器派生子进程时,通常这样做是为了有效地处理传入的客户端请求。每个子进程负责处理一个或多个客户端连接,从而允许 Web 服务器同时处理多个请求。但是,在某些情况下,Web 服务器派生的子进程可能会无意中继承 Web 服务器不需要的不必要权限或能力。这可能会带来安全风险,因为这些子进程可能具有超出服务 Web 请求所需的访问能力或资源的权限。当 Web 服务器使用通用进程创建机制派生子进程,而没有明确删除不必要的权限或能力时,这些子进程可能会继承父进程的能力。这可能包括创建原始网络套接字、操作防火墙或访问敏感文件或系统资源等能力。
- 利用存在漏洞的 setuid/setgid 二进制文件:某些
setuid
或setgid
二进制文件可能被分配了 capabilities(能力)。如果攻击者可以滥用其中一个二进制文件的错误配置,他们可能能够以授予该二进制文件的高级权限执行任意代码,从而导致权限提升。
- 风险:利用具有高级权限的 setuid 或 setgid 二进制文件中的漏洞可能导致权限提升。
- 示例:一个存在漏洞的
setuid
二进制文件,例如/bin/su
,可能存在漏洞,允许攻击者以高级权限执行任意代码,从而有效地将他们的权限提升到 root。
- 内核漏洞:由于 Linux 内核强制执行 capabilities,因此内核中的漏洞可能会被利用来绕过 capability 检查并获得高级权限。
- 风险:Linux 内核本身的漏洞可能会被利用来绕过 capability 检查并获得高级权限。
- 示例:假设一个内核漏洞允许攻击者操纵 capability 检查。通过利用此漏洞,攻击者可以绕过 capability 检查并获得他们不应该拥有的 capabilities。
- Capability 边界集配置错误:如果 capability 边界集配置不正确,进程可以通过权限提升技术获得额外的 capabilities。
- 风险:攻击者可以利用 capability 边界集通过诸如使用
ptrace
系统调用来观察和控制另一个进程的执行等技术来获得额外的 capabilities。 - 示例:攻击者可以滥用配置错误的 capability 边界集,以允许其恶意进程跟踪和控制另一个进程,从而有效地获得其 capabilities。
- 滥用文件属性:Linux 文件系统支持扩展属性,包括文件 capabilities。如果攻击者获得了对具有高级 capabilities 的文件的控制权,他们可能能够执行该文件并获得这些 capabilities,从而可能导致权限提升。
- 风险:利用包括文件 capabilities 在内的扩展属性可能允许攻击者执行具有高级 capabilities 的文件,从而导致权限提升。
- 示例:攻击者可以获得对具有高级 capabilities(例如
CAP_NET_ADMIN
)的文件的控制权,并执行该文件以获得这些 capabilities,从而可能提升他们的权限以执行超出其预期范围的网络相关任务。
缓解权限提升的风险
通过进程 capabilities 缓解权限提升风险涉及实施多项安全最佳实践,以降低未经授权访问高级权限的风险。以下是一些需要考虑的关键实践:
-
最小权限原则:遵循最小权限原则,仅将必要的 capabilities 分配给进程和用户。将 capabilities 限制在特定任务所需的范围内,避免分配不必要的权限。
-
定期审计和审查:对分配给可执行文件、进程和用户的 capabilities 进行定期审计和审查。确保根据最小权限原则准确分配 capabilities。
-
安全配置 Setuid/Setgid 二进制文件:审查并限制分配给这些二进制文件的 capabilities,以防止未经授权的权限提升。
-
Capability 边界集配置:正确配置 capability 边界集,以限制通过诸如
ptrace
等权限提升技术获得的 capabilities。限制进程可用的 capabilities,特别是那些具有高级权限的进程。 -
内核和软件更新:Linux 内核和所有软件组件应使用最新的安全补丁进行更新。应定期应用更新,以缓解可能被利用进行权限提升的潜在漏洞。
-
安全加固:实施安全加固措施以加强系统的整体安全态势。这包括配置和部署安全增强机制,例如 SELinux (Security-Enhanced Linux) 或 AppArmor,以强制执行强制访问控制和限制策略。
-
文件系统完整性检查:实施文件系统完整性检查,以检测对文件的未经授权的更改,包括具有扩展属性(例如 capabilities)的文件。
-
监控和日志记录:实施强大的监控和日志记录机制,以检测和跟踪与权限提升尝试相关的可疑活动。监控系统日志、审计跟踪和安全事件,以识别未经授权的访问尝试或异常行为。
通过采取所有这些措施来降低通过 Linux 进程 capabilities 进行权限提升的风险,漏洞可能会进入基础设施,从而为利用和获得控制权提供机会。下一节将介绍 Elastic Security 如何帮助检测进程 capabilities 的权限提升用例。
使用 Elastic Security 检测权限提升
在 Elastic 8.11 中,添加了新的检测规则来检测 Linux 进程 capabilities 的发现和权限提升。用户可以通过遵循 安装和管理 elastic 预构建规则 的指南来利用这些 Elastic 预构建规则。要启用和组织这些特定规则,请参考 管理检测规则 指南。
为了获得围绕 Linux 进程 Capabilities 的可见性,用户还可以从以下列表中搜索特定的预构建规则以启用它们:
- 进程 Capability 枚举
- 通过 Linux DAC 权限的潜在权限提升
- 通过 Enlightenment 的潜在权限提升
- 通过 GDB CAP_SYS_PTRACE 的权限提升
- 通过 GDB CAP_SYS_PTRACE 的 Root 网络连接
- 通过 CAP_CHOWN/CAP_FOWNER Capabilities 的权限提升
- 通过 CAP_SETUID/SETGID Capabilities 的权限提升
- 一些构建块规则
- 通过 CAP_NET_RAW 的网络流量捕获
- 分配给二进制文件的 CAP_SYS_ADMIN
重要的 Elastic 基础设施说明:建议 Stack + Agent + Policy 都使用 8.11+ 版本来捕获 Linux 进程 capabilities。在可用的 Linux 进程线程 capability 集中,只有以下两个集合在 Elastic 8.11+ Elastic 基础设施上捕获:
CapPrm
(允许的 capabilities) 是进程可以拥有的 capabilities。CapEff
(有效的 capabilities) 集合是当前进程执行时使用的所有 capabilities。
结论
在 Linux 安全领域,理解并有效地利用进程 capabilities 进行权限提升至关重要。通过在不使用完全 root 访问权限的情况下为特定进程授予高级权限,此机制通过限制受损进程的潜在影响来增强系统的安全态势。然而,这种权力带来了更大的责任;错误配置或滥用进程 capabilities 可能会引入新的利用途径。
我们已经揭示了进程 capabilities 与传统权限模型(例如 sudo)之间微妙的相互作用,突出了它们在访问控制中的补充作用。作为管理员,必须实施强大的实践来管理和审计进程 capabilities,确保仅向受信任的进程授予必要的权限。
此外,随着 Linux 生态系统的不断发展,保持对进程 capability 管理的更新和最佳实践的认识至关重要。通过警惕、教育和采用安全至上的原则,我们可以加强我们的系统以应对新兴威胁,同时保持现代计算环境所需的灵活性和功能。
借助 Elastic Defend 对通过 Linux 进程 capabilities 进行权限提升的主动方法,我们可以加强系统的安全基础,并防范不断变化的威胁环境中的潜在漏洞。