diff --git a/projects/netbis-sigmatch.md b/projects/netbis-sigmatch.md index cb3600c..926cf02 100644 --- a/projects/netbis-sigmatch.md +++ b/projects/netbis-sigmatch.md @@ -47,13 +47,42 @@ Netbis NPM 로그(VictoriaLogs)를 실시간 분석해 **사람 개입 없이 ## 개발 단계 - [x] Phase 1: feature 추출 파이프라인 (`fetch_features.py`) -- [ ] Phase 2: 24h baseline 수집기 (정상 분포 학습용) -- [ ] Phase 3: IsolationForest 기반 anomaly detection -- [ ] Phase 4: DBSCAN 클러스터링 → 시그니처 자동 합성 -- [ ] Phase 5: dry-run (매치 기록만, ban X) -- [ ] Phase 6: CF IP Access Rules 호출 (ban + TTL) +- [x] Phase 2: 24h baseline 수집기 (retrospective, `collect_baseline.py`) +- [x] Phase 3: IsolationForest 기반 anomaly detection (loop.py 내) +- [x] Phase 4: DBSCAN 클러스터링 + 단발 봇 persistence 탐지 (loop.py 내) +- [x] Phase 5: state DB (IP별 persistence/action 이력, `state.py`) +- [ ] **Phase 5b: 장시간 관찰 (현재 진행)** — 수 시간~1일 dry-run, 실제 공격 도달 시 거동 확인 +- [ ] Phase 6: CF IP Access Rules 호출 (managed_challenge → block 승급) - [ ] Phase 7: jp1 Incus 배포 (systemd timer) +## 오탐 방지 설계 (핵심) + +사람이 작성한 공격 패턴 룰 **없음**. 매 사이클 자동 재합성. + +**2트랙 탐지**: + +1. **클러스터 기반 (캠페인 공격)** + - IsolationForest로 outlier 추출 + - DBSCAN으로 outlier 간 유사 패턴 클러스터 + - 클러스터 강도(크기·rate·성공률) 평가 → challenge + - 연속 5+ 사이클 지속 시 block 승급 + +2. **단발 지속 (개별 봇)** + - 클러스터 미형성 noise outlier 중 + - 3+ 사이클 연속 + anomaly_score 하위 50% 이내 + - → challenge, 5+ 사이클 지속 → block + +**조치 레벨**: +- challenge: Cloudflare managed_challenge (CAPTCHA), TTL 30분 — 정상 유저는 한 번 풀고 통과 +- block: TTL 24시간 — challenge 통과 후에도 공격 지속 시만 + +**사람이 조정하는 건 파라미터만** (코드에 공격 지식 없음): +- `min_cluster_ips` (클러스터 최소 IP 수) +- `min_avg_rate`, `min_success` (강도 임계) +- `persistence_for_challenge`, `persistence_for_block` (승급 기준) +- DBSCAN eps, min_samples +- TTL + ## 관찰된 공격 유형 (2026-04-24 실측) **유형 A — 리소스 크롤러**: static_ratio > 0.5, iri_p90 < 0.1, uniq_paths > 50, 짧은 active