【Kernel】漏洞利用技术 Heap Spray检测方法研究

看文章如果没有点产出,过个一两天可能啥都不记得了。于是就有了这篇水文。

paper下载地址:http://www.wanfangdata.com.cn/details/detail.do?_type=perio&id=xxaqytxbm201206032

这篇paper很短,只有三页,来自上海交通大学信息工程学院,总结了三种heap spray的检测方法。

最早,skylined 2004年在IE frame漏洞的exp中利用了heap spray。攻击原理见ppt。

基于字符串的检测,本质是检测内存中是否出现nop+retaddr的字符串。开源snort检测x86下的shellcode就是只检测大量nop这样的指令,但是误报率高。Ratanaworabhan 对heap内存中的字符串进行反汇编,建立CFG(控制流程图),看看是否有大量的块是否都指向一个小块(其实就是nop+retaddr 指向shellcode),超过阀值就报警。

基于内存保护的检测,两种方式:堆内预分配和dep。
堆内预分配:heap spray中会经常出现0x0c0c0c0c这样的retaddr,so操作系统会预先在这里分配数据。
dep和dep衍生。dep就是数据不可执行,衍生是Gadaleta来做的,主要是针对浏览器来做的。把内存中的字符串0x90909090用0xcc分割,并记录分割过的位置。合法的访问时,恢复对应的字符串。如果非法访问时,没有这样的记录,不恢复字符串,就gg。(这样其实阻止组织heap spray的,降低概率。但是我觉得这样一点都不优雅)

基于系统调用的检测。heap spray本质最终是调用系统调用,so可以拦截int 0x80,并判断。(但是系统调用那么多,这个比较难实现)。paper最后提到了,有人(Hsp)提出了吧int 0x80 的地址减少到1个并且存储在堆中,在内核中登记地址。应用程序中可以把int 0x80的地址放在GOT中,并把GOT设置为不可读不可写,防止攻击者搜索程序得到int 0x80的地址。(我觉得不靠谱,大家都得配合你这么干才行)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值