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