【摘 要】堆噴射技術(shù)因為其良好的可移植性和易用性,被廣泛應(yīng)用于針對瀏覽器的攻擊中。堆噴射的實質(zhì)是申請大量的連續(xù)的內(nèi)存,使得溢出攻擊后的地址可預(yù)測。針對堆噴射的檢測和防御,國內(nèi)外都有很多成熟的技術(shù),本文介紹了其中最經(jīng)典模型以及其特點。
【關(guān)鍵詞】堆噴射 檢測 可預(yù)測
1 堆噴射原理介紹
堆噴射在學(xué)術(shù)界并無嚴格的定義,一般來講堆噴射技術(shù)是通過向內(nèi)存申請分配大量的對象,使攻擊載荷(通常是NOPSLED + Shellcode[1])分布在連續(xù)且可預(yù)測的內(nèi)存區(qū)域的一種技術(shù)。堆噴射技術(shù)不是一種攻擊技術(shù)而是一種攻擊載荷傳遞技術(shù),是黑客攻擊的催化劑而不是發(fā)起源。堆噴射技術(shù)由于在堆中申請了大量的對象,使得溢出后可選地址變多,從而使得攻擊的成功率更高,適用范圍更廣。
2 堆噴射技術(shù)詳細介紹
首先簡單介紹一下什么是堆,以及在系統(tǒng)中如何申請堆內(nèi)存。從定義上來講,堆是一種數(shù)據(jù)結(jié)構(gòu),當應(yīng)用程序需要使用大量的動態(tài)內(nèi)存空間時,只能在堆內(nèi)申請空間。在Windows系統(tǒng)中,可以調(diào)用VirtualAlloc函數(shù)來申請堆內(nèi)存(當然也可以采用其它的函數(shù)如HeapCreate等申請大塊的堆內(nèi)存。)。
堆噴射中的每一個對象都是一串滑板和攻擊載荷(shellcode)組成,圖中所用滑板指令為 or al, 0ch。 這些指令并沒有實際的執(zhí)行功能,只是為了確保程序能順序執(zhí)行到核心的攻擊載荷(shellcode)。
3 堆噴射的檢測和保護手段
3.1 檢測shellcode
由Manuel Egele等人[2]在2009年提出了關(guān)于堆噴射的檢測手段,具體方法是通過跟蹤所有堆……