漏洞緩解技術

1.Security Cookie

  • 在函數調用發生時,向棧幀內壓入一個額外的隨機 DWORD,這個隨機數被稱做Security Cookie
  • Security Cookie 位於 EBP 之前, 系統還將在.data的內存區域中存放一個 Security Cookie的副本
  • 在函數返回之前,系統將執行一個額外的安全驗證操作,被稱做 Security check
  • 在 Security Check 的過程中,系統將比較棧幀中原先存放的 Security Co okie 和.data 中副本的值,如果兩者不吻合,說明棧幀中的 Security Cookie 已被破壞,即棧中發生了溢出
  • 當檢測到棧中發生溢出時,系統將進入異常處理流程,函數不會被正常返回, ret 指令也不會被執行

2.DEP:Data Execution Prevention

溢出攻擊的根源在於現代計算機對數據和代碼沒有明確區分這一先天缺陷,DEP(數據執行保護, Data Execution Prevention)就是用來彌補計算機對數據和代碼混淆這一天然缺陷的。

DEP 的基本原理是將數據所在內存頁標識爲不可執行,當程序溢出成功轉入 shellcode 時,程序會嘗試在數據頁面上執行指令,此時 CPU 就會拋出異常,而不是去執行惡意指令。

ROP的全稱爲Return-oriented Programming,主要思想是在棧緩衝區溢出的基礎上,利用程序中已有的小片段 (gadgets) 來改變某些寄存器或者變量的值,從而控制程序的執行流程。

3.ASLR:地址隨機化

無論是 JMP ESP 等通用跳板指令還是 ROP使用的各指令,我們都要先確定這條指令的入口點。
ASLR( Address Space Layout Randomization)技術就是通過加載程序的時候不再使用固定的基址加載,從而干擾 shellcode 定位的一種保護機制。
a.映像隨機化
映像隨機化是在 PE 文件映射到內存時,對其加載的虛擬地址進行隨機化處理,這個地址是在系統啓動時確定的,系統重啓後這個地址會變化。
b.堆棧隨機化
在程序運行時隨機的選擇堆棧的基址,與映像基址隨機化不同的是堆棧的基址不是在系統啓動的時候確定的,而是在打開程序的時候確定的,也就是說同一個程序任意兩次運行時的堆棧基址都是不同的,進而各變量在內存中的位置也就是不確定的。
c.PEB 與 TEB 隨機化
PEB 與 TEB 隨機化在 Windows XP SP2 中就已經引入了,微軟在 XP SP2 之後不再使用固定的 PEB 基址 0x7FFDF000 和 TEB 基址 0x7FFDE000,而是使用具有一定隨機性的基址,這就增加了攻擊 PEB 中的函數指針的難度。

Heap sp ray 本來就是爲了應對堆空間隨機分配的問題產生的, ASLR 本質也是隨機化處理,所以直接使用 Heap spray 繞過 ASLR 也是可能的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章