hunting-for-beaconing-with-frequency-analysis について
脅威ハンティング担当者向けに、接続間隔、ジッター、データ量から C2 通信の可能性を調べるスキルです。脅威インテリジェンスやエンドポイント情報との相関も扱います。
主な機能
- 01接続間隔と変動係数の算出
- 02ビーコンのジッターと通信量の分析
- 03一般的な正規の定期通信の除外
- 04脅威インテリジェンスによる宛先情報の補強
- 05エンドポイント情報との相関とリスク評価
活用シーン
- 01不明な宛先への定期接続の調査
- 02ランダムなジッターを含む C2 通信の分析
- 03DNS トンネリングや暗号化ビーコンの調査
- 04紫チーム演習での C2 検知の検証
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill hunting-for-beaconing-with-frequency-analysisインストール後、Claude Code で/hunting-for-beaconing-with-frequency-analysisを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py詳細
周期的なビーコン通信の検知に向けた周波数分析
使用するタイミング
- C2 インフラストラクチャへ通信しているおそれのある侵害済みエンドポイントを能動的に探す場合
- 脅威インテリジェンスレポートで、自組織の業界を狙うアクティブな C2 フレームワークが確認された後
- ネットワークログに、見慣れない宛先への周期的なアウトバウンド接続が記録されている場合
- パープルチーム演習で、C2 検知機能を検証する場合
- 侵害の可能性を調査しており、アクティブな C2 チャネルを特定する必要がある場合
前提条件
- タイムスタンプと宛先データを含むネットワークプロキシ/ファイアウォールのログ(最低 24 時間分)
- Zeek の conn.log、dns.log、ssl.log、または同等の NetFlow/IPFIX データ
- 統計分析機能を備えた SIEM プラットフォーム(Splunk、Elastic、Microsoft Sentinel)
- 自動ビーコン分析のための RITA(Real Intelligence Threat Analytics)または AC-Hunter
- ドメイン/IP のレピュテーション情報を補完するための脅威インテリジェンスフィード
ワークフロー
- ビーコンパラメータの定義: 検知しきい値を設定します。変動係数(CV)が 0.20 未満であれば強い周期性を示し、24 時間で最低 50 接続、平均間隔は 30 秒から 24 時間の範囲とします。
- ネットワークテレメトリの収集: プロキシログ、DNS クエリ、ファイアウォールの接続ログ、Zeek のメタデータを分析プラットフォームに集約します。
- 接続間隔の算出: 送信元と宛先のペアごとに、連続する接続間の時間差を計算し、平均間隔、標準偏差、CV を導出します。
- ジッター分析の適用: Cobalt Strike などの高度な C2 フレームワークは、ビーコン間隔にジッター(ランダム性)を加えます。Sunburst バックドアは 15 分ごとに、±90 秒の範囲でビーコンを送信していました。ジッターのパターンを分析し、ランダム化されたビーコン通信も検知します。
- 正当な周期的トラフィックの除外: Windows Update、アンチウイルスの定義ファイル更新、NTP 同期、SaaS のハートビートサービス、CDN のヘルスチェックなど、既知の正当なビーコン送信元を除外します。
- データサイズの一貫性の分析: C2 のハートビートパケットは、通常、ペイロードサイズが一定です。接続ごとの転送バイト数の CV を計算します。分散が小さい場合、自動化された通信である可能性があります。
- 脅威インテリジェンスによる補完: 特定したビーコン宛先を、VirusTotal、WHOIS の登録情報(登録から 30 日未満のドメインにフラグを付与)、証明書透明性ログ、パッシブ DNS の履歴と照合します。
- エンドポイントテレメトリとの相関分析: DHCP ログを使ってビーコン送信元 IP をエンドポイントのホスト名にひも付け、プロセス作成イベント(Sysmon のイベント ID 1、3)と相関させて、該当するプロセスを特定します。
- スコアリングと優先順位付け: CV の値、ドメインの経過年数、TI との一致、データサイズの一貫性、不審なポート使用の有無に基づいてリスクスコアを割り当てます。信頼度の高い検知結果はエスカレーションします。
主要な概念
| 概念 | 説明 |
|---|---|
| T1071.001 | アプリケーション層プロトコル: Web プロトコル -- HTTP/HTTPS によるビーコン通信 |
| T1071.004 | アプリケーション層プロトコル: DNS -- DNS ベースの C2 トンネリング |
| T1573 | 暗号化チャネル -- TLS/SSL で暗号化された C2 通信 |
| T1568.002 | 動的解決: ドメイン生成アルゴリズム |
| 変動係数 | 標準偏差を平均で割った値。0.20 未満は周期性を示す |
| ジッター | 検知を回避するためにビーコン間隔へ加えられるランダムな変動 |
| RITA ビーコンスコア | 接続の規則性、データサイズの一貫性、接続数から算出される複合スコア |
| JA3/JA4 フィンガープリンティング | C2 フレームワークのシグネチャを特定するための TLS クライアントのフィンガープリンティング |
| Fast-Flux DNS | C2 インフラストラクチャを保護するために使われる、名前解決先を急速に変化させる DNS |
ツールとシステム
| Tool | Purpose |
|---|---|
| RITA (Real Intelligence Threat Analytics) | Zeekログからの自動ビーコンスコアリング |
| AC-Hunter | ビーコン検知機能を備えた商用の脅威ハンティングプラットフォーム |
| Splunk | streamstatsを用いたSPLベースの統計的ビーコン分析 |
| Elastic Security | 周期的なネットワーク動作に対するML異常検知 |
| Zeek | ネットワークメタデータの収集(conn.log、dns.log、ssl.log) |
| Suricata | JA3/JA4 TLSフィンガープリント抽出機能を備えたネットワークIDS |
| FLARE | C2プロファイルおよびビーコンパターンの検知 |
| VirusTotal | ドメインおよびIPのレピュテーションによるエンリッチメント |
検知クエリ
Splunk -- HTTP/S ビーコン頻度分析
index=proxy OR index=firewall
| where NOT match(dest, "(?i)(microsoft|google|amazonaws|cloudflare|akamai)")
| bin _time span=1s
| stats count by src_ip dest _time
| streamstats current=f last(_time) as prev_time by src_ip dest
| eval interval=_time-prev_time
| stats count avg(interval) as avg_interval stdev(interval) as stdev_interval
min(interval) as min_interval max(interval) as max_interval by src_ip dest
| where count > 50
| eval cv=stdev_interval/avg_interval
| where cv < 0.20 AND avg_interval > 30 AND avg_interval < 86400
| sort cv
| table src_ip dest count avg_interval stdev_interval cv
KQL -- Microsoft Sentinel ビーコン検知
DeviceNetworkEvents
| where Timestamp > ago(24h)
| where RemoteIPType == "Public"
| summarize ConnectionTimes=make_list(Timestamp), Count=count() by DeviceName, RemoteIP, RemoteUrl
| where Count > 50
| extend Intervals = array_sort_asc(ConnectionTimes)
| mv-apply Intervals on (
extend NextTime = next(Intervals)
| where isnotempty(NextTime)
| extend IntervalSec = datetime_diff('second', NextTime, Intervals)
| summarize AvgInterval=avg(IntervalSec), StdDev=stdev(IntervalSec)
)
| extend CV = StdDev / AvgInterval
| where CV < 0.2 and AvgInterval > 30
| sort by CV asc
Sigma ルール -- ビーコンパターン検知
title: Potential C2 Beaconing Pattern Detected
status: experimental
logsource:
category: proxy
detection:
selection:
dst_ip|cidr: '!10.0.0.0/8'
timeframe: 24h
condition: selection | count(dst) by src_ip > 50
level: medium
tags:
- attack.command_and_control
- attack.t1071.001
一般的なシナリオ
- Cobalt Strike Beacon: HTTPS経由で、デフォルトの60秒間隔と、設定可能な0〜50%のジッターで通信します。Malleable C2プロファイルを使うと、正規のトラフィックパターンを模倣できます。
- Sunburst/SUNSPOT: 12〜14日間の休眠期間の後、ランダム化されたジッターを伴って12〜14分ごとにビーコン通信を行い、頻度分析を回避するよう設計されています。
- DNS トンネリング C2: 攻撃者が管理するドメインへのDNS TXT/CNAMEクエリを介してデータをエンコードして持ち出します。サブドメインのエントロピーの高さとクエリ量の多さによって検知できます。
- Sliver C2: HTTPS、mTLS、WireGuardプロトコルに対応した最新のC2フレームワークで、ジッターサポートを組み込んだビーコン間隔を設定できます。
- 正規サービスの悪用: Slack、Discord、Telegram、またはクラウドストレージAPIを介してC2通信を行うため、宛先ベースのフィルタリングは効果がありません。
出力形式
Hunt ID: TH-BEACON-[DATE]-[SEQ]
Source IP: [Internal IP]
Source Host: [Hostname from DHCP/DNS]
Destination: [Domain/IP]
Protocol: [HTTP/HTTPS/DNS]
Beacon Interval: [Average seconds]
Jitter Estimate: [Percentage]
Coefficient of Variation: [CV value]
Connection Count: [Total connections in window]
Data Size CV: [Payload consistency metric]
Domain Age: [Days since registration]
TI Match: [Yes/No -- source]
Risk Score: [0-100]
Risk Level: [Critical/High/Medium/Low]
Indicators: [List of triggered risk factors]
コメント
Markdown 対応