
RITA 및 표준 규칙성 기반 탐지기를 회피하는 phi 구조의 C2 비콘을 탐지합니다.
비주기적 구조화 C2 탐지: 가산 재귀(Additive Recurrence) 방식
Beacon Hunter는 phi 호환 가산 재귀 스케줄링을 사용하는 C2 비콘닝(command-and-control beaconing)을 탐지합니다. 이는 각 연결 간 간격이 대략 이전 두 간격의 합과 같은, 증가하는 비주기적 타이밍 패턴입니다. 이 계열은 설계상 규칙성 기반 탐지기(RITA, AC-Hunter)를 회피하지만, 2단계 게이트 재귀 테스트를 통해 구조적으로 식별할 수 있습니다.
"비콘은 주기적이지 않아도 구조적일 수 있다."

Beacon Hunter 2단계 게이트 파이프라인: 게이트 1은 phi 비율 클러스터링으로 필터링하고, 게이트 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) 비율을 계산합니다. 평균 비율이 phi(φ = 1.618)의 ±0.20 이내이고 비율 변동성(CV)이 0.50 미만이면 통과합니다. 최소 5개 간격 필요.
게이트 2 — 가산 재귀 테스트
모든 연속 3중항에서 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 Low 심각도로 점수를 매깁니다. Beacon Hunter는 이를 JITTERED_BEACON으로 분류합니다. 순수 가산 재귀 스케줄은 RITA에서 0.35 미만으로 점수가 매겨집니다 — 부록 A에서 분석적으로 증명되고 실증적으로 확인되었습니다.
UWF-ZeekData22 (실제 엔터프라이즈 연결 100만 건):
정상 주간에는 분석된 12,083개 플로우 중 0개가 ADDITIVE_RECURRENCE_BEACON으로 플래그되었습니다. Recon/Discovery 공격 주간에는 1,995개 중 0개 (정상 — 포트 스캔은 비콘이 아님). 주입된 Fibonacci 비콘 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 | 두 게이트 모두 통과 — phi 호환 증가 간격 스케줄 |
JITTERED_BEACON | 지터가 있는 주기적 — 비율 게이트 통과, 재귀 게이트 실패 |
REGULAR_BEACON | 일정 간격 비콘 |
BACKGROUND | 비콘 구조 미검출 |
INSUFFICIENT_DATA | 간격이 5개 미만 |
| 스크립트 | 실험 | 출력 |
|---|
evidence/evidence_suite.py | A (합성), B (랩 PCAP), C (AC 지터), E (적대적 배터리), F (지터 스윕), G (길이 민감도), H (귀무 분포), I (phi 경계), J (로지스틱 맵) | evidence_results.json |
evidence/roc_and_ci.py | G.5 (ROC, AUC=0.900), G (Wilson CI [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 | 정답 데이터 | 실험 B에 사용된 랩 생성 Fibonacci 비콘 PCAP |
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개 플로우 점수화) |
| 실험 | 결과 |
|---|
| 합성 탐지 (Exp A) | 3/3 비콘 클래스 정확, FP 0 |
| 랩 PCAP (Exp B) | ADDITIVE_RECURRENCE_BEACON, rec_err=0.000, p<0.002 |
| 지터 스윕 (Exp F) | 지터 20%까지 100% 탐지; 30%에서 급락 |
| 멱법칙 vs 지수 백오프 (Exp E) | 잔차 0.40 및 0.56 > 임계값 0.20; 올바르게 기각 |
| ROC AUC (Exp G.5) | 0.900; FPR=0.071에서 TPR=1.000 |
| 지터 비콘에 대한 실제 RITA v5.1.2 | 0.617 Low 심각도 (두 도구 모두 탐지, 분류는 상이) |
| UWF-ZeekData22 (1M 플로우, 정상) | 분석된 12,083개 플로우 중 0개 ARB 플래그 — FPR 0.00% |
| 로지스틱 맵 배터리 (Exp J) | 순수 로지스틱: 탐지 0%; phi 편향 ≤20% 노이즈: 100% |
| Phi 경계 스윕 (Exp I) | 허용 창 [1.45, 1.80] 확인 |