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/__PSAppLockerTest__<random-8dot3-name>.ps1
$Env:TEMP/__PSAppLockerTest__<random-8dot3-name>.psm1
App Control for Business は、Windows 用の推奨されるアプリケーション制御システムです。 App Control には、ポリシー構成を検出できる API が用意されています。 アプリコントロールは、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 を内部的に使うコマンドレットは影響を受けません。
参考資料
- App Control のしくみと適用される制限の詳細については、「App Control と PowerShell の連携」を参照してください。
- App Control を使用した PowerShell のセキュリティ保護の詳細については、「App Control を使用する方法」を参照してください。
PowerShell