軟件安全知識之??減少漏洞利用
減少漏洞利用
即使有很好的技術來防止在新代碼中引入漏洞,或者檢測現有代碼中的漏洞,也必然會有大量的遺留代碼。在可預見的未來,漏洞正在積極使用。因此,漏洞預防和檢測技術可以輔之以減輕對剩余漏洞的利用的技術。這種緩解技術通常在執行基礎結構中實現,即硬件、操作系統、加載程序或虛擬機,或者由編譯器(所謂的“內聯引用監視器”)。這些技術的一個重要目標是限制對性能的影響,并最大限度地提高與舊程序的兼容性。
攻擊的運行時檢測
程序執行的運行時監視是檢測攻擊的強大技術。原則上,在測試期間檢測漏洞的程序監視器(在3.2動態檢測中討論)也可以在運行時用于檢測攻擊。例如,動態污點分析與動態檢查受污染的數據是否影響生成的輸出的解析樹相結合,也被提議作為SQL注入攻擊的運行時緩解技術。
但是,測試期間使用的監視器(在主題3中討論)和運行時用于緩解攻擊的監視器的性能要求存在重要差異。對于攻擊的運行時檢測,挑戰在于識別可有效檢測的屬性沖突,這些沖突預期在程序的執行跟蹤中保持不變。使用了多種技術:
? 堆棧Canary檢測調用堆棧上激活記錄完整性的違規行為,從而檢測一些利用內存管理漏洞修改返回地址的攻擊。
? 無執行(NX)數據存儲器檢測到將程序計數器定向到數據存儲器而不是代碼存儲器的嘗試,因此可檢測許多直接代碼注入攻擊。
? 控制流完整性(CFI)是一類技術,用于監視程序的運行時控制流是否符合預期控制流的某些規范,并且因此可以檢測到許多代碼重用攻擊。
檢測到攻擊時,運行時監視器必須做出適當的反應,通常是終止受到攻擊的程序。終止是確保攻擊不會造成進一步損害的良好反應,但它當然會對可用性屬性產生負面影響。
自動化軟件多樣性
漏洞的利用通常依賴于受攻擊軟件的實現細節。例如,利用內存管理漏洞通常依賴于運行時程序內存布局的詳細信息。SQL注入攻擊可能依賴于SQL查詢發送到的數據庫的詳細信息。
因此,使漏洞更難利用的通用對策是使這些實現細節多樣化。這以兩種方式提高了攻擊的標準。首先,攻擊者更難在相同的系統上準備和測試他/她的攻擊。由于多樣化,針對攻擊者計算機上安裝的Web服務器的攻擊可能會對受害計算機上的同一Web服務器失敗。其次,構建同時針對多個系統的攻擊更難。攻擊者現在必須為他們想要攻擊的每個系統構建定制的漏洞,而不是構建一次漏洞,然后對許多系統使用它。
這個想法最重要的實現是地址空間布局隨機化(ASLR),其中代碼,堆棧和/或堆內存的布局在加載或加載時隨機化。運行。這種隨機化可以是粗粒度的,例如,通過隨機重新定位代碼、堆棧和堆段的基址,或者細粒度地將代碼存儲器中各個函數的地址、激活記錄在堆棧,或堆中的對象是隨機選擇的。
研究界已經研究了許多其他在編譯時或安裝時自動創建多樣性的方法[28],但這種自動多樣化也會給軟件維護帶來重要的挑戰,如錯誤報告。可能更難解釋,軟件更新可能也必須多樣化。
限制權限
利用軟件漏洞會影響受攻擊軟件的行為,從而違反某些安全目標。通過對軟件可以做什么施加一般限制,可以大大降低攻擊的潛在損害。
沙盒是一種安全機制,其中軟件在受控環境(“沙盒”)中執行,并且可以對沙盒中的軟件可以訪問的資源強制執行策略。沙盒可用于限制不受信任的軟件,但也可用于減輕利用對易受攻擊軟件的影響:在成功利用軟件后,攻擊者仍受到沙盒。
沙盒的通用概念可以使用現代計算機系統提供的任何隔離機制進行實例化:沙盒可以是在虛擬機監視器的監督下運行的虛擬機,也可以是操作系統施加訪問控制策略的進程。此外,已經為特定類別的軟件開發了幾種特定于目的的沙盒機制,例如,可以在虛擬主機環境中對網絡和文件系統訪問進行沙盒處理的監獄。Java運行時環境實現了一種沙盒機制,旨在包含不受信任的Java代碼,或將代碼與同一Java虛擬機中的不同利益相關者隔離開來,但多年來在該沙盒機制中發現了幾個重大漏洞[29]。
分化是一種相關但更細粒度的安全機制,其中軟件本身被劃分為多個隔間,并且對每個隔間的特權強制執行一些界限。這再次需要一些底層機制來強制執行這些邊界。例如,一個部分化的瀏覽器可以依靠操作系統進程訪問控制,通過拒絕其文件系統訪問來綁定其渲染引擎的權限。現在,渲染引擎中的軟件漏洞利用已得到緩解,即使成功利用此漏洞,攻擊者仍被阻止訪問文件系統。非常細粒度的分化形式可以通過對象能力系統[22]實現,其中每個應用程序級對象都可以是一個單獨的保護域。
為了緩解側信道漏洞,可以將易受攻擊的代碼隔離在單獨的內核或單獨的硬件上,這樣通過側信道泄漏的信息就不再存在。攻擊者可觀察到。
軟件完整性檢查
在“可信計算”這一總稱下,已經開發了廣泛的技術來測量計算機系統的狀態,并在該狀態被認為不安全時采取適當的措施。一種代表性的技術是可信引導,其中為每個執行的程序累積測量值。對程序的任何修改(例如,由于成功的攻擊)都將導致不同的測量。然后,可以強制規定,例如,只能從具有指定測量值的狀態訪問密鑰。
Parnoetal.[30]對這類技術進行了很好的概述。
結論
軟件實現漏洞有多種形式,可以通過各種對策來緩解。表1總結了本章中討論的漏洞類別之間的關系,以及通常用于應對這些漏洞的相關預防、檢測和緩解技術。