Windows Defender アプリケーション制御の使用

Windows 10 には、アプリケーションを制御するために使用できるテクノロジとして、Windows Defender アプリケーション制御 (WDAC)AppLocker の 2 つが含まれています。 これらを使うと、PowerShell 環境のセキュリティ保護に役立つロックダウン エクスペリエンスを作成できます

AppLocker は、ソフトウェアの制限のポリシーのアプリケーション制御機能に基づいています。 AppLocker に含まれる機能と拡張機能を使うと、ファイルの一意の ID に基づいてアプリの実行を許可または拒否する規則を作成したり、それらのアプリの実行を許可されるユーザーまたはグループを指定したりできます。

注意

WDAC または AppLocker を選ぶときは、AppLocker ではなく WDAC を使ってアプリケーションの制御を実装することをお勧めします。 Microsoft は WDAC を継続的に改善しており、Microsoft 管理プラットフォームでは WDAC のサポートが拡張されています。 AppLocker は、セキュリティ修正プログラムの提供は続けられる可能性がありますが、機能拡張は提供されません。

WDAC は Windows 10 で導入されたもので、組織をそれを使って、Windows デバイスでの実行を許可されるドライバーやアプリケーションを制御できます。 WDAC は、Microsoft Security Response Center (MSRC) が定義するサービス条件に基づいた、セキュリティ機能として設計されています。

AppLocker と WDAC について詳しくは、「Windows のアプリケーション制御」および WDAC と AppLocker の機能の可用性に関する記事をご覧ください。

WDAC ポリシーの適用

WDAC ポリシーの下で実行された PowerShell の動作は、定義されているセキュリティ ポリシーに基づいて変更されます。 WDAC ポリシーの下では、PowerShell は、ポリシーで許可されている信頼されたスクリプトとモジュールを、完全言語モードで実行します。 他のすべてのスクリプトとスクリプト ブロックは信頼されず、制約付き言語モードで実行されます。 信頼されていないスクリプトが、制約付き言語モードで許可されていないアクションを実行しようとすると、PowerShell によってエラーがスローされます。 制約付き言語モードでは、スクリプトが正しく実行しなかった理由が、わかりにくい場合があります。

WDAC ポリシーの監査

PowerShell 7.4 では、監査モードで WDAC ポリシーをサポートするための新機能が追加されました。 監査モードでは、PowerShell は、制約付き言語モードでの信頼されていないスクリプトの実行をエラーにせず、代わりにイベント ログにメッセージをログします。 ログ メッセージには、ポリシーが強制モードであったら適用される制限が示されています。

監査イベントの表示

PowerShell は、監査イベントを PowerShellCore/Analytic イベント ログに記録します。 分析ログを有効にする必要があります。 Windows イベント ビューアーで分析ログを有効にするには、PowerShellCore/Analytic ログを右クリックして、[ログの有効化] を選びます。

または、管理者特権の PowerShell セッションから次のコマンドを実行することもできます。

wevtutil.exe sl PowerShellCore/Analytic /enabled:true /quiet

Windows イベント ビューアーでイベントを表示したり、Get-WinEvent コマンドレットを使ってイベントを取得したりできます。

Get-WinEvent -LogName PowerShellCore/Analytic -Oldest |
    Where-Object Id -eq 16387 | Format-List
TimeCreated  : 4/19/2023 10:11:07 AM
ProviderName : PowerShellCore
Id           : 16387
Message      : WDAC Audit.

    Title: Method or Property Invocation
    Message: Method or Property 'WriteLine' on type 'System.Console' invocation will not
        be allowed in ConstrainedLanguage mode.
        At C:\scripts\Test1.ps1:3 char:1
        + [System.Console]::WriteLine("pwnd!")
        + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    FullyQualifiedId: MethodOrPropertyInvocationNotAllowed

イベント メッセージには、制限が適用されるスクリプトの位置が含まれます。 この情報は、WDAC ポリシーの下で実行されるようにするにはスクリプトのどの場所を変更する必要があるのかを理解するのに役立ちます。

重要

監査イベントの確認が済んだら、分析ログを無効にする必要があります。 分析ログは急速に大きくなり、大量のディスク領域を消費します。

PowerShell デバッガーでの監査イベントの表示

対話形式の PowerShell セッションで $DebugPreference 変数を Break に設定すると、PowerShell は、監査イベントが発生したスクリプトの現在の場所で、コマンド ライン スクリプト デバッガーに割り込みます。 これにより、リアルタイムでコードをデバッグしてスクリプトの現在の状態を調べることができます。