Glibc内存管理
- 进程内存布局
- 内存管理的方法
- 内存管理器的设计目标
- 常用的C内存管理程序
ptmalloc源代码分析
- Heap操作相关函数
- Main_arena与non_main_arena
- Chunk的组织
- 空闲chunk容器
- sbrk 与 mmap
- ptmalloc的响应用户内存分配
- free():接受一个指向chunk的指针,释放所指向的chunk
常见攻击方式
- Unlink attack. 它主要通过修改chunk的fd和bk指针和释放期间的unlink操作,以实现任意地址的4/8字节覆盖(aa4bmo)。
- Malloc Maleficarum.
- Malloc Maleficarum.
- Free Chunk Enlarge Attack
- Free Chunk Shrink Attack
- Nonadjacent Free Chunk Consolidation Attack
建议与启发
堆的漏洞利用原理:其步骤是首先逆向程序并分析堆的分配状态,然后找到堆的缺陷并分析漏洞的可利用性,最后通过调试器构造堆布局以及人工编写 Exploit 完成复现。
一些自动化堆漏洞利用的启发:
- 堆数据为块数据,无法通过精确地控制堆块数据来达到控制流劫持的目的;
- 堆溢出漏洞利用的触发取决于巧妙的控制申请和释放块数据,通过符号执行和污点分析技术很难抽象出堆分配的内部信息;
- 难点在于处理构造堆操作序列和重新布局堆内存,以及在堆利用的过程中减少人工干预、提高自动化程度等;
- 分析内存崩溃的上下文,使用符号执行或模糊测试获取可利用性;
- 研究内存管理机制的深层次问题和共同特点,提高效率。
本次组会内容下载链接