Wireshark를 사용한 네트워크 트래픽 분석은(는) 무엇을 하나요?
사용 시점
- 명령 및 제어(C2) 트래픽, 데이터 유출, 측면 이동 등 패킷 수준 증거를 조사하여 네트워크 침해를 의심할 때
- 재전송, 단편화, DNS 해석 실패 등 네트워크 성능 문제를 진단할 때
- 샌드박스 또는 격리 호스트에서 트래픽을 캡처하여 악성코드 통신 패턴을 분석할 때
- 방화벽 및 IDS 규칙을 검증하여 실제 네트워크 세그먼트에서 어떤 트래픽이 통과하는지 확인할 때
- 캡처된 네트워크 세션에서 파일, 자격 증명, 침해 지표(IOC)를 추출할 때
사용 금지: 허가 없이 네트워크 트래픽을 캡처하는 행위, 법적 권한 없이 개인 통신을 도청하는 행위, 프로덕션 모니터링에서 완전한 SIEM 플랫폼을 대체하는 행위.
사전 요구 사항
- Wireshark 4.0+ 및 tshark 명령줄 유틸리티 설치
- 라이브 패킷 캡처를 위한 루트/sudo 권한 또는
wireshark그룹 멤버십 - 모니터링할 세그먼트에 대한 네트워크 인터페이스 액세스(물리적 NIC, SPAN 포트 또는 네트워크 탭)
- 패킷 캡처 파일을 위한 충분한 디스크 공간(사용 중인 기가비트 링크에서 분당 약 1GB 필요)
- TCP/IP 프로토콜, HTTP, DNS, TLS, SMB에 대한 패킷 수준의 이해
워크플로우
1단계: 캡처 환경 구성
관련 트래픽을 대상으로 캡처 인터페이스와 필터를 설정합니다.
# 사용 가능한 인터페이스 나열
tshark -D
# eth0에서 캡처를 시작하고 범위를 제한하는 캡처 필터 적용
tshark -i eth0 -f "host 10.10.5.23 and (port 80 or port 443 or port 445)" -w /tmp/capture.pcapng
# 링 버퍼를 사용하여 디스크 사용량 관리 (10개 파일, 각 100MB)
tshark -i eth0 -b filesize:102400 -b files:10 -w /tmp/rolling_capture.pcapng
# 여러 인터페이스에서 동시에 캡처
tshark -i eth0 -i eth1 -w /tmp/multi_interface.pcapng
Wireshark GUI의 경우, 캡처를 시작하기 전에 캡처 옵션 대화상자에서 캡처 필터를 설정합니다.
2단계: 타겟 분석을 위한 디스플레이 필터 적용
# 의심스러운 사용자 에이전트를 포함한 HTTP 트래픽 필터링
tshark -r capture.pcapng -Y "http.user_agent contains \"curl\" or http.user_agent contains \"Wget\""
# 의심스러운 TLD로의 DNS 쿼리 찾기
tshark -r capture.pcapng -Y "dns.qry.name contains \".xyz\" or dns.qry.name contains \".top\" or dns.qry.name contains \".tk\""
# 네트워크 문제를 나타내는 TCP 재전송 식별
tshark -r capture.pcapng -Y "tcp.analysis.retransmission"
# 측면 이동 탐지를 위한 SMB 트래픽 필터링
tshark -r capture.pcapng -Y "smb2.cmd == 5 or smb2.cmd == 3" -T fields -e ip.src -e ip.dst -e smb2.filename
# 평문 자격 증명 전송 찾기
tshark -r capture.pcapng -Y "ftp.request.command == \"PASS\" or http.authbasic"
# 비콘 패턴 탐지 (일정 간격 연결)
tshark -r capture.pcapng -Y "ip.dst == 203.0.113.50" -T fields -e frame.time_relative -e ip.src -e tcp.dstport
3단계: 프로토콜별 심층 분석
# TCP 스트림을 따라 대화 재구성
tshark -r capture.pcapng -q -z follow,tcp,ascii,0
# HTTP 요청/응답 쌍 분석
tshark -r capture.pcapng -Y "http" -T fields -e frame.time -e ip.src -e ip.dst -e http.request.method -e http.request.uri -e http.response.code
# DNS 쿼리/응답 통계 추출
tshark -r capture.pcapng -q -z dns,tree
# 취약한 암호화 제품군을 위한 TLS 핸드셰이크 분석
tshark -r capture.pcapng -Y "tls.handshake.type == 2" -T fields -e ip.src -e ip.dst -e tls.handshake.ciphersuite
# SMB 파일 액세스 열거
tshark -r capture.pcapng -Y "smb2" -T fields -e frame.time -e ip.src -e ip.dst -e smb2.filename -e smb2.cmd
4단계: 아티팩트 및 IOC 추출
# HTTP 객체 내보내기 (HTTP를 통해 전송된 파일)
tshark -r capture.pcapng --export-objects http,/tmp/http_objects/
# SMB 객체 내보내기 (SMB를 통해 전송된 파일)
tshark -r capture.pcapng --export-objects smb,/tmp/smb_objects/
# 위협 정보 조회를 위한 모든 고유 대상 IP 추출
tshark -r capture.pcapng -T fields -e ip.dst | sort -u > unique_dest_ips.txt
# SSL/TLS 인증서 정보 추출
tshark -r capture.pcapng -Y "tls.handshake.type == 11" -T fields -e x509sat.uTF8String -e x509ce.dNSName
# 액세스된 모든 URL 추출
tshark -r capture.pcapng -Y "http.request" -T fields -e http.host -e http.request.uri | sort -u > urls.txt
# IOC 매칭을 위해 추출된 파일 해시 생성
find /tmp/http_objects/ -type f -exec sha256sum {} \; > extracted_file_hashes.txt
5단계: 통계 분석 및 이상 탐지
# 프로토콜 계층 구조 통계
tshark -r capture.pcapng -q -z io,phs
# 바이트별로 정렬된 대화 통계
tshark -r capture.pcapng -q -z conv,tcp -z conv,udp
# 주요 트래픽 송신자 식별
tshark -r capture.pcapng -q -z endpoints,ip
# IO 그래프 데이터 (초당 패킷 수)
tshark -r capture.pcapng -q -z io,stat,1,"COUNT(frame) frame"
# 포트 스캐닝 패턴 탐지
tshark -r capture.pcapng -Y "tcp.flags.syn == 1 and tcp.flags.ack == 0" -T fields -e ip.src -e tcp.dstport | sort | uniq -c | sort -rn | head -20
6단계: 보고서 생성 및 증거 내보내기
# 증거 보존을 위해 필터링된 패킷을 새 PCAP 파일로 내보내기
tshark -r capture.pcapng -Y "ip.addr == 10.10.5.23 and tcp.port == 4444" -w evidence_c2_traffic.pcapng
# CSV 형식으로 패킷 요약 생성
tshark -r capture.pcapng -T fields -E header=y -E separator=, -e frame.number -e frame.time -e ip.src -e ip.dst -e ip.proto -e tcp.srcport -e tcp.dstport -e frame.len > traffic_summary.csv
# 프로그래밍 분석을 위한 PDML (XML) 출력 생성
tshark -r capture.pcapng -T pdml > capture_analysis.xml
# 증거 관리 연속성을 위한 캡처 파일 해시 계산
sha256sum capture.pcapng > capture_hash.txt
주요 개념
| 용어 | 정의 |
|---|---|
| 캡처 필터 (BPF) | 캡처 시점에 적용되어 기록되는 패킷을 제한하는 Berkeley Packet Filter 구문. 파일 크기를 줄이고 성능을 향상시킵니다. |
| 디스플레이 필터 | 이미 캡처된 패킷에 적용하여 캡처 파일을 변경하지 않고 집중 분석을 수행하는 Wireshark 고유의 필터 구문입니다. |
| PCAPNG | 단일 파일에서 여러 인터페이스, 이름 해석, 주석, 메타데이터를 지원하는 차세대 패킷 캡처 형식입니다. |
| TCP 스트림 | 두 엔드포인트 간의 완전한 양방향 대화를 나타내는 재조립된 TCP 세그먼트 시퀀스입니다. |
| 프로토콜 디섹터 | 특정 프로토콜의 필드와 구조를 디코딩하여 패킷 내용을 심층 검사할 수 있게 해주는 Wireshark 모듈입니다. |
| IO 그래프 | 캡처 기간 동안 패킷 또는 바이트 전송률의 시계열 시각화로, 트래픽 급증 또는 비콘 식별에 유용합니다. |
도구 및 시스템
- Wireshark 4.0+: 3,000개 이상의 프로토콜을 위한 프로토콜 디섹터, 스트림 재조립, 내보내기 기능을 갖춘 GUI 기반 패킷 분석기입니다.
- tshark: 헤드리스 캡처, 배치 처리, 스크립팅된 분석 파이프라인을 위한 Wireshark의 명령줄 버전입니다.
- tcpdump: GUI 의존성 없이 원격 시스템에서 빠른 캡처를 위한 경량 패킷 캡처 도구입니다.
- mergecap: 통합 분석을 위해 여러 캡처 파일을 단일 PCAP으로 결합하는 Wireshark 유틸리티입니다.
- editcap: 캡처 파일을 분할, 필터링, 변환하는 Wireshark 유틸리티입니다.
일반적인 시나리오
시나리오: DNS 터널링을 통한 데이터 유출 의심 조사
컨텍스트: SOC 팀이 워크스테이션(10.10.3.45)에서 외부 도메인으로 비정상적으로 높은 DNS 쿼리 볼륨을 탐지했습니다. SIEM 알림은 기준 15회 대비 분당 200회의 DNS 쿼리를 표시했습니다. 워크스테이션 VLAN의 네트워크 탭에서 패킷 캡처가 시작되었습니다.
접근 방식:
- 워크스테이션 서브넷에서 트래픽 캡처:
tshark -i eth2 -f "host 10.10.3.45 and port 53" -w dns_exfil_investigation.pcapng - DNS 쿼리 패턴 분석:
tshark -r dns_exfil_investigation.pcapng -Y "dns.qry.name contains \"suspect-domain.xyz\"" -T fields -e frame.time -e dns.qry.name - 인코딩된 데이터(긴 base64 유사 하위 도메인은 터널링을 나타냄)에 대한 하위 도메인 레이블 검사:
tshark -r dns_exfil_investigation.pcapng -Y "dns.qry.type == 16" -T fields -e dns.qry.name -e dns.txt - 쿼리 이름 길이를 합산하여 유출 대역폭 추정
- 고유 쿼리 이름을 추출하고 base64 하위 도메인을 디코딩하여 유출된 내용 복구
- 증거 패킷을 별도의 PCAP으로 내보내고 증거 관리 연속성을 위해 SHA-256 해시 생성
함정:
- 사용량이 많은 네트워크에서 필터링되지 않은 트래픽을 캡처하여 관련 데이터를 수집하기 전에 디스크 공간이 부족해지는 경우
- 캡처 필터 대신 디스플레이 필터를 사용하여 처리 속도가 느린 대용량 파일이 생성되는 경우
- 기존 포트 53에서 DNS 캡처를 우회하는 암호화된 DNS(DoH/DoT) 트래픽을 간과하는 경우
- 법의학 증거를 위한 패킷 캡처 해시 및 증거 관리 연속성 문서 설정을 누락하는 경우
출력 형식
## 트래픽 분석 보고서
**케이스 ID**: IR-2024-0847
**캡처 파일**: dns_exfil_investigation.pcapng
**SHA-256**: a3f2b8c1d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1
**기간**: 2024-03-15 14:00:00 ~ 14:45:00 UTC
**소스 인터페이스**: eth2 (VLAN 30 SPAN 포트)
### 발견 사항
**1. DNS 터널링 확인**
- 출처: 10.10.3.45
- 대상 DNS: 8.8.8.8 (ns1.suspect-domain.xyz로 전달)
- 쿼리 볼륨: 45분 동안 9,247개의 쿼리 (분당 205회, 기준 분당 15회 대비)
- 평균 하위 도메인 레이블 길이: 63자 (base64 인코딩 데이터)
- 추정 유출 데이터: TXT 레코드 응답을 통해 약 2.3MB
**2. 침해 지표(IoC)**
- 도메인: suspect-domain.xyz (3일 전 등록)
- 네임서버: ns1.suspect-domain.xyz (203.0.113.50)
- 쿼리 패턴: base64로 인코딩된 하위 도메인이 포함된 TXT 레코드 요청
- 응답 패턴: base64로 인코딩된 페이로드가 포함된 TXT 레코드