博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Kernel】漏洞利用技术 Heap Spray检测方法研究
阅读量:4206 次
发布时间:2019-05-26

本文共 810 字,大约阅读时间需要 2 分钟。

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

paper下载地址:

这篇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的地址。(我觉得不靠谱,大家都得配合你这么干才行)

 

转载地址:http://eemli.baihongyu.com/

你可能感兴趣的文章
面试刷题31:分布式ID设计方案
查看>>
面试刷题32:你对tomcat做了哪些性能调优?
查看>>
面试刷题33:如何应对高并发?
查看>>
面试刷题34:说一下分布式架构中的缓存使用场景?
查看>>
面试刷题35:负载均衡有哪几种实现方式?
查看>>
面试刷题36:线程池的原理和使用方法?
查看>>
面试刷题36:线程池的原理和使用方法?
查看>>
面试刷题37:微服务是什么?springcloud,springboot是什么?
查看>>
技术面试要做哪些准备?
查看>>
kafka的基本体系结构
查看>>
kafka消息分区机制原理
查看>>
kafka高吞吐量之消息压缩
查看>>
如何保证kafka消息不丢失
查看>>
如何保证kafka消息不丢失
查看>>
请设计一个核心功能稳定适合二开扩展的软件系统
查看>>
kafka可插拔增强如何实现?
查看>>
COLA的扩展性使用和源码研究
查看>>
SOFA入门
查看>>
DDD之1微服务设计为什么选择DDD
查看>>
DDD之2领域概念
查看>>