iOS系统内存分配器的利用与漏洞利用策略
1. 内存利用策略的转变
过去,常见的攻击策略是覆盖堆元数据,这样在链表元素被解除链接时,攻击者就能覆盖任意内存位置。但如今,覆盖应用特定数据更为常见,因为堆通常会检查其数据结构的一致性。要覆盖应用特定数据,通常需要确保溢出的缓冲区与需要被覆盖的缓冲区相邻。
2. 理解iOS系统分配器
iOS系统分配器名为magazine malloc。若要研究其实现,可参考Mac OS X分配器(其实现位于Mac OS X的Libc源代码的magazine_malloc.c中)。虽然对Mac OS X分配器的旧版本已有一些研究,但关于magazine malloc利用的信息普遍缺乏。
2.1 区域划分
magazine malloc使用区域的概念进行内存分配,堆被分为三个区域:
- Tiny :小于496字节。
- Small :大于496字节但小于15360字节。
- Large :大于15360字节。
各区域的特点如下表所示:
| 区域 | 大小 | 量子大小 | 自由列表情况 |
| ---- | ---- | ---- | ---- |
| Tiny | 1MB | 16字节 | 维护32个自由列表,1 - 31用于分配,最后一个用于合并后的块 |
| Small | 8MB | 512字节 | 维护32个自由列表,1 - 31用于分配,最后一个用于合并后的块 |
| Large | 大
超级会员免费看
订阅专栏 解锁全文

572

被折叠的 条评论
为什么被折叠?



