操作系統/虛擬化安全知識域:系統強化之代碼和數據完整性檢查以及異常檢測
代碼和數據完整性檢查
減少操作系統中代碼可利用性的一種方法是確保代碼和/或數據未經修改并由受信任的供應商提供。例如,多年來,Windows一直采用驅動程序簽名。一些較新的版本更進一步,使用 硬件和軟件 安全功能 的組合來鎖定計算機,確保它僅運行受信任的代碼/應用程序 - 此過程被Microsoft稱為“Device Guard”。 即使是特權惡意軟件也無法 輕松讓未經授權的應用程序 運行,因為 檢查是否允許應用程序運行的機制位于硬件輔助虛擬化環境中。大多數代碼簽名解決方案將與操作系統擴展關聯的數字簽名相關聯, 允許 操作系統檢查代碼的完整性是否完整以及供應商 是否合法。類似的過程通常用于更新。
但是,檢查簽名的代碼以及操作系統本身呢 — 我們確定 它 沒有 被 惡意引導工具包篡改嗎? 確保在引導期間 加載 的系統軟件的完整性涉及 許多步驟 ,主要與引導過程本身的多個步驟有關。從最早的商用計算機開始,啟動涉及多個階段。即使是 IBM 701, 年代初期流行的計算機,安裝多達 19 次,也已經具有這樣的多階段啟動過程,從按下 特殊的“加載”按鈕開始 ,使 系統加載 單個 36 位字 通常來自打孔卡。它將執行(部分)這個詞 以加載更多指令,然后開始執行這些指令作為“引導程序”。
通常,安全啟動設備從啟動 啟動過程 的初始“信任根”開始,并且通常基于 硬件,例如,微控制器從內部不可變存儲器或根本無法重新編程的內部閃存開始執行軟件,或者只能通過嚴格的身份驗證和授權檢查。例如,現代Apple計算機使用單獨的處理器T2安全芯片來為安全啟動等提供硬件信任根,而Google還為此開發了一種稱為Titan的定制處理器。我們現在將討論硬件信任根如何幫助 驗證 系統是否安全啟動。
啟動通用計算機通常從固件開始,固件啟動一系列階段,以完全啟動的系統結束。例如, 固件可以加載一個特殊的引導加載程序,然后加載操作系統內核,而 操作系統內核 又可以 加載額外的引導 驅動程序,直到最終操作系統完全初始化并準備好與用戶或應用程序交互。所有這些階段都需要保護。例如,統一可擴展固件接口 (UEFI)可以通過安全啟動來保護第一階段 (即驗證 引導加載程序的完整性)。安全啟動驗證啟動加載程序是否使用 適當的密鑰進行簽名 ,即使用與固件中存儲的密鑰信息一致的 密鑰。 這將防止沒有 適當簽名的加載程序和驅動程序獲得對系統的控制。 引導加載程序 現在可以在加載操作系統內核 之前 驗證其數字簽名。接下來,內核在啟動操作系統 的 所有其他組件(例如啟動驅動程序和可能集成的反惡意軟件)之前對其進行驗證。 通過在其他驅動程序 之前啟動 反惡意軟件程序,它隨后可以檢查所有這些 后續組件,并將 信任鏈擴展到完全已初始化操作系統。
下一個問題是:我們怎么 知道是 這種情況? 換句話說, 我們如何知道 系統 確實安全啟動 ,并且 我們可以信任 屏幕?這里的訣竅是使用證明,(遠程)方可以檢測到對我們系統所做的任何更改。遠程證明通常使用特殊硬件,例如充當信任根的受信任平臺模塊 (TPM),包括分步驗證系統是否加載了“正確”類型的軟件。特別是,TPM 是一個加密硬件模塊,支持一系列加密功能、密鑰生成 和管理、安全存儲(例如,密鑰和其他 安全 敏感信息),以及重要的完整性測量。有關進一步討論,請參閱硬件安全CyBOK知識領域[65]。
對于完整性測量,TPM 具有 一組 稱為 PCR-0、PCR-1 的平臺 配置寄存器。 . . , 在每次引導時 都設置為已知值。 這些寄存器 不是用于直接寫入 ,而是 用于擴展。因此 ,如果 PCR-0寄存器的當前值為X,并且我們想用Y擴展它,則TPM計算哈希(X,Y)并存儲 PCR-0 的結果。 現在,如果我們想進一步 擴展它, 比如 使用 Z, TPM 會再次計算 Z 的 哈希和當前在 中的值,并將結果存儲在 PCR-0 中。換句話說,它將計算哈希(Z, 哈希(X,Y))。我們現在可以 進一步擴展它 ,并創建一個任意長的“哈希鏈”。
PCR 中的值可以作為 系統處于可信狀態的證據。具體而言,引導系統時執行的第一個代碼是固件引導代碼,有時稱為用于測量的核心信任根(CRTM) 或 BIOS 引導塊。此代碼將通過生成其內容的哈希來“測量”完整固件,在開始執行之前,它會將其發送到 TPM 以擴展 PCR-0。接下來,現在正在執行的固件將測量啟動過程的下一個組件,并在執行 之前再次將值存儲在TPM的 中 (例如,通過擴展PCR-0)。 經過 多個 階段后, PCR寄存器包含 系統 啟動時采取的所有步驟 的哈希鏈。 遠程方 現在 可以通過向 TPM 請求 “報價”來驗證系統是否安全啟動:當前在 PCR 中的 一組 PCR 值的報告 (以及 遠程方 提供的隨機數),該密鑰使用 TPM 的專用證明標識密鑰 進行簽名 ,該密鑰永遠不會離開 TPM(并且派生自硬編碼 在制造時創建的密鑰)。由于公鑰 是眾所周知 的,因此任何人都可以 驗證報價是否來自TPM。 收到報價并驗證它來自 TPM 并且它是最新的后,遠程方知道啟動過程只能遵循在 PCR中創建這些哈希的步驟.如果它們對應于已知和受信任代碼的哈希值,則遠程方知道系統已安全啟動。
代碼和數據 完整性檢查很可能會 在運行時繼續進行。例如,虛擬機管理程序可以提供對其 虛擬機 執行自省 的功能:代碼是否仍然相同,數據結構是否仍然有意義?此技術稱為虛擬機偵測(VMI)。 VMI 功能可能駐留在 虛擬機管理程序本身中,盡管它可能位于單獨的應用程序中。除了代碼之外,VMI解決方案中要檢查的常見內容還包括進程列表(是否有任何 rootkit 試圖隱藏?)、系統調用表(是否有人劫持特定的系統調用?)、中斷向量表等。
異常檢測
監視器,無論是在虛擬機管理程序還是在操作系統中,也可用于監視系統的異常事件 - 異常檢測。例如,連續崩潰數百次的系統可能會受到試圖破壞系統地址空間布局隨機化的人的攻擊。當然,沒有確鑿的證據,僅僅因為 發生了異常并不意味著有攻擊。異常檢測系統必須在引發太多錯誤警報(處理成本高昂)和引發太少(這意味著它錯過實際攻擊)之間取得平衡。