From ae6237de21b7e7b4efd49042c20ce41ebcd85d8e Mon Sep 17 00:00:00 2001 From: kaffa Date: Sat, 25 Apr 2026 10:17:24 +0900 Subject: [PATCH] =?UTF-8?q?netbis-sigmatch=20v2.4:=20A4=20Matrix=20Profile?= =?UTF-8?q?=20=ED=8A=B8=EB=A6=AC=EA=B1=B0=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 18h DRY 가동 결과 99 distinct IP 차단 누적. attack_contributor 2,668건 중 97.5%가 MP only 시그널 발동. MP threshold p99 (1% 오탐) × 매 5분 사이클 평가 = 누적 폭주. attack_contributor의 단순 volume top이 webhook + heavy normal user 항상 잡음. LIVE였으면 베팅 콜백 4~5개 차단 + KR 활발 유저 + IPv6 모바일 240/4 가짜 IP 99개 차단 = 서비스 사고. matrix_profile.py 모듈은 보존 (관찰/연구용). loop.py에서 호출만 제거. 폐기 사유: MP의 self-similar 시계열 가정이 daily seasonality 있는 트래픽과 안 맞음 + 단일 시그널이 contributor 단계로 무차별 차단 증폭 --- projects/netbis-sigmatch.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/projects/netbis-sigmatch.md b/projects/netbis-sigmatch.md index fef6602..7f4fc0c 100644 --- a/projects/netbis-sigmatch.md +++ b/projects/netbis-sigmatch.md @@ -13,7 +13,7 @@ Netbis NPM 로그(VictoriaLogs)를 실시간 분석해 **사람 개입 없이 - **배포 예정**: jp1 Incus `ai-sigmatch` 컨테이너 (systemd timer 1분) - **책임자**: kappa 직접 개발 (Heimdall 위임 X, 개발 단계) -## 핵심 설계 (v2.3, 2026-04-24 CF Access Rules LIVE 모드 추가) +## 핵심 설계 (v2.4, 2026-04-25 A4 Matrix Profile 트리거 제거) ### 탐지 트리거 (OR 조건, 하나라도 충족 시 attack mode ON) @@ -38,16 +38,7 @@ g_t > μ × 2.0 → trigger → reset g=0 - entropy 계산은 `min_entropy_baseline_samples=20` 확보 후부터 - `uniq_ips < entropy_min_uniq_ips=30` 이면 판정 스킵 (트래픽 자체가 너무 적을 때) -**A4. Matrix Profile discord** (패턴 이상) -``` -stumpy.stump(최근 7일 total_reqs 시계열, m=12) -현재 서브시퀀스의 MP > 과거 MP 분포의 p99 → discord -``` -- m=12 (1시간 subsequence length) -- 완전 비파라메트릭. 학습 불필요, 자기 과거와 직접 비교 -- z-normalized euclidean distance라 스케일 차이 무시, **형태 차이**만 봄 -- CUSUM은 "크기 이상"만, MP는 "패턴/형태 이상" 담당 → 상보적 -- 첫 사이클은 numba JIT로 ~7s, 이후 ms 단위 +**A4. Matrix Profile discord** ~~(v2.2~v2.3)~~ — **v2.4에서 제거** (사유 아래 참조) → attack mode ON: top N contributor IP 일괄 challenge @@ -136,8 +127,9 @@ uv run python cf_client.py purge [--yes] # sigmatch prefix 전 - [x] Phase 8 (v2.1): CUSUM Page-Hinkley + global src IP entropy drop - [x] Phase 9 (v2.2): Matrix Profile discord (stumpy.stump) 추가 - [x] Phase 10: bootstrap_baseline.py — 과거 24h seed로 모든 hour samples_ok 즉시 충족 -- [x] **Phase 11 (v2.3): CF Access Rules 호출 (managed_challenge/block)** ← 현재 DRY로 검증 -- [ ] Phase 11 LIVE 전환: `--live` 플래그로 실 운영 (환경변수 CF credentials 주입) +- [x] Phase 11 (v2.3): CF Access Rules 호출 (managed_challenge/block) — DRY 검증 단계 +- [x] **Phase 11.6 (v2.4): A4 Matrix Profile 트리거 제거** ← 현재 (false positive 누적 사고 회피) +- [ ] Phase 11 LIVE 전환: `--live` 플래그로 실 운영 - [ ] Phase 12: jp1 Incus 배포 (systemd timer) ## 파라미터 (사람 조정 가능) @@ -177,6 +169,14 @@ uv run python cf_client.py purge [--yes] # sigmatch prefix 전 - ~~IsolationForest + DBSCAN per-IP anomaly~~ → 정상 폴링 유저를 outlier로 잡아 오탐 위험 - ~~Persistence 단독 트리거~~ → 페이지 오래 열어둔 유저 6 사이클 지속 시 오탐 - ~~사전 정의 hard rule (R1~R6)~~ → 공격 패턴 종속, 자동 시그니처 생성 취지 어긋남 +- ~~Matrix Profile discord (attack 트리거 용도, v2.2~v2.3)~~ → **v2.4 제거**. 사유: + - threshold p99 = 정의상 1% false positive. 매 5분 사이클 평가 → 하루 ~14회 발동 + - MP의 self-similar 시계열 가정이 우리 트래픽과 안 맞음. m=12 (1시간) 윈도우는 + daily seasonality(낮/저녁/새벽 패턴 변동)보다 짧아 자연스러운 시간대 변동을 discord로 잡음 + - 단일 시그널이 attack_mode 트리거가 되어 attack_contributor에서 reqs 순 top 20을 + 무차별 차단 → 18시간 동안 99 distinct IP 차단 누적 (webhook 4~5개 + KR 활발 유저 + + IPv6 모바일 240/4 가짜 IP). LIVE였으면 베팅 콜백 중단 사고 + - matrix_profile.py 모듈은 보존 (관찰/연구용 수동 호출 가능). attack 트리거에서만 제거 ## 폐기 후보 (검토 후 불채택)