【実務・中級編】 Windows ServerにおけるAppLockerによる実行許可リストの管理 – インフラ・ネットワーク & クラウドセキュリティ防御ガイド

侵入されても「何も動かせない」最強の要塞:AppLockerによるアプリケーション制御の真髄

インシデント対応の現場に立つと、いつも思うことがある。「なぜ、サーバー上で誰も使わないはずのツールが動いているんだ?」と。

攻撃者は、OS標準のコマンドや、ユーザーがうっかり実行してしまったダウンロードファイルを足掛かりに、横展開(ラテラルムーブメント)を図ります。アンチウイルスソフトをすり抜けるランサムウェアや、高度な標的型攻撃の多くは、最終的に「サーバー上で悪意あるバイナリを実行する」というステップを踏む。この出口を物理的に塞ぐのが、Windows Serverにおける AppLocker です。

今回は、教科書的な説明は抜きにして、「現場でどう設計し、どう管理するか」という泥臭いエンジニアリングの核心に迫ります。

—

1. なぜ「許可リスト」が必要なのか:攻撃者の視点

攻撃者は、あなたが「許可した覚えのないもの」を動かす天才です。

例えば、攻撃者がよく使う手口として Living off the Land (LotL) があります。powershell.exe や certutil.exe 、さらには mshta.exe といった、Windowsに標準搭載されている正規ツールを悪用する手法です。これらはアンチウイルスソフトの検知を回避しやすく、非常に厄介です。

AppLockerは、これら「実行可能なもの」のリストを厳格に定義することで、たとえ攻撃者がマルウェアをサーバー上にアップロードしても、実行権限がないためただのゴミデータになるという状態を作ります。

—

2. 実践:AppLockerポリシーの設計と実装

AppLockerには「ハッシュ値」「パス」「パブリッシャー(署名)」という3つのルールがありますが、運用負荷とセキュリティのバランスを考えると、「パブリッシャー(署名)」をベースにしつつ、特定のパスを例外とするのが最も現実的です。

設定の勘所:監査モードから始める

いきなり「強制モード」で有効化すると、翌朝の会議室は阿鼻叫喚になります。まずは「監査モード」でログを収集し、何が動いているかを正確に把握してください。

# 管理者権限のPowerShellでAppLockerの実行ポリシーを確認
Get-AppLockerPolicy -Local -Xml | Out-File C:\temp\CurrentPolicy.xml

# 監査モードの設定(強制はせず、ログだけ取る)
Set-AppLockerPolicy -XmlPolicy C:\temp\CurrentPolicy.xml -Merge

推奨のポリシー設定(XMLエクスポート例)

すべてのバイナリを禁止し、必要な署名のみを通すための設定指針です。以下は、Microsoftの署名済みバイナリと、特定の管理用ディレクトリのみを許可する概念的なXML構造の一部です。

<!-- AppLocker ポリシーの定義抜粋 -->
<RuleCollection Type="Exe" EnforcementMode="Enabled">
    <!-- デフォルトルール:Windows配下は許可(署名検証) -->
    <FilePathRule Id="... " Name="Windows系実行ファイル" Action="Allow" UserOrGroupSid="S-1-1-0">
        <Conditions>
            <FilePathCondition Path="%OSDRIVE%\Windows\*" />
        </Conditions>
    </FilePathRule>
    
    <!-- 開発者が配置するアプリのディレクトリを許可 -->
    <FilePathRule Id="... " Name="App-Deployment" Action="Allow" UserOrGroupSid="S-1-1-0">
        <Conditions>
            <FilePathCondition Path="D:\App\Bin\*" />
        </Conditions>
    </FilePathRule>
</RuleCollection>

—

3. 盲点:AppLockerを回避させないための鉄則

AppLockerを導入しても、構成が甘ければ簡単に突破されます。現場でよく見る「死ぬポイント」は以下の通りです。

1. Application Identity サービスの無効化:
このサービスが止まるとAppLockerは無力化されます。グループポリシー(GPO)で、このサービスが「自動起動」かつ「停止不可能」であることを強制してください。
2. 書き込み権限の放置:
「許可されたパス」に、一般ユーザーがファイルを書き込める状態になっていませんか?AppLockerを導入する際は、必ずファイルシステム側のNTFSアクセス権限(ACL)とセットで設計してください。
3. PowerShellの制限:
powershell.exeを許可しつつ、スクリプト実行を制御するには Constrained Language Mode (CLM) を併用する必要があります。

PowerShellのCLM強制(環境変数で設定)

システム全体でPowerShellを制限する設定です。これはAppLockerと合わせて導入すべき必須の防御策です。

# 環境変数に __PSLockdownPolicy を追加してCLMを強制する
[Environment]::SetEnvironmentVariable('__PSLockdownPolicy', '4', 'Machine')

—

4. 最後に:セキュリティは「設定」ではなく「文化」

AppLockerは強力ですが、運用を止めないためのメンテナンスコストも発生します。新しいソフトウェアを導入するたびにポリシーを更新する手順を、CI/CDパイプラインに組み込むことが重要です。

例えば、ビルド後のバイナリに正当なコード署名を付与し、その署名情報に基づいてAppLockerの許可リストを自動生成する。ここまでやって初めて、本当の意味での「要塞」が完成します。

セキュリティとは、境界線を引くだけではありません。その境界線が正しく機能し続けているかを監視し、更新し続けることそのものです。今日から監査モードでログを眺め、サーバー上で「無駄に動いているもの」を洗い出すところから始めてみてください。それが、最強の防御への第一歩です。

コメント

タイトルとURLをコピーしました