📚 네트워크 · 패킷 분석 › 03. Wireshark 패킷 분석 — 149편
이전 글: 148. pcap 증거 보존과 해시 검증 · 다음 글: 150. Wireshark 기반 SOC Incident 분석
IOC(Indicator of Compromise, 침해 지표) 는 "이 값이 보이면 같은 위협이 관련되어 있을 가능성이 있다"고 판단할 수 있는 관찰 값입니다. 패킷에는 통신 상대의 주소부터 주고받은 파일까지 담겨 있어, IOC를 가장 직접적으로 얻을 수 있는 자료입니다.
이 글은 캡처 파일에서 IOC 후보를 뽑아 정리하는 방법을 다룹니다. 스캔 이벤트에서의 IOC 정리는 05 영역 246. IOC 추출, 보안장비 Alert에서의 추출은 06 영역 298. Alert에서 IOC 추출에서 다룹니다.
| IOC 유형 | 패킷에서 나오는 위치 | 바꾸기 쉬운 정도 |
|---|---|---|
| 파일 해시 | HTTP·SMB 등으로 전송된 파일(Export Objects) | 매우 쉬움 (1바이트만 바꿔도 달라짐) |
| IP 주소 | IP 헤더 | 쉬움 (서버·프록시 교체) |
| 도메인 | DNS 질의, TLS SNI, HTTP Host | 보통 (등록 비용·시간) |
| URL 경로·User-Agent | HTTP 요청 | 보통 |
| TLS 인증서·클라이언트 지문 | 인증서(TLS 1.2 이하), ClientHello | 상대적으로 어려움 (도구·구성 변경 필요) |
아래쪽 IOC일수록 공격자가 바꾸기 번거로워 오래 쓸 수 있는 지표가 됩니다.
IOC 추출은 "뽑기"보다 "거르고 맥락을 붙이기" 가 더 중요합니다.
원본 pcap
↓ 해시 기록, 사본에서 작업 (148편)
① 후보 수집 : 필드 단위로 IP·도메인·URL·UA·파일·인증서 추출
↓
② 정상 제거 : 내부 대역, 자사 도메인, 업무용 서비스, OS 업데이트 등
↓
③ 맥락 확인 : 어느 호스트가, 언제, 어떤 흐름에서 이 값을 썼는가
↓
④ 형식화 : 유형·값·관찰 시각·출처·신뢰도, 공유용 defang 표기
↓
⑤ 활용 : SIEM 과거 검색, 방화벽·프록시 차단, 다른 호스트 헌팅
②에서 걸러 내지 않으면 CDN·클라우드 IP나 흔한 업데이트 도메인이 IOC 목록에 섞여, 차단했을 때 업무 장애를 일으킵니다.
IOC 유형별로 Wireshark에서 값을 꺼내는 필드와 메뉴입니다.
| IOC | Display Filter / 필드 | GUI 메뉴 |
|---|---|---|
| 통신 IP | ip.src, ip.dst | Statistics → Endpoints (IPv4 탭) |
| 질의 도메인 | dns.flags.response == 0 → dns.qry.name | Statistics → DNS |
| 응답 IP | dns.a, dns.aaaa | Packet Details의 Answers |
| HTTPS 접속 도메인 | tls.handshake.type == 1 → tls.handshake.extensions_server_name | — |
| HTTP 요청 | http.request → http.host, http.request.uri, http.user_agent | Statistics → HTTP → Requests |
| 전송 파일 | — | File → Export Objects → HTTP / SMB / TFTP 등 |
| 서버 인증서 이름 | tls.handshake.type == 11 → x509ce.dNSName | Packet Details의 Certificate |
TLS 1.3에서는 인증서가 암호화 구간에서 전달되어 캡처만으로는 보이지 않습니다. 이때는 SNI와 ClientHello 기반 지문(버전에 따라 Wireshark가 JA3·JA4 필드를 제공)이 남는 정보입니다. 지문의 의미는 90. 정상 포트로 위장한 통신 — 443을 쓰는 비정상 트래픽을 참고합니다.
IOC를 기록할 때 함께 남기는 항목입니다.
| 항목 | 예 | 이유 |
|---|---|---|
| 유형 | domain, ipv4, url, sha256 | 차단·검색 장비별로 입력 형식이 다름 |
| 관찰 시각(UTC) | 첫 관찰·마지막 관찰 | 다른 로그와 시간 대조 |
| 관련 호스트 | 내부 192.168.10.31 | 영향 범위 판단 |
| 근거 | pcap 파일명·프레임 번호 | 재검증 가능성 |
| 신뢰도 | 높음/중간/낮음 | 차단 여부 결정 기준 |
분석 방법 예시 — 사본 캡처 파일 case.pcapng에서 유형별 후보를 뽑습니다. 명령과 출력은 예시(값은 환경마다 다름)이며, tshark는 Rocky wireshark-cli, Ubuntu tshark 패키지입니다.
# 통신 상대 IP 목록 (패킷 수·바이트 포함 요약)
tshark -r case.pcapng -q -z endpoints,ip
# DNS 질의 도메인 (빈도순)
tshark -r case.pcapng -Y 'dns.flags.response == 0' -T fields -e dns.qry.name \
| sort | uniq -c | sort -rn
# HTTPS 접속 도메인(SNI)과 목적지 IP
tshark -r case.pcapng -Y 'tls.handshake.type == 1' \
-T fields -e ip.dst -e tls.handshake.extensions_server_name | sort -u
# 평문 HTTP 요청의 Host·URI·User-Agent
tshark -r case.pcapng -Y 'http.request' \
-T fields -e ip.src -e http.host -e http.request.uri -e http.user_agent
# HTTP로 전송된 파일을 폴더로 내보낸 뒤 해시 계산
mkdir -p objects && tshark -r case.pcapng -q --export-objects http,objects
sha256sum objects/*
정리 결과 형식 예시(공유용 defang 표기 적용):
type value first_seen(UTC) host frame confidence
domain update-check[.]example[.]net 2026-09-30 01:12:04 192.168.10.31 412 중간
ipv4 203.0.113[.]77 2026-09-30 01:12:05 192.168.10.31 415 낮음(공유 호스팅 여부 미확인)
url hxxp://203.0.113[.]77/dl/a.bin 2026-09-30 01:12:05 192.168.10.31 418 중간
sha256 (objects/a.bin의 해시값) 2026-09-30 01:12:06 192.168.10.31 418-460 높음
defang(무력화) 표기는 보고서·메신저에서 IOC가 실수로 클릭되거나 자동 링크되지 않도록 .을 [.], http를 hxxp로 바꾸는 관례입니다. 차단 장비나 SIEM에 넣을 때는 원래 값으로 되돌립니다.
📷 [실습 화면 삽입 위치] File → Export Objects → HTTP 창에서 패킷 번호·호스트·Content Type·파일 이름 목록이 보이는 화면
📷 [실습 화면 삽입 위치] Statistics → Endpoints의 IPv4 탭을 Bytes 기준으로 정렬해 통신량이 많은 외부 IP가 위에 보이는 화면
| 활용 위치 | IOC 사용 방법 |
|---|---|
| SIEM | 과거 기간 전체에서 같은 도메인·IP·UA 검색 → 다른 감염 호스트 확인 |
| 방화벽·프록시·DNS | 검증된 도메인·IP 차단(신뢰도 높은 것부터) |
| EDR | 파일 해시로 다른 단말의 동일 파일 존재 여부 확인 |
| IDS | 도메인·URL 패턴으로 탐지 룰 작성 검토 (282. Signature Rule에서 다룸) |
| 위협 인텔리전스 공유 | 유형·시각·신뢰도를 갖춘 형식(예: STIX 기반 플랫폼)으로 공유 |
관제자가 확인할 질문
오탐 주의: 악성 흐름 앞뒤로 OS 업데이트, 인증서 폐기 확인(OCSP·CRL), 시간 동기화 같은 정상 통신이 섞여 있습니다. 같은 시간대에 나타났다는 이유만으로 IOC에 넣지 않고, 문제의 흐름과 직접 연결된 값만 남깁니다.
-T fields와 --export-objects, Statistics → Endpoints로 유형별 후보를 빠르게 모읍니다.