Heap Spraying

計算機安全領域中,Heap Spraying(堆噴射)是一種較易獲得任意代碼執行Exploit的技術手段。這個短語同樣用於描述一套Exploit源碼中採用此技術的代碼部分。在一般情況下,堆噴射代碼試圖將自身大面積地分配在進程堆疊中,並且以正確的方式將命令寫滿這些區域,以此實現在目標進程的記憶體中預定的位置寫入一串命令。它們通常利用了堆噴射代碼執行時這些堆疊區域總是在同一位置的這一特性。

基本介紹

  • 中文名:堆噴射
  • 外文名:Heap Spraying
  • 領域計算機安全領域
  • 定義:較易獲得任意代碼執行Exploit
歷史,優缺點,優點,缺點,防範和檢測,

歷史

Heap Spraying在編寫Exploit中的套用至少始於2001年,但是這項技術在一系列針對於IE的大面積漏洞而編寫Expolit時被採用後,開始普遍用於Web瀏覽器的Exploit編寫。Heap Spraying技術在這些Exploit的開發套用上十分相似,這體現了它的廣譜性和可移植性(各Exploit間無需做大的改動)。它被證實是易懂易用的,能被新手hackers加以利用,快捷地為各種瀏覽器和瀏覽器外掛程式漏洞編寫可用的Exploit。許多採用Heap Spraying開發的瀏覽器Exploit,只要在前一個版本的Exploit基礎上更改一小處代碼,便能觸發漏洞。執行方式JavaScript方式
針對瀏覽器的堆噴射一般通過JavaScript執行,即向heap提交超長的由同一字母組成的Unicode字元串,這種字元串不斷複製自身並追加在原字元串末尾。這樣,字元串的長度會呈指數增大至腳本引擎允許的最大長度。當達到預期的長度時,一條指令將會加到字元串的末尾。Heap Spraying代碼複製下這一帶有指令的字元串並存儲為一數組,使得Exploit的目標記憶體區域被指令所覆蓋。VBScript有時(儘管很少)也用來生成字元串,因為其string函式更加簡單。
圖像方式
儘管Heap Spraying證實可被用於其他方式執行,比如被進程載入圖片檔案時觸發,但並不多見。

優缺點

優點

增加緩衝區溢出攻擊的成功率
覆蓋地址變得更加簡單了,可以簡單使用類NOP指令來進行覆蓋
它也可以用於堆疊溢出攻擊,用slidecode覆蓋堆疊返回地址即可

缺點

會導致被攻擊進程的記憶體占用暴增,容易被察覺
不能用於主動攻擊,一般是通過棧溢出利用或者其他漏洞來進行協同攻擊
上面說了,如果目的地址被shellcode覆蓋,則shellcode執行會失敗,因此不能保證100%成功

防範和檢測

1、一般來講,應用程式的堆分配是很平滑的,分配模式也應該是隨機的,或者從理論上來說隨機性非常明顯,不應該出現記憶體暴增現象,從已有的一些Heap Spray的代碼來看,都會瞬間申請大量記憶體,從這個特點出發,我們可以設計這樣一種方案,如果發現應用程式的記憶體大量增加(設定閾值),立即檢測堆上的數據,看是否包含大量的slidecode,如果滿足條件則告警提示用戶“受到Heap Spray攻擊”或者幫助用戶結束相關進程。不過這種方式有一個缺點是無法確定攻擊源,而優點則是能夠檢測未知漏洞攻擊。
2、針對特殊的瀏覽器,將自身監控模組注入瀏覽器進程中,或者通過BHO讓瀏覽器(IE)主動載入。當瀏覽器的腳本解釋器開始重複申請堆的時候,監控模組可以記錄堆的大小、內容和數量,如果這些重複的堆請求到達了一個閥值或者覆蓋了指定的地址(譬如幾個敏感地址0x0C0C0C0C,0x0D0D0D0D等等),監控模組立即阻止這個腳本執行過程並彈出警告,由於腳本執行被中斷,後面的溢出也就無法實現了。這種檢測方法非常安靜,幫助用戶攔截之後也不影響用戶繼續瀏覽網頁,就好像用戶從來沒有遇到過此類惡意網頁。
3、對於一些利用腳本(Javascript Vbscript Actionscript)的進行Heap Spray攻擊的情況,可以通過hook腳本引擎,分析腳本代碼,根據一些Heap Spray常見特徵,檢測是否受到Heap Spray攻擊,如果條件滿足,則立即結束腳本解析。現在QQ電腦管家裡面正在使用這一技術。
4、比較好的系統級別防範辦法應該是開啟DEP,即使被繞過,被利用的機率也大大降低了。
check!

熱門詞條

聯絡我們