InfraGuard

보안 개요 (방어 퍼널)

위협 → 탐지 → 자동 대응 룰셋 → 차단을 하나의 퍼널로 관통해 자동 방어의 서사를 보여주는 보안 관제 센터피스 화면입니다.

개요 — 무엇을 하나

보안 개요(/security)는 보안 역할 영역의 센터피스입니다. InfraGuard 가 수집·판정·자동조치까지 수행하지만 한 번도 시각화되지 않았던 "숨은 텔레메트리"를 하나의 방어 퍼널 서사로 표면화합니다.

핵심 메시지는 한 문장으로 요약됩니다 — "지금 이 순간에도 AI·IDS 자동 방어가 위협 네트워크를 막고 있습니다." 이를 위해 화면은 다음을 한 눈에 보여줍니다:

모든 데이터는 읽기 전용이며 이 화면에서는 아무것도 차단·수정하지 않습니다. 실제 조작은 위협·차단 & 평판·탐지 화면에서 이뤄집니다.

이 화면의 "도메인"은 없습니다 — 보안 개요는 웹 TLD 가 아니라 역할 영역(보안 관제) 관점의 요약입니다.

언제 쓰나

화면 구성

상단 — 위협 강도 게이지 + 방어 퍼널

영역 내용
위협 강도(t.ov.score) 보안 점수를 conic-gradient 도넛으로 표시. UI 표기값 = 100 − score(높을수록 위험). 부제: "높을수록 위험 · 미조치로 남은 잔여 기준".
방어 퍼널(t.ov.funnel_title) 위→아래로 폭이 좁아지는 4단 스테이지 바. 각 스테이지에 실측 카운트 + 설명.

중단 — 자동 대응 + 위협 추이

카드 내용
자동 대응(t.ov.resp_title) 4개 지표 타일: 시간당 평균 위협 · 24시간 위협 · 활성 차단 /24 · 24h 차단.
기간별 위협 추이(t.ov.tseries_title) IDS 경보를 30 버킷으로 다운샘플한 SVG 스파크라인. Σ 총합 · ▲ 최대/버킷분 메타 + 수집 지연(⏱ Nm) 배지.

하단 — JA3 오펜더 · 상위 위협 IP · 최근 자동 조치

헤더 컨트롤

사용법

  1. 상단 위협 강도 게이지로 현재 위험 수준을 파악합니다(값이 클수록 위험).
  2. 방어 퍼널을 위에서 아래로 읽으며 "얼마나 많이 들어와서(위협) → 얼마나 걸러졌고(탐지) → 몇 개 룰셋이 발화했으며(자동 대응) → 몇 건을 차단(대응)" 했는지 서사를 확인합니다.
  3. 위협 추이 스파크라인에서 급증 구간을 봅니다. ⏱ Nm 배지가 크면 수집이 지연된 것이니 카운트를 그 시점 기준으로 해석합니다.
  4. JA3 오펜더·상위 위협 IP 목록에서 의심 IP 를 골라 위협·탐지 로 넘어가 심층 조사·평판 조회·차단을 수행합니다.
  5. 최근 자동 조치 피드로 자동 방어가 방금 무엇을 왜 막았는지 확인합니다.

퍼널 단계의 정확한 정의

각 카운트는 선택한 조회 창(1h/6h/24h) 기준입니다. SecurityOverviewService::compute() 가 계산합니다.

단계 키 계산식 원천
위협 threats alertCount + nginxSuspiciousCount suricata_alert_ct + nginx_meta_ct(is_suspicious=1)
탐지 detections distinctAlertIps + kitsuneBlockedCount distinct src_ip(suricata_alert_ct) + kitsune_detail_log(is_blocked=1)
자동 대응 룰셋 rulesets active rulesets + firing rulesets infr_sec_ruleset(status=active) + Rulesets 카탈로그(44) 중 발화한 수
대응 response blockedCount blacklist_info(created_at ≥ 창)

"자동 대응 룰셋" 카운트는 raw 시그니처(sid) 수가 아니라 룰셋 라이브러리와 동일한 "룰셋" 단위(RulebookService 재사용)로 셉니다. 그래서 44 카탈로그를 초과하지 않고 Rulesets 화면과 수치가 일치합니다.

자동 대응 카드 지표 정의

지표 의미 계산
시간당 평균 위협 threats_hr 앵커 기준 24h 경보 ÷ 24
24시간 위협 threats_24h 앵커 기준 24h alertCount
활성 차단 /24 active blacklist_info is_use=1 총 개수
24h 차단 blocks_24h 최근 24h blockedCount

자동 대응 카드에는 "격리(자동)"·"국제공조(수동)" 항목이 카피로 존재하지만(resp.isolate/resp.coop), 이 두 지표는 대응 툴 배치 후 집계되는 후속 단계입니다(현재는 위 4개 지표만 실집계).

위협 강도(보안 점수) 공식

공식은 Services\Security\PostureService 가 소유합니다(2026-09-04 개정). Overview 의 "보안 근거" 카드와 같은 숫자입니다:

score  = weighted mean of ids, ai, web, rep, tls, fw   # each metric 0..100
metric = 100 − 45 × open / (total + floor)             # open = 0  ->  metric = 100
displayed threat intensity = 100 − score               # 0..45, higher = worse

데이터 소스

모든 위협/탐지/차단 카운트는 레거시 legacy_glory 커넥션의 대용량 텔레메트리 테이블을 읽기 전용으로 조회합니다. 접속 자격은 config('database.connections.legacy_glory')(=.env)만 사용하며 하드코딩하지 않습니다.

테이블 커넥션 용도
suricata_alert_ct legacy_glory IDS 경보(위협·탐지·상위 위협 IP·추이). alert_ts 인덱스
nginx_meta_ct legacy_glory 의심 웹요청(is_suspicious). idx_suspicious
kitsune_detail_log legacy_glory ML 이상탐지 차단(is_blocked)
suricata_tls_ct legacy_glory JA3 핑거프린트 시퀀스(JA3 오펜더)
blacklist_info legacy_glory 자동/수동 차단(/24 CIDR). 대응·활성 차단·피드
ip_info_loop legacy_glory geo/ASN/ISP 인리치(ipEnrichment)
infr_sec_ruleset 앱(MAIN) JA3 시퀀스 룰셋(활성 룰셋 카운트·요약)

성능·신선도 규율

SecurityScope — 자기망 자동 제외

상위 위협 IP·JA3 오펜더 목록은 우리 서버 IP 가 공격자로 오르는 오탐을 제거하기 위해 자기망을 자동 제외합니다(하드코딩 금지).

예) infr_instance 에 203.0.113.10 등록 → 접두 "203.0.113." 자동 제외
   OpsPolicy internal_networks 에 10.0.0.0/8 추가 → CIDR → "10." 접두 근사 제외

우리 서버가 위협·오펜더 목록에 계속 뜬다면, 그 IP 를 Assets ▸ Instances 에 등록하거나 운영 정책의 internal_networks 화이트리스트에 추가하세요. 자동으로 목록에서 빠집니다.

권한

문제해결 · FAQ

Q. 퍼널 카운트가 모두 0 입니다. 선택 창(1h/6h/24h)에 데이터가 없거나 legacy_glory 연결이 끊겼을 수 있습니다. 24h 로 넓혀 보고, ⏱ 지연 배지가 매우 크면 수집기(eve_ingest·kts_tx·srct_tx)가 멈춰 데이터가 오래된 것입니다.

Q. 우리 회사 서버 IP 가 상위 위협/오펜더에 뜹니다. 자기망 제외가 안 된 것입니다. 해당 IP 를 Instances 에 등록하거나 운영 정책의 internal_networks 에 추가하세요(SecurityScope 가 /24 접두로 자동 제외).

Q. "자동 대응 룰셋" 숫자가 룰셋 라이브러리와 다릅니다. 룰셋 단은 active rulesets + firing rulesets입니다. JA3 시퀀스 룰셋(infr_sec_ruleset active)이 더해지므로 순수 카탈로그 발화 수보다 클 수 있습니다.

Q. 룰셋에 action=block 이라고 적혀 있는데 차단되지 않았습니다. 그 필드는 권고이지 명령이 아닙니다. 자동 차단은 suricata_tls_ct 에서 JA3 로테이션을 직접 계산하며 infr_sec_ruleset 을 읽지 않습니다. 실제 차단은 차단 목록 에서 하거나 자동 차단 스케줄러가 수행합니다. 탐지 참조.

Q. 위협 강도가 항상 낮게(≤45) 나옵니다. 정상입니다. 표기값은 100 − score이고 score 는 최저 55 로 클램프되므로 위협 강도는 0~45 범위입니다.

Q. 수치가 30초마다 조금씩 튑니다. 30초 폴링 + 30초 캐시 조합이라 매 폴링마다 최신 창으로 재계산됩니다. LIVE 를 끄면 자동 갱신이 멈춥니다.

관련 항목

보안 개요 — 위협에서 대응까지의 방어 퍼널
보안 개요 — 위협에서 대응까지의 방어 퍼널
방어 퍼널 — 위협 → 탐지 → 룰셋 → 대응
방어 퍼널 — 위협 → 탐지 → 룰셋 → 대응