この記事では、組み込みの Microsoft Defender for Endpoint PowerShell スクリプトを FullLanguage モードで実行できるように、Windows Defender アプリケーションコントロール (ビジネス向けアプリ コントロール) で許可規則 (WDAC) を構成する方法について説明します。 適切な WDAC 許可規則がないと、PowerShell スクリプトに依存する MDE 機能は期待どおりに機能しません。 開始する前に、 前提条件と計画に関する考慮事項を確認してください。
サポートされているプラットフォームと要件
この構成には、次のプラットフォームとコンポーネントが必要です。
- Windows 10 以降
- Windows Server 2019 以降。
- WDAC スクリプトの適用が有効になっている Microsoft Defender for Endpoint にオンボードされたデバイス
- Defender for Endpoint センサーの最低バージョン: 10.8804 以降
概要
ConstrainedLanguageCompatible 機能 (MDE がスクリプト適用下で PowerShell を呼び出す方法を制御するエンドポイント センサー設定のDefender) が有効になっている場合、Microsoft Defender for Endpointは、WDAC が適用する PowerShell 制約言語モード (CLM) との互換性を維持するように PowerShell 呼び出しを調整します。
適切な WDAC 許可ルールが設定されている場合、信頼された PowerShell スクリプトは FullLanguage モードで実行できますが、WDAC スクリプトの適用は有効のままです。
この記事では、次の方法について説明します。
- 組み込みの Microsoft Defender for Endpoint PowerShell スクリプトを許可します。
- 証明書ベース (パブリッシャー) の許可規則を作成する (推奨)。
- パスベースの許可規則を作成します (必要な場合にのみ使用します)。
開始する前に
WDAC ポリシーを更新する前に、次の前提条件と計画に関する考慮事項を確認してください。
- 要件を満たす範囲で、最も制限の厳しいルールを使用してください。 パス ベースの規則よりもパブリッシャー (証明書ベース) ルールを優先します。
- WDAC ポリシーが署名されている場合は、WDAC ポリシーを更新して再署名する方法を計画します。
- 広範に適用する前に、パイロット デバイス グループ内のすべての変更をデプロイして検証します。
警告
広範なパスベースの許可ルールは、セキュリティ体制を弱めることができます。 ユーザーが書き込み可能な場所やワイド ワイルドカードを使用しないようにします。
組み込みの Defender for Endpoint PowerShell スクリプトを許可する
Microsoft Defender for Endpoint では、次のようないくつかの機能に組み込みの PowerShell スクリプトが使用されます。
WDAC スクリプトの適用が有効になっているときにこれらのスクリプトを FullLanguage モードで実行できるようにするには、[] セクションで、次の署名者、パブリッシャー、<Signers> 構成を WDAC ポリシーに追加します。
注:
TBS(To Be Signed)は、コード署名証明書の署名対象部分のハッシュを指します。 WDAC では、この値を使用して、署名者ルールの発行元証明機関を一意に識別します。
<Signer Name="Microsoft Code Signing PCA 2011" ID="ID_SIGNER_S_0">
<CertRoot Type="TBS" Value="F6F717A43AD9ABDDC8CEFDDE1C505462535E7D1307E630F9544A2D14FE8BF26E" />
<CertPublisher Value="Microsoft Windows Defender Advanced Threat Protection" />
</Signer>
注:
この署名者の構成は、組み込みの Microsoft Defender for Endpoint スクリプト コンテンツのみを対象としています。
次のサンプル XML ファイルは、MDE 署名者が含まれている WDAC ポリシーを示しています。
<!-- MDE addition -->コメントでマークされた行は、既存の WDAC ポリシーに追加する必要があるエントリです。
<?xml version="1.0" encoding="utf-8"?>
<SiPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:sipolicy">
<VersionEx>10.3.0.0</VersionEx>
<PolicyTypeID>{A244370E-44C9-4C06-B551-F6016E563076}</PolicyTypeID>
<PlatformID>{2E07F7E4-194C-4D20-B7C9-6F44A6C5A234}</PlatformID>
<Rules>
<Rule>
<Option>Enabled:Unsigned System Integrity Policy</Option>
</Rule>
<Rule>
<Option>Enabled:Advanced Boot Options Menu</Option>
</Rule>
<Rule>
<Option>Enabled:UMCI</Option>
</Rule>
<Rule>
<Option>Enabled:Inherit Default Policy</Option>
</Rule>
<Rule>
<Option>Enabled:Update Policy No Reboot</Option>
</Rule>
<Rule>
<Option>Enabled:Revoked Expired As Unsigned</Option>
</Rule>
<Rule>
<Option>Required:WHQL</Option>
</Rule>
</Rules>
<EKUs>
<EKU ID="ID_EKU_WINDOWS" Value="010A2B0601040182370A0306" FriendlyName="Windows EKU - 1.3.6.1.4.1.311.10.3.6" />
<EKU ID="ID_EKU_WHQL" Value="010A2B0601040182370A0305" FriendlyName="WHQL EKU - 1.3.6.1.4.1.311.10.3.5" />
<EKU ID="ID_EKU_ELAM" Value="010A2B0601040182373D0401" FriendlyName="Early Launch AntiMalware EKU - 1.3.6.1.4.1.311.61.4.1" />
<EKU ID="ID_EKU_HAL_EXT" Value="010A2B0601040182373D0501" FriendlyName="Hardware Abstraction Layer EKU - 1.3.6.1.4.1.311.61.5.1" />
<EKU ID="ID_EKU_RT_EXT" Value="010A2B0601040182370A0315" FriendlyName="Windows RT EKU - 1.3.6.1.4.1.311.10.3.21" />
<EKU ID="ID_EKU_STORE" Value="010A2B0601040182374C0301" FriendlyName="Windows Store EKU - 1.3.6.1.4.1.311.76.3.1" />
<EKU ID="ID_EKU_DCODEGEN" Value="010A2B0601040182374C0501" FriendlyName="Dynamic Code Generation EKU - 1.3.6.1.4.1.311.76.5.1" />
<EKU ID="ID_EKU_AM" Value="010A2B0601040182374C0B01" FriendlyName="AntiMalware EKU - 1.3.6.1.4.1.311.76.11.1" />
<EKU ID="ID_EKU_ENCLAVE" Value="010A2B0601040182370A032A" FriendlyName="Enclave EKU - 1.3.6.1.4.1.311.10.3.42" />
</EKUs>
<FileRules>
<FileAttrib ID="ID_FILEATTRIB_REFRESH_POLICY" FriendlyName="RefreshPolicy.exe FileAttribute" FileName="RefreshPolicy.exe" MinimumFileVersion="10.0.19042.0" />
</FileRules>
<Signers>
<!-- MDE addition: Start - Add this signer block -->
<Signer Name="Microsoft Code Signing PCA 2011" ID="ID_SIGNER_S_0">
<CertRoot Type="TBS" Value="F6F717A43AD9ABDDC8CEFDDE1C505462535E7D1307E630F9544A2D14FE8BF26E" />
<CertPublisher Value="Microsoft Windows Defender Advanced Threat Protection" />
</Signer>
<!-- MDE addition: End -->
<Signer Name="Microsoft Product Root 2010 Windows EKU" ID="ID_SIGNER_WINDOWS_PRODUCTION">
<CertRoot Type="Wellknown" Value="06" />
<CertEKU ID="ID_EKU_WINDOWS" />
</Signer>
<Signer Name="Microsoft Product Root 2010 ELAM EKU" ID="ID_SIGNER_ELAM_PRODUCTION">
<CertRoot Type="Wellknown" Value="06" />
<CertEKU ID="ID_EKU_ELAM" />
</Signer>
<Signer Name="Microsoft Product Root 2010 HAL EKU" ID="ID_SIGNER_HAL_PRODUCTION">
<CertRoot Type="Wellknown" Value="06" />
<CertEKU ID="ID_EKU_HAL_EXT" />
</Signer>
<Signer Name="Microsoft Product Root 2010 WHQL EKU" ID="ID_SIGNER_WHQL_SHA2">
<CertRoot Type="Wellknown" Value="06" />
<CertEKU ID="ID_EKU_WHQL" />
</Signer>
<Signer Name="Microsoft Product Root WHQL EKU SHA1" ID="ID_SIGNER_WHQL_SHA1">
<CertRoot Type="Wellknown" Value="05" />
<CertEKU ID="ID_EKU_WHQL" />
</Signer>
<Signer Name="Microsoft Product Root WHQL EKU MD5" ID="ID_SIGNER_WHQL_MD5">
<CertRoot Type="Wellknown" Value="04" />
<CertEKU ID="ID_EKU_WHQL" />
</Signer>
<Signer Name="Microsoft Product Root 2010 Windows EKU" ID="ID_SIGNER_WINDOWS_PRODUCTION_USER">
<CertRoot Type="Wellknown" Value="06" />
<CertEKU ID="ID_EKU_WINDOWS" />
</Signer>
<Signer Name="Microsoft Product Root 2010 ELAM EKU" ID="ID_SIGNER_ELAM_PRODUCTION_USER">
<CertRoot Type="Wellknown" Value="06" />
<CertEKU ID="ID_EKU_ELAM" />
</Signer>
<Signer Name="Microsoft Product Root 2010 HAL EKU" ID="ID_SIGNER_HAL_PRODUCTION_USER">
<CertRoot Type="Wellknown" Value="06" />
<CertEKU ID="ID_EKU_HAL_EXT" />
</Signer>
<Signer Name="Microsoft Product Root 2010 WHQL EKU" ID="ID_SIGNER_WHQL_SHA2_USER">
<CertRoot Type="Wellknown" Value="06" />
<CertEKU ID="ID_EKU_WHQL" />
</Signer>
<Signer Name="Microsoft Product Root WHQL EKU SHA1" ID="ID_SIGNER_WHQL_SHA1_USER">
<CertRoot Type="Wellknown" Value="05" />
<CertEKU ID="ID_EKU_WHQL" />
</Signer>
<Signer Name="Microsoft Flighting Root 2014 Windows EKU" ID="ID_SIGNER_WINDOWS_FLIGHT_ROOT">
<CertRoot Type="Wellknown" Value="0E" />
<CertEKU ID="ID_EKU_WINDOWS" />
</Signer>
<Signer Name="Microsoft Flighting Root 2014 ELAM EKU" ID="ID_SIGNER_ELAM_FLIGHT">
<CertRoot Type="Wellknown" Value="0E" />
<CertEKU ID="ID_EKU_ELAM" />
</Signer>
<Signer Name="Microsoft Flighting Root 2014 HAL EKU" ID="ID_SIGNER_HAL_FLIGHT">
<CertRoot Type="Wellknown" Value="0E" />
<CertEKU ID="ID_EKU_HAL_EXT" />
</Signer>
<Signer Name="Microsoft Flighting Root 2014 WHQL EKU" ID="ID_SIGNER_WHQL_FLIGHT_SHA2">
<CertRoot Type="Wellknown" Value="0E" />
<CertEKU ID="ID_EKU_WHQL" />
</Signer>
<Signer Name="Microsoft Flighting Root 2014 Windows EKU" ID="ID_SIGNER_WINDOWS_FLIGHT_ROOT_USER">
<CertRoot Type="Wellknown" Value="0E" />
<CertEKU ID="ID_EKU_WINDOWS" />
</Signer>
<Signer Name="Microsoft Flighting Root 2014 ELAM EKU" ID="ID_SIGNER_ELAM_FLIGHT_USER">
<CertRoot Type="Wellknown" Value="0E" />
<CertEKU ID="ID_EKU_ELAM" />
</Signer>
<Signer Name="Microsoft Flighting Root 2014 HAL EKU" ID="ID_SIGNER_HAL_FLIGHT_USER">
<CertRoot Type="Wellknown" Value="0E" />
<CertEKU ID="ID_EKU_HAL_EXT" />
</Signer>
<Signer Name="Microsoft Flighting Root 2014 WHQL EKU" ID="ID_SIGNER_WHQL_FLIGHT_SHA2_USER">
<CertRoot Type="Wellknown" Value="0E" />
<CertEKU ID="ID_EKU_WHQL" />
</Signer>
<Signer Name="Microsoft Product Root WHQL EKU MD5" ID="ID_SIGNER_WHQL_MD5_USER">
<CertRoot Type="Wellknown" Value="04" />
<CertEKU ID="ID_EKU_WHQL" />
</Signer>
<Signer Name="Microsoft Flighting Root 2014 Store EKU" ID="ID_SIGNER_STORE_FLIGHT_ROOT">
<CertRoot Type="Wellknown" Value="0E" />
<CertEKU ID="ID_EKU_STORE" />
</Signer>
<Signer Name="Microsoft MarketPlace PCA 2011" ID="ID_SIGNER_STORE">
<CertRoot Type="TBS" Value="FC9EDE3DCCA09186B2D3BF9B738A2050CB1A554DA2DCADB55F3F72EE17721378" />
<CertEKU ID="ID_EKU_STORE" />
</Signer>
<Signer Name="Microsoft Product Root 2010 RT EKU" ID="ID_SIGNER_RT_PRODUCTION">
<CertRoot Type="Wellknown" Value="06" />
<CertEKU ID="ID_EKU_RT_EXT" />
</Signer>
<Signer Name="Microsoft Flighting Root 2014 RT EKU" ID="ID_SIGNER_RT_FLIGHT">
<CertRoot Type="Wellknown" Value="0E" />
<CertEKU ID="ID_EKU_RT_EXT" />
</Signer>
<Signer Name="Microsoft Standard Root 2011 RT EKU" ID="ID_SIGNER_RT_STANDARD">
<CertRoot Type="Wellknown" Value="07" />
<CertEKU ID="ID_EKU_RT_EXT" />
</Signer>
<Signer Name="MincryptKnownRootMicrosoftTestRoot2010" ID="ID_SIGNER_TEST2010">
<CertRoot Type="Wellknown" Value="0A" />
</Signer>
<Signer Name="MincryptKnownRootMicrosoftTestRoot2010" ID="ID_SIGNER_TEST2010_USER">
<CertRoot Type="Wellknown" Value="0A" />
</Signer>
<Signer Name="MincryptKnownRootMicrosoftDMDRoot2005" ID="ID_SIGNER_DRM">
<CertRoot Type="Wellknown" Value="0C" />
</Signer>
<Signer Name="MincryptKnownRootMicrosoftProductRoot2010" ID="ID_SIGNER_DCODEGEN">
<CertRoot Type="Wellknown" Value="06" />
<CertEKU ID="ID_EKU_DCODEGEN" />
</Signer>
<Signer Name="MincryptKnownRootMicrosoftStandardRoot2011" ID="ID_SIGNER_AM">
<CertRoot Type="Wellknown" Value="07" />
<CertEKU ID="ID_EKU_AM" />
</Signer>
<Signer Name="Microsoft Standard Root 2011 Enclave EKU" ID="ID_SIGNER_ENCLAVE">
<CertRoot Type="Wellknown" Value="07" />
<CertEKU ID="ID_EKU_ENCLAVE" />
</Signer>
<Signer Name="Microsoft Code Signing PCA 2011" ID="ID_SIGNER_MICROSOFT_REFRESH_POLICY">
<CertRoot Type="TBS" Value="F6F717A43AD9ABDDC8CEFDDE1C505462535E7D1307E630F9544A2D14FE8BF26E" />
<CertPublisher Value="Microsoft Corporation" />
<FileAttribRef RuleID="ID_FILEATTRIB_REFRESH_POLICY" />
</Signer>
</Signers>
<SigningScenarios>
<SigningScenario ID="ID_SIGNINGSCENARIO_KMCI" FriendlyName="Kernel Mode Signing Scenario" Value="131">
<ProductSigners>
<AllowedSigners>
<AllowedSigner SignerId="ID_SIGNER_WINDOWS_PRODUCTION" />
<AllowedSigner SignerId="ID_SIGNER_ELAM_PRODUCTION" />
<AllowedSigner SignerId="ID_SIGNER_HAL_PRODUCTION" />
<AllowedSigner SignerId="ID_SIGNER_WHQL_SHA2" />
<AllowedSigner SignerId="ID_SIGNER_WHQL_SHA1" />
<AllowedSigner SignerId="ID_SIGNER_WHQL_MD5" />
<AllowedSigner SignerId="ID_SIGNER_WINDOWS_FLIGHT_ROOT" />
<AllowedSigner SignerId="ID_SIGNER_ELAM_FLIGHT" />
<AllowedSigner SignerId="ID_SIGNER_HAL_FLIGHT" />
<AllowedSigner SignerId="ID_SIGNER_WHQL_FLIGHT_SHA2" />
<AllowedSigner SignerId="ID_SIGNER_TEST2010" />
</AllowedSigners>
</ProductSigners>
</SigningScenario>
<SigningScenario ID="ID_SIGNINGSCENARIO_UMCI" FriendlyName="User Mode Signing Scenario" Value="12">
<ProductSigners>
<AllowedSigners>
<AllowedSigner SignerId="ID_SIGNER_S_0" /> <!-- MDE addition -->
<AllowedSigner SignerId="ID_SIGNER_WINDOWS_PRODUCTION_USER" />
<AllowedSigner SignerId="ID_SIGNER_ELAM_PRODUCTION_USER" />
<AllowedSigner SignerId="ID_SIGNER_HAL_PRODUCTION_USER" />
<AllowedSigner SignerId="ID_SIGNER_WHQL_SHA2_USER" />
<AllowedSigner SignerId="ID_SIGNER_WHQL_SHA1_USER" />
<AllowedSigner SignerId="ID_SIGNER_WHQL_MD5_USER" />
<AllowedSigner SignerId="ID_SIGNER_WINDOWS_FLIGHT_ROOT_USER" />
<AllowedSigner SignerId="ID_SIGNER_ELAM_FLIGHT_USER" />
<AllowedSigner SignerId="ID_SIGNER_HAL_FLIGHT_USER" />
<AllowedSigner SignerId="ID_SIGNER_WHQL_FLIGHT_SHA2_USER" />
<AllowedSigner SignerId="ID_SIGNER_STORE" />
<AllowedSigner SignerId="ID_SIGNER_STORE_FLIGHT_ROOT" />
<AllowedSigner SignerId="ID_SIGNER_RT_PRODUCTION" />
<AllowedSigner SignerId="ID_SIGNER_DRM" />
<AllowedSigner SignerId="ID_SIGNER_DCODEGEN" />
<AllowedSigner SignerId="ID_SIGNER_AM" />
<AllowedSigner SignerId="ID_SIGNER_RT_FLIGHT" />
<AllowedSigner SignerId="ID_SIGNER_RT_STANDARD" />
<AllowedSigner SignerId="ID_SIGNER_ENCLAVE" />
<AllowedSigner SignerId="ID_SIGNER_MICROSOFT_REFRESH_POLICY" />
<AllowedSigner SignerId="ID_SIGNER_TEST2010_USER" />
</AllowedSigners>
</ProductSigners>
</SigningScenario>
</SigningScenarios>
<UpdatePolicySigners />
<CiSigners>
<CiSigner SignerId="ID_SIGNER_S_0" /> <!-- MDE addition -->
<CiSigner SignerId="ID_SIGNER_STORE" />
</CiSigners>
<HvciOptions>0</HvciOptions>
<Settings>
<Setting Provider="PolicyInfo" Key="Information" ValueName="Name">
<Value>
<String>WindowsWorks_2026-03-25</String>
</Value>
</Setting>
<Setting Provider="PolicyInfo" Key="Information" ValueName="Id">
<Value>
<String>2026-03-25</String>
</Value>
</Setting>
</Settings>
</SiPolicy>
証明書ベースの許可規則を作成する (推奨)
証明書ベース (Publisher) では、特定のコード署名証明書チェーンによって署名されたコンテンツをルールで信頼できます。 証明書ベースの規則は、セキュリティと保守性の最適なバランスを提供します。
手順 1: 署名者を特定する
PowerShell を使用して、許可するファイルのデジタル署名 (スクリプトを呼び出すスクリプト ホストや実行可能ファイルなど) を検査します。
Get-AuthenticodeSignature -FilePath "C:\Path\To\File.exe" | Format-List
スコープを設定する予定の証明書拇印と Publisher 属性 (PublisherName、ProductName、BinaryName など) を記録します。
手順 2: パブリッシャー許可ルールを追加する
パブリッシャー許可ルールを追加するには、次のいずれかの方法を使用します。
- アプリコントロール ポリシー ウィザード (推奨):ポリシーを開き、パブリッシャーによる許可ルールを追加し、可能な限り狭くスコープします。
- PowerShell (ConfigCI):ConfigCI コマンドレットを使用して、Publisher ルールをポリシー XML に追加し、バイナリ ポリシーに変換します。
注:
アプリ制御ポリシー ウィザードを使用する場合は、ポリシー署名規則の一覧の手順で MDE 発行元を追加できます。 [ カスタムの追加] を選択し、MDE によって署名された PowerShell スクリプトのいずれかを参照する Allow Publisher UserMode Rule Type を追加します。
Microsoft Windows Defender 高度な脅威保護パブリッシャーで署名された PowerShell スクリプトは、次のフォルダー内の MDE オンボード デバイスで使用できます。
C:\ProgramData\Microsoft\Windows Defender Advanced Threat Protection\DataCollection
この保護されたフォルダーにアクセスするには、SYSTEM アカウント コンテキストを使用してコマンド シェルを起動するには 、PsExec ツールが必要です。 フォルダーにアクセスするには:
Sysinternals から PsExec をダウンロードし、システム PATH 内のフォルダー (たとえば、
C:\Tools) に抽出します。管理者特権でのコマンド プロンプトを開きます。 [ スタート] を選択し、「 cmd」と入力し、[ コマンド プロンプト] を右クリックして、[ 管理者として実行] を選択します。
SYSTEM レベルのコマンド シェルを起動します。
PsExec.exe -s cmd.exeSYSTEM シェルで、DataCollection フォルダーに移動します。
cd "C:\ProgramData\Microsoft\Windows Defender Advanced Threat Protection\DataCollection" dir *.ps1パブリッシャー許可ルールを作成するときに、一覧表示されている
.ps1ファイルのいずれかを入力として使用します。
手順 3: ポリシーに再署名して展開する
証明書ベースの規則の設定を完了するには、次の手順を実行します。
- 署名済みの WDAC ポリシーとして構成されている場合は、ポリシーに再署名します。
- 標準の展開方法 (Microsoft Intune、グループ ポリシー、Configuration Manager など) を使用して、更新されたポリシーを展開します。
パスベースの許可規則を作成する (必要な場合にのみ使用)
警告
広範なパスベースの許可ルールは、セキュリティ体制を弱めることができます。 ユーザーが書き込み可能な場所やワイド ワイルドカードを使用しないようにします。
パスベースの許可ルールは、特定のフォルダー内のすべてのコンテンツを信頼します。 証明書ベースのルールを適用できない場合にのみ、パスベースのルールを使用してください。たとえば、自組織で完全に管理している未署名の業務用スクリプトなどが該当します。
手順 1: 最小フォルダー パスを選択する
必要なスクリプト コンテンツを含む正確なフォルダーを特定します。 ルート レベルのパスとユーザーが書き込み可能な場所を避けます。
一般的な Microsoft Defender for Endpoint スクリプトの場所は次のとおりです。
C:\ProgramData\Microsoft\Windows Defender Advanced Threat Protection\DataCollection
手順 2: パス許可規則を追加する
パス許可ルールを追加するには、次のいずれかの方法を使用します。
-
アプリコントロール ポリシー ウィザード: パス別の 許可 ルール (
C:\ProgramData\Microsoft\Windows Defender 高度な脅威保護\DataCollection\*など) を追加し、更新されたポリシーをエクスポートします。 - PowerShell (ConfigCI):ConfigCI コマンドレットを使用して、ファイル パス規則をポリシー XML に追加します。
手順 3: 更新されたポリシーに再署名して展開する
パスベースのルールの設定を完了するには:
- 必要に応じてポリシーに再署名します。
- 更新されたポリシーをターゲット デバイスに展開します。
セキュリティのベスト プラクティス
WDAC ポリシーをセキュリティで保護するには、次のヒントに従います。
- パス ベースの規則ではなく、Publisher (証明書ベース) 規則を使用します。
- 許可ルールを狭くします。 可能な場合は、Publisher、Product、または Binary の名前を指定します。
- ユーザーが書き込み可能なパスや広範なワイルドカード (
C:\Users\*\Downloads\*など) を許可しないでください。 - 各ルールを要求したユーザー、理由、レビュー日を記録します。
- 広範な適用の前に、パイロット リング内のすべての変更をテストします。