2015-08-14 87 views
2

我需要一些關於bios加載/執行程序的說明。我需要驗證由CPU執行的BIOS。我的想法是執行MISO數據流的HMAC-SHA1(從SPI BIOS Flash到CPU的數據)。Bios加載程序

問題是我不確定MISO數據流是否總是相同。我做了一些嘗試,並且總是獲得與上一個不同的數據流。流的第一部分總是相同的,過了一段時間(我沒有設備來轉儲整個通信並獲得發生的時刻),流是不同的。我不確定,但我懷疑它是不同的,因爲當計數器達到指定值時,我可以嗅探流的幾個字節,並獲得不同的嗅探值。我認爲嗅探過程是正確的,但我不能確定(嗅探是由CPU和SPI BIOS FLASH之間的FPGA執行的,我寫了VHDL)。

我也注意到,CPU在執行BIOS過程中至少讀取2次復位向量(0hFFFFF0)。

是否有可能CPU在每次開機時執行不同的步驟?在你看來是否可以驗證數據流?我需要的是確保執行的BIOS是一個有效的BIOS(我的BIOS)。

如果問題很混亂,我可以採取行動,但我對BIOS和啓動過程的瞭解很差。

感謝您的幫助。

回答

2

是的,系統在開機後通常會重置幾次,而BIOS會採用不同的執行路徑。此外,SPI控制器可能會讀取塊中的閃存部分並對其進行緩存,因此您看到的從閃存中讀取的內容不一定是CPU執行的內容。不幸的是,你的方法不可靠,並且有一個行業標準的方法來做到這一點,它被稱爲Measured Boot,它涉及TPM。請通過Google進行了解,瞭解它是否適​​合您的需求。

+0

我已閱讀了有關TPM的一些信息,但問題在於它是一個我無法使用的選項。我已經閱讀了一些關於UEFI處理啓動的文檔,並且我得到了一些有趣的東西。 UEFI BIOS首先執行的是SEC階段。 SEC階段初始化CPU並執行bios的完整性檢查。在你看來,如果我找到一種方法來驗證那部分,那麼考慮一下我係統的信任的根源是否安全? – haster8558

+0

我不認爲SEC代碼檢查整個BIOS的完整性,因爲它需要了解固件卷(FV)佈局以及對加密函數的訪問 - 這些可能在PEI階段中可用,但不能在SEC中提供。如果你想考慮SEC的信任根,那麼它需要建立一個信任鏈 - 例如,至少需要驗證引導塊,PEI代碼通常在那裏,然後確保已驗證的PEI代碼驗證DXE階段代碼等,以確保所有可執行組件都是可信的。 – sun2sirius

+0

您還需要確保您認證的FV沒有任何合法更改的數據,只有可執行的代碼。 BIOS FV之外還可能有組件,例如,選項ROM,通常應該簽名。如果您可以驗證在BIOS POST期間執行的所有代碼,作爲鏈或整體,則可以將其稱爲可信。 – sun2sirius