Readactor: Practical Code Randomization Resilient to Memory Disclosure阅读笔记(二)

Readactor是一种针对内存泄漏攻击的防御技术,它通过代码页的execute-only权限设置、编译器层面的保护以及JIT编译器的防御策略,阻止直接和间接内存泄漏。在实验中,Readactor成功抵御了不同类型的代码重用攻击,虽然带来一定的性能开销,但其全面的安全性使其成为一种有效的解决方案。
摘要由CSDN通过智能技术生成

Readactor:代码随机化应对内存泄漏问题-阅读笔记(二)

3、Readactor如何实现攻击防御

针对之前提到的这两种内存泄漏攻击,Readactor分别使用相应的技术进行防御。同时本文中还给出了针对JIT编译情况下的保护方案。

1)Readactor如何阻止基于直接内存泄漏的攻击( EXECUTE-ONLY MEMORY)

此部分介绍了Readactor如何实现在内存层面的保护。
Readactor利用了商业x86处理器的虚拟化特性将代码页和只执行许可进行映射。在EPT技术的支持下,将code page许可设置execute-only,使得攻击者在程序执行过程中不能读取和分解code page,从而来阻止直接内存泄露攻击。
Figure 5:利用Execute-only内存阻止直接内存泄露
Figure 5:利用Execute-only内存阻止直接内存泄露

以一个switch-case程序为例。从上图中可以看出,(左边)code page是可读可执行的,且LLVM编译器在jump_table中给出了对应每个case的基本块地址,可以被攻击者直接访问到。而(右边)Readactor将switch-case的表转变为可执行指令,而不是嵌套在可执行代码中的数据,并且存放在execute-only许可的code page中。攻击者无法读取。

2)Readactor如何阻止间接内存泄漏攻击(COMPILER INSTRUMENTATION)

此部分介绍了Readactor如何实现在编译器层面的保护。
本文修改了LLVM编译器框架来实现以下目标:
1)产生多样化的代码
2)阻止良性代码读取代码页中的数据
3)阻止攻击者利用代码指针执行间接溢出攻击
使用的技术包括:A细粒度的代码多样化;B代码和数据的分离;C代码指针的隐藏;
Readactor为了隐藏所有函数指针和返回地址,结合了利用EPT实现的execute-only内存技术和基于trampoline的指针隐藏技术,同时还使用了高效的细粒度的代码随机化技术。
Figure 6: 利用指针隐藏技术阻止间接内存泄露
Figure 6: 利用指针隐藏技术阻止间接内存泄露

从上图中可以看出,代码指针原本存放在data

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值