Windows 10 には、 アプリケーションの制御に使用できる 2 つのテクノロジ (App Control for Business と AppLocker) が含まれています。 これらを使うと、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.7 の変更点
PowerShell 7.7-preview.4 では、 FileOnlyEntryAppSetting for PowerShell のサポートが追加されました。 これは、PowerShell をより制限されたモードで実行するための追加の設定です。 詳細については、「 AppControl を使用して 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 を内部的に使うコマンドレットは影響を受けません。
参考資料
- App Control のしくみと適用される制限の詳細については、「App Control と PowerShell の連携」を参照してください。
- App Control を使用した PowerShell のセキュリティ保護の詳細については、「App Control を使用する方法」を参照してください。
PowerShell