Share via


Windows Defender アプリケーション制御 (WDAC) を使用したスクリプトの適用

Windows Defender アプリケーションコントロールの一部の機能は、特定の Windows バージョンでのみ使用できます。 アプリケーション制御機能の可用性について詳しくは、こちらをご覧ください。

重要

オプション 11 無効:スクリプトの適用は、Windows Server 2016または Windows 10 1607 LTSB ではサポートされていないため、これらのプラットフォームでは使用しないでください。 これを行うと、予期しないスクリプトの適用動作が発生します。

スクリプトの適用の概要

既定では、オプション 11 Disabled:Script Enforcement がポリシーで設定されていない限り、すべての WDAC ポリシーに対してスクリプトの適用が有効になります。 WDAC スクリプトの適用には、PowerShell などの対応するスクリプト ホストと WDAC の間のハンドシェイクが含まれます。 ただし、スクリプト ホストは実際の強制動作を処理します。 Microsoft HTML アプリケーション ホスト (mshta.exe) などの一部のスクリプト ホストは、WDAC UMCI ポリシーがアクティブな場合にすべてのコード実行をブロックします。 ほとんどのスクリプト ホストは、最初に WDAC に対して、現在アクティブな WDAC ポリシーに基づいてスクリプトの実行を許可するかどうかを確認します。 その後、スクリプト ホストは、ユーザーとデバイスを最適に保護するために、スクリプトの実行 方法 をブロック、許可、または変更します。

署名されたスクリプトの検証は、 WinVerifyTrust API を使用して行われます。 検証に合格するには、署名ルートがデバイスの信頼されたルート ストアに存在し、WDAC ポリシーで許可する必要があります。 この動作は、ルート証明書のインストールを必要としない実行可能ファイルの WDAC 検証とは異なります。

WDAC は、すべてのスクリプト適用イベントの AppLocker - MSI イベント ログと スクリプト イベント ログを共有します。 スクリプト ホストが WDAC にスクリプトを許可するかどうかを確認するたびに、WDAC がスクリプト ホストに返された応答でイベントがログに記録されます。 WDAC スクリプト適用イベントの詳細については、「 アプリケーション制御イベントについて」を参照してください。

ポリシーで許可されていないスクリプトを実行すると、WDAC はスクリプトが "ブロック" されたことを示すイベントを発生させます。ただし、実際のスクリプトの適用動作はスクリプト ホストによって処理され、ファイルの実行が実際に完全にブロックされない場合があります。

また、一部のスクリプト ホストは、WDAC ポリシーが監査モードの場合にのみ動作を変更する可能性があることに注意してください。 この記事のスクリプト ホスト固有の情報を確認し、環境内で十分にテストして、実行する必要があるスクリプトが正しく動作していることを確認する必要があります。

Windows の一部である Enlightened スクリプト ホスト

PowerShell

WDAC ポリシーでは、すべての PowerShell スクリプト (.ps1)、モジュール (.psm1)、マニフェスト (.psd1) を完全言語権限で実行できるようにする必要があります。

WDAC ポリシーでは、許可されたモジュールによって読み込まれる 依存モジュール も許可する必要があります。また、WDAC が適用される場合は、モジュール関数を名前で明示的にエクスポートする必要があります。 エクスポートされた関数 (エクスポート名リストなし) を指定しないモジュールは引き続き読み込まれますが、モジュール関数にはアクセスできません。 名前にワイルドカード (*) を使用するモジュールは読み込みに失敗します。

WDAC ポリシーで許可されていない PowerShell スクリプトは引き続き実行されますが、制約付き言語モードでのみ実行されます。

PowerShell のドット ソーシング は推奨されません。 代わりに、スクリプトは PowerShell モジュールを使用して共通の機能を提供する必要があります。 許可されたスクリプト ファイルでドット ソースのスクリプト ファイルを実行しようとすると、それらのスクリプト ファイルもポリシーに合格する必要があります。

WDAC は、WDAC UMCI ポリシーが適用され、アクティブな WDAC ポリシーによってスクリプトの適用が有効になっている場合、そのポリシーが監査モードである場合でも、対話型 PowerShell を制約付き言語モードにします。 完全な言語権限を持つ対話型 PowerShell を実行するには、 すべての ポリシーに対してスクリプトの適用を無効にする必要があります。

詳細については、「 言語モード制約付き言語モードについて」を参照してください。

VBscript、cscript、jscript

WDAC ポリシーでは、Windows ベースのスクリプト ホスト (wscript.exe) または Microsoft コンソール ベースのスクリプト ホスト (cscript.exe) を使用して、すべてのスクリプトの実行を許可する必要があります。 そうでない場合、スクリプトはブロックされます。

Microsoft HTML アプリケーション ホスト (MSHTA) と MSXML

MSHTA または MSXML を使用するすべてのコード実行は、スクリプトを適用する WDAC ポリシーがアクティブな場合、そのポリシーが監査モードの場合でもブロックされます。

COM オブジェクト

WDAC では、さらに、WDAC ポリシーを拡張または制限できる COM オブジェクトの制限付き許可リストが適用されます。 COM オブジェクト の適用は、 オプション 11 Disabled:Script Enforcement の影響を受けません。 COM オブジェクトを許可または拒否する方法の詳細については、「COM オブジェクトの登録を許可する」を参照してください。

WDAC によって直接制御されないスクリプト

WDAC は、/.cmd スクリプト ファイル .batを含め、Windows コマンド プロセッサ (cmd.exe) を介して実行されるコードを直接制御しません。 ただし、このようなバッチ スクリプトの実行を試みるものは、WDAC 制御の対象となります。 cmd.exe を実行する必要がない場合は、完全にブロックするか、呼び出し元のプロセスに基づいて例外によってのみ許可することをお勧めします。 「Windows Defender アプリケーション制御ポリシーを使用して特定のプラグイン、アドイン、モジュールを制御する」を参照してください。

WDAC では、多くのサード パーティの Java エンジンや Python エンジンなど、未対応のスクリプト ホストを介して実行されるスクリプトは制御されません。 WDAC ポリシーで未更新のスクリプト ホストの実行が許可されている場合は、そのホスト経由ですべてのスクリプトの実行を暗黙的に許可します。 Microsoft 以外のスクリプト ホストの場合は、スクリプト ホストが WDAC ポリシーに対応しているかどうかをソフトウェア ベンダーにチェックする必要があります。