HCAD 조기 위협 탐지
HCAD(Host & Context Anomaly Detection)는 인증된 HTTP 요청이 보호 대상 리소스(@Protectable)에 도달하기 전에 행동 신호를 수집하고, 위험 점수를 계산하여 AI 분석 파이프라인을 조기 개시합니다. HCAD 자체는 차단 결정을 내리지 않고, 분석 개시 조건만 계산합니다.
개요
HCAD 조기 위협 탐지는 요청이 컨트롤러에 도달하기 전, HCADFilterConfigurer가 HCADFilter를 Spring Security의 AuthorizationFilter 앞에 삽입하는 방식으로 동작합니다. 현재 configurer 순서는 SecurityConfigurer.HIGHEST_PRECEDENCE + 115이며, 뒤이어 AuthenticatedPendingAnomalyTriggerFilter가 HIGHEST_PRECEDENCE + 116 순서로 배치됩니다. HCAD는 최종 위험 판정기가 아니라, 보호 대상 리소스에 도달하기 전에 인증된 요청을 LLM 분석 경로로 보낼 가치가 있는지 판단하는 조기 게이트입니다.
SHADOW입니다. 후보 요청은 LLM 분석을 시작할 수 있지만 런타임 부작용은 event boundary에서 억제됩니다. 실제 집행은 일반 Zero Trust 판정 경로가 담당합니다.
요청 도착부터 결정까지의 단계
분석 개시 시점 비교
HCAD가 없는 기본 경로에서는 AI 분석이 보호 대상 리소스 접근 시점에 시작됩니다. HCAD 조기 탐지가 활성화되면, 이미 강한 이상 징후가 있는 요청은 필터 단계에서 즉시 분석이 예약됩니다.
신뢰 fast context projection
HCAD scoring은 TrustedHcadContextProjectionFactory가 생성하는 TrustedHcadContextProjection을 기준으로 수행됩니다. pre-trigger scoring에는 TRUSTED_SERVER, BRIDGE_VERIFIED, STORE_DERIVED 출처가 확인된 필드만 반영됩니다. 클라이언트가 보낸 시뮬레이션 헤더, 공식검사 override slot, RAG/vector/MCP 데이터, 외부 threat pack 입력은 hot path 판단에서 제외됩니다.
- userId · sessionId
- requestPath · httpMethod
- remoteIp
- clientIp
- impossibleTravel
- trusted server time
- contextBindingHash
- tenantId
- organizationId
- authenticationMethod
- failedLoginAttempts
- hasValidMFA
- requestBurst
- rapidSequence
- previousPath
- baselineConfidence
- baselineEstablished
- STORE_DERIVED source
- normalizedPath
- httpMethod
- verificationRequired
- authorizationPolicyId
- authorizationPrivileged
- recentPermissionChanges
- RAG / vector / MCP
- simulation headers
- client risk overrides
신호 가중치 모델
신호는 두 종류로 나뉩니다. 핵심 신호(Anchor)는 단독으로도 조기 분석을 유발할 수 있을 만큼 무거운 가중치를 가집니다. 보조 신호(Corroborating)는 여러 개가 누적돼야 의미를 갖습니다. 최종 규칙은 "핵심 신호 ≥ 1개 AND 총점 ≥ 70".
핵심 신호 (Anchor)
보조 신호 (Corroborating)
위험 점수 밴드
합산 점수는 0~100 척도에서 네 구간으로 분류됩니다. 조기 분석은 RED 구간에 진입하면서 핵심 신호가 포함된 경우에만 발동합니다.
| 밴드 | 점수 구간 | 의미 | 조기 분석 개시 |
|---|---|---|---|
| LOW | 0 – 29 | 정상 범주 | 아니오 |
| MEDIUM | 30 – 49 | 경미한 이상 | 아니오 |
| HIGH | 50 – 69 | 주시 필요 | 아니오 (기존 경로) |
| REDLINE | 70 – 100 | 즉각 점검 대상 | 예 (핵심 신호 1개 이상 포함 시) |
contexa.hcad.high-risk-score=50, contexa.hcad.medium-risk-score=30, contexa.hcad.low-baseline-confidence-threshold=0.35. 평소 행동 기준(baseline)의 신뢰도가 0.35 미만인 사용자는 보조 신호 BASELINE_UNCERTAIN이 자동 부여됩니다.
판정 레코드 구조
점수 계산 결과는 불변 레코드 HcadPreProtectablePromotionAssessment에 담기며, pending anomaly trigger chain이 읽을 수 있도록 HTTP request attribute에 연결됩니다. 후보, trigger, 중복 억제, LLM 결과 상태는 별도의 hcad_detection_evaluation 테이블에 저장됩니다. 런타임 audit_log에는 감사 추적용 요약만 남기고, 통계와 관리자 화면은 전용 평가 테이블을 기준으로 집계합니다.
신뢰 projection 평가 및 평가 테이블 저장
보호 리소스에 도달하기 전, 현재 hot path에서 일어나는 흐름을 축약한 예시 코드입니다:
// HCADFilter 흐름을 단순화한 예시입니다.
// 1. 신뢰 출처 기반 canonical fast projection 생성
TrustedHcadContextProjection projection =
trustedProjectionFactory.project(request, authentication);
// 2. 신뢰 필드만 점수화. ignoredInputs는 설명용으로만 보관하고 scoring에는 쓰지 않음
HcadPreProtectablePromotionAssessment assessment =
hcadPreProtectablePromotionScorer.score(projection);
// 3. trigger chain이 읽을 수 있도록 request attribute에 assessment 연결
HcadPreProtectablePromotionRequestProjector.project(
request,
assessment,
hcadProperties.getPreTrigger().effectiveMode());
// 4. orchestrator가 hcad_detection_evaluation 저장과 LLM 중복 억제를 조정
if (assessment.eligible()) {
pendingAnomalyTriggerOrchestrator.maybeTrigger(request, authentication);
}
조기 분석 트리거 체인
HCAD 필터 이후 배치되는 AuthenticatedPendingAnomalyTriggerFilter는 아래의 순차 게이트를 통과한 요청에 한해 이벤트를 발행합니다. 각 단계는 서로 독립적으로 실패할 수 있으며, 어떤 단계에서 중단되든 기존 요청 흐름은 영향을 받지 않습니다. HCAD와 @Protectable trigger는 같은 idempotency key를 공유하므로 동일 요청에서 LLM 분석이 중복 실행되지 않습니다.
PendingAnomalyEligibilityGate (1), PendingAnomalyEvidenceCheckService (2), AnalysisTriggerStateRepository와 HcadLlmTriggerCoordinator (3·4), PendingAnomalyEventTriggerService (5). 모든 게이트를 통과한 요청은 ZeroTrustEventPublisher.publishPreProtectableThreat()로 연결됩니다.
평소 행동 기준 학습
HCAD가 "이 사용자에게 정상인가" 를 판단하려면 먼저 무엇이 정상인지 알아야 합니다. BaselineLearningService는 신뢰 등급이 높은 요청에서 IP 대역·접근 시간·경로·User-Agent·OS·인증 방식을 관찰해 개인·조직 두 단계의 기준선을 점진적으로 갱신합니다.
학습 방식
지수 이동 평균 (EMA)
- newTrust = α·current + (1-α)·old
- 최근 관측에 더 큰 가중
- 느린 드리프트 자연 반영
최저 빈도 제거 (LFU)
- IP · 경로 · UA · OS 집합
- 최소 빈도 요소부터 퇴거
- 집합 크기 상한 유지
개인 기준선
- 최소 10 샘플 이후 활성
- 신뢰도 단계 상승
- 사용자별 독립 보관
조직 기준선
- 개인 데이터 부재 시 대체
- 동류 그룹(cohort) 통계
- 초기 사용자 보호막
이벤트 페이로드 필드
5단계 트리거를 통과한 요청은 PRE_PROTECTABLE_REDLINE 이벤트로 발행되며, 이후 기존 비동기 LLM 파이프라인과 감사 시스템이 이 페이로드를 소비합니다. 설계 계약상 모든 판정 근거가 페이로드에 담겨 있어야 하며, 이 구조는 향후 외부 verifier 시나리오에서도 그대로 재사용됩니다.
| 필드 | 타입 | 설명 |
|---|---|---|
hcadEvaluationId |
string | hcad_detection_evaluation에 저장되는 기본 평가 ID |
hcadMode |
enum | OBSERVE · SHADOW · ENFORCE. 기본값은 SHADOW |
decisionBoundaryMode |
enum | HCAD shadow 후보에서는 SHADOW로 설정되어 enforcement 부작용을 건너뜁니다. |
hcadEscalationScore |
integer | 0~100 위험 점수 |
hcadEscalationBand |
enum | LOW · MEDIUM · HIGH · REDLINE |
hcadEscalationEligible |
boolean | 조기 분석 개시 대상 여부 |
hcadEscalationReasons |
string[] | 사유 코드 배열. 감지된 신호 목록 |
hcadEscalationSummary |
string | 한 줄 요약. 관리자 알림 용도 |
hcadEscalationVersion |
string | 평가 로직 버전. 재현성 보장 |
rawSignalSnapshot |
object | 원시 신호 값. verifier 재평가 입력 |
duplicateSuppressed |
boolean | coordinator가 HCAD/@Protectable 중복 trigger를 억제했는지 여부 |
action |
enum | 항상 PENDING_ANALYSIS. 실제 집행 액션은 비동기 LLM 분석이 결정 |
인프라 모드와 배선
HCAD의 세션 메타데이터·요청 카운팅·디바이스 기록은 인프라 모드에 따라 저장소가 다릅니다. 둘은 동일한 HCADDataStore 계약을 구현하므로 애플리케이션 코드는 영향을 받지 않습니다.
STANDALONE
개발·테스트 환경의 기본 모드. 모든 상태가 JVM 내부에 존재합니다.
InMemoryHCADDataStore
- ConcurrentHashMap 기반
- TreeMap 을 이용한 5분 요청 윈도우
- 외부 의존성 없음
DISTRIBUTED
다중 인스턴스 운영 환경. 상태를 Redis에 저장하여 전체 노드가 공유합니다.
RedisHCADDataStore
- Hash · Set · Sorted Set 구조
- 세션 TTL 24h · 디바이스 TTL 30d
- 인스턴스 전체에서 일관된 판정
배선 지점
AuthorizationFilter 앞에 HCADFilter 삽입 (configurer order=HIGHEST_PRECEDENCE + 115)Shadow 모니터링과 승격 기준
HCAD pre-trigger 평가는 IAM 관리자 화면 /contexa/admin/security-monitor/hcad에서 확인합니다. 이 화면은 hcad_detection_evaluation을 기준으로 일·주·월·연 기간의 후보 수, LLM 호출 수, precision, false positive, 관측 가능한 false negative, unknown 비율, 평균 LLM latency, 중복 억제 수, signal별 성능, resource별 성능, 사용자·세션 반복, 예상 낭비 비용을 집계합니다.
| 설정 | 기본값 | 의미 |
|---|---|---|
contexa.hcad.pre-trigger.mode |
shadow |
observe, shadow, enforce, disabled 중 선택 |
contexa.hcad.pre-trigger.qualification.shadow-min-precision |
0.80 |
shadow 유지 최소 기준 |
contexa.hcad.pre-trigger.qualification.limited-enforce-min-precision |
0.90 |
제한적 enforce 권장 기준 |
contexa.hcad.pre-trigger.qualification.default-enforce-min-precision |
0.95 |
기본 enforce 권장 기준 |
contexa.hcad.pre-trigger.qualification.minimum-sample-size |
100 |
권장 판단에 필요한 최소 표본 수 |