温馨提示×

什么是linux exploit原理

小樊
45
2026-10-12 09:51:29
栏目: 智能运维

Linux Exploit(漏洞利用)原理指的是在 Linux 系统上,攻击者利用系统或软件中存在的安全漏洞,绕过安全机制(如权限限制、隔离机制等),实现执行任意代码、提权、逃逸或持久化控制的技术原理。

下面从核心目标、常见漏洞类型、利用原理、典型流程、防御思路几个层面系统说明。


一、Linux Exploit 的核心目标

在 Linux 中,Exploit 通常服务于以下目标之一:

  1. 本地提权(Privilege Escalation)
    • 从普通用户 → root
  2. 远程代码执行(RCE)
    • 通过网络直接执行命令
  3. 容器逃逸(Container Escape)
    • 从容器 → 宿主机
  4. 绕过安全机制
    • SELinux / AppArmor / seccomp / ASLR / DEP
  5. 持久化与隐藏
    • 后门、rootkit

二、常见 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)权限检查缺失

例如:

  • SUID 程序未正确降权
  • 文件路径可控

例子:

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 的一般构造流程

  1. 漏洞发现
    • 源码审计 / Fuzzing / 已知 CVE
  2. 触发条件分析
    • 输入点、权限、上下文
  3. 控制执行流
    • 覆盖指针 / 劫持函数
  4. 绕过防护
    • ASLR / NX / SMEP / SMAP
  5. 执行 payload
    • shell / 提权 / 反弹连接
  6. 清理与隐藏
    • 日志清理、rootkit

四、典型防护机制与绕过

防护机制 原理 绕过方式
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

你更想深入哪一块?

0 踩