패킷 분석과 Pcap 활용
캡처 위치·필터·저장 길이를 확인하고 헤더와 TCP 흐름을 해석합니다.
Pcap은 패킷과 시간·길이 등의 캡처 정보를 저장하는 형식이다. pcapng는 인터페이스 등 더 다양한 메타데이터를 표현한다. 파일에 표시되는 결과는 수집 위치와 조건에 따라 달라지므로 분석 전에 그 조건을 확인한다.
1. 관찰 위치가 보이는 사실을 결정한다
Endpoint에서 캡처
Host 자체에서 캡처하면 해당 Host의 송수신 Traffic을 자세히 볼 수 있다. 그러나 송신 Packet은 NIC가 Checksum, Segmentation, VLAN Tag 등을 최종 처리하기 전에 캡처될 수 있다. 따라서 송신 Checksum이 잘못된 것처럼 보이거나 하나의 큰 TCP Segment가 실제 Wire에서는 여러 Frame으로 나뉘는 현상이 나타날 수 있다.
TAP·SPAN·Traffic Mirroring에서 캡처
Network TAP이나 Switch의 SPAN·Port Mirroring은 다른 Link의 Traffic을 Sensor로 복제한다. 이 방식은 Endpoint를 변경하지 않고 관찰할 수 있지만 다음 한계가 있다.
- Mirror Destination의 처리량보다 복제 Traffic이 많으면 일부 Packet이 빠질 수 있다.
- Ingress·Egress 중 한 방향만 설정하면 연결의 절반만 보일 수 있다.
- 비대칭 Routing이면 반대 방향 Packet이 다른 경로로 지나갈 수 있다.
- Virtual Switch·Cloud Mirror의 정책과 Encapsulation 때문에 보이는 Header가 달라질 수 있다.
Gateway·NAT·Proxy·VPN 경계에서 캡처
같은 통신도 위치에 따라 주소와 Payload가 달라진다.
- NAT 전에는 내부 주소, NAT 후에는 변환된 공인 주소가 보일 수 있다.
- TLS Reverse Proxy 앞에서는 암호화된 TLS Record, Proxy 뒤에서는 복호화된 HTTP가 보일 수 있다.
- VPN Gateway 바깥에서는 Tunnel 외부 주소와 암호문, 안쪽에서는 원래 내부 Packet이 보일 수 있다.
따라서 192.0.2.10 → 198.51.100.20이 보였다는 사실만으로 원래 Client와 최종 Server를 확정하지 않는다. Observation Point와 주소 변환·터널·Proxy 구조를 함께 확인한다.
2. 파일에 없는 패킷과 화면에 숨긴 패킷
패킷이 캡처 파일에 없을 수 있는 원인은 수집 손실, 캡처 필터 제외, 관찰 위치의 차이 등이다. snaplen은 패킷마다 저장할 최대 길이이며, 원래 길이보다 짧게 저장되면 뒷부분은 파일에 남지 않는다.
표시 필터로 숨긴 패킷은 원본 파일에 남아 있어 조건을 지우면 다시 볼 수 있다. 이 차이를 먼저 확인해야 “관찰되지 않음”을 “통신이 없었음”으로 잘못 판단하지 않는다.
3. Pcap 파일의 기본
Pcap·pcapng는 Capture한 Packet과 시간·길이·Interface 등의 정보를 저장한다. 분석 전에는 Capture 위치, Interface, Filter, snaplen, 시작·종료 시각을 확인해야 한다.
파일 내부 Block 구조와 Byte 단위 File Header는 전문 분석의 심화이며, 시험에서는 Pcap이 실제 Packet 기록이고 수집 조건에 따라 누락·절단될 수 있다는 점을 우선 이해한다.
4. Capture Filter와 Display Filter는 문법과 적용 시점이 다르다
Capture Filter
Wireshark와 tcpdump의 Capture Filter는 libpcap Filter 문법을 사용한다.
host 192.0.2.10 and tcp port 443
src net 10.0.0.0/8 and not dst port 22
udp and port 53
대표 Primitive는 host, net, port, src, dst, tcp, udp, and, or, not 등이다.
Display Filter
Wireshark Display Filter는 Protocol Dissector가 만든 Field를 대상으로 한다.
ip.addr == 192.0.2.10 and tcp.port == 443
tcp.flags.syn == 1 and tcp.flags.ack == 0
frame.cap_len < frame.len
http.request
두 문법은 서로 바꾸어 쓸 수 없다.
| 비교 | Capture Filter | Display Filter |
|---|---|---|
| 적용 시점 | 저장 전 | 저장 후 분석 화면 |
| 목적 | 수집량·민감정보·부하 제한 | 저장된 Packet 탐색·해석 |
| 문법 | libpcap/BPF 계열 | Wireshark Protocol Field 계열 |
| 조건에서 제외된 Packet | 파일에 없음 | 파일에 남고 화면에서만 숨김 |
처음부터 지나치게 좁은 Capture Filter를 적용하면 DNS, ARP, ICMP 오류, 재전송처럼 원인 분석에 필요한 주변 Packet을 놓칠 수 있다. 질문에 필요한 최소 범위를 정하되, 정상 흐름을 판단할 Context는 남긴다.
5. Header를 바깥에서 안쪽으로 읽기
Packet은 Capture 형식에 따라 Ethernet Header부터 시작할 수도 있고 Raw IP 등 다른 구조로 시작할 수도 있다. 일반 Ethernet Packet은 다음 순서로 읽는다.
- Ethernet: Source/Destination MAC, EtherType
- IP: Source/Destination IP, TTL/Hop Limit, Protocol
- TCP/UDP: Source/Destination Port, Flag, Seq/Ack 또는 Length
- Application Data
Header Length를 먼저 확인한 뒤 Payload 위치를 계산한다.
6. TCP Flow와 재조립
TCP는 Packet 한 줄이 아니라 Seq/Ack와 Flag의 연속 관계로 본다. Retransmission은 실제 재전송일 수도 있지만 Capture Loss나 SPAN 중복으로 잘못 표시될 수도 있다.
Fragment와 TCP Segment가 여러 Packet으로 나뉘면 분석 도구가 재조립한 결과를 보여 줄 수 있으므로, 재조립된 Message와 개별 Packet을 구분한다.
7. tcpdump 저장과 읽기 예
다음은 허가된 실습망에서 사용하는 조회·캡처 예다. eth0은 실제 인터페이스 이름으로 바꾼다.
sudo tcpdump -i eth0 -nn -c 100 -w case01.pcap 'host 192.0.2.10'
tcpdump -nn -r case01.pcap 'tcp port 443'
첫 명령은 해당 호스트와 관련된 패킷을 최대 100개 수집해 파일에 쓴다. -i는 인터페이스, -nn은 주소·포트를 숫자로 표시, -c는 개수 제한, -w는 저장이다. 일치하는 패킷이 없다면 100개를 채울 때까지 기다리므로 필요한 시점에 중단한다.
둘째 명령의 -r은 기존 파일 읽기다. 443번 TCP 패킷만 표시하며 원본 파일을 바꾸지 않는다. Wireshark에서는 같은 파일을 열어 헤더, 표시 필터, 재조립된 스트림을 비교할 수 있다. 캡처 파일에는 민감한 통신 내용이 포함될 수 있어 접근권한을 제한한다.
개념 확인 문제
문제를 누르면 바로 아래에서 정답과 해설을 확인할 수 있습니다.
01캡처 필터로 제외된 패킷을 나중에 표시 필터를 지워 복구할 수 있는가?
아니다. 캡처 때 파일에 저장되지 않았다. 표시 필터로만 숨긴 패킷은 원본 파일에 남아 있어 다시 볼 수 있다.
02캡처된 송신 패킷의 체크섬 오류 표시만으로 공격을 확정할 수 있는가?
아니다. NIC가 체크섬을 계산하기 전에 호스트에서 캡처한 결과일 수도 있다. 수집 위치와 오프로딩 조건을 함께 확인한다.