Linux Exploit(漏洞利用)原理指的是在 Linux 系统上,攻击者利用系统或软件中存在的安全漏洞,绕过安全机制(如权限限制、隔离机制等),实现执行任意代码、提权、逃逸或持久化控制的技术原理。
下面从核心目标、常见漏洞类型、利用原理、典型流程、防御思路几个层面系统说明。
一、Linux Exploit 的核心目标
在 Linux 中,Exploit 通常服务于以下目标之一:
- 本地提权(Privilege Escalation)
- 远程代码执行(RCE)
- 容器逃逸(Container Escape)
- 绕过安全机制
- SELinux / AppArmor / seccomp / ASLR / DEP
- 持久化与隐藏
二、常见 Linux 漏洞类型与利用原理
1. 内存破坏类(最经典)
(1)栈溢出(Stack Overflow)
原理:
- 程序未正确限制输入长度
- 覆盖返回地址(Return Address)
- 控制程序执行流
利用方式:
- 覆盖返回地址 → 跳转到 shellcode
- 或跳转到
system("/bin/sh")
防护绕过:
- ASLR:泄露地址
- NX/DEP:使用 ROP(Return-Oriented Programming)
(2)堆溢出(Heap Overflow)
原理:
- 破坏堆管理结构(如 glibc malloc)
- 改写 chunk 指针、释放链表
结果:
(3)Use-After-Free(UAF)
原理:
典型利用:
2. 逻辑漏洞类
(1)权限检查缺失
例如:
例子:
cp /etc/shadow /tmp/shadow
若程序以 root 运行且未限制路径
(2)竞态条件(TOCTOU)
原理:
例子:
3. 内核漏洞(Kernel Exploit)
常见目标:
- syscalls
- 驱动模块
- netfilter
- eBPF
利用方式:
- 内核任意读写
- 修改
cred 结构体
- 提权为 root
典型结构:
commit_creds(prepare_kernel_cred(0));
4. 容器与隔离逃逸
原理:
- 共享内核
- 错误配置:
--privileged
- 挂载
/var/run/docker.sock
- 主机 PID namespace
逃逸方式:
- 写 host 文件系统
- 加载内核模块
- 利用脏管道(Dirty Pipe, CVE-2021-4034)
三、Exploit 的一般构造流程
- 漏洞发现
- 触发条件分析
- 控制执行流
- 绕过防护
- 执行 payload
- 清理与隐藏
四、典型防护机制与绕过
| 防护机制 |
原理 |
绕过方式 |
| ASLR |
地址随机化 |
信息泄露 |
| NX/DEP |
不可执行内存 |
ROP |
| SMEP/SMAP |
内核不能访问用户内存 |
内核 ROP |
| seccomp |
限制系统调用 |
寻找允许调用 |
| SELinux |
强制访问控制 |
错误配置利用 |
五、常见真实案例(简要)
- Dirty COW(CVE-2016-5195):竞态写只读内存 → 提权
- Dirty Pipe(CVE-2022-0847):管道溢出写任意文件
- Polkit pkexec(CVE-2021-4034):环境变量处理错误 → root
- glibc / sudo 漏洞:本地提权
六、防御角度(很重要)
- 最小权限原则
- 及时打补丁
- 禁用不必要的 SUID
- 容器安全配置
- 开启内核防护(KASLR、SMEP、SMAP)
- 使用 seccomp / AppArmor
如果你愿意,我可以进一步讲:
- 一个具体 CVE 的利用全过程
- 栈溢出从零到 shell
- 内核提权 exploit 示例
- 如何写自己的 PoC
你更想深入哪一块?