強力なポストエクスプロイトフレームワークを理解し、適切に活用するために
⚠️ 重要:倫理的利用と法的責任について
PowerShell Empire(およびその後継プロジェクト)は、侵入テストやレッドチーム演習などの正当なセキュリティ評価目的で開発された強力なツールです。しかし、その能力の高さから、不正アクセスやサイバー犯罪に悪用される可能性も秘めています。このツールの使用は、必ず事前に許可を得た、合法的かつ倫理的な範囲内で行ってください。許可なく他者のシステムにアクセスしたり、このツールを悪用したりする行為は、重大な法的責任を問われる可能性があります。本記事は教育目的であり、ツールの不正利用を推奨するものではありません。
PowerShell Empireとは?
PowerShell Empire(以下、Empire)は、主にWindows環境をターゲットとしたポストエクスプロイト(侵入後の活動)フレームワークです。2015年にBSidesLVで発表され、PowerShellの強力な機能を活用して、ターゲットシステムへのアクセス維持、権限昇格、情報収集、横展開(Lateral Movement)などを支援するために設計されました。
元々はセキュリティ専門家やペネトレーションテスターが、システムの脆弱性を評価し、防御策を強化するために作られましたが、その有効性から攻撃者グループにも利用されることが知られています。
歴史と現在の状況:後継プロジェクト「Empire Project / Starkiller」へ
オリジナルのPowerShell Empireプロジェクト(`EmpireProject/Empire`)は、2019年に開発・サポートが終了しました。これは、PowerShellのログ機能強化や、EDR(Endpoint Detection and Response)製品による検知能力向上などが背景にあると考えられています。
しかし、その有用性から、コミュニティ(特にBC Securityチーム)によってフォークされ、開発が継続されています。現在の主流はPython 3で書き直されたサーバー(Empire)と、GUIクライアント(Starkiller)から構成される新しいプロジェクトです。
- 現在のプロジェクトリポジトリ: https://github.com/BC-SECURITY/Empire
- GUIクライアント (Starkiller): https://github.com/BC-SECURITY/Starkiller
本記事では、Empireの基本的な概念と使い方について解説しますが、主に現在アクティブに開発されている後継プロジェクトに基づいた情報を提供します。
Empireの主な特徴
- ポストエクスプロイトに特化: システム侵入後の活動を効率化するための機能が豊富です。
- PowerShellベースのエージェント: Windows環境にネイティブに存在するPowerShellを利用するため、追加の実行ファイルなしで動作させることが可能です。(PythonやC#エージェントもサポート)
- メモリ上での実行: PowerShellスクリプトをメモリ上で実行するため、ディスク上に痕跡を残しにくく、検知を回避しやすい場合があります。
- モジュール式のアーキテクチャ: 豊富なモジュール(400以上)を利用して、情報収集、権限昇格、認証情報窃取、横展開など、様々な操作を実行できます。
- 暗号化された通信: C2(Command and Control)サーバーとの通信は暗号化され、盗聴や解析を防ぎます。
- 柔軟なC2プロファイル: HTTP/S、Malleable C2(通信パターンを偽装)など、多様な通信方法をサポートし、ネットワーク検知を回避する工夫が可能です。
- GUIクライアント (Starkiller): 直感的なGUIにより、操作性が向上しています。
Empireのアーキテクチャ
Empireフレームワークは、主に以下のコンポーネントで構成されます。
コンポーネント | 役割 | 説明 |
---|---|---|
サーバー (Empire Server) | 司令塔 (C2) | Python 3で書かれたバックエンド。エージェントからの接続を受け付け、オペレーターからの指示を中継します。モジュールやリスナーの管理も行います。 |
クライアント (Client) | 操作インターフェース | オペレーターがサーバーに接続し、Empireを操作するためのインターフェース。コマンドラインクライアントまたはGUIクライアント (Starkiller) が利用可能です。複数人での共同作業もサポートされます。 |
リスナー (Listener) | 接続待受 | サーバー上で動作し、ターゲットシステムからの接続(コールバック)を待ち受けるプロセス。HTTP, HTTPS, Malleable HTTPなど、様々なプロトコルや設定で構成できます。 |
ステージャー (Stager) | エージェント展開コード | ターゲットシステム上で実行される小さなコード。サーバーに接続し、完全なエージェントコードをダウンロード・実行する役割を持ちます。PowerShellワンライナー、バッチファイル、マクロ、DLLなど、様々な形式で生成できます。 |
エージェント (Agent) | ターゲット上の実行体 | ターゲットシステム上で動作し、C2サーバー(リスナー)と通信を行うプロセス。オペレーターからの指示を受け取り、実行結果をサーバーに送信します。PowerShell, Python, C# などで実装されています。 |
モジュール (Module) | 機能拡張 | エージェントを通じてターゲットシステム上で実行される特定の機能(スクリプトやコマンド)。情報収集、権限昇格 (例: Mimikatz)、認証情報ダンプ、横展開、永続化など、様々な目的のモジュールが用意されています。 |
インストール
現在推奨されているEmpire (BC Security版) のインストールは、公式ドキュメントに従うのが最も確実です。一般的には、Linux環境(特にKali Linuxなど)での利用が想定されています。
Kali Linuxでは、aptパッケージマネージャを使って簡単にインストールできる場合があります。
# Empireサーバーとクライアントのインストール (Kali Linuxの場合)
sudo apt update
sudo apt install powershell-empire
# Starkiller GUIクライアントのインストール (Kali Linuxの場合)
sudo apt install starkiller
あるいは、GitHubリポジトリから直接クローンしてセットアップスクリプトを実行する方法もあります。
# GitHubからクローンしてインストール
git clone --recursive https://github.com/BC-SECURITY/Empire.git
cd Empire
sudo ./setup/install.sh
💡 **注意:** 最新のインストール手順や依存関係については、必ず公式のEmpire Wiki (Quickstart)を参照してください。環境によっては追加の依存パッケージが必要になる場合があります。
Empire 5.0以降、StarkillerはEmpireにサブモジュールとして組み込まれ、別途インストールは不要になりました。Empireサーバーを起動すると、WebインターフェースとしてStarkillerにアクセスできます。
基本的な使い方
Empireの基本的な利用フローは以下のようになります。
- Empireサーバーの起動: C2サーバーを起動します。
- クライアント (Starkiller) の起動と接続: GUIまたはCLIクライアントからサーバーに接続します。
- リスナーのセットアップ: ターゲットからの接続を待ち受けるリスナーを設定します。
- ステージャーの生成: ターゲット上で実行するステージャーコードを生成します。
- ステージャーの実行: 何らかの方法(例: フィッシングメール、脆弱性利用、物理アクセス)でターゲットシステム上でステージャーを実行します。
- エージェントの接続確認: ターゲットシステム上のエージェントがリスナーに接続(コールバック)してきたことを確認します。
- エージェントとの対話: 接続されたエージェントを通じて、コマンド実行やモジュールの利用を行います。
1. サーバーとクライアントの起動
ターミナルからEmpireサーバーを起動します。
# Empireサーバーの起動 (デフォルト設定の場合)
sudo powershell-empire server
# またはリポジトリから起動する場合
# cd Empire
# ./ps-empire server
次に、別のターミナルまたはWebブラウザからクライアント(Starkiller)を起動またはアクセスします。
# CLIクライアントの起動
sudo powershell-empire client
# Starkiller (GUI) の起動 (aptでインストールした場合)
starkiller --no-sandbox
# Starkiller (Empire 5.0以降のWeb UI)
# サーバー起動後、表示されるURL (例: https://127.0.0.1:1337) にWebブラウザでアクセス
ログイン画面が表示されたら、設定した認証情報(デフォルトまたはセットアップ時に設定したもの)でログインします。
2. リスナーの設定 (Starkiller GUIでの例)
Starkillerのインターフェースから「Listeners」タブを選択し、「Create Listener」ボタンをクリックします。
- Name: リスナーの識別名(例: http_listener)
- Listener Type: 使用するプロトコル(例: http, https, redirector など)を選択します。`http` が一般的ですが、より隠密性を高めるなら `https` や `malleable_http` が推奨されます。
- Host: ターゲットが接続してくるサーバーのIPアドレスまたはドメイン名(例: `https://your.c2.server.com`)。ターゲットからアクセス可能なアドレスを指定する必要があります。
- Port: 待ち受けるポート番号(例: 80, 443)。
- その他、オプションで通信プロファイル(User-Agent、ヘッダーなど)をカスタマイズできます。
設定後、「Submit」または「Create」ボタンでリスナーを起動します。
3. ステージャーの生成 (Starkiller GUIでの例)
「Stagers」タブを選択し、「Create Stager」ボタンをクリックします。
- Listener: 使用するリスナーをドロップダウンリストから選択します。
- Stager Type: ターゲット環境や配布方法に応じたステージャーの種類を選択します。
multi/launcher
: 基本的なPowerShellワンライナーを生成します。windows/macro
: Officeドキュメント用のVBAマクロを生成します。windows/dll
: DLL形式のステージャーを生成します。windows/launcher_bat
: バッチファイル形式のステージャーを生成します。- 他にも様々な形式があります(HTA, SCT, Shellcodeなど)。
- Options: 選択したステージャータイプに応じて、難読化レベル (Obfuscate)、有効期限 (KillDate)、出力ファイル名などを設定します。
設定後、「Submit」または「Generate」ボタンでステージャーコードまたはファイルが生成されます。
例: PowerShellワンライナー (`multi/launcher`)
# 生成されるワンライナーの例 (内容は実行ごとに変わります)
powershell -noP -sta -w 1 -enc SQBmACgA[...]UwB0AGEAcgB0ACkAOwA=
⚠️ **注意:** 生成されたステージャーコードやファイルには、C2サーバーへの接続情報などが含まれます。取り扱いには十分注意してください。
4. エージェントの接続と対話
ターゲットシステム上でステージャーが実行され、成功すると、Starkillerの「Agents」タブに新しいエージェントが表示されます。
- エージェントリストから対象のエージェントを選択すると、詳細情報が表示されます。
- 「Interact」ボタンまたは右クリックメニューから「Interact」を選択すると、エージェントとの対話シェルが開きます。
対話シェルでは、以下のような操作が可能です。
- 基本的なシェルコマンド: `shell whoami`, `shell dir c:\users` のように、`shell` コマンドに続けてターゲットOSのコマンドを実行できます。
- Empireモジュールの利用: `usemodule [module_name]` でモジュールを選択し、`info` でオプションを確認、`set [option_name] [value]` でオプションを設定し、`execute` で実行します。
# 例: Mimikatzモジュールで認証情報をダンプする (要管理者権限) usemodule credentials/mimikatz/logonpasswords info # 必要に応じてオプションを設定 (通常はデフォルトで良い場合が多い) execute
- その他のコマンド: `help` で利用可能なコマンド一覧を表示できます。`sysinfo` (システム情報取得), `ps` (プロセス一覧), `upload`/`download` (ファイル送受信), `sleep` (コールバック間隔変更) などがあります。
主要なモジュールカテゴリ
Empireには多数のモジュールが搭載されており、様々なポストエクスプロイト活動を支援します。主なカテゴリと代表的なモジュール例を挙げます。
カテゴリ | 目的 | 代表的なモジュール例 |
---|---|---|
collection |
情報収集 | screenshot (スクリーンショット取得), keylogger (キー入力記録), clipboard_monitor (クリップボード監視), file_finder (ファイル検索), net_shares (共有フォルダ列挙), prompt (偽の認証プロンプト表示) |
credentials |
認証情報窃取 | mimikatz/logonpasswords (メモリから平文パスワードやハッシュをダンプ), mimikatz/pth (Pass-the-Hash攻撃), tokens (トークン操作), hashdump (SAM/LSA Secretsダンプ), kerberoast (Kerberosサービスチケット取得) |
privesc |
権限昇格 | bypassuac (UAC回避), powerup/allchecks (一般的な権限昇格脆弱性スキャン), sherlock (既知の脆弱性スキャン), gpp (Group Policy Preferencesパスワード検索) |
lateral_movement |
横展開 | invoke_wmi (WMI経由でコマンド実行), invoke_smbexec (SMB経由でコマンド実行), invoke_psexec (PsExecと同様の機能), dcom (DCOMを利用したコマンド実行), ssh_command (SSH経由でコマンド実行) |
management |
エージェント・システム管理 | shinject (別プロセスへのシェルコード注入), invoke_script (任意のPowerShellスクリプト実行), disable_rdp (RDP無効化), enable_rdp (RDP有効化), psinject (別プロセスへのPowerShell注入) |
persistence |
永続化 | userland/registry (レジストリによる永続化), userland/schtasks (タスクスケジューラによる永続化), elevated/wmi (WMIイベントによる永続化), elevated/service (サービス作成による永続化) |
situational_awareness |
状況認識 | host/antivirusproduct (アンチウイルス製品特定), host/computerdetails (コンピュータ詳細情報), host/winenum (Windows詳細列挙), network/powerview/get_user (Active Directoryユーザー情報取得), network/portscan (ポートスキャン) |
trollsploit |
いたずら・妨害 | voicetroll (音声再生), message (メッセージボックス表示), disable_keyboard (キーボード無効化), disable_mouse (マウス無効化) |
モジュールの詳細や使い方については、`usemodule [module_name]` の後に `info` コマンドを実行することで確認できます。
検知と回避策
Empireはその強力さゆえに、多くのセキュリティ製品やブルーチーム(防御側)の監視対象となっています。主な検知方法と、攻撃者が用いる可能性のある回避策について理解しておくことは重要です。
検知方法
- ネットワークトラフィック分析:
- C2通信パターン(ビーコン間隔、データサイズ、User-Agent文字列、URLパスなど)の異常検知。
- 暗号化通信(HTTPS)の復号と検査(SSL/TLSインスペクション)。
- JA3/JA3SフィンガープリントによるTLSクライアント/サーバーの特定。
- JARMフィンガープリントによるTLSサーバーの特定。
- 既知のEmpire C2サーバーIP/ドメインへの接続検知。
- エンドポイントログ分析:
- PowerShellログ: スクリプトブロックログ(Event ID 4104)、モジュールログ(Event ID 4103)による不審なコマンドや難読化されたコードの検知。特に `System.Net.WebClient` の利用やBase64エンコード、リフレクションを用いたインメモリ実行などが監視対象。
- プロセス実行ログ: 不審な親子関係のプロセス(例: Office製品からPowerShellが起動)、引数、実行場所の監視。
- ネットワーク接続ログ: PowerShellプロセスからの不審な外部へのネットワーク接続の監視。
- AMSI (Antimalware Scan Interface): メモリ上で実行されるスクリプトやコマンドをスキャンするWindows機能による検知。
- EDR (Endpoint Detection and Response): プロセス、ファイル、ネットワーク、レジストリなどのアクティビティを相関分析し、攻撃 TTP (Tactics, Techniques, and Procedures) に基づく振る舞い検知。
- シグネチャベース検知: ステージャーコードやエージェント、モジュールに含まれる既知のパターン(文字列、バイト列)に基づく検知。
回避策(攻撃者が利用する可能性のある手法)
- 通信の偽装 (Malleable C2): 通信プロファイルを正規のWebトラフィック(例: Google検索、Microsoft Update)に似せるようにカスタマイズする。User-Agent、ヘッダー、URL、POST/GETパラメータなどを変更する。
- 難読化: PowerShellコードを難読化(Base64エンコード、文字列結合、変数名変更、XOR暗号化など)して、シグネチャ検知や静的解析を回避する。Invoke-Obfuscationなどのツールが利用されることがある。ObfuscatedEmpireのようなフォークも存在する。
- メモリインジェクション: エージェントやモジュールをディスクに書き込まず、他のプロセス(例: `explorer.exe`)のメモリ空間に注入して実行する (`shinject` モジュールなど)。
- AMSIバイパス: AMSIのスキャン機能を無効化または回避するテクニックを利用する。
- PowerShellバージョンダウングレード攻撃: よりログ機能が限定的な古いバージョンのPowerShell (v2) を利用する。
- 代替言語エージェント: PowerShell以外のエージェント(Python, C#)を利用する。
- カスタムビルド/修正: Empireのコードを修正して、既知の検知シグネチャや振る舞いパターンを変更する。
- ドメインフロンティング (Domain Fronting – 現在は多くのCDNで対策済): 正当なドメインを隠れ蓑にしてC2通信を行う(Cloudflare, Akamaiなどが対策強化)。
- リダイレクターの使用: ターゲットとC2サーバーの間に中継サーバー(リダイレクター)を設置し、C2サーバーのIPアドレスを隠蔽する。
💡 防御側としては、これらの検知・回避策を理解し、多層的な防御戦略(ログ監視強化、ネットワークセグメンテーション、EDR導入、PowerShell実行ポリシーの制限、ユーザー教育など)を実装することが重要です。
倫理的考察と法的側面
🚨 再度強調:悪用厳禁
Empireは、その設計思想からもわかるように、非常に強力な攻撃支援ツールです。このツールを許可なく他者のシステムに対して使用することは、不正アクセス禁止法などの法律に違反する犯罪行為であり、絶対に許されません。
利用は、以下のような正当な目的に限定されるべきです。
- ペネトレーションテスト: 依頼主から明確な許可と契約を得て、システムの脆弱性を評価する場合。
- レッドチーム演習: 組織の防御能力を実践的に評価するために、許可された範囲内で模擬攻撃を行う場合。
- セキュリティ研究・教育: 隔離された安全な実験環境(ラボ環境)で、ツールの機能や攻撃手法、防御手法を学習・研究する場合。
OSCP (Offensive Security Certified Professional) などの一部の認定試験では、Empireのような自動化されたフレームワークの使用が禁止または制限されている場合があります。試験を受ける際は、必ずルールを確認してください。
ツールの使用によって生じたいかなる問題についても、使用者が全責任を負うことになります。常に倫理観と法令遵守の意識を持って、慎重に取り扱ってください。
後継プロジェクトと代替ツール
前述の通り、オリジナルのEmpireは開発を終了しており、現在はBC Securityによるフォーク版が主流です。
- Empire (BC Security版): Python 3ベースのサーバーと各種エージェント。活発に開発が継続されている。 (GitHub)
- Starkiller: Empire用の強力なGUIフロントエンド。 (GitHub)
Empireと同様の目的で使用される他のフレームワークも存在します。
- Cobalt Strike: 商用で非常に高機能なペネトレーションテスト・レッドチーム向けC2フレームワーク。多くのAPTグループによる悪用事例も報告されている。
- Metasploit Framework: オープンソースで最も有名なペネトレーションテストフレームワーク。Exploit開発からポストエクスプロイトまで幅広く対応。Meterpreterペイロードが強力。
- Covenant: .NETで書かれたオープンソースのC2フレームワーク。 (GitHub)
- Sliver: Go言語で書かれたオープンソースのクロスプラットフォームC2フレームワーク。 (GitHub)
- PoshC2: PowerShellとPythonをベースにしたオープンソースのC2フレームワーク。 (GitHub)
まとめ
PowerShell Empire(およびその後継プロジェクト)は、Windows環境におけるポストエクスプロイト活動を強力に支援するフレームワークです。その機能は多岐にわたり、ペネトレーションテストやレッドチーム演習において非常に有用なツールとなり得ます。
しかし、その強力さゆえに悪用されるリスクも高く、使用には厳格な倫理観と法的知識、そして明確な許可が不可欠です。ツールの仕組み、検知方法、回避策を理解することは、攻撃側だけでなく、防御側のセキュリティ担当者にとっても重要です。
本記事が、PowerShell Empireの基本的な理解と、責任ある利用の一助となれば幸いです。繰り返しになりますが、決して不正な目的で使用しないでください。
コメント