一.緩沖區溢位攻擊步驟:
- 注入攻擊代碼
- 跳轉到攻擊代碼(核心環節)
- 執行攻擊代碼
二.緩沖區溢位按照所攻擊物件的不同可分為 3 類
-
破壞堆疊資料
? 改變
RETADDR的值,使其存放已經注入到堆疊中的攻擊代碼的地址或者是代碼區中某些具有特權的系統函式地址(比如system), -
破壞堆資料
-
更改類函式指標
三.緩沖區溢位漏洞分析技術
-
漏洞自動檢測技術
- 靜態檢測按照對模型節點的遍歷方法分類
- 正向分析:指從可能發生緩沖區溢位漏洞的源節點出發,正向遍歷模型中的節點,在遍歷的程序中生成相應約束或提取部分屬性進行分析的分析方法,
- 逆向分析:指從可能發生緩沖區溢位漏洞的槽 (
sink)節點出發,逆向遍歷模型中的節點,在遍歷的程序中生成相應約束或提取部分屬性進行分析的方法, - 無向分析:指在分析程序中不考慮節點的前驅節點、后繼節點和到達節點的條件等語意資訊,只考慮節點自身的語法資訊進行分析的方法,
- 靜態檢測按技術種類,采用技術,及分析側重點分類
- 基于
抽象解釋的緩沖區溢位漏洞靜態檢測技術 - 基于
符號執行的緩沖區溢位漏洞靜態檢測技術 - 基于
污染傳播的緩沖區溢位漏洞靜態檢測技術 - 基于
特征分類的緩沖區溢位漏洞靜態檢測技術
- 基于
- 靜態檢測按照對模型節點的遍歷方法分類
-
漏洞自動修復技術
-
漏洞修復技術可按 照修復策略的復雜程度分為 3 種
-
采用簡單修復策略的緩沖區溢位漏洞修復技術
在進行溢位漏洞修復時,只采取 1 條簡單常規修復策略的漏洞自動修復技術,例如,對所有要修復的物件都在訪問緩沖區前加入條件判斷陳述句,以確保訪問位置在緩沖區分配大小內,
-
采用復合修復策略的緩沖區溢位漏洞修復技術
在進行溢位漏洞修復時,采取多條常規修復策略的漏洞自動修復技術,例如,在修復程序中,依據不同情況采用擴充緩沖區分配大小、訪問緩沖區前增加條 件判斷、替換可能會發生緩沖區溢位漏洞的不安全函式操作等不同策略進行修復,
-
采用其他修復策略的緩沖區溢位漏洞修復技術
對軟體進行遺傳變異或者其他非常規的方法對溢位漏洞進行自動修復,
-
-
-
漏洞運行時防護技術
-
被動防護技術
旨在保障記憶體中某些關鍵物件或性質完整性的防護技術,在程式運行程序中,時刻驗證監控某些性質是否得到滿足或者某些狀態值(如堆疊中的回傳地址或者
EBP)是否沒被修改,因為時刻在驗證關鍵物件或性質的完整性,當攻擊出現時,該技術可以被動地檢測到有人嘗試在修改某些關鍵物件或者性質,并在攻擊的觸發下做相應的防護處理,因此稱其為被動防護,-
插入
canary值StackGuard:該方法在函式呼叫堆疊的
RETADDR和LOCVAR之間加一個canary值,每次要跳轉、執行到RETADDR對應地址的指令之前,先驗證canary值是否改變:若canary值沒有改變,則程式正常運行;若canary值發生了改變,則中斷程式運行,為了防止攻擊者偽造
canary值進行攻擊,生成canary值有以下3種辦法:? (1) 隨機產生
canary值,以提高攻擊者通過偽造canary值而通過完整性驗證的難度,? (2)
canary值中含有字串終止符,使得攻擊者拷貝攻擊載荷時無法順利完成,? (3) 計算
canary值和RETADDR的異或值,將該異或值保存到一個全域表中,在每次使用RETADDR值前,都要計算一遍當前RETADDR的值和canary的異或值,判斷其與全域表中對應的值是否一致, 以提高攻擊者構造的攻擊向量通過完整性驗證的難度,Propolice:借鑒了
StackGuard方法.該技術與Stackguard不同之處主要有兩點:? (1)
Propolice重排了區域變數的位置,將區域變數中的陣列變數排在最高地址,這樣就保障了區域變數不會被緩沖區溢位影響,? (2) 把
canary值放在LOCADDR和EBP之間,這樣不僅保護了RETADDR的值,還保護了EBP的值, -
存盤
RETADDR值StackShield:每次產生
RETADDR時,就 把該值存盤到一個全域的表中,每次要跳轉執行前,都比較一下堆疊上的RETADDR值和全域表中的值:若相同,則程式正常執行;若不同,則中斷程式執行,同時還對函式指標進行保護,每次函式指標進行解參考之前,都要判斷該指標是否指向代碼區:若指向代碼區,則程式正常執行;若指向非代碼區,則中斷程式執行, -
指標前后加
guardzoneLBC:首先在每個物件前后都插入一個值
guardzone,然后,用靜態分析的方法選出發生算術加減的指標,接下來,每當對選出來的指標進行解參考時都進行檢查,判斷指標解參考對應的值是否等于guardzone:如果不等,則程式繼續運行;如果相等,則提示出現了訪問錯誤, -
低脂指標
分配記憶體時,把緩沖區基地址資訊、緩沖區大小資訊等元資訊映射到分配的指標上,從而高效地實作了對緩沖區的邊界檢測,防止運行時緩沖區溢位的發生,
-
-
主動防護技術
旨在保障記憶體中某些關鍵物件/性質的機密性/可用性的防護技術,攻擊者要想實作攻擊,必須對程式運行時的記憶體某些關鍵部分(如
EBP的記憶體具體位置)布局情況了解,而如果通過某些技術手段保障了這些關鍵部分的機密性,讓攻擊者無法順利地得到其記憶體位置資訊,那么攻擊者就很難攻擊成功,主動地保障關鍵物件/性質的機密性/可 用性,在程式運行時已經對記憶體布局進行修改或者對函式使用做了替換,提高了攻擊者預測具體記憶體 資訊的難度(保障機密性)或者無法利用不安全的函式(保障可用性),-
更換元件
LibSafe:對于含有容易被攻擊者所利用的類似
strcpy,sprintf等易發生緩沖區溢位的函式的動態函式鏈接庫進行替換,將其替換成相對應的提供緩沖區邊界檢測的安全的動態函式鏈接庫, -
加密指標型資料
PointGuard:對指標型資料進行加密后再將其存放在記憶體中,指標解參考前再在暫存器中解密,這樣即使攻擊者通過利用緩沖區溢位漏洞修改了記憶體中的指標資料,解密后的指標指向的真正記憶體位置也不會是攻擊者預想的位置,
-
隨機化記憶體地址
ASLR:對堆、堆疊、資料段等記憶體地址的隨機化,增加攻擊者預測目的地址的難度,提高了緩沖區溢位攻擊的難度,同時降低了利用緩沖區溢位漏洞的病毒的傳播速度,
-
去堆疊布局可預測性
StackArmor:通過對邏輯堆疊幀先分割再置換的方式,徹底地打亂堆疊幀內變數和變數的分配位置資訊、堆疊幀和堆疊幀間的位置資訊,達到不讓邏輯上相鄰的堆疊空間記憶體在物理上相鄰的目的,使得每個堆疊幀物件地址難以預測,
-
-
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/373855.html
標籤:其他
