一、 内核提权的核心原理
Linux 采用权限分级机制(root:0,普通用户:1-65535),内核运行在最高权限的内核态(Ring 0),用户程序运行在用户态(Ring 3)。内核提权的本质是:
- 低权限用户通过系统调用触发内核漏洞;
- 利用漏洞执行任意内核态代码(如修改当前进程的
uid/gid为 0); - 从内核态返回用户态时,已获得 root 权限。
二、 常见内核漏洞类型及利用场景
1. 内存破坏类漏洞(最主流)
内核对内存操作的校验不严格,导致攻击者可篡改内核内存数据,执行恶意代码。
- 缓冲区溢出(Buffer Overflow)
- 原理:内核函数对输入数据长度校验不足,导致超出缓冲区的恶意数据覆盖内核栈 / 堆中的关键信息(如返回地址、函数指针)。
- 典型案例:CVE-2017-16995(eBPF 权限提升漏洞)、CVE-2021-4034(Polkit pkexec 本地提权,虽非纯内核漏洞,但利用了内核与用户态交互缺陷)。
- 使用后释放(Use-After-Free, UAF)
- 原理:内核释放内存对象后未清空指针,攻击者通过竞争条件重新控制该内存区域,伪造内核数据结构。
- 典型案例:CVE-2022-0847(Dirty Pipe,通过管道缓冲区越界写入修改文件内容,间接实现提权)、CVE-2019-13272(overlayfs 权限检查漏洞)。
- 越界读写(Out-of-Bounds Read/Write)
- 原理:内核数组 / 链表操作时未校验索引范围,导致攻击者读取或修改内核敏感内存区域。
2. 权限检查绕过类漏洞
内核在执行敏感操作时(如文件访问、进程管理),权限校验逻辑存在缺陷,导致低权限用户绕过限制。
- 典型案例:CVE-2021-3493(Ubuntu overlayfs 漏洞,低权限用户可通过挂载 overlayfs 修改任意文件权限)。
3. 配置与设计缺陷
- 内核模块加载漏洞:部分系统允许普通用户加载自定义内核模块(
modprobe权限配置错误),攻击者可通过恶意模块直接获取 root 权限。 - SUID/SGID 程序滥用:内核对 SUID 程序的权限管控不严,攻击者通过触发特定内核行为,让 SUID 程序执行恶意代码。
三、 内核提权的典型利用流程(渗透测试视角)
信息收集
- 目标主机内核版本:
uname -r(如5.4.0-125-generic)、cat /proc/version。 - 操作系统发行版:
cat /etc/os-release(Ubuntu、CentOS、Debian 等,不同发行版的内核补丁差异大)。 - 已安装内核补丁:
dpkg -l | grep linux-image(Debian/Ubuntu)、rpm -qa | grep kernel(CentOS/RHEL)。 - 关键配置:
sysctl kernel.modules_disabled(是否禁止加载内核模块)。
- 目标主机内核版本:
漏洞匹配
- 根据内核版本 + 发行版,查询公开漏洞库(CVE Details、Exploit-DB、GitHub),寻找对应的公开 EXP。
- 核心工具:
searchsploit:本地漏洞库查询,如searchsploit Linux kernel 5.4.0 Ubuntu。exploitdb:在线搜索,匹配精准漏洞 EXP。
EXP 编译与执行
- 多数内核提权 EXP 为 C 语言编写,需在目标主机编译(需安装
gcc):gcc exp.c -o exp -static(静态编译避免依赖缺失)。 - 执行 EXP:
./exp,成功后返回 root 权限 shell(如#提示符)。
- 多数内核提权 EXP 为 C 语言编写,需在目标主机编译(需安装
绕过防御机制
- SELinux 绕过:若 SELinux 开启(
getenforce显示Enforcing),部分 EXP 需添加 SELinux 绕过逻辑,或临时关闭(setenforce 0,需特定权限)。 - AppArmor 绕过:修改 EXP 规避 AppArmor 对敏感路径的限制。
- 内核防护机制绕过:如 KASLR(内核地址空间随机化),部分旧漏洞 EXP 需泄露内核基地址才能利用。
- SELinux 绕过:若 SELinux 开启(
四、 蓝队防御与检测策略
1. 核心防御措施:阻断漏洞源头
- 及时更新内核补丁
- 定期升级内核至最新稳定版本:
- Debian/Ubuntu:
apt update && apt install linux-image-generic -y && reboot。 - CentOS/RHEL:
yum update kernel -y && reboot。
- Debian/Ubuntu:
- 关注厂商安全公告,优先修复高危提权漏洞(如 CVE 评分 ≥9.0)。
- 定期升级内核至最新稳定版本:
- 限制内核模块加载
- 配置
sysctl kernel.modules_disabled=1,禁止加载自定义内核模块(需重启生效)。 - 对必须加载的模块,通过
/etc/modprobe.d/配置白名单。
- 配置
- 最小权限原则
- 禁止普通用户执行
sudo权限下的敏感命令(如modprobe、mount)。 - 清理系统中不必要的 SUID/SGID 程序:
find / -perm -4000 -ls,移除非必要程序的 SUID 权限。
- 禁止普通用户执行
- 启用内核安全机制
安全机制 作用 启用方式 KASLR 随机化内核内存地址,增加 EXP 编写难度 内核编译时开启 CONFIG_RANDOMIZE_BASE,多数发行版默认启用SMEP/SMAP 禁止内核态执行用户态内存 / 禁止内核态访问用户态内存 需 CPU 支持,内核默认启用 SELinux/AppArmor 强制访问控制,限制进程权限 设为 Enforcing模式,配置严格规则
2. 检测手段:发现提权行为
- 日志监控
- 监控内核日志:
dmesg中异常信息(如segmentation fault、kernel panic、invalid opcode),可能是 EXP 执行失败导致的内核崩溃。 - 监控进程权限变更:通过
auditd配置规则,记录setuid(0)等敏感系统调用,如:bash
运行
auditctl -a exit,always -F arch=b64 -S setuid -k privilege-escalation - 监控可疑文件:检测
/tmp目录下的恶意可执行文件、内核模块文件(.ko)。
- 监控内核日志:
- 行为检测
- 部署 HIDS(主机入侵检测系统,如 OSSEC、Wazuh),监控以下异常行为:
- 低权限用户突然执行 root 权限命令(如
passwd、/bin/bash)。 - 异常的内核模块加载(如
insmod、modprobe调用)。 - 对
/proc/kcore(内核内存镜像)的访问。
- 低权限用户突然执行 root 权限命令(如
- 部署 HIDS(主机入侵检测系统,如 OSSEC、Wazuh),监控以下异常行为:
- 定期自查
- 使用工具扫描内核漏洞:
lynis audit system(系统安全审计工具)、rkhunter(rootkit 检测工具)。 - 模拟攻击:使用公开 EXP 对测试机进行提权测试,验证防御有效性。
- 使用工具扫描内核漏洞:
五、 典型内核提权 EXP 示例(以 Dirty Pipe 为例)
CVE-2022-0847(Dirty Pipe)影响 Linux 内核 5.8 ~ 5.16.11,攻击者可通过管道缓冲区越界写入,修改任意只读文件(如/etc/passwd),实现提权。
- 核心思路:向管道写入大量数据,触发内核缓冲区溢出,覆盖只读文件的内存映射区域。
- 简化 EXP 逻辑:
c
运行
#include <unistd.h> #include <fcntl.h> #include <stdio.h> #include... - 执行效果:运行 EXP 后,可将普通用户添加到
/etc/passwd并赋予 root 权限。