사고 대응 대시보드 구축은(는) 무엇을 하나요?
사용 시기
이 스킬은 다음 상황에서 사용합니다.
- IR 팀이 활성 사고 중 실시간 대시보드를 통해 조정 및 추적이 필요한 경우
- SOC 리더십이 사고 현황과 분석가 업무량을 보여주는 운영 대시보드를 요청하는 경우
- 사후 검토(post-incident review)에서 시각적 타임라인과 영향 평가가 필요한 경우
- 경영진 브리핑에서 고수준 사고 메트릭과 트렌드 분석이 필요한 경우
일상적인 SOC 모니터링 대시보드(사고 검토 사용)에는 사용하지 마십시오. IR 대시보드는 활성 사고 조정 및 관리 보고를 위해 설계되었습니다.
전제 조건
- SIEM 플랫폼 (Dashboard Studio가 포함된 Splunk, Elastic Kibana, 또는 Grafana)
- SIEM에 Notable 이벤트 및 사고 데이터 (Splunk ES incident_review 인덱스)
- 티켓팅 시스템 연동 (ServiceNow, Jira) — 수정 작업 추적용
- 자산 및 ID 조회 테이블 — 컨텍스트 강화용
- SOC 팀 및 경영진 공유를 위한 대시보드 게시 권한
워크플로우
단계 1: 활성 사고 대시보드 레이아웃 설계
Splunk Dashboard Studio를 사용하여 활성 사고 추적 대시보드를 구축합니다.
<dashboard version="2" theme="dark">
<label>Active Incident Response Dashboard</label>
<description>Real-time tracking for IR-2024-0450</description>
<row>
<panel>
<title>Incident Summary</title>
<single>
<search>
<query>
| makeresults
| eval incident_id="IR-2024-0450",
status="CONTAINMENT",
severity="Critical",
affected_hosts=7,
contained_hosts=5,
iocs_identified=23,
hours_elapsed=round((now()-strptime("2024-03-15 14:00","%Y-%m-%d %H:%M"))/3600,1)
| table incident_id, status, severity, affected_hosts, contained_hosts, iocs_identified, hours_elapsed
</query>
</search>
</single>
</panel>
</row>
</dashboard>
단계 2: 실시간 영향받은 시스템 패널 구축
영향받은 시스템과 차단 상태를 추적합니다.
| inputlookup ir_affected_systems.csv
| eval status_color = case(
status="Contained", "#2ecc71",
status="Compromised", "#e74c3c",
status="Investigating", "#f39c12",
status="Recovered", "#3498db",
1=1, "#95a5a6"
)
| stats count by status
| eval order = case(status="Compromised", 1, status="Investigating", 2,
status="Contained", 3, status="Recovered", 4)
| sort order
| table status, count
--- 상세 호스트 테이블
| inputlookup ir_affected_systems.csv
| lookup asset_lookup_by_cidr ip AS host_ip OUTPUT category, owner, priority
| table hostname, host_ip, category, owner, status, containment_time,
compromise_vector, analyst_assigned
| sort status, hostname
단계 3: IOC 추적 패널 구축
환경 전반의 IOC 확산을 모니터링합니다.
--- 사고 중 식별된 IOC
index=* (src_ip IN ("185.234.218.50", "45.77.123.45") OR
dest IN ("evil-c2.com", "malware-drop.com") OR
file_hash IN ("a1b2c3d4...", "e5f6a7b8..."))
earliest="2024-03-14"
| stats count AS hits, dc(src_ip) AS unique_sources,
dc(dest) AS unique_dests, latest(_time) AS last_seen
by sourcetype
| sort - hits
--- IOC 타임라인
index=* (src_ip IN ("185.234.218.50") OR dest="evil-c2.com")
earliest="2024-03-14"
| timechart span=1h count by sourcetype
--- 신규 IOC 발견 추적
| inputlookup ir_ioc_list.csv
| stats count by ioc_type, source, discovery_time
| sort discovery_time
| table discovery_time, ioc_type, ioc_value, source, status
단계 4: 대응 타임라인 패널 구축
시간 순서별 사고 타임라인을 생성합니다.
| inputlookup ir_timeline.csv
| sort _time
| eval phase = case(
action_type="detection", "Detection",
action_type="triage", "Triage",
action_type="containment", "Containment",
action_type="eradication", "Eradication",
action_type="recovery", "Recovery",
1=1, "Other"
)
| eval phase_color = case(
phase="Detection", "#e74c3c",
phase="Triage", "#f39c12",
phase="Containment", "#e67e22",
phase="Eradication", "#2ecc71",
phase="Recovery", "#3498db"
)
| table _time, phase, action, analyst, details
예시 타임라인 데이터:
_time,action_type,action,analyst,details
2024-03-15 14:00,detection,Alert triggered - Cobalt Strike beacon detected,splunk_es,Notable event NE-2024-08921
2024-03-15 14:12,triage,Alert triaged - confirmed true positive,analyst_jdoe,VT score 52/72 on beacon hash
2024-03-15 14:23,containment,Host WORKSTATION-042 isolated,analyst_jdoe,CrowdStrike network isolation
2024-03-15 14:35,containment,C2 domain blocked on firewall,analyst_msmith,Palo Alto rule deployed
2024-03-15 15:00,eradication,Enterprise-wide IOC scan initiated,analyst_jdoe,Splunk search across all indices
2024-03-15 15:30,containment,3 additional hosts identified and isolated,analyst_msmith,Lateral movement confirmed
2024-03-15 16:00,eradication,Malware removed from all affected hosts,analyst_tier3,CrowdStrike RTR cleanup
2024-03-15 18:00,recovery,Systems restored and monitored,analyst_msmith,72-hour monitoring period started
단계 5: SOC 운영 대시보드 구축
전체 SOC 성능 메트릭을 추적합니다.
--- 심각도별 사고 건수 (최근 30일)
index=notable earliest=-30d
| stats count by urgency
| eval order = case(urgency="critical", 1, urgency="high", 2, urgency="medium", 3,
urgency="low", 4, urgency="informational", 5)
| sort order
--- MTTD (평균 탐지 시간)
index=notable earliest=-30d status_label="Resolved*"
| eval mttd_minutes = round((time_of_first_event - orig_time) / 60, 1)
| stats avg(mttd_minutes) AS avg_mttd, median(mttd_minutes) AS med_mttd,
perc95(mttd_minutes) AS p95_mttd
--- MTTR (평균 대응/해결 시간)
index=notable earliest=-30d status_label="Resolved*"
| eval mttr_hours = round((status_end - _time) / 3600, 1)
| stats avg(mttr_hours) AS avg_mttr, median(mttr_hours) AS med_mttr by urgency
--- 분석가 업무량 분포
index=notable earliest=-7d
| stats count by owner
| sort - count
--- 알림 처리 결과 분석
index=notable earliest=-30d status_label IN ("Resolved*", "Closed*")
| stats count by disposition
| eval percentage = round(count / sum(count) * 100, 1)
| sort - count
단계 6: 경영진 브리핑 대시보드 구축
주요 사고 발생 시 리더십을 위한 고수준 대시보드를 생성합니다.
--- 경영진 요약 패널
| makeresults
| eval metrics = "Business Impact: 1 file server offline (Finance dept), "
."Estimated Recovery: 4 hours, "
."Data Loss Risk: Low (backups verified), "
."Customer Impact: None, "
."Regulatory Notification: Not required (no PII exposure confirmed)"
--- 추세 비교 (이번 달 대 지난달)
index=notable earliest=-60d
| eval period = if(_time > relative_time(now(), "-30d"), "Current Month", "Previous Month")
| stats count by period, urgency
| chart sum(count) AS incidents by period, urgency
--- 주요 위협 카테고리
index=notable earliest=-30d
| top rule_name limit=10
| table rule_name, count, percent
단계 7: 대시보드 업데이트 자동화
Splunk 예약 검색을 사용하여 대시보드 데이터를 유지 관리합니다.
--- 영향받은 시스템 조회 업데이트 예약 검색 (5분마다 실행)
index=* (src_ip IN [| inputlookup ir_ioc_list.csv | search ioc_type="ip"
| fields ioc_value | rename ioc_value AS src_ip])
earliest=-1h
| stats latest(_time) AS last_seen, count AS event_count,
values(sourcetype) AS data_sources by src_ip
| eval status = if(last_seen > relative_time(now(), "-15m"), "Active", "Dormant")
| outputlookup ir_affected_systems_auto.csv
주요 개념
| 용어 | 정의 |
|---|---|
| 상황 인식(Situational Awareness) | 사고 범위, 영향받은 시스템, 대응 진행 상황에 대한 실시간 이해 |
| MTTD | 평균 탐지 시간 — 위협 발생부터 SOC 알림 생성까지의 평균 시간 |
| MTTR | 평균 대응 시간 — 알림 발생부터 사고 해결 또는 차단까지의 평균 시간 |
| 차단율(Containment Rate) | 전체 손상된 시스템 대비 성공적으로 격리된 시스템의 비율 |
| 번다운 차트(Burn-Down Chart) | 사고 중 미해결 조사 작업을 시간에 따라 시각적으로 추적 |
| 경영진 브리핑(Executive Briefing) | 비즈니스 영향, 타임라인, 복구 상태를 보여주는 비기술적 요약 대시보드 |
도구 및 시스템
- Splunk Dashboard Studio: 드래그 앤 드롭 시각화 및 실시간 데이터를 지원하는 최신 대시보드 프레임워크
- Elastic Kibana Dashboard: Lens, Maps, Canvas를 갖춘 보안 대시보드용 시각화 플랫폼
- Grafana: Elasticsearch 및 Splunk 등 여러 데이터 소스를 지원하는 오픈소스 시각화 플랫폼
- Microsoft Sentinel Workbooks: Kusto 기반 분석 시각화를 제공하는 Azure 네이티브 대시보드 프레임워크
- TheHive: 내장된 사례 추적 및 메트릭 대시보드가 있는 오픈소스 사고 대응 플랫폼
일반적인 시나리오
- 진행 중인 랜섬웨어 사고: 암호화 확산, 차단 상태, 백업 확인, 복구 진행 상황을 보여주는 대시보드
- 데이터 유출 조사: 영향받은 데이터 저장소, 유출 규모, 알림 요구 사항을 추적하는 대시보드
- 피싱 캠페인 대응: 수신자 수, 클릭률, 자격 증명 노출, 수정 상태를 보여주는 대시보드
- 월간 SOC 보고서: 사고 추세, MTTD/MTTR 메트릭, 분석가 성과를 보여주는 리더십 대시보드
- 규정 준수 감사: 탐지 범위, 대응 SLA 준수, 사고 종결 메트릭을 보여주는 대시보드
출력 형식
INCIDENT RESPONSE DASHBOARD — IR-2024-0450
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
STATUS: CONTAINMENT PHASE (6h 30m elapsed)
Affected Systems: Containment Progress:
Compromised: 2 [==========----------] 71%
Investigating: 1 5 of 7 systems contained
Contained: 3
Recovered: 1
IOC Summary: Response Timeline:
IPs: 4 14:00 — Alert triggered
Domains: 2 14:12 — Confirmed malicious
Hashes: 3 14:23 — First host isolated
URLs: 5 15:00 — Enterprise scan started
Emails: 1 15:30 — 3 more hosts isolated
Key Metrics:
MTTD: 12 minutes
MTTC: 23 minutes (first host)
Analysts Active: 3 (Tier 2: 2, Tier 3: 1)
Business Impact: LOW — Finance file server offline, no customer-facing systems affected