次の方法で共有


アプリ コントロールを使用して PowerShell をセキュリティで保護する

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

AppLocker は、ソフトウェアの制限のポリシーのアプリケーション制御機能に基づいています。 AppLocker を使用すると、特定のユーザーまたはグループのアプリを許可または拒否する規則を作成できます。 ファイルの一意のプロパティに基づいてアプリを識別します。

Windows 10 で Windows Defender Application Control (WDAC) として導入された Application Control for Business では、Windows で実行できるドライバーとアプリケーションを制御できます。

ロックダウン ポリシーの検出

PowerShell は、AppLocker と App Control for Business の両方のシステム全体のポリシーを検出します。 AppLocker には、ポリシーの適用状態を照会する方法がありません。 AppLocker がポリシーを適用していることを検出するために、PowerShell は 2 つの一時ファイルを作成し、それらを実行しようとします。 ファイル名には、次の名前形式が使用されます。

  • $Env:TEMP/__PSScriptPolicyTest_<random-8dot3-name>.ps1
  • $Env:TEMP/__PSScriptPolicyTest_<random-8dot3-name>.psm1

App Control for Business は、Windows 用の推奨されるアプリケーション制御システムです。 アプリ コントロールは、システムをシステム ロックダウン モードにします。 システム ロックダウン モードは、ポリシーを検出し、コンテキストを初期化または特定の言語モードに変更する必要があるかどうかを判断する機能です。

アプリコントロールは、Microsoft Security Response Center (MSRC) によって定義されたサービス条件の下でセキュリティ機能として設計されています。 詳細については、「Windows 用アプリケーション コントロール」および「App Control」および「AppLocker 機能の可用性」を参照してください。

App Control または AppLocker を選択する場合 は、AppLocker ではなく、App Control for Business を使用してアプリケーション制御を実装することをお勧めします。 Microsoft は AppLocker に投資しなくなりました。 AppLocker はセキュリティ修正プログラムのみを受け取ります。

アプリ制御ポリシーの適用

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

アプリ制御ポリシーの監査

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

変更の履歴

Windows PowerShell 5.1 は、App Control をサポートする PowerShell の最初のバージョンでした。 PowerShell の新しいリリースのたびに、App Control と AppLocker のセキュリティ機能が向上します。 次のセクションでは、PowerShell の各バージョンでこのサポートがどのように変更されたかについて説明します。 変更は累積的であるため、以降のバージョンで説明されている機能には、以前のバージョンからの変更が含まれます。

PowerShell 7.4 の変更点

Windows では、PowerShell がアプリ制御ポリシーで実行されると、定義されたセキュリティ ポリシーに基づいて動作が変わります。 アプリ制御ポリシーでは、PowerShell によって、ポリシーによって許可される信頼されたスクリプトとモジュールがモードで FullLanguage 実行されます。 他のすべてのスクリプトとスクリプト ブロックは信頼されず、ConstrainedLanguage モードで実行されます。 信頼されていないスクリプトが許可されていないアクションを実行しようとすると、PowerShell によってエラーがスローされます。 ConstrainedLanguage モードでは、スクリプトが正しく実行されない理由を把握するのは困難です。

PowerShell 7.4 では、監査モードでのアプリ制御ポリシーがサポートされるようになりました。 監査モードでは、PowerShell は、ConstrainedLanguage モードで信頼されていないスクリプトを実行しますが、エラーをスローする代わりにイベント ログにメッセージをログします。 ログ メッセージには、ポリシーが強制モードであったら適用される制限が示されています。

PowerShell 7.3 の変更点

  • PowerShell 7.3 では、App Control API を使用して PowerShell スクリプト ファイルをブロックまたは許可する機能がサポートされるようになりました。

PowerShell 7.2 の変更点

  • AppLocker には、拒否規則しかなく、実行ポリシーのバイパスを可能にするポリシーを適用するために制約付きモードが使用されない、という特殊なシナリオがありました。 PowerShell 7.2 以降では、AppLocker の規則が確実に Set-ExecutionPolicy -ExecutionPolicy Bypass コマンドよりも優先されるように変更が加えられました。

  • PowerShell 7.2 では、ロック ダウンされたコンピューター上の Add-Type モードの PowerShell セッションで NoLanguage コマンドレットを使用できないようになりました。

  • PowerShell 7.2 では、AppLocker システムのロック ダウン条件で、スクリプトによる COM オブジェクトの使用が禁止されるようになりました。 COM または DCOM を内部的に使うコマンドレットは影響を受けません。

参考資料