
RITAおよび標準的な規則性ベースの検出器を回避するphi構造C2ビーコンを検出します。
加法漸化による非周期構造化C2の検出
Beacon Hunterは、φ互換の加法漸化スケジューリングを使用するC2ビーコン通信を検出します。これは、各接続間隔がほぼ直前の2つの間隔の合計に等しくなる、増加する非周期的なタイミングパターンです。このファミリーは、設計上、規則性ベースの検出器(RITA、AC-Hunter)を回避しますが、2ゲート漸化テストにより構造的に識別可能なままです。
「ビーコンは、構造化されるために周期的である必要はない。」

Beacon Hunterの2ゲートパイプライン:ゲート1はφ比クラスタリングでフィルタリングし、ゲート2は加法漸化構造をテストします。
pip install -r requirements.txt
# Run on a Zeek conn.log
python beacon_hunter.py /path/to/conn.log
# Reproduce all paper results
python run_full_evaluation.py --quick # ~2 min, skips full evidence suite
python run_full_evaluation.py # ~5 min, full pipeline
# Run unit tests
pytest tests/
# End-to-end validation (verifies paper claims)
python validate.py
Beacon Hunterは、Zeek接続ログに対して動作する2ゲートパイプラインです。
ゲート1 — 比率テスト
同じ送信元/宛先ペアからの接続をグループ化し、連続する接続間隔(ICI)の比率を計算します。平均比率がφ(= 1.618)に±0.20以内で近く、比率の変動係数(CV)が0.50未満の場合に合格します。最小:5間隔。
ゲート2 — 加法漸化テスト
すべての連続するトリプルに対してICI[n+2] ≈ ICI[n+1] + ICI[n] が成り立つかを、500回反復の並べ替え帰無分布に対する平均相対誤差を用いてテストします。平均誤差 < 0.20 かつ p < 0.05 の場合に合格します。このゲートは、偶然ゲート1を通過するベキ乗則成長(残差0.40)と指数バックオフ(0.56)を拒否します。
分類ラベル
受容範囲: 幾何比が[1.45, 1.80]の範囲内。境界スイープにより経験的に確認済み。
beacon_hunter_github/
├── beacon_hunter.py # CLI detector — entry point
├── detectors.py # Pure stateless gate functions (556 lines)
├── validate.py # 32-check end-to-end validation
├── run_full_evaluation.py # One-command reproduction pipeline
├── requirements.txt # Pinned dependencies
├── evidence/
│ ├── evidence_suite.py # All 6 evaluation batteries (Experiments A-J)
│ ├── rita_comparison.py # RITA-style periodicity baseline + real RITA comparison
│ ├── roc_and_ci.py # ROC curve (AUC=0.900) + Wilson CI
│ ├── generate_figures.py # Figures 1-7 (PNG + PDF)
│ └── *.json # Pre-computed results
├── data/
│ ├── pcaps/ # Ground-truth PCAPs (see Dataset Notes below)
│ └── zeek/ # Zeek conn.log files
├── figures/ # fig1-fig8 PNG + PDF (sequential)
├── paper/ # Full paper with appendices A-G
├── reports/ # Beacon Hunter output reports + real RITA v5.1.2 output
├── tests/
│ └── test_detectors.py # 34 unit tests (34/34 pass)
├── tools/
│ ├── fib_beacon_client.py # Fibonacci beacon traffic generator
│ ├── fib_beacon_server.py
│ └── uwf_to_connlog.py # UWF-ZeekData22 parquet → Zeek conn.log converter
└── archive/ # Deprecated scripts (legacy_detectors.py, old scanners)
UWF-ZeekData22の評価について:https://datasets.uwf.edu/data/ からダウンロードし、tools/uwf_to_connlog.pyを使用して変換してください。
これらの結果は、Beacon Hunterを実際のエンタープライズトラフィックに対して実行して得られたものです:
実際のRITA v5.1.2との比較(reports/rita_output_v5.1.2_24h.txt):
両ツールとも30秒のジッター付き周期ビーコンを検出します。RITAは、他の50件のCritical/Highアラートの中でこれを0.617の低重大度とスコアリングします。Beacon HunterはこれをJITTERED_BEACONに分類します。純粋な加法漸化スケジュールはRITAで0.35未満のスコアになります — 付録Aで解析的に証明され、経験的に確認されています。
UWF-ZeekData22(100万件の実際のエンタープライズ接続):
良性週では、分析した12,083フローのうちADDITIVE_RECURRENCE_BEACONとしてフラグ付けされたのは0件。Recon/Discovery攻撃週では0/1,995件(正しい動作 — ポートスキャンはビーコン通信ではない)。注入した4つのフィボナッチビーコンはすべてジッター0〜25%で検出されました。
24時間のエンタープライズZeekバックグラウンド:
分析した243フローのうち1件がフラグ付け — フラグ付けされたのはIPv6 NDP(アナリストのトリアージヒューリスティックでは34%)で、わずかでありプロトコルに起因するものです。
期待される正確な数値出力については、EXPECTED_RESULTS.mdを参照してください。
# Quick verification of all paper claims:
python validate.py
# Full pipeline (generates all outputs from scratch):
python run_full_evaluation.py
# Expected: 32/32 validation checks pass, ROC AUC=0.900, jitter 20%=100% detection
この研究成果を使用する場合は、付随する論文を引用してください:
Cordero, A. (2026). Detecting Non-Periodic Structured C2 Beaconing via Additive Recurrence. RepoSignal.io LLC. https://doi.org/10.5281/zenodo.20431555
AGPL-3.0。LICENSEを参照してください。
商用ライセンスはRepoSignal.io LLCを通じて利用可能です。
| ラベル | 意味 |
|---|
ADDITIVE_RECURRENCE_BEACON | 両ゲートを通過 — φ互換の増加間隔スケジュール |
JITTERED_BEACON | ジッター付きの周期ビーコン — 比率ゲートを通過するが漸化テストに不合格 |
REGULAR_BEACON | 一定間隔のビーコン |
BACKGROUND | ビーコン構造が検出されない |
INSUFFICIENT_DATA | 間隔が5未満 |
| スクリプト | 実験 | 出力 |
|---|
evidence/evidence_suite.py | A(合成データ)、B(ラボPCAP)、C(ACジッター)、E(敵対的テスト群)、F(ジッタースイープ)、G(長さ感度)、H(帰無分布)、I(φ境界)、J(ロジスティック写像) | evidence_results.json |
evidence/roc_and_ci.py | G.5(ROC、AUC=0.900)、G(ウィルソン信頼区間[0.992, 1.000]) | roc_results.json |
evidence/rita_comparison.py | D(RITAスタイルのベースライン比較) | rita_comparison_results.json |
evidence/generate_figures.py | 図1〜7 | figures/fig*.png/pdf |
| ファイル | 種類 | 説明 |
|---|
data/pcaps/fib_beacon_validation.pcapng | グラウンドトゥルース | ラボで生成したフィボナッチビーコンPCAP。実験Bで使用 |
data/pcaps/jit_var_d30_j0_1h.pcap | グラウンドトゥルース | 30秒の一定ビーコン、ジッター0%、1時間 |
data/pcaps/jit_var_d30_j10_1h.pcap | グラウンドトゥルース | 30秒ビーコン、ジッター10%、1時間 |
data/pcaps/jit_var_d30_j99_1h.pcap | グラウンドトゥルース | 30秒ビーコン、ジッター99%(純粋なノイズ)、1時間 |
data/zeek/delay_var_d30_j25_combined.log | 実データ+注入 | 30秒+25%ジッタービーコンを注入した2時間分のエンタープライズZeek conn.log |
data/zeek/delay_var_d30_j25_24h_combined.log | 実データ+注入 | 上記の24時間版 |
reports/rita_output_v5.1.2_24h.txt | 実際のRITA出力 | 24時間データセットに対する実際のRITA v5.1.2バイナリ出力(100フローをスコアリング) |
| 実験 | 結果 |
|---|
| 合成データ検出(実験A) | ビーコン3/3クラスが正解、FP 0件 |
| ラボPCAP(実験B) | ADDITIVE_RECURRENCE_BEACON、rec_err=0.000、p<0.002 |
| ジッタースイープ(実験F) | ジッター20%まで100%検出、30%で急激に低下 |
| ベキ乗則対指数バックオフ(実験E) | 残差0.40および0.56 > しきい値0.20。正しく拒否 |
| ROC AUC(実験G.5) | 0.900、FPR=0.071でTPR=1.000 |
| ジッター付きビーコンに対する実際のRITA v5.1.2 | 0.617 低重大度(両ツールが検出、分類は異なる) |
| UWF-ZeekData22(100万フロー、良性) | 分析した12,083フローのうちARBとしてフラグ付けされたのは0件 — FPR 0.00% |
| ロジスティック写像テスト群(実験J) | 純粋なロジスティック:検出0%、φバイアス付きノイズ≤20%:100% |
| φ境界スイープ(実験I) | 受容範囲[1.45, 1.80]を確認 |