共用方式為


部署類別目錄檔案以支援 Windows Defender 應用程式控制

注意

Windows Defender 應用程式控制的某些功能僅在特定 Windows 版本上可用。 如需詳細資訊,請參閱 Windows Defender 應用程控功能可用性

如果您有未簽署的企業營運 (LOB) 難以簽署之應用程式,則目錄檔案在部署 Windows Defender 應用程控 (WDAC) 中非常重要。 當您不想信任由該 ISV 簽署的所有程式代碼時,您也可以使用類別目錄檔案,將自己的簽章新增至您從獨立軟體廠商 (ISV) 取得的應用程式。 如此一來,類別目錄檔案便能讓您「無」應用程式在 WDAC 管理的環境中使用。 此外,您可以為現有的應用程式建立類別目錄檔案,而不需要存取原始原始原始程式碼,或需要任何昂貴的重新封裝。

您必須 取得程式代碼簽署憑證以供您自己使用 ,並使用它來簽署類別目錄檔案。 然後,使用您慣用的內容部署機制來散發已簽署的類別目錄檔案。

最後,將簽署者規則新增至您簽署憑證的 WDAC 原則。 然後,即使先前未簽署應用程式,您已簽署類別目錄檔案涵蓋的任何應用程式還是能夠執行。 透過此基礎,您可以更輕鬆地建置 WDAC 原則來封鎖所有未簽署的程式代碼,因為大部分的惡意代碼都是未簽署的。

使用套件偵測器建立類別目錄檔案

若要建立現有應用程式的類別目錄檔案,您可以使用 Windows 隨附的稱為 套件偵測器 的工具。

  1. 稽核模式 中的原則套用至您執行套件偵測器的計算機。 套件偵測器會使用稽核事件,在類別目錄檔案中包含在安裝程式期間新增並從計算機移除之任何暫存安裝檔案的哈希。 稽核模式原則 不應該 允許應用程式的二進位檔,或者您可能會遺漏類別目錄檔案中所需的一些重要檔案。

    注意

    如果是在具有強制執行原則的系統上完成此程式,除非強制執行的原則已允許應用程式執行,否則您將無法完成此程式。

    您可以使用此 PowerShell 範例來建立 DefaultWindows_Audit.xml 樣本的複本:

    Copy-Item -Path $env:windir\schemas\CodeIntegrity\ExamplePolicies\DefaultWindows_Audit.xml -Destination $env:USERPROFILE\Desktop\
    $PolicyId = Set-CIPolicyIdInfo -FilePath $env:USERPROFILE\Desktop\DefaultWindows_Audit.xml -PolicyName "Package Inspector Audit Policy" -ResetPolicyID
    $PolicyBinary = $env:USERPROFILE+"\Desktop\"+$PolicyId.substring(11)+".cip"
    

    然後套用原則,如使用腳本部署 Windows Defender 應用程控原則中所述。

  2. 啟動套件偵測器,以監視在您安裝應用程式的 本機磁碟驅動器 上建立檔案,例如磁碟驅動器 C:

    PackageInspector.exe Start C:
    

    重要

    每個寫入您使用套件偵測器監看之磁碟驅動器的檔案,都會包含在所建立的目錄中。 請注意可能正在磁碟驅動器上執行和建立檔案的任何其他進程。

  3. 將安裝媒體複製到您使用套件偵測器監看的磁碟驅動器,讓實際的安裝程式包含在最終的目錄檔案中。 如果您略過此步驟,您可能會允許 應用程式 執行,但實際上無法安裝它。

  4. 安裝應用程式。

  5. 啟動應用程式,以確保在初始啟動時建立的檔案會包含在您的類別目錄檔案中。

  6. 如往常般使用應用程式,以便在一般使用期間建立的檔案包含在您的類別目錄檔案中。 例如,某些應用程式可能會在第一次使用應用程式中的功能時下載更多檔案。 如果應用程式具有該功能,也請務必檢查是否有應用程式更新。

  7. 關閉並重新開啟應用程式,以確保掃描已擷取所有二進位檔。

  8. 適當地,在套件偵測器仍在執行的情況下,針對您想要包含在目錄中的任何其他應用程式重複上述步驟。

  9. 當您確認先前的步驟已完成時,請使用下列命令來停止套件偵測器。 它會在指定的位置建立目錄檔案和目錄定義檔。 使用類別目錄檔案的命名慣例,可讓您在一段時間內更輕鬆地管理已部署的類別目錄檔案。 此範例中使用的檔名 LOBApp-Contoso.cat ( 目錄檔案) 和 LOBApp.cdf (定義檔) 。

    針對最後一個停止套件偵測器的命令,請務必指定您使用套件偵測器監看的相同本機磁碟驅動器,例如 C:

    $ExamplePath=$env:userprofile+"\Desktop"
    $CatFileName=$ExamplePath+"\LOBApp-Contoso.cat"
    $CatDefName=$ExamplePath+"\LOBApp.cdf"
    PackageInspector.exe Stop C: -Name $CatFileName -cdfpath $CatDefName
    

注意

套件偵測器會為每個探索到的檔案編目哈希值。 如果已掃描的應用程式已更新,請再次完成此程式,以信任新二進位檔的哈希值。

完成時,此工具會將檔案儲存到您的桌面。 您可以使用文字編輯器檢視檔案, *.cdf 並查看套件偵測器包含哪些檔案。 您也可以按兩下 *.cat 檔案以查看其內容,並檢查特定檔案哈希。

簽署您的類別目錄檔案

現在您已建立應用程式的類別目錄檔案,您已準備好進行簽署。 建議您使用 Microsoft 的 信任簽署 服務進行目錄簽署。 您可以使用下列指示,選擇性地使用 Signtool 手動簽署目錄。

使用 SignTool.exe 簽署類別目錄

如果您已購買程式代碼簽署憑證,或從自己的公鑰基礎結構 (PKI) 簽發憑證,您可以使用 SignTool.exe 來簽署類別目錄檔案。

你需要:

  • SignTool.exe,可在 Windows 軟體開發工具包 (SDK) 中找到。
  • 您稍早建立的目錄檔案。
  • 由內部證書頒發機構單位發行的程式代碼簽署憑證 (CA) 或購買的程式代碼簽署憑證。

針對您用來簽署類別目錄檔案的程式代碼簽署憑證,請將它匯入簽署使用者的個人存放區。 然後,將下列每個命令複製到提升許可權的 Windows PowerShell 會話,以簽署現有的類別目錄檔案。

  1. 初始化要使用的變數。 $ExamplePath視需要取代和 $CatFileName 變數:

     $ExamplePath=$env:userprofile+"\Desktop"
     $CatFileName=$ExamplePath+"\LOBApp-Contoso.cat"
    
  2. 使用 Signtool.exe 簽署類別目錄檔案:

     <path to signtool.exe> sign /n "ContosoSigningCert" /fd sha256 /v $CatFileName
    

    注意

    變數 <Path to signtool.exe> 應該是 Signtool.exe 公用程式的完整路徑。 ContosoSigningCert 代表您用來簽署類別目錄檔案之憑證的主體名稱。 這個憑證應匯入您嘗試簽署類別目錄檔案所用電腦的個人憑證存放區。

    如需 Signtool.exe 和所有其他參數的詳細資訊,請參閱 簽署工具

  3. 確認類別目錄檔案的數字簽名。 以滑鼠右鍵按兩下目錄檔案,然後選取 [ 屬性]。 在 \[數位簽章\] 索引標籤上,確認採用 sha256 演算法的簽署憑證存在,如圖 1 所示。

    檔案 [屬性] 中的數位簽名清單。

    圖 1。 確認簽署憑證存在。

將類別目錄檔案部署至受控端點

Windows 中的目錄檔案會儲存在 下方 %windir%\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}

基於測試目的,您可以手動將已簽署的類別目錄檔案複製到此資料夾。 若要大規模部署已簽署的類別目錄檔案,請使用組策略檔案喜好設定或企業系統管理產品,例如 Microsoft Configuration Manager。

使用組策略部署類別目錄檔案

若要簡化目錄檔案的管理,您可以使用組策略喜好設定,將類別目錄檔案部署到組織中的適當計算機。

下列程式會逐步引導您使用名為 Contoso 目錄檔案 GPO 測試的 GPO,將名為 LOBApp-Contoso.cat 的已簽署類別目錄檔案部署至名為 WDAC Enabled 計算機的測試 OU。

  1. 從域控制器或已安裝遠端伺服器管理工具的用戶端電腦,執行 GPMC.MSC 或搜尋 群組原則 管理來開啟 群組原則 管理控制台。

  2. 建立新的 GPO:以滑鼠右鍵按兩下 OU,例如 [已啟用 WDAC 的電腦] OU,然後選取 [ 在此網域中建立 GPO],然後將它連結在這裡,如圖 2 所示。

    注意

    您可以使用任何 OU 名稱。 此外,當您考慮結合 WDAC 原則的不同方式時,安全組篩選也是一個選項。

    群組原則 管理],建立 GPO。

    圖 2. 建立新的 GPO。

  3. 為新的 GPO 命名,例如 Contoso 目錄檔案 GPO 測試或您偏好的任何名稱。

  4. 開啟 [群組原則 管理] 編輯器:以滑鼠右鍵按兩下新的 GPO,然後選取 [編輯]

  5. 在選取的 GPO 中,流覽至 [ 計算機設定\喜好設定\Windows 設定\檔案]。 以滑鼠右鍵按兩下 [檔案],指向 [ 新增],然後選取 [ 檔案],如圖 3 所示。

    群組原則 管理 編輯器、新增檔案。

    圖 3. 建立新的檔案。

  6. 設定類別目錄檔案共用。

    若要使用此設定以提供一致的類別目錄檔案 (此範例為 LOBApp Contoso.cat) 部署,則應將來源檔案放在每個已部署電腦的電腦帳戶都能存取的共用。 此範例會在執行 Windows 10 的計算機上使用名為 的\\Contoso-Win10\Share共用。 要部署的類別目錄檔案會複製到這個共用。

  7. 若要保持版本一致,請在 [新增檔案屬性] 對話框中,如圖 4 所示,從 [動作] 列表中選取 [取代],以便一律使用最新的版本。

    [檔案屬性]、[取代] 選項。

    圖 4. 設定新的檔案屬性。

  8. 在 [ 來源檔案 (的 [) ] 方塊中,輸入可存取共用的名稱,其中包含目錄檔名。 例如,\\Contoso-Win10\share\LOBApp-Contoso.cat

  9. \[目的檔案\] 方塊中,輸入路徑和檔案名稱,例如︰

    C:\Windows\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\LOBApp-Contoso.cat

    針對目錄檔名,請使用您要部署的目錄名稱。

  10. \[新檔案內容\] 對話方塊的 \[通用\] 索引標籤上,選取 \[當不再套用這個項目時移除它\] 選項。 啟用此選項可確保從每個系統移除類別目錄檔案,以防您需要停止信任此應用程式。

  11. 選取 [確定 ] 以完成檔案建立。

  12. 關閉 群組原則 管理 編輯器,然後執行 GPUpdate.exe,在執行 Windows 10 或 Windows 11 的測試計算機上更新原則。 更新原則之後,請確認執行 Windows 10 之計算機上的 目錄檔案存在於 C:\Windows\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE} 中。

使用 Microsoft Configuration Manager 部署類別目錄檔案

作為組策略的替代方案,您可以使用 Configuration Manager,將類別目錄檔案部署到環境中的受管理計算機。 這種方法可以簡化多個類別目錄檔案的部署和管理,並提供每個用戶端或集合已部署哪些目錄的報告。 除了部署這些檔案之外,Configuration Manager 也可用來清查目前部署的類別目錄檔案,以供報告和合規性之用。

請完成下列步驟以建立類別目錄檔案的新部署套件:

注意

下列範例會使用名為的 \\Shares\CatalogShare 網路共享作為目錄檔案的來源。 如果您有集合特定的類別目錄檔案,或想要個別部署它們,請使用最適合您組織的任何資料夾結構。

  1. 開啟 \[Configuration Manager 主控台\],選取 \[軟體程式庫\] 工作區。

  2. 流覽至 [概觀\應用程式管理],以滑鼠右鍵按兩下 [ 套件],然後選取 [ 建立套件]

  3. 為套件命名、將您的組織設為製造商,然後選取適當的版本號碼。

    建立套件和程序精靈。

    圖 5. 指定新套件的相關信息。

  4. 取 [下一步],然後選取 [標準程式 ] 作為程序類型。

  5. 在 [ 標準程式] 頁面上,選取名稱,然後將 [命令行 ] 屬性設定為下列命令:

    XCopy \\Shares\CatalogShare C:\Windows\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE} /H /K /E /Y
    
  6. 在 [ 標準程式] 頁面上,選取下列選項,如圖 6 所示:

    • \[名稱\] 中,輸入一個名稱,例如 \[Contoso 類別目錄檔案複製程式\]
    • \[命令列\] 中,瀏覽至程式位置。
    • [啟動] 資料夾中, 輸入 C:\Windows\System32
    • \[執行\] 清單中選取 \[隱藏\]
    • \[程式可執行\] 清單中選取 \[無論使用者是否登入\]
    • \[磁碟機模式\] 清單中選取 \[以 UNC 名稱執行\]

    精靈的標準程序頁面。

    圖 6. 指定標準程序的相關信息。

  7. 接受精靈的其餘部分的預設值,然後關閉精靈。

建立部署套件後請將它部署到集合,這樣用戶端才會收到類別目錄檔案。 在此範例中,您會將建立的套件部署至測試集合:

  1. 在 [軟體連結庫] 工作區中,流覽至 [概觀\應用程式管理\套件],以滑鼠右鍵按兩下目錄檔案套件,然後選取 [ 部署]

  2. 在 [ 一般] 頁面上,選取測試集合,然後選取 [ 下一步]

  3. 在 [ 內容] 頁面上,選取 [ 新增 ] 以選取發佈點以將內容提供給選取的集合,然後選取 [ 下一步]

  4. \[部署設定\] 頁面上,選取 \[目的\] 方塊中的 \[必要\]

  5. 在 [ 排程] 頁面上,選取 [ 新增]

  6. 在 [ 指派排程 ] 對話框中,選取 [在此事件之後立即指派],將值設定為 [ 儘快],然後選取 [ 確定]

  7. 在 [ 排程] 頁面上,選取 [ 下一步]

  8. 在 [ 用戶體驗] 頁面上,如圖 7 所示,設定下列選項,然後選取 [ 下一步]

    • 選取 \[軟體安裝\] 核取方塊。

    • 選取 \[在到期時或在維護期間認可變更 (需要重新啟動)\] 核取方塊。

    [部署軟體精靈]、[用戶體驗] 頁面。

    圖 7. 指定用戶體驗。

  9. 在 [ 發佈點] 頁面的 [ 部署選項] 方塊中,選取 [ 從發佈點執行程式],然後選取 [ 下一步]

  10. 在 [ 摘要] 頁面上檢閱選取專案,然後選取 [ 下一步]

  11. 關閉精靈。

具有 Microsoft Configuration Manager的清查類別目錄檔案

將類別目錄檔案部署到您環境中的計算機時,不論是使用組策略或 Configuration Manager,您都可以使用 Configuration Manager 的軟體清查功能來清查它們。

您可以藉由建立和部署新的用戶端設定原則,設定軟體清查以尋找受管理系統上的類別目錄檔案。

注意

類別目錄檔案的標準命名慣例會大幅簡化類別目錄檔案軟體清查程式。 在這個範例中, -Contoso 已新增到所有的類別目錄檔案名稱。

  1. 開啟 \[Configuration Manager 主控台\],選取 \[系統管理\] 工作區。

  2. 流覽至 [ 概觀\用戶端設定],以滑鼠右鍵按兩下 [ 用戶端設定],然後選取 [ 建立自定義用戶端裝置設定]

  3. 命名新的原則,然後在 \[選取並接著設定用戶端裝置的自訂設定\] 下,選取 \[軟體清查\] 核取方塊,如圖 8 所示。

    建立自訂客戶端裝置設定。

    圖 8. 選取自定義設定。

  4. 在瀏覽窗格中,選取 [ 軟體清查],然後選 取 [設定類型],如圖 9 所示。

    裝置的軟體清查設定。

    圖 9. 設定軟體清查。

  5. 在 [ 設定客戶端設定 ] 對話框中,選取 [ 開始 ] 按鈕以開啟 [ 清查檔案屬性 ] 對話框。

  6. 在 [ 名稱] 方 塊中,輸入名稱,例如 *Contoso.cat,然後選取 [ 設定]

    注意

    輸入名稱時,請遵循類別目錄檔案的命名慣例。

  7. 在 [ 路徑屬性 ] 對話框中,選取 [ 變數] 或 [路徑名稱],然後在方塊中輸入 C:\Windows\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE} ,如圖 10 所示。

    路徑屬性,指定路徑。

    圖 10. 設定路徑屬性。

  8. 選取 [確定]

  9. 既然您已建立用戶端設定原則,請以滑鼠右鍵按下新原則,選取 [ 部署],然後選擇要清查目錄檔案的集合。

在下一個軟體清查週期時,當目標用戶端收到新的用戶端設定原則時,您將能夠檢視內建 Configuration Manager 報表或資源總管中的已清查檔案。 若要在資源總管內檢視用戶端上清查的檔案,請完成下列步驟:

  1. 開啟 \[Configuration Manager 主控台\],選取 \[資產與相容性\] 工作區。

  2. 流覽至 [概觀\裝置],然後搜尋您要檢視已清查檔案的裝置。

  3. 以滑鼠右鍵按兩下電腦,指向 [ 開始],然後選取 [ 資源總管]

  4. 在 [資源總管] 中,流覽至 [軟體\檔案詳細數據] 以檢視已清查的類別目錄檔案。

注意

如果此檢視中未顯示任何內容,請流覽至 [資源總管] 中的 [軟體\上次軟體掃描],以確認用戶端最近已完成軟體清查掃描。

在 WDAC 原則中允許由類別目錄簽署憑證簽署的應用程式

現在您已擁有已簽署的類別目錄檔案,您可以將簽署者規則新增至原則,以允許任何使用該憑證簽署的專案。 如果您尚未建立 WDAC 原則,請參閱 Windows Defender 應用程控設計指南

在已部署已簽署類別目錄檔案的計算機上,您可以使用 New-CiPolicyRule ,從該目錄中包含的任何檔案建立簽署者規則。 然後使用 Merge-CiPolicy 將規則新增至原則 XML。 請務必取代下列範例中的路徑值:

$Rules = New-CIPolicyRule -DriverFilePath <path to the file covered by the signed catalog> -Level Publisher
Merge-CIPolicy -OutputFilePath <path to your policy XML> -PolicyPaths <path to your policy XML> -Rules $Rules

或者,您可以使用 Add-SignerRule ,從憑證檔案 (.cer) 將簽署者規則新增至您的原則。 您可以輕鬆地從已簽署的目錄檔案儲存.cer檔。

  1. 以滑鼠右鍵按兩下目錄檔案,然後選取 [ 屬性]
  2. 在 [ 數字簽名] 索引標籤上 ,從清單中選取簽章,然後選取 [ 詳細數據]
  3. 取 [檢視憑證 ] 以檢視分葉憑證的內容。
  4. 選取 [ 詳細數據] 索 引標籤,然後選取 [複製到檔案]。 此動作會執行 [憑證匯出精靈]。
  5. 使用 [ 匯出檔格式 ] 的預設選項,並指定位置和檔名來儲存.cer檔,以完成精靈。

注意

這些步驟會選取憑證鏈結的最低層級,也稱為「分葉」憑證。 相反地,您可以選擇使用憑證的中繼或根簽發者憑證。 若要在鏈結中使用不同的憑證,請在上述步驟 3 之後切換至 [ 認證路徑 ] 索引卷標,然後選取您要使用的憑證層級,然後選取 [ 檢視憑證]。 然後完成其餘步驟。

下列範例會使用 .cer 檔案,將簽署者規則新增至使用者和核心模式簽署案例。 請務必取代下列範例中的路徑值:

Add-SignerRule -FilePath <path to your policy XML> -CertificatePath <path to your certificate .cer file> -User -Kernel

使用套件偵測器的已知問題

使用套件偵測器建置類別目錄檔案的一些已知問題如下:

  • USN 日誌大小太小,無法追蹤安裝程式所建立的所有檔案

    • 透過套件偵測器執行之後,若要診斷 USN 日誌大小是否為問題:
      • 在 HKEY_CURRENT_USER/PackageInspectorRegistryKey/c 取得 reg 鍵的值: (當您執行 PackageInspector start) 時,此 USN 是最新的 USN。 然後使用 fsutil.exe 讀取該起始位置。 將下列指令中的 「RegKeyValue」 取代為來自 reg 鍵的值:
        fsutil usn readjournal C: startusn=RegKeyValue > inspectedusn.txt
      • 如果舊版 USN 因溢位而不再存在,上述命令應該會傳回錯誤
      • 您可以使用下列項目來擴充 USN 日誌 大小:fsutil usn createjournal具有新的大小和配置差異。 Fsutil usn queryjournal 會顯示目前的大小和配置差異,因此使用的倍數可能會有説明。
  • CodeIntegrity - 操作事件記錄檔太小,無法追蹤安裝程式所建立的所有檔案

    • 若要診斷 Eventlog 大小是否為問題,請在透過套件偵測器執行之後:
      • 開啟 事件檢視器,然後展開應用程式和服務/Microsoft Windows/CodeIntegrity/Operational。 檢查初始安裝程序啟動的 3076 稽核封鎖事件。
      • 若要增加事件記錄檔大小,請在 事件檢視器 以滑鼠右鍵按下作業記錄檔,選取 [屬性],然後設定新的值。
  • 每次安裝或執行應用程式時變更哈希的安裝程式或應用程式檔案

    • 有些應用程式會在運行時間產生每次哈希值不同的檔案。 您可以藉由檢閱所產生之 3076 稽核封鎖事件 (或 3077 強制事件) 中的哈希值來診斷此問題。 如果您每次嘗試執行檔案時都觀察到具有不同哈希的新區塊事件,則套件無法與套件偵測器搭配使用。
  • 具有無效簽章 Blob 或「無法哈希」檔案的檔案

    • 當已簽署檔案的修改方式使檔案的PE標頭失效時,就會發生此問題。 以這種方式修改的檔案無法根據 Authenticode 規格進行哈希處理。
    • 雖然這些「無法哈希」的檔案無法包含在 PackageInspector 所建立的類別目錄檔案中,但您應該能夠藉由將哈希允許規則新增至使用檔案一般檔案哈希的原則來允許這些檔案。
    • 此問題會影響某些在自定義動作中使用已簽署 DLL 檔案的 InstallShield 套件版本。 InstallShield 會將追蹤標記新增至檔案 (編輯後簽章) 讓檔案處於「無法哈希」狀態。