◇ AppLockerの設定
AppLockerは元々、Windows Serverなど限られたエディションでしか使えなかったアプリケーションの制御機能です。企業向けのシステム制限機能でしたが、Windows11以降からはHOMEを除くエディションで使用可能です。先に挙げたように、一般ユーザーには特定のコマンドを実行させない、使用させないなどの制限を実施することで、システムの破壊やマルウェアの感染を事前に防ぐことができます。
タスクマネージャーでAppidsvcが有効になっていれば使用可能です。もし停止中になっている場合は、管理者権限でWindowsPowerShellを立ち上げ、「sc.exe config appidsvc start=auto」と実行することで有効化できます。そして、再起動したら「gpedit」と入力することでグループポリシーの設定が立ち上がります。「Windowsの設定」->「セキュリティの設定」->「アプリケーション制御ポリシー」と辿り、グループポリシーの設定を入力していきますが、注意してほしいのは「管理者(administrator)を追加しない」ことです。理想は管理者も実行を制限することですが、Windowsの動作が不安定になる、もしくは起動しなくなる可能性が考えられますので、いったんは一般ユーザーのみ制限していきます。
設定項目は多岐に及ぶため、ここで防いでおくべきコマンドとその理由を書いておきます。
1. 偵察 (Reconnaissance) および情報収集の防止
ipconfig.exe | ネットワーク構成情報(IPアドレス、ゲートウェイなど)の収集を防ぎます。これは攻撃者が環境を理解し、次の攻撃ステップを計画するために不可欠な情報です。 |
whoami.exe | 現在のユーザー名、グループ、セキュリティ識別子 (SID) を確認するのを防ぎます。攻撃者が現在の権限レベルやグループ所属を把握し、攻撃を進めることを防止します。 |
net.exe / net1.exe | ユーザー、グループ、共有、サービスなどのネットワーク情報を列挙するのを防ぎます。横展開の足がかりとなるターゲット(他のユーザーやコンピューター)を見つけるために使われます。 |
2. コード実行 (Code Execution) および回避技術 (Evasion) の防止
powershell.exe / powershell_ise.exe | Windowsにおける最も強力で多機能なスクリプト実行環境です。システムの操作、外部通信、ペイロードの実行など、ほぼ全ての攻撃フェーズで使用されるため、一般ユーザーからの実行は必須で制限すべきです。 |
cscript.exe / wscript.exe | VBScriptやJScriptなどのスクリプトをCLI/GUIで実行するためのエンジンです。マルウェアのドロッパーや初期感染によく使われます。 |
rundll32.exe | 任意のDLLファイル内の関数を実行するために使用されます。悪意のあるDLLをロードし、サンドボックス回避やコード実行に利用されるため、LOTL攻撃の代表的な手法です。 |
mshta.exe | HTMLアプリケーション (HTA) の実行に使用されます。HTAはJavaScriptやVBScriptを含むことができ、検知されにくいスクリプト実行手段として悪用されます。 |
MSBuild.exe | .NETのビルドツールですが、XMLファイル内に任意のC#コードを埋め込み、ビルドプロセスを通じてメモリ内で実行させる手法(AppLockerのホワイトリスト回避)に悪用されます。 |
mmc.exe | Microsoft管理コンソール。様々な管理スナップイン(サービス、証明書など)へのアクセスを制限することで、システム設定の変更を防ぎます。 |
msiexec.exe | Windowsインストーラー。不正なプログラムのインストールや、外部のURLからファイルをダウンロードする悪用手法があります。 |
hh.exe | HTML Help Executable。主にCHMファイル(Compiled HTML Help)を開きますが、これを悪用して、難読化されたスクリプトを埋め込み実行させる手法が存在します。 |
3. データ転送 (Data Transfer) および永続化 (Persistence) の防止
bitsadmin.exe | BITS (Background Intelligent Transfer Service) を利用したファイルのダウンロード・アップロードを制御します。バックグラウンドでのC2通信やデータ窃取(エクスフィルトレーション)に悪用されます。 |
curl.exe | 外部のC2サーバーからのペイロードのダウンロードや、データの送信に悪用されます。 |
certutil.exe | 悪用されると、Base64などでエンコードされたファイルをデコードして実行ファイルに戻したり、HTTP/HTTPS経由でファイルをダウンロードしたりするために使用されます。 |
ftp.exe | 攻撃者が外部のFTPサーバーへ窃取したデータをアップロード(データエクスフィルトレーション)するのを防ぎます。 |
regedit.exe / reg.exe | レジストリの設定変更を防ぎます。ランレベルへの登録、設定の無効化、プロセスのハイジャックなど、永続化やシステム改変の最も一般的な手段を封じます。 |
schtasks.exe | スケジュールされたタスクの作成・変更を拒否します。これは、再起動後もマルウェアの実行を続けるための永続化の主要な手法です。 |
4. ファイル操作 (File Operations) およびシステム制御の防止
| 拒否コマンド | 理由(セキュリティ上の懸念点) |
%WINDIR%\Temp\* / C:\Users\Public\* | 書き込み可能な領域からの実行を拒否します。 攻撃者は通常、ユーザーが書き込み権限を持つ一時フォルダーやパブリックフォルダーにマルウェアをダウンロードして実行を試みるため、この対策は非常に効果的です。 |
xcopy.exe / Robocopy.exe | ファイルを大量にコピー・移動するのを防ぎます。ラテラルムーブメント(横展開)の際や、重要なファイルを窃取して一箇所にまとめる際に使われます。 |
taskkill.exe | 実行中のプロセスを強制終了するのを防ぎます。これにより、攻撃者がセキュリティソフトウェアや監視プロセスを停止させるのを防ぎます。 |
attrib.exe | ファイル属性(非表示、読み取り専用など)の変更を防ぎます。マルウェアを隠蔽する目的で使われます。 |
netsh.exe | ネットワーク設定(ファイアウォール、プロキシ、ルーティングなど)の変更を防ぎます。攻撃者が外部との通信を可能にするためにファイアウォールを無効化するのを防ぎます。 |
tscon.exe | リモートデスクトップセッションの接続や制御を制限します。セッションハイジャックなど、リモートアクセスに関連する不正な操作を防ぎます。 |
しかしながら、単純にコピーして設定しても、次のような抜け道が残ります。
- Windows搭載の標準コマンドでPowerShellなどのコマンドをローカルへコピーする
最悪の場合はこれが想定されます。
- コピーしたコマンドからPowerShellのマルウェアをペイロード
特権昇格型ゼロディの場合はこれを通過する可能性が高いです
- UACを回避しマルウェア感染
今回はこの可能性すら潰します。