关卡公司
已为 Glibc (ptmalloc)、uClibc-NG (dlmalloc)、gperftools (tcmalloc) 和 Google TCMalloc 准备了实现安全链接的补丁,并且还建议升级 Chromium 中的保护(在
自2012年以来,Chromium已经内置了MaskPtr保护技术,旨在解决同样的问题,但Checkpoint的解决方案表现出了更高的性能)。
建议的补丁已被批准在 XNUMX 月版本中交付
开发人员
安全链接会导致每次调用 free() 时执行 2-3 条额外的汇编指令,每次调用 malloc() 时执行 3-4 条指令。 不需要运行初始化和随机值生成阶段。
安全链接不仅可用于提高各种堆实现的安全性,还可用于向使用放置在缓冲区本身旁边的指针单链表的任何数据结构添加完整性控制。 该方法实现起来非常简单,只需要添加一个宏并将其应用于指向代码中下一个块的指针(例如,对于 Glibc
+#define PROTECT_PTR(pos, ptr) \
+ ((__typeof (ptr)) ((((size_t) pos) >> 12) ^ ((size_t) ptr)))
+#define REVEAL_PTR(ptr) PROTECT_PTR (&ptr, ptr)
- 下一个p = p->fd;
+ nextp = REVEAL_PTR (p->fd);
...
该方法的本质是利用ASLR地址随机化机制(mmap_base)中的随机数据来保护Fast-Bins和TCache等单链表。 在将该值应用于指向列表中下一个元素的指针之前,它会执行掩码转换并检查页面对齐情况。 该指针被“(L >> PAGE_SHIFT) XOR (P)”运算的结果替换,其中 P 是指针的值,L 是存储指针的内存位置。
在系统中使用时
该方法可有效防止使用部分指针重写(更改低字节)、完全指针重写(重定向到攻击者的代码)以及更改未对齐地址处的列表位置的攻击。 作为一个例子,它表明在 malloc 中使用安全链接将允许最近阻止利用
来源: opennet.ru