分析 Linux exploit(漏洞利用程序)是安全研究、漏洞挖掘、恶意代码分析和防御建设中的核心技能。下面从目标理解 → 静态分析 → 动态分析 → 利用原理 → 防御对策几个层次系统性地讲解。
一、明确分析目标
在分析前先搞清楚:
- Exploit 类型:本地提权 / 远程代码执行 / 拒绝服务
- 目标漏洞:内核漏洞 / 用户态软件漏洞(堆、栈、格式化字符串等)
- 运行环境:内核版本、libc 版本、架构(x86 / x86_64 / ARM)
常用信息收集:
uname -a
cat /etc/os-release
ldd --version
二、静态分析(不运行程序)
1. 文件类型与基本信息
file exploit
checksec --file=exploit
关注:
- 是否 stripped
- 是否开启 PIE / RELRO / Canary / NX
2. 反汇编与反编译
- 汇编级:
objdump -d、gdb
- 高级语言级:
Ghidra、IDA Pro、radare2
重点看:
main 函数逻辑
- 系统调用(
syscall / int 0x80)
- 字符串(如
/proc/self/maps、shellcode)
3. 源码分析(若有)
如果是公开 exploit(如 exploit-db):
- 理解漏洞触发点
- 看 patch 对比(CVE + kernel commit)
三、动态分析(实际运行)
⚠️ 必须在隔离环境(虚拟机 / 容器 / 沙箱)中进行
1. 行为监控
strace -f ./exploit
ltrace ./exploit
观察:
- 文件访问
- 系统调用序列
- mmap / ptrace / execve
2. 调试分析
gdb -q ./exploit
或内核 exploit:
qemu-system-x86_64 -kernel bzImage -append "nokaslr"
关键断点:
- 漏洞触发函数
- syscall 入口
- shellcode 执行点
3. 内存与进程分析
cat /proc/<pid>/maps
pmap <pid>
分析:
四、理解利用原理(核心)
常见 Linux exploit 技术:
用户态
- 栈溢出 + ROP
- 堆漏洞(UAF、double free)
- 格式化字符串
- GOT 覆写
内核态
- 空指针解引用
- 竞态条件(race condition)
- 释放后使用(UAF in kernel)
- 权限检查绕过(capability / seccomp)
典型提权流程:
- 触发漏洞
- 控制内存 / 执行流
- 修改
cred 结构
- 起 root shell
五、从防御视角复盘
分析完后应回答:
- 哪些缓解机制被绕过(KASLR / SMEP / SMAP)
- 如何检测该 exploit(审计日志、eBPF)
- 如何修复(补丁、配置、加固)
六、推荐学习路径
- 先学 C + Linux 系统编程
- 学 pwn(CTF)
- 学 Linux 内核基础
- 复现经典 CVE(如 Dirty COW)
如果你愿意,可以:
- 给我一个具体 exploit 或 CVE
- 或说明你是防守 / 攻击 / 研究方向
我可以直接带你一步步分析。