在 Windows 10 IoT 核心版 上啟用安全開機、BitLocker 和 Device Guard
Windows 10 IoT 核心版 包含安全性功能供應專案,例如 UEFI 安全開機、BitLocker 裝置加密和 Device Guard。 這些可協助裝置建置者建立完全鎖定的 Windows IoT 裝置,以復原許多不同類型的攻擊。 這些功能一起提供最佳保護,可確保平臺會以定義的方式啟動,同時鎖定未知的二進位檔,並透過裝置加密來保護用戶數據。
開機順序
我們必須先瞭解 Windows 10 IoT 核心版 裝置上的開機順序,才能深入探討為IoT裝置提供安全平臺的個別元件。
IoT 裝置開機時,有三個主要區域,一路到操作系統核心載入和執行已安裝的應用程式。
- 平臺安全開機
- 整合可擴展韌體介面 (UEFI) 安全開機
- Windows 程式代碼完整性
如需 Windows 10 開機程式的其他資訊,請參閱 這裡。
鎖定IoT裝置
若要鎖定 Windows IoT 裝置,必須考慮下列事項。
平臺安全開機
當裝置第一次開機時,整體開機程式的第一個步驟是載入並執行韌體開機載入器,這會初始化開發人員上的硬體並提供緊急閃爍功能。 接著會載入 UEFI 環境,並交出控制件。
這些韌體開機載入器是SoC專用的,因此您必須與適當的裝置製造商合作,才能在裝置上建立這些開機載入器。
UEFI 安全開機
UEFI 安全開機是第一個原則強制執行點,且位於 UEFI 中。 它限制系統只允許執行由指定授權單位簽署的二進位檔,例如韌體驅動程式、選項 ROM、UEFI 驅動程式或應用程式,以及 UEFI 開機載入器。 此功能可防止在平台上執行未知的程序代碼,並可能削弱其安全性狀態。 安全開機可降低裝置開機前惡意代碼攻擊的風險,例如rootkit。
身為 OEM,您必須在製造時間將 UEFI 安全開機資料庫儲存在 IoT 裝置上。 這些資料庫包括簽章資料庫 (db)、撤銷的簽章資料庫 (dbx),以及密鑰註冊金鑰資料庫 (KEK)。 這些資料庫會儲存在裝置的韌體非揮發 RAM (NV-RAM) 上。
簽章資料庫 (db): 這會列出操作系統載入器、UEFI 應用程式和 UEFI 驅動程式的簽署者或映像哈希,這些驅動程式可在裝置上載入
撤銷的簽章資料庫 (dbx): 這會列出操作系統載入器、UEFI 應用程式和 UEFI 驅動程式的簽署者或映像哈希,這些驅動程式已不再受信任,且 不允許 在裝置上載入
金鑰註冊金鑰資料庫 (KEK): 包含可用來更新簽章和撤銷簽章資料庫的簽署金鑰清單。
建立並新增至裝置後,OEM 會鎖定韌體進行編輯,併產生平臺簽署密鑰 (PK)。 此金鑰可用來簽署 KEK 的更新,或停用 UEFI 安全開機。
以下是 UEFI 安全開機所採取的步驟:
- 裝置開啟電源之後,系統會針對平臺簽署密鑰 (PK) 檢查簽章資料庫。
- 如果韌體不受信任,UEFI 韌體會起始 OEM 特定的復原,以還原受信任的韌體。
- 如果無法載入 Windows 開機管理員,韌體會嘗試開機 Windows 開機管理員的備份複本。 如果這也失敗,UEFI 韌體會起始 OEM 特定的補救。
- Windows 開機管理員會執行並驗證 Windows 核心的數字簽名。 如果受信任,Windows 開機管理員會將控制權傳遞給 Windows 核心。
如需安全開機的其他詳細數據,以及密鑰建立和管理指引,請參閱 這裡。
Windows 程式代碼完整性
Windows 程式代碼完整性 (WCI) 會在每次載入記憶體時驗證驅動程式或應用程式的完整性,以改善作業系統的安全性。 CI 包含兩個主要元件 - 核心模式程式代碼完整性 (KMCI) 和使用者模式程式代碼完整性 (UMCI)。
可設定的程式代碼完整性 (CCI) 是 Windows 10 中的一項功能,可讓裝置建置者鎖定裝置,並只允許它執行已簽署及信任的程式代碼。 若要這樣做,裝置建置者可以在「黃金」裝置上建立程式代碼完整性原則(硬體與軟體的最終版本),然後在工廠樓層的所有裝置上保護並套用此原則。
若要深入瞭解如何部署程式代碼完整性原則、稽核和強制執行,請參閱此處的最新Technet檔。
以下是 Windows 程式代碼完整性所採取的步驟:
- Windows 核心會在載入之前,先針對簽章資料庫驗證所有其他元件。 這包括驅動程式、啟動檔案和 ELAM(早期啟動反惡意代碼)。
- Windows 核心會在啟動程式中載入受信任的元件,並禁止載入不受信任的元件。
- Windows 10 IoT 核心版 作業系統載入,以及任何已安裝的應用程式。
BitLocker 裝置加密
Windows 10 IoT 核心版 也會實作輕量型版本的 BitLocker 裝置加密,以保護 IoT 裝置免受離線攻擊。 這項功能與平臺上存在 TPM 有很強的相依性,包括 UEFI 中執行必要測量的必要預先 OS 通訊協定。 這些預先OS測量可確保OS稍後有關於作業系統啟動方式的明確記錄:不過,它不會強制執行任何執行限制。
提示
Windows 10 IoT 核心版 上的 BitLocker 功能允許自動加密 NTFS 型 OS 磁碟區,同時將所有可用的 NTFS 數據磁碟區系結至其中。 為此,您必須確保 EFIESP 磁碟區 GUID 設定為 C12A7328-F81F-11D2-BA4B-00A0C93EC93B。
Windows IoT 核心版上的 Device Guard
大部分的IoT裝置都是建置為固定函式裝置。 這表示裝置建置者確切地知道指定裝置上應該執行的韌體、操作系統、驅動程式和應用程式。 接著,這項資訊只能允許執行已知且受信任的程式代碼,以完全鎖定IoT裝置。 Windows 10 IoT 核心版 上的 Device Guard 可藉由確保未知或未受信任的可執行程式代碼無法在鎖定的裝置上執行,來協助保護 IoT 裝置。
IoT 核心版的周全安全性
為了方便在IoT核心版裝置上啟用重要安全性功能,Microsoft提供 可讓裝置產生器建置完全鎖定的IoT裝置的周全安全性套件 。 此套件將協助您:
- 布建安全開機金鑰,並在支援的 IoT 平台上啟用此功能
- 使用 BitLocker 設定和設定裝置加密
- 起始裝置鎖定以只允許執行已簽署的應用程式和驅動程式
下列步驟將引導您完成使用 Turnkey 安全性套件建立鎖定映像 的程式
必要條件
- 執行 Windows 10 企業版 的電腦(所提供的文稿不支援其他 Windows 版本)
- Windows 10 SDK - 憑證產生的必要專案
- Windows 10 ADK - CAB 產生的必要專案
- 參考平臺 - 提供韌體、OS、驅動程式和應用程式的發行硬體,才能進行最終鎖定
開發IoT裝置
Windows 10 IoT 核心版 可搭配數百部裝置使用的各種矽。 在建議的 IoT開發裝置中,下列功能提供現成的韌體 TPM 功能,以及安全開機、測量開機、BitLocker 和Device Guard 功能:
Qualcomm DragonBoard 410c
若要啟用安全開機,可能需要布建 RPMB。 一旦 eMMC 已閃爍 Windows 10 IoT 核心版(依照這裡的指示,請在裝置上同時按下 [Power] + [Vol+] + [Vol-],然後從 BDS 功能表中選取 [布建 RPMB]。 請注意,這是無法復原的步驟。
Intel MinnowBoardMax
針對 Intel 的 MinnowBoard Max,韌體版本必須是 0.82 或更高版本(取得 最新的韌體)。 若要啟用 TPM 功能,請使用附加鍵盤和顯示器來啟動面板,然後按 F2 以進入 UEFI 設定。 移至 [裝置管理員 - 系統設定 ->> 安全性設定 -> PTT,並將其設定為< [啟用>]。 按 F10 儲存變更,然後繼續進行平臺重新啟動。
注意
Raspberry Pi 2 和 3 不支援 TPM,因此我們無法設定鎖定案例。
產生鎖定套件
請遵循下列兩個連結中的指示:
測試鎖定套件
您可以測試此處 <產生的安全性套件,>YOUR_IOT_ADD_ON_WORKSPACE\Build<ARCH><OEM_NAME>。Security.* .cab> ,請依照下列步驟手動將它們安裝在未鎖定的裝置上
使用解除鎖定的影像來刷新裝置(先前步驟中用於掃描的影像)。
連線 裝置(使用 SSH 或使用 PowerShell)
將下列.cab檔案複製到目錄下的裝置,例如
c:\OemInstall
- Oem。Custom.Cmd.cab
- Oem。Security.BitLocker.cab
- Oem。Security.SecureBoot.cab
- Oem。Security.DeviceGuard.cab
發出下列命令,以起始產生之封裝的預備
applyupdate -stage c:\OemInstall\OEM.Custom.Cmd.cab
如果您使用自定義映像,則必須略過此檔案,並以檔案中
Output\OEMCustomization\OEMCustomization.cmd
可用的內容手動編輯c:\windows\system32\oemcustomization.cmd
applyupdate -stage c:\OemInstall\OEM.Security.BitLocker.cab applyupdate -stage c:\OemInstall\OEM.Security.SecureBoot.cab applyupdate -stage c:\OemInstall\OEM.Security.DeviceGuard.cab
最後,透過認可套件
applyupdate -commit
裝置會重新啟動至更新作業系統(顯示齒輪),以安裝套件,並將再次重新啟動至主要OS。 裝置重新啟動回到MainOS後,將會啟用安全開機,並應參與SIPolicy。
再次重新啟動裝置以啟用 BitLocker 加密。
測試安全性功能
- SecureBoot:嘗試
bcdedit /debug on
,您會收到錯誤,指出值受到安全開機原則保護 - BitLocker:如果
start /wait sectask.exe -waitencryptcomplete:1
ERRORLEVEL 為-2147023436
(ERROR_TIMEOUT),則加密未完成。 從.cmd檔案執行sectask.exe時,請省略start /wait
。 - DeviceGuard:執行任何未簽署的二進位檔或未在 SIPolicy 清單中以憑證簽署的二進位檔,並確認它無法執行。
- SecureBoot:嘗試
產生鎖定映像
根據稍早定義的設定驗證鎖定套件運作之後,您可以依照下列指定步驟將這些套件包含在映像中。 如需自定義映像建立指示, 請閱讀IoT製造指南 。
在工作區目錄中,從上述產生的輸出目錄更新下列檔案
- SecureBoot :
Copy ..\Output\SecureBoot\*.bin ..\Workspace\Common\Packages\Security.SecureBoot
- SetVariable_db.bin
- SetVariable_kek.bin
- SetVariable_pk.bin
- BitLocker :
Copy ..\Output\Bitlocker\*.* ..\Workspace\Common\Packages\Security.Bitlocker
- DETask.xml
- Security.Bitlocker.wm.xml
- setup.bitlocker.cmd
- DeviceGuard :
Copy ..\Output\DeviceGuard\*.* ..\Workspace\Common\Packages\Security.DeviceGuard
- SIPolicyOn.p7b
- SIPolicyOff.p7b
- SecureBoot :
使用鎖定套件功能標識碼,在 ProductName 目錄下新增RetailOEMInput.xml和TestOEMInput.xml
<Feature>SEC_BITLOCKER</Feature>
<Feature>SEC_SECUREBOOT</Feature>
<Feature>SEC_DEVICEGUARD</Feature>
重新產生影像
buildpkg all
(這會根據上述原則檔案產生新的鎖定套件)buildimage ProductName test(or)retail
(這會產生新的 Flash.ffu)
使用這個新的 Flash.ffu 刷新裝置,並驗證安全性功能。
請參閱 SecureSample 作為鎖定龍板設定的範例。
啟用 CodeSigning 強制進行開發
產生套件並啟用鎖定后,開發期間導入映像的任何二進位檔都必須適當簽署。 請確定您的使用者模式二進位檔已使用密鑰 *.\Keys\ **-UMCI.pfx 進行簽署。 針對核心模式簽署,例如驅動程式,您必須指定自己的簽署密鑰,並確定它們也包含在上述 SIPolicy 中。
解除鎖定加密的磁碟驅動器
在開發和測試期間,嘗試從加密裝置脫機讀取內容時(例如 MinnowBoardMax 的 SD 記憶卡或 DragonBoard 的 eMMC 透過 USB 大量儲存模式),『diskpart』 可以用來將驅動器號指派給 MainOS 和數據磁碟區 (假設 v: for MainOS 和 w: for Data)。 磁碟區會出現鎖定狀態,且必須手動解除鎖定。 這可以在已安裝 OEM-DRA.pfx 憑證的任何電腦上完成(包含在 DeviceLockDown 範例中)。 安裝 PFX,然後從系統管理 CMD 提示字元執行下列命令:
manage-bde -unlock v: -cert -cf OEM-DRA.cer
manage-bde -unlock w: -cert -cf OEM-DRA.cer
如果需要經常離線存取內容,可以使用下列命令在初始解除鎖定之後,為磁碟區設定 BitLocker 自動鎖定:
manage-bde -autounlock v: -enable
manage-bde -autounlock w: -enable
停用 BitLocker
如果需要暫時停用 BitLocker,請使用 IoT 裝置初始化遠端 PowerShell 會話,然後執行下列命令: sectask.exe -disable
。
注意
除非已停用排程的加密工作,否則裝置加密將會在後續裝置開機時重新啟用。