SecurityWiresharkNetwork AnalysisPacket CapturetsharkBlue Team
Wireshark 네트워크 패킷 분석 가이드
Wireshark와 tshark를 사용한 네트워크 패킷 분석 방법을 실전 필터와 함께 설명합니다. 악성 트래픽 탐지와 포렌식 분석에 활용하세요.
VWV2026-02-285분 읽기
Wireshark란?
Wireshark는 세계에서 가장 널리 사용되는 오픈소스 네트워크 프로토콜 분석기입니다. 네트워크 인터페이스를 통해 지나가는 패킷을 실시간으로 캡처하고 분석하여, 보안 사고 분석, 네트워크 문제 해결, 프로토콜 학습에 활용됩니다.
기본 캡처 설정
캡처 필터 vs 디스플레이 필터
| 구분 | 적용 시점 | 문법 | 목적 |
|---|---|---|---|
| 캡처 필터 | 패킷 수집 시 | BPF 문법 | 저장 용량 절약 |
| 디스플레이 필터 | 분석 시 | Wireshark 문법 | 특정 패킷 검색 |
자주 쓰는 캡처 필터
# 특정 호스트 트래픽만 캡처
host 192.168.1.100
# HTTP/HTTPS만 캡처
port 80 or port 443
# 특정 서브넷 트래픽
net 192.168.1.0/24
# SYN 패킷만 (포트 스캔 탐지)
tcp[tcpflags] & (tcp-syn) != 0
악성 트래픽 탐지 시나리오
1. 포트 스캔 탐지
디스플레이 필터:
tcp.flags.syn == 1 and tcp.flags.ack == 0
해석: SYN만 있고 ACK 없는 패킷 → 포트 스캔 또는 SYN Flood
짧은 시간 내 같은 출발지 IP에서 다수의 목적지 포트로 SYN 패킷이 전송되면 포트 스캔입니다.
2. DNS 이상 트래픽 탐지
# 비정상적으로 긴 DNS 쿼리 (DNS 터널링 의심)
dns.qry.name.len > 50
# 비표준 DNS 서버 사용
dns and not (dns.flags.response == 0 and ip.dst == 8.8.8.8)
# 높은 빈도의 DNS 요청 (DGA 도메인 의심)
dns.flags.response == 0
3. C2(Command & Control) 통신 탐지
# 비정상 포트 HTTP
http and not (tcp.port == 80 or tcp.port == 8080)
# 주기적인 비콘 트래픽 — Statistics > I/O Graph로 패턴 확인
# User-Agent 이상 감지
http.user_agent matches "(?i)python-requests|curl|wget|go-http"
4. 자격증명 평문 전송 탐지
# FTP 로그인 패킷
ftp.request.command == "PASS"
# Telnet (평문)
telnet
# Basic Auth 헤더 탐지
http.authorization contains "Basic"
tshark 커맨드라인 분석
# 인터페이스 목록 확인
tshark -D
# 파일에서 HTTP 요청 URL 추출
tshark -r capture.pcap -Y "http.request" \
-T fields -e ip.src -e http.host -e http.request.uri
# 출력 예시:
# 192.168.1.55 evil-c2.xyz /beacon?id=abc123
# 192.168.1.55 evil-c2.xyz /upload?data=...
# DNS 쿼리 목록 추출
tshark -r capture.pcap -Y "dns.flags.response == 0" \
-T fields -e ip.src -e dns.qry.name | sort | uniq -c | sort -rn
# 상위 10개 통신 대상 IP
tshark -r capture.pcap -T fields -e ip.dst | sort | uniq -c | sort -rn | head -10
# 특정 IP의 모든 통신 추출 및 저장
tshark -r capture.pcap -Y "ip.addr == 10.0.0.5" -w suspicious.pcap
프로토콜별 분석 필터 모음
| 프로토콜 | 목적 | 필터 |
|---|---|---|
| HTTP | 웹 트래픽 분석 | http.request.method == "POST" |
| TLS | 인증서 검사 | tls.handshake.type == 1 |
| ICMP | Ping Flood 탐지 | icmp.type == 8 |
| SMB | 내부 공유 접근 | smb2.cmd == 5 |
| Kerberos | AD 티켓 공격 | kerberos.msg_type == 30 |
| ARP | ARP Spoofing | arp.opcode == 2 |
ARP Spoofing 탐지
# 같은 IP에 여러 MAC 응답 확인
arp.opcode == 2
Statistics > Endpoints > IPv4에서
같은 IP를 가진 여러 MAC 주소 확인
pcap 파일 자동 분석 (Python)
from scapy.all import rdpcap, TCP, DNS, DNSQR
from collections import Counter
packets = rdpcap("capture.pcap")
# DNS 쿼리 도메인 추출
dns_queries = []
for pkt in packets:
if pkt.haslayer(DNS) and pkt[DNS].qr == 0: # 요청만
query = pkt[DNSQR].qname.decode().rstrip(".")
dns_queries.append(query)
# 상위 도메인 빈도 분석
counter = Counter(dns_queries)
print("Top DNS queries:")
for domain, count in counter.most_common(10):
print(f" {count:5d} {domain}")
# 긴 도메인 탐지 (DNS 터널링 의심)
suspicious = [d for d in dns_queries if len(d) > 50]
if suspicious:
print(f"\n⚠️ 긴 DNS 쿼리 {len(suspicious)}개 탐지 (DNS 터널링 의심):")
for d in suspicious[:5]:
print(f" {d}")
인시던트 대응 시 pcap 수집
# tcpdump로 증거 수집 (Wireshark 없는 서버 환경)
tcpdump -i eth0 -w /tmp/evidence_$(date +%Y%m%d_%H%M).pcap \
-s 0 -C 100 -W 10 & # 최대 100MB × 10개 파일 로테이션
# 특정 IP 트래픽만 수집
tcpdump -i eth0 host 203.0.113.45 -w /tmp/suspect.pcap
# 수집 파일 무결성 해시
sha256sum /tmp/evidence_*.pcap > /tmp/evidence.sha256
정리
Wireshark와 tshark는 블루팀의 핵심 도구입니다. 포트 스캔, DNS 터널링, C2 비콘, 평문 자격증명 전송 등 다양한 위협을 패킷 수준에서 탐지할 수 있습니다. Scapy를 활용한 자동화 분석까지 결합하면 대규모 pcap 파일에서도 효율적으로 이상 징후를 찾아낼 수 있습니다.