C2 Detection – Command & Carol

ネットワーク通信の生データであるPCAPキャプチャファイルをそのまま解析するのは大変です。PACPキャプチャファイルからZeekとRITAを利用して、C2通信を検出する手法を学ぶルームです。

C2 Detection – Command & Carol
https://tryhackme.com/room/detecting-c2-with-rita-aoc2025-m9n2b5v8c1

Zeekとは

Zeek(旧名:Bro)は、オープンソースのネットワークセキュリティモニタリング(NSM)ツールです。

  • 役割:ネットワークトラフィックの「自動整理・ログ化」
  • 特徴: * ファイアウォールやIDS(侵入検知システム)のように「シグネチャ(既知のパターン)」を元に通信をブロックしたりアラートを出したりするものではありません。
    • 通信(PCAPファイルやリアルタイムのトラフィック)を監視し、それを人間の読める、かつプログラムで扱いやすい構造化されたログファイル(接続ログ conn.log、DNSログ dns.log、HTTPログ http.log など)に変換します。
    • ルームの中では、生データであるPCAPファイルを zeek コマンドを使って解析し、RITAが読み込める形式のログに変換するために使われています。

RITAとは

RITA(Real Intelligence Threat Analytics)は、Active Countermeasures社が開発した、オープンソースのC2通信・脅威検出フレームワークです。

  • 役割:Zeekのログを分析して「C2(悪意のある通信)の兆候」を見つけ出す
  • 特徴:
    • Zeekのログのみを入力として受け付けます(PCAPを直接読み込むことはできません)。
    • 単一の怪しいパケットを見るのではなく、時間の経過とともに発生する「通信の振る舞い(パターン)」を統計的に分析します。
    • 攻撃者が侵入した端末を遠隔操作する際、検知を逃れるために定期的にサーバーへ通信を送る「ビーコニング(Beaconing)」と呼ばれる行動を検出するのが大得意です。

RITAが検出できる主な脅威

  1. C2ビーコニングの検出(C2 Beacon Detection): 規則正しいタイミングで外部と通信していないかをスコア化します。
  2. DNSトンネリング(DNS Tunneling): DNSプロトコルを悪用してデータを盗み出したり、コマンドをやり取りしたりする行為を検出します。
  3. 長時間接続(Long Connections): 異常に長い時間維持されている接続を見つけます。
  4. データ不正送出(Data Exfiltration): 送信バイト数が異常に多い通信を検出します。

Task1 Introduction

1. シナリオの背景

  • 状況: TBFC(The Best Festival Company)は、King Malhareの部下による度重なる攻撃を受け、現在厳戒態勢を敷いています。しかし、静かすぎる状況にメンバーは落ち着きをなくしています。
  • 提案: そこでSir Elfoが、蓄積されたネットワークトラフィックのデータからC2(Command and Control:遠隔操作)通信をハンティングすることを提案します。
  • 課題と解決策: 膨大なネットワークトラフィックをすべて手動で確認する時間がないと猛反対するエルフたちに対し、Sir Elfoは「RITA(Real Intelligence Threat Analytics)」という強力なツールの使用を提示します。PCAP(パケットキャプチャ)ファイルをZeekログに変換すれば、あとはRITAが自動で分析してくれるため、誰でも簡単に実行できると説明しています。

2. 本タスクの学習目標(Learning Objectives)

このルームを通じて、以下の3つのスキルを習得することを目的としています。

  • PCAPファイルをZeekログに変換する。
  • RITAを使用してZeekログを分析する。
  • RITAの出力結果を解析(アナライズ)する。

3. ラボ環境への接続(Connecting to the Machine)

  • 実践を始める前に、ページ内に表示されている「Connection Card(接続カード)」の質問を確認します。
  • 画面下部にある 「Start Lab Machine」 ボタンをクリックして仮想マシンを起動します(完全に起動するまで約2分かかります)。
  • 起動後、画面が分割(Split View)されてマシンが表示されます。もし表示されない場合は、ページ上部にある 「Show Split View」 ボタンをクリックします。

Question

I have successfully started my lab machine!
実験用マシンの起動に成功しました!

Answer
No answer needed

Task2 Detecting C2 with RITA

このタスクでは、C2(遠隔操作)通信を検出するツール「RITA」の概要、パケットキャプチャ(PCAP)からRITAが読めるログへの変換、そして実際の分析手順について解説しています。

1. RITAとZeekの概要

  • RITA(Real Intelligence Threat Analytics)とは: Active Countermeasures社が開発したオープンソースのフレームワーク。ネットワークトラフィックを分析し、C2ビーコン、DNSトンネリング、長時間接続、データ侵害(エクスフィルトレーション)などを検出します。IPやポート、タイムスタンプ、接続時間などの相関分析を行います。
  • Zeek(旧Bro)とは: オープンソースのネットワークセキュリティモニタリング(NSM)ツール。ファイアウォールやIDSとは異なり、ルールやシグネチャによる防御ではなく、トラフィックを構造化・拡充されたログ(トランザクションデータや抽出コンテンツ)に変換します。RITAの入力にはZeekのログが必要です。

2. PCAPファイルからZeekログへの変換

Zeekの機能を使って、パケットキャプチャファイル(.pcap)を構造化ログに変換します。

  • コマンド: zeek readpcap <pcapファイル> <出力先ディレクトリ>
  • 実行すると、指定したディレクトリ内に conn.log(接続)、dns.log(DNS)、http.log(HTTP)、ssl.log(SSL)など、用途別に分かれた複数のZeekログファイルが生成されます。

3. RITAへのインポートと分析(データの可視化)

作成したZeekログをRITAにインポートし、分析結果を閲覧します。

  1. データのインポート: rita import –logs <Zeekログのパス> –database <データベース名> (例:rita import –logs ~/zeek_logs/asyncrat/ –database asyncrat)
  2. 結果の表示(閲覧): rita view <データベース名> (例:rita view asyncrat)

4. RITAの画面構成と分析項目

rita view コマンドを実行すると、ターミナル上に以下の3つのペイン(エリア)で構成された画面が表示されます。

  • 検索バー(Search bar): / を入力してキーワード検索。? でヘルプを表示。
  • 結果ペイン(Results pane): 検出された通信の一覧を表示。
    • Severity(重要度スコア), 送受信IP/FQDN, ビーコンの可能性, 接続時間(長時間の接続は侵害の兆候), サブドメイン数, 脅威インテルのマッチング等が表示されます。
  • 詳細ペイン(Details pane): 選択した通信のより深い情報を表示。
    • 脅威モディファイア(Threat Modifiers): 危険性を評価する基準(MIMEタイプとURIの不一致、ネットワーク内で珍しい通信パターンを示す「Rare signature(レア・シグネチャ)」、特定の外部ホストと通信している内部ホストの割合「Prevalence」、その外部ホストが初めて観測された日「First Seen」、大量の送信データなど)。
    • 接続情報(Connection Info): 接続回数(C2ビーコンの指標)、総送信バイト数(データ持ち出しの指標)、ポート・プロトコル・サービス名。

5. 実際の分析例(AsyncRATのケース)

教材内のサンプルデータ(AsyncRAT)を分析した結果、以下の不審な点がすぐに見つかります。

  • 1つ目の不審な通信: 非常に長いFQDN(sunshine-bizrate-inc-software[.]trycloudflare[.]com)が検出され、VirusTotalで検索すると「悪意あるURL」と判明。また、C2通信特有の暗号化パターン(TLSハンドシェイク)を検知したため「Rare signature」のフラグが立っています。
  • 2つ目の不審な通信: 特定のIPアドレス(91[.]134[.]150[.]150)がVirusTotalで悪意あるものとフラグ立てされており、接続時間が非常に長く、非標準のポート(一般的ではないポート番号)が使用されていることが確認できます。

6. 次のステップ(ハンティングへの挑戦)

マニュアルの確認を終えたので、実際に収集されたネットワークトラフィック ~/pcaps/rita_challenge.pcap を上記の手順(Zeekでのログ変換 → RITAへのインポート → RITAでの分析)を用いて解析し、出題されているクイズ(質問)に回答するフェーズに移行します。

Question

How many hosts are communicating with malhare.net?
malhare.net と通信しているホストはいくつありますか?

Answer


Which Threat Modifier tells us the number of hosts communicating to a certain destination?
特定の宛先と通信しているホストの数を示す脅威修飾子はどれですか?

Answer


What is the highest number of connections to rabbithole.malhare.net?
rabbithole.malhare.net への接続数の最大値はいくつですか?

Answer



Which search filter would you use to search for all entries that communicate to rabbithole.malhare.net with a beacon score greater than 70% and sorted by connection duration (descending)?
ビーコンスコアが70%を超え、接続時間の長い順(降順)に並べられた、rabbithole.malhare.net と通信しているすべてのエントリを検索するには、どの検索フィルターを使用しますか?

Answer

Which port did the host 10.0.0.13 use to connect to rabbithole.malhare.net?
ホスト 10.0.0.13 は、rabbithole.malhare.net に接続するためにどのポートを使用しましたか?

Answer


解答の手順

スプリットウィンドウのターゲットLinuxマシンのターミナルからPCAPファイルをZeekで解析してログを生成します。

Lab machine
ubuntu@tryhackme:~$ zeek readpcap pcaps/rita_challenge.pcap zeek_logs/rita_challenge
Starting the Zeek docker container
Zeek logs will be saved to /home/ubuntu/zeek_logs/rita_challenge
ubuntu@tryhackme:~$ cd zeek_logs/rita_challenge/ && ls
analyzer.log      conn.log  files.log  known_hosts.log     loaded_scripts.log  packet_filter.log  software.log  weird.log
capture_loss.log  dns.log   http.log   known_services.log  notice.log          reporter.log       stats.log

続いて、生成されたZeekログファイルをRITAで解析します。

Lab machine
ubuntu@tryhackme:~/zeek_logs/rita_challenge$ rita import --logs ~/zeek_logs/rita_challenge/ --database rita_challenge
[+] up 2/2
 ✔ Container rita-clickhouse Healthy                                                                                                                                  0.5s 
 ✔ Container rita-syslog-ng  Running                                                                                                                                  0.0s 
[+]  2/2t 2/2
 ✔ Container rita-clickhouse Running                                                                                                                                  0.0s 
 ✔ Container rita-syslog-ng  Running                                                                                                                                  0.0s 
Container rita-clickhouse Waiting 
Container rita-clickhouse Healthy 
Container rita-rita-run-7c6eb583dde9 Creating 
Container rita-rita-run-7c6eb583dde9 Created 
2026-07-01T01:21:02Z INF Initiating new import... dataset=rita_challenge directory=/tmp/zeek_logs rebuild=false rolling=false started_at="2026-07-01 01:21:02.930686128 +0000 UTC m=+0.024409679"
[-] Parsing:  /tmp/zeek_logs/conn.log
[-] Parsing:  /tmp/zeek_logs/http.log
[-] Parsing:  /tmp/zeek_logs/dns.log
Log Parsing 🎉 ╢▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌╟ 3 / 3
2026-07-01T01:21:03Z INF Finished Parsing Logs! 🎉 elapsed_time=213.897018ms parsing_began=1782868863 parsing_finished=1782868863

🧂 Seasoning SSL connections  🎉  ███████████████████████████████████████████████████████████████████████████ 100%


🧂 Seasoning HTTP connections 🎉  ███████████████████████████████████████████████████████████████████████████ 100%


✅ Sifting IP connections...

2026-07-01T01:21:04Z INF Finished Seasoning Logs! 🎉 elapsed_time=290.020214ms seasoning_began=1782868863 seasoning_finished=1782868864

SNI Connection Analysis 🎉  ███████████████████████████████████████████████████████████████████████████ 100%


IP Connection Analysis  🎉  ███████████████████████████████████████████████████████████████████████████ 100%


DNS Analysis            🎉  ███████████████████████████████████████████████████████████████████████████ 100%

2026-07-01T01:21:05Z INF Finished Analysis! 🎉 analysis_began=1782868864 analysis_finished=1782868865 elapsed_time=1.560700955s
2026-07-01T01:21:05Z INF Finished Modification! 🎉 elapsed_time=35.128568ms modification_began=1782868865 modification_finished=1782868865
2026-07-01T01:21:05Z INF Finished Importing Hour Chunk day=0 elapsed_time=2.268397108s hour=0
2026-07-01T01:21:05Z INF 🎊✨ Finished Import! ✨🎊 elapsed_time=3.1s
[+] stop 1/1
 ✔ Container rita-rita-1 Stopped        

RITAの解析が終了したら、rita view <database-name> コマンドを入力してRITA CUIで解析結果を確認します。

Lab machine
ubuntu@tryhackme:~/zeek_logs/rita_challenge$ rita view rita_challenge

「malhare.net と通信しているホストはいくつありますか?」

Destinationが「rabitthole.malhare.net」になっているエントリが6つあるので、解答は「6」です。


「特定の宛先と通信しているホストの数を示す脅威修飾子はどれですか?」

右側のDetailパネルの「Prevalence」が解答です。


「rabbithole.malhare.net への接続数の最大値はいくつですか?」

Destinationが「rabitthole.malhare.net」のエントリを順番に見ていきます。2番目のエントリの「Connection Count」が「40」で最も大きいです。


「ビーコンスコアが70%を超え、接続時間の長い順(降順)に並べられた、rabbithole.malhare.net と通信しているすべてのエントリを検索するには、どの検索フィルターを使用しますか?」

searchのヘルプを表示すると、以下のようになります。

宛先 rabbithole.malhare.net 
ビーコンスコア 70%
接続時間順のソート(降順)

この条件は「dst:rabbithole.malhare.net beacon:>=70 sort:duration-desc」です。

検索結果は、以下のようになります。


「ホスト 10.0.0.13 は、rabbithole.malhare.net に接続するためにどのポートを使用しましたか?」

Sourceが「10.0.0.13」を選択して、Detailペインを確認すると「80」です。