sigmatch: Phase 5 완료 — state DB + 2트랙 탐지 (클러스터+단발) + 오탐방지 설계 명시

This commit is contained in:
kaffa
2026-04-24 10:13:05 +09:00
parent 61275e6e81
commit 027e3c2a45

View File

@@ -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