GLIBC版本更新的一些变动
glibc2.27(小版本变动没记)
- 增加了tcache
 - 再malloc_consolidate中
 
1  | /*新增:检查从fastbin中取出的chunk的大小是否满足fastbin的索引,house-of-rabbit无法使用 */  | 
- 在unlink中
 
1  | /*新增:检查其下一个chunk的prev_size是否和size相等,即使用house-of-einherjar时第一个chunk应该被放入到unsortedbin中*/  | 
- 在2.27小版本1.4以后增加了key
 
glibc2.29
- tcache_entry结构体中增加了key,防止doublefree
 
1  | typedef struct tcache_entry  | 
- 对在unsortedbin中即将取出的chunk和其nextchunk做检查(unsorted_attack报废)
 
1  | /*新增:unsortedbin attack失效,house-of-storm无法使用*/  | 
- 在unlink前增加了对prev_size和size的判断
 
1  | /*新增:检查了prev_size和上一个chunk的size是否相等,house-of-einherjar不能使用*/  | 
glibc-2.30&glibc-2.31
- tcache_perthread_struct中的counts类型变为uint16_t类型
 
1  | typedef struct tcache_perthread_struct  | 
- 如果tcache->counts[tc_idx]<=0则不会从tcache中取chunk
 
1  | if (tc_idx < mp_.tcache_bins  | 
- 将chunk从unsortedbin中取出放入到largebin时做了检查,增大了largebin attack的难度。
 
1  | if (__glibc_unlikely (fwd->bk_nextsize->fd_nextsize != fwd))  | 
glibc-2.32
- tcache中对e->next也就是fd指针做了加密,(&e->next>>12)<<12即为heap_base
 
1  | e->next = PROTECT_PTR (&e->next, tcache->entries[tc_idx]);  | 
- 对fastbin的fd指针也做了相同的加密。
 
1  | /*新增:fastbin的fd指针被加密*/  | 
- 增加了很多指针是否对齐的检查
 - 检测了申请的地址是否0x10对齐,错位构造不可行了
 
glibc-2.34
- 移除了一些hook,最低版本的2.34,貌似exit_hook还是可用的,其他的就不可用了
 
glibc-2.35
- 一些虚表不可以写了
 
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 gxh's blog!
