新闻详情

新闻详情

首页 / 资讯中心 / 详情

Fastbin Dup 利用原理与双重释放(Double Free)缓解机制演进

发布时间:2026/9/4 22:20:20来源:尧图网络
Fastbin Dup 利用原理与双重释放(Double Free)缓解机制演进
Fastbin Dup 利用原理与双重释放Double Free缓解机制演进在 Linux glibc 堆内存管理机制中Fastbin 是为了加速小尺寸内存分配而设立的单向无头链表结构。早期二进制利用中Fastbin Dup 作为最基础且威力巨大的堆利用手法之一核心在于通过非连续的双重释放Double Free破坏堆管理器的内部链表结构使得两个指向同一块物理内存的指针同时处于可用状态进而篡改链表指针实现任意地址写。Fastbin 机制与 Double Free 形成机理在 glibc 堆分配器中Fastbin 处理通常小于 80 字节x86-64 下默认最大支持 0x80 字节的 chunk 大小视全局变量global_max_fast而定的内存块。Fastbin 采用单向链表结构管理空闲 chunk遵循后进先出LIFO原则。分配器使用 chunk 头部的fdforward pointer指针指向链表中前一个被释放的 chunk并且在释放时不进行相邻 chunk 的合并不清除 inuse 标志位以此保证极致的分配与回收性能。在 glibc 2.26 之前glibc 对 fastbin chunk 的free操作仅进行了一处极为简陋的安全检查校验当前被释放的 chunk 地址是否与对应 fastbin 链表头部的 chunk 地址相同。/* glibc 早期 _int_free 中对 fastbin 的安全检查 */ if (__builtin_expect (old p, 0)) { errstr double free or corruption (fasttop); goto errout; }这段检查只比对了old当前 fastbin 头节点与p待释放 chunk这意味着如果我们在两次释放同一个 chunk 之间插入对另一个 chunk 的释放操作就可以轻松绕过此检查。经典 Fastbin Dup 攻击路径推演假设程序中按顺序申请了两个大小相等的 fastbin 块a和bvoid *a malloc(0x20); // 实际 chunk 尺寸 0x30 void *b malloc(0x20); // 实际 chunk 尺寸 0x30 void *c malloc(0x20); // 执行交替释放 free(a); // fastbin[0x30]: a - NULL free(b); // fastbin[0x30]: b - a - NULL free(a); // 绕过 old p 检查fastbin[0x30]: a - b - a - ... (形成环)此时fastbin链表中已经形成了自引用环。随后攻击者按如下步骤申请并覆写第一次调用malloc(0x20)返回指针a。此时链表头变为bb-fd仍指向a。写入数据到a覆盖其fd字段为一个伪造的目标地址例如栈上伪造的 chunk 或__malloc_hook前方满足 size 检查的位置fake_chunk。第二次调用malloc(0x20)返回指针b。此时链表头重新回到a但a-fd已经被攻击者修改为fake_chunk。第三次调用malloc(0x20)再次返回指针a。此时分配器将a-fd即fake_chunk设置为新的链表头。第四次调用malloc(0x20)将直接返回fake_chunk的用户数据区攻击者成功在受控目标内存地址获取可写句柄。// 伪造利用代码段 void *p1 malloc(0x20); void *p2 malloc(0x20); void *p3 malloc(0x20); free(p1); free(p2); free(p1); char *r1 (char *)malloc(0x20); // 篡改 r1 (即 p1) 的 fd 指针指向目标 fake chunk *(unsigned long long *)r1 target_fake_chunk_addr; char *r2 (char *)malloc(0x20); // 获得 p2 char *r3 (char *)malloc(0x20); // 再次获得 p1 char *r4 (char *)malloc(0x20); // 成功拿到 target_fake_chunk_addrglibc 缓解机制的技术演进随着 glibc 版本的不断更新针对 fastbin 双重释放和堆指针篡改的防护措施逐步收紧。1. glibc 2.26引入 tcache 对 fastbin 的截流在 glibc 2.26 中引入了线程本地缓存Thread Local Cache, tcache。默认情况下小于等于 0x408 字节的 chunk 会优先进入对应大小的 tcache bin容量上限为 7 个 chunk。此时若要利用 fastbin dup必须先耗尽fill up对应 size 的 tcache 链表。例如连续申请 7 个同尺寸 chunk 并释放填满 tcache后续的 chunk 释放才会真正进入 fastbin从而激活 fastbin dup 的利用链路。2. glibc 2.29遍历 fastbin 链表杜绝重入从 glibc 2.29 开始分配器在释放 fastbin chunk 时不再仅仅检查头节点而是遍历该 fastbin 桶中的全部节点/* glibc 2.29 _int_free 中的 fastbin 链表遍历检测 */ if (__builtin_expect (old p, 0)) malloc_printerr (double free or corruption (fasttop)); { mchunkptr tmp old; while (tmp) { if (__builtin_expect (tmp p, 0)) malloc_printerr (double free or corruption (fasttop)); tmp tmp-fd; } }这一检查直接终结了free(a) - free(b) - free(a)这种经典环状构造手法。一旦a已经存在于当前 fastbin 链表中的任何位置再次释放a都会触发 abort 并打印错误信息。3. glibc 2.32Safe-Linking 指针混淆glibc 2.32 引入了Safe-Linking安全指针链接机制对 fastbin 和 tcache 的fd单链表指针进行位运算加密。其核心混淆公式为#define PROTECT_PTR(pos, ptr) \ ((__typeof (ptr)) ((((size_t) pos) 12) ^ ((size_t) ptr))) #define REVEAL_PTR(ptr) \ PROTECT_PTR (ptr, ptr)在 safe-linking 下写入fd的指针必须是(当前 chunk 存放 fd 的地址 12) ^ 真实目标地址。若攻击者无法泄露堆基址Heap Base Address就无法算出有效的 ASLR 随机化掩码写入非法构造的指针会在解引用时触发页错误异常崩溃。现代防御与编码修复规范在实际工业代码与红蓝对抗场景中针对此类堆安全隐患需要从多层进行彻底阻断指针释放后立即置空Dangling Pointer Elimination在所有free(ptr)操作后强制设置ptr NULL从根源上杜绝 UAFUse-After-Free与 Double Free。#define SAFE_FREE(p) do { \ if ((p) ! NULL) { \ free(p); \ (p) NULL; \ } \ } while(0)启用现代内存分配器替代方案在对安全性要求极高的场景中使用Hardened Malloc如 Android 默认的 Scudo 分配器或 GrapheneOS hardened_malloc引入基于 chunk 元数据的隔离、校验和随机化防护使传统的堆结构篡改手法彻底失效。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Java工业数据采集实战:JEasyOpc OPC DA客户端开发与避坑指南 2026/9/4 23:08:43

Java工业数据采集实战:JEasyOpc OPC DA客户端开发与避坑指南

简介:本资源是面向Java工业自动化开发者的JEasyOpc OPC通信库完整集成包,专为解决Java应用与OPC服务器(如PLC、SCADA系统)间数据交互难题而设计,适用于过程控制、监控系统开发等场景,尤其适合需快速接入OPC…

阅读更多 →
MATLAB实现SAR成像:从回波信号到雷达图像的完整链路解析 2026/9/4 23:08:43

MATLAB实现SAR成像:从回波信号到雷达图像的完整链路解析

简介:本资源是一份面向雷达信号处理初学者与高校相关专业学生的SAR/ISAR成像算法实践材料,聚焦合成孔径雷达回波建模、多普勒频移分析及逆合成孔径成像核心流程。压缩包仅含1个MATLAB源文件(.m格式),即核心脚本ISAR.m&…

阅读更多 →
3 个场景跑通 FaceFusion:从安装到出片的人脸融合完整实操 2026/9/4 23:08:43

3 个场景跑通 FaceFusion:从安装到出片的人脸融合完整实操

3 个场景跑通 FaceFusion:从安装到出片的人脸融合完整实操 【免费下载链接】facefusion Industry leading face manipulation platform 项目地址: https://gitcode.com/GitHub_Trending/fa/facefusion FaceFusion 是一个开源的人脸融合(face swap…

阅读更多 →
FastGPT 大 PDF 解析实战指南:三步让 GB 级复杂文档进入知识库 2026/9/4 23:08:43

FastGPT 大 PDF 解析实战指南:三步让 GB 级复杂文档进入知识库

FastGPT 大 PDF 解析实战指南:三步让 GB 级复杂文档进入知识库 【免费下载链接】FastGPT FastGPT is a knowledge-based platform built on the LLMs, offers a comprehensive suite of out-of-the-box capabilities such as data processing, RAG retrieval, and v…

阅读更多 →
WeChatMsg:15分钟把微信聊天记录导出成能搜索、能打印的文件 2026/9/4 23:08:43

WeChatMsg:15分钟把微信聊天记录导出成能搜索、能打印的文件

WeChatMsg:15分钟把微信聊天记录导出成能搜索、能打印的文件 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…

阅读更多 →
Grok 4.6发布在即:开发者应如何评估模型价值与搭建接入生态? 2026/9/4 23:05:42

Grok 4.6发布在即:开发者应如何评估模型价值与搭建接入生态?

这两年的大模型竞争,已经从“拼参数”走进了“拼牌桌资格”的阶段。每隔几周就有一个新版本登场,Grok 4.6 这个名字出现在牌桌上,并不让人意外,真正值得讨论的是:xAI 手里除了更强的基础模型,还有什么&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞