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 순서로 배치됩니다. 각 요청에서 9개 차원의 행동 신호를 수집하고, 핵심 신호(Anchor Signal)와 보조 신호(Corroborating Signal)의 가중치를 합산해 위험 점수를 생성합니다. 점수가 임계값(redlineScore=70)을 넘고 핵심 신호가 1개 이상 포함되면 LLM 기반 비동기 분석이 보호 대상 접근 이전에 시작됩니다.
ZeroTrustActionRepository 기반의 비동기 enforcement 경로에서만 이뤄지고, HCAD는 그 경로를 일찍 기동하는 역할만 담당합니다.
요청 도착부터 결정까지의 단계
분석 개시 시점 비교
HCAD가 없는 기본 경로에서는 AI 분석이 보호 대상 리소스 접근 시점에 시작됩니다. HCAD 조기 탐지가 활성화되면, 이미 강한 이상 징후가 있는 요청은 필터 단계에서 즉시 분석이 예약됩니다.
9차원 행동 신호
HCAD는 매 요청마다 HCADContext 값 객체를 생성하며, 여기에 사용자·세션·디바이스·지리·행동·인증·리소스·의도·기준선 정보를 함께 담습니다. 이 객체가 이후 점수 계산과 LLM 컨텍스트의 공통 입력이 됩니다.
- userId · sessionId
- requestPath · httpMethod
- remoteIp
- country · city
- latitude · longitude
- currentAccessHour
- isNewSession
- isNewDevice
- isNewUser
- authenticationMethod
- failedLoginAttempts
- hasValidMFA
- recentRequestCount (5분)
- lastRequestInterval
- previousPath
- baselineConfidence
- updateCount
- avgTrustScore
- resourceType
- isSensitiveResource
- intentBotUserAgent
- intentMissingReferer
- toVector() — 384차원
- toJson()
- toCompactString()
신호 가중치 모델
신호는 두 종류로 나뉩니다. 핵심 신호(Anchor)는 단독으로도 조기 분석을 유발할 수 있을 만큼 무거운 가중치를 가집니다. 보조 신호(Corroborating)는 여러 개가 누적돼야 의미를 갖습니다. 최종 규칙은 "핵심 신호 ≥ 1개 AND 총점 ≥ 70".
핵심 신호 (Anchor)
보조 신호 (Corroborating)
위험 점수 밴드
합산 점수는 0~100 척도에서 네 구간으로 분류됩니다. 조기 분석은 RED 구간에 진입하면서 핵심 신호가 포함된 경우에만 발동합니다.
| 밴드 | 점수 구간 | 의미 | 조기 분석 개시 |
|---|---|---|---|
| LOW | 0 – 29 | 정상 범주 | 아니오 |
| MEDIUM | 30 – 49 | 경미한 이상 | 아니오 |
| HIGH | 50 – 69 | 주시 필요 | 아니오 (기존 경로) |
| REDLINE | 70 – 100 | 즉각 점검 대상 | 예 (핵심 신호 1개 이상 포함 시) |
highRiskScore=50, mediumRiskScore=30, lowBaselineConfidenceThreshold=0.35. 평소 행동 기준(baseline)의 신뢰도가 0.35 미만인 사용자는 보조 신호 BASELINE_UNCERTAIN이 자동 부여됩니다.
판정 레코드 구조
점수 계산 결과는 불변 레코드 HcadPreProtectablePromotionAssessment에 담겨 HCADContext.additionalAttributes와 HTTP request attribute 양쪽에 투영됩니다. 이 레코드가 이후 감사·설명·평가에 사용되는 공통 진실원천입니다.
조기 분석 트리거 체인
HCAD 필터 이후 배치되는 AuthenticatedPendingAnomalyTriggerFilter는 5단계 게이트를 통과한 요청에 한해 이벤트를 발행합니다. 각 단계는 서로 독립적으로 실패할 수 있으며, 어떤 단계에서 중단되든 기존 요청 흐름은 영향을 받지 않습니다.
PendingAnomalyEligibilityGate (1), PendingAnomalyEvidenceCheckService (2), AnalysisTriggerStateRepository (3·4), PendingAnomalyEventTriggerService (5). 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 시나리오에서도 그대로 재사용됩니다.
| 필드 | 타입 | 설명 |
|---|---|---|
hcadEscalationScore |
integer | 0~100 위험 점수 |
hcadEscalationBand |
enum | LOW · MEDIUM · HIGH · REDLINE |
hcadEscalationEligible |
boolean | 조기 분석 개시 대상 여부 |
hcadEscalationReasons |
string[] | 사유 코드 배열. 감지된 신호 목록 |
hcadEscalationSummary |
string | 한 줄 요약. 관리자 알림 용도 |
hcadEscalationVersion |
string | 평가 로직 버전. 재현성 보장 |
rawSignalSnapshot |
object | 원시 신호 값. verifier 재평가 입력 |
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)