📚 네트워크 · 패킷 분석 › 03. Wireshark 패킷 분석 — 110편
이전 글: 109. Statistics로 전체 흐름 파악 — Conversations·Endpoints·Protocol Hierarchy · 다음 글: 111. Endpoints

1. 개념

Conversation은 두 지점 사이에 오간 트래픽의 묶음입니다. 통계 메뉴 전체의 흐름과 Conversation·Endpoint의 차이는 109. Statistics로 전체 흐름 파악 — Conversations·Endpoints·Protocol Hierarchy에서 다뤘으므로, 이 글은 Conversations 창 하나를 열 단위로 읽고 판단하는 방법에 집중합니다.

탭마다 "두 지점"의 기준이 다릅니다.

탭대화를 구분하는 기준답하는 질문
EthernetMAC 주소 쌍같은 LAN에서 어떤 장비끼리 주고받았나
IPv4 / IPv6IP 주소 쌍어떤 호스트끼리 통신했나 (포트 무관)
TCPIP + 포트 쌍 (연결 단위)어떤 연결이 크고 오래 지속됐나
UDPIP + 포트 쌍어떤 UDP 흐름이 있었나 (DNS, NTP, QUIC 등)

2. 동작 원리

Wireshark는 파일 전체(또는 필터 결과)를 읽으며 대화 표를 누적합니다.

패킷 1개 읽기
   ↓ 탭 기준 키 생성 (예: TCP → IP A, 포트 A, IP B, 포트 B)
기존 대화에 있음? ── 예 → 방향(A→B / B→A)별 패킷·바이트 누적, 마지막 시각 갱신
   │ 아니오
   ↓
새 대화 생성 (처음 본 시각 = Rel Start)
   ↓
Duration = 마지막 패킷 시각 − 첫 패킷 시각
Bits/s  = 방향별 바이트 × 8 ÷ Duration

A와 B는 서버·클라이언트를 뜻하지 않습니다. 어느 주소가 A가 되는지는 구현에 따라 정해지므로, 누가 연결을 시작했는지는 반드시 첫 SYN(tcp.flags == 0x002)이나 포트(임시 포트 쪽이 클라이언트)로 확인합니다.


3. 주요 특징

주요 열과 읽는 법입니다(버전에 따라 Stream ID 등 열이 추가될 수 있음).

열의미분석 포인트
Address A / Port A, Address B / Port B대화 양 끝서비스 포트가 어느 쪽인지로 방향 추정
Packets, Bytes양방향 합계상위 대화 선별
Packets A → B, Bytes A → BA가 보낸 양업로드·다운로드 비율 계산
Packets B → A, Bytes B → AB가 보낸 양응답이 없는(0) 대화 찾기
Rel Start캡처 시작 기준 첫 패킷 시각다른 이벤트와 순서 대조
Duration대화 지속 시간짧고 많음 / 길고 적음 구분
Bits/s A → B, B → A평균 전송 속도순간 폭증은 I/O Graph로 따로 확인

창 아래 옵션도 판단에 영향을 줍니다.

옵션켰을 때
Limit to display filter현재 Display Filter 결과만 집계
Absolute start timeRel Start 대신 실제 시각 표시 (다른 로그와 대조할 때)
Name resolution주소를 이름으로 표시 (분석 시에는 끄는 편이 안전, 104. Wireshark 화면 구조와 필드 읽는 법)

대화 행을 오른쪽 클릭하면 Apply as Filter → Selected → A ↔ B로 해당 대화만 필터링하거나, TCP 탭에서 바로 Follow Stream으로 넘어갈 수 있습니다.


4. 예시

실습 예시 — tshark로 같은 표를 만듭니다(Rocky/Ubuntu 공통, 설치는 102. Wireshark 설치와 실행).

F=/tmp/lab.pcapng
tshark -r $F -q -z conv,tcp
tshark -r $F -q -z conv,udp
tshark -r $F -q -z 'conv,ip,ip.addr == 192.168.10.20'   # 필터를 붙인 집계

-z conv,tcp 출력의 형식 예시(값은 환경마다 다름, 열 일부 생략)입니다. 방향 화살표 기준은 왼쪽 주소입니다.

                                          |  <-  |  |  ->  |  | Total |  Relative |  Duration
                                          |Frames  Bytes|Frames  Bytes|Frames Bytes|   Start   |
192.168.10.20:51544 <-> 203.0.113.50:443      950  1.3 MB   420  28 kB   1370  1.3 MB   12.40     85.2
192.168.10.20:51602 <-> 198.51.100.7:8443      60   6 kB    60   9 kB    120   15 kB    3.10   3590.0
192.168.10.20:40110 <-> 192.168.10.30:22        1   60 B     1   74 B      2   134 B   40.02      0.0
줄읽는 법
1번째443으로 받은 양이 보낸 양보다 훨씬 큼 → 일반적인 다운로드 형태
2번째1시간 가까이 적은 양을 주고받음 → 주기 통신(업데이트 확인, 원격 관리 또는 비콘) 여부 확인 대상
3번째패킷 2개, 지속 0초 → SYN 후 즉시 RST 같은 수립 실패 연결

연결 단위로 직접 집계하고 싶다면 tcp.stream을 키로 필드를 추출합니다.

# 스트림별 연결 시작 방향 (첫 SYN의 출발지 = 클라이언트)
tshark -r $F -Y 'tcp.flags == 0x002' -T fields \
  -e tcp.stream -e ip.src -e tcp.srcport -e ip.dst -e tcp.dstport > /tmp/syn.tsv

# 스트림·출발지별 전송 바이트 합계
tshark -r $F -Y tcp -T fields -e tcp.stream -e ip.src -e frame.len \
  | awk '{b[$1" "$2]+=$3} END {for (k in b) print k, b[k]}' | sort -n | head

📷 [실습 화면 삽입 위치] Statistics → Conversations의 TCP 탭을 Duration 기준으로 정렬하고 Absolute start time을 켠 화면

📷 [실습 화면 삽입 위치] 대화 행을 오른쪽 클릭해 Apply as Filter → A ↔ B를 선택하는 메뉴


5. 보안 관점

대화의 모양으로 추가 확인이 필요한 형태를 고를 수 있습니다. 모양만으로 악성 여부를 확정할 수는 없습니다.

대화 모양가능한 해석다음 확인
내부 → 외부, 보낸 바이트가 받은 바이트보다 매우 큼백업·파일 업로드, 또는 데이터 유출목적지 평판, 업무 시간, 프로세스(EDR)
긴 Duration, 적은 바이트, 일정한 패킷 간격모니터링·업데이트, 또는 C2 비콘간격 규칙성, SNI·도메인
한 출발지 → 한 목적지, 포트만 다른 짧은 대화 다수포트 스캔05. 네트워크 스캔 징후 분석 영역
한 출발지 → 많은 목적지, 같은 포트호스트 탐색, 웜형 확산대상 대역, 성공(응답) 비율
UDP 53 대화의 목적지가 사내 DNS가 아님설정 오류, 또는 DNS 정책 우회144. DNS 악용 유형 — 터널링·DGA·비정상 질의 탐지

6. SOC 관점

흔적 위치Conversations와 대조할 것
방화벽 세션 로그세션 시작·종료 시각, 송수신 바이트 (NAT 전후 주소 차이 주의)
NetFlow·IPFIX같은 5-tuple의 바이트·패킷 수 (샘플링 여부 확인)
프록시 로그업로드 크기, 목적지 도메인
EDR해당 시각에 연결을 만든 프로세스

관제자가 확인할 질문

  • 가장 큰 대화, 가장 오래 지속된 대화, 응답(B → A)이 0인 대화는 각각 무엇인가?
  • 송신 바이트가 큰 외부 대화의 목적지는 업무상 설명이 되는가?
  • 긴 대화의 패킷 간격이 기계적으로 일정한가?

오탐 주의: 캡처 시작 전에 열린 연결은 Rel Start가 0 근처에 몰리고 Duration이 실제보다 짧게 보입니다. 또 NAT 뒤에서 캡처했다면 여러 내부 호스트가 한 주소로 합쳐져 보입니다. 캡처 지점과 기간을 먼저 확인합니다.


7. 핵심 정리

  • Conversations는 탭(Ethernet, IP, TCP, UDP)마다 "두 지점"의 기준이 다르며, TCP·UDP 탭은 포트까지 포함한 연결 단위입니다.
  • A/B는 서버·클라이언트가 아니므로 방향은 첫 SYN이나 포트로 확인합니다.
  • 방향별 바이트, Duration, Rel Start를 조합하면 다운로드·업로드·장시간 저용량·수립 실패 대화를 구분할 수 있습니다.
  • tshark -q -z conv,tcp / conv,udp / conv,ip,<필터>와 tcp.stream 기반 필드 추출로 같은 분석을 CLI에서 합니다.
  • 대화 모양은 추가 확인 대상을 고르는 기준일 뿐이며, 방화벽·NetFlow·EDR 기록과 대조해 판단합니다.
profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글