1. 程式人生 > >【paper 略讀】漏洞利用技術 Heap Spray檢測方法研究

【paper 略讀】漏洞利用技術 Heap Spray檢測方法研究

看paper如果沒有點產出,過個一兩天可能啥都不記得了。 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的地址。(我覺得不靠譜,大家都得配合你這麼幹才行)