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!