📚 네트워크 · 패킷 분석 › 03. Wireshark 패킷 분석 — 124편
이전 글: 123. SYN Packet 분석 · 다음 글: 125. ACK Packet 분석

1. 개념

SYN/ACK는 서버가 "요청을 받았고 연결을 받아들이겠다"고 답하는 패킷입니다. Handshake 전체 흐름은 121. TCP 3-Way Handshake 분석, 개념은 44. SYN, SYN/ACK, ACK에서 다뤘습니다. 관제 관점에서 SYN/ACK의 가치는 분명합니다. SYN/ACK가 나갔다는 것은 그 포트에서 서비스가 실제로 대기(LISTEN) 중이고, 방화벽이 그 연결을 통과시켰다는 증거입니다.

확인 항목Wireshark 필드정상 모습
Flagtcp.flags == 0x012SYN + ACK (ECN 수락 시 0x052)
서버 ISNtcp.seq_raw무작위에 가까운 값, 상대값 0
확인 번호tcp.ack_raw대응하는 SYN의 tcp.seq_raw + 1
옵션tcp.options.*클라이언트가 제안한 옵션 중 서버가 지원하는 것만
MSStcp.options.mss_val서버 쪽 경로 MSS (양쪽 값이 다를 수 있음)
TTLip.ttl서버 OS 초기값 − 경유 홉
응답 시간frame.time_delta_displayedSYN과 SYN/ACK만 필터했을 때 두 패킷 간격

2. 동작 원리

SYN/ACK를 SYN과 짝지어 검증하는 과정입니다.

SYN      client:51030 → server:22    seq_raw = 4100000000
   ↓ 서버: LISTEN 소켓 확인 → SYN 대기열 등록
SYN/ACK  server:22 → client:51030    seq_raw = y, ack_raw = 4100000001
   ↓ 검증 ① 포트 쌍이 SYN의 역방향인가
   ↓ 검증 ② ack_raw = SYN seq_raw + 1 인가
   ↓ 검증 ③ 옵션이 SYN의 제안 범위 안인가 (예: SYN에 WS 없으면 SYN/ACK에도 없음)
ACK 도착 → 연결 성립
ACK 미도착 → 서버가 SYN/ACK 재전송 (Linux net.ipv4.tcp_synack_retries 기본 5)
  • 서버 SYN/ACK 재전송은 Wireshark에서 같은 tcp.seq_raw의 SYN/ACK가 반복되고 tcp.analysis.retransmission이 붙는 모습으로 나타납니다.
  • 서버가 SYN 쿠키로 응답하는 상황(대기열이 넘칠 때)에서는 ISN이 쿠키 값으로 계산됩니다. 패킷 모양만으로 쿠키 여부를 확정하기는 어렵고, 서버의 커널 카운터(nstat 의 SyncookiesSent)로 확인합니다.

3. 주요 특징

SYN/ACK가 보이는 방식별 해석

보이는 모습해석비고
SYN 직후 SYN/ACK, 이어서 ACK정상 성립—
SYN/ACK 후 클라이언트가 RST클라이언트가 수립 포기SYN 스캔, 또는 클라이언트 타임아웃
같은 SYN/ACK가 1초·2초… 간격으로 반복세 번째 ACK 미도착위조 출발지 SYN, 반환 경로 차단
우리 쪽 SYN 없이 외부에서 SYN/ACK만 수신Backscatter 또는 비대칭 경로캡처 지점이 한 방향만 보는지 확인
한 서버가 다수 외부 IP로 SYN/ACK 재전송SYN Flood 대상 가능성SYN 출발지 분포
SYN/ACK의 ack가 SYN seq + 1과 다름다른 연결의 응답, 조작 패킷tcp.stream과 4-tuple 재확인

옵션 협상 결과 읽기

SYN 쪽SYN/ACK 쪽결과
Window Scale 7Window Scale 7양방향 스케일 적용 (각자 자기 값)
Window Scale 있음Window Scale 없음양방향 모두 스케일 미사용
SACK 허용SACK 허용SACK 블록 사용 가능
TimestampsTimestamps 없음이후 패킷에 Timestamps 없음
MSS 1460MSS 1400각 방향 송신자는 상대가 알린 MSS를 따름

4. 예시

실습 예시 — 본인 VM의 SSH 서버(192.168.10.30:22)에 접속해 SYN과 SYN/ACK를 짝지어 봅니다. 명령과 출력은 예시(값은 환경마다 다름)입니다.

sudo tshark -i ens33 -f "tcp port 22 and host 192.168.10.30" -w /tmp/synack.pcapng &
ssh -o BatchMode=yes -o ConnectTimeout=3 user@192.168.10.30 exit 2>/dev/null
sudo pkill -INT tshark

# SYN과 SYN/ACK를 나란히 (두 번째 줄 ack_raw = 첫 줄 seq_raw + 1)
tshark -r /tmp/synack.pcapng -Y 'tcp.flags.syn == 1' -T fields -E header=y \
  -e tcp.stream -e ip.src -e ip.ttl -e tcp.flags.str -e tcp.seq_raw -e tcp.ack_raw \
  -e tcp.window_size_value -e tcp.options.mss_val -e tcp.options.wscale.shift -e frame.time_relative

# SYN/ACK 재전송만
tshark -r /tmp/synack.pcapng -Y 'tcp.flags == 0x012 && tcp.analysis.retransmission'

형식 예시입니다.

stream ip.src         ttl flags.str     seq_raw     ack_raw     win    mss  ws time
0      192.168.10.20  64  ··········S·  4100000000  0           64240  1460 7  0.000000
0      192.168.10.30  64  ·······A··S·  3301200000  4100000001  65160  1460 7  0.000380
확인 포인트읽는 법
ack_raw 4100000001SYN seq_raw + 1 → 이 SYN에 대한 응답이 맞음
서버 TTL 64같은 대역. 외부 서버라면 초기값에서 홉 수만큼 줄어든 값
응답 간격 0.38ms서버 앞 캡처라면 서버 처리 시간, 클라이언트 앞이면 왕복 시간 포함

📷 [실습 화면 삽입 위치] SYN/ACK 패킷 Details에서 Acknowledgment Number(raw)와 [This is an ACK to the segment in frame: N], Options가 보이는 화면


5. 보안 관점

관찰가능한 해석확인할 것
외부 스캔 SYN에 내부 서버가 SYN/ACK로 응답해당 포트가 외부에 실제로 노출됨노출 정책 (98. 포트·프로토콜 보안 점검 체크리스트)
예상하지 못한 포트에서 SYN/ACK허가되지 않은 서비스·백도어 리스너 가능성서버의 ss -tlnp 결과
SYN/ACK TTL이 같은 서버의 평소 값과 다름중간 장비(프록시·IPS)의 대리 응답다른 연결의 TTL
요청 없는 SYN/ACK 대량 수신우리 IP를 위조한 공격의 Backscatter출발지·포트 분포
서버의 SYN/ACK 재전송 급증SYN Flood, 반환 경로 문제서버 SYN-RECV 수

6. SOC 관점

흔적 위치확인할 수 있는 것
패킷 캡처응답 여부, ack 검증, 서버 TTL·옵션
방화벽 로그세션 허용 후 서버 응답 패킷 수 (1 이상이면 응답 존재)
IDS/IPS스캔 이벤트의 "응답 있음" 여부로 노출 판단
서버LISTEN 포트 목록, SYN 대기열 상태

관제자가 확인할 질문

  • 스캔 알림에서 우리 쪽이 SYN/ACK로 응답한 포트는 어디인가? 그 포트는 노출이 허가된 것인가?
  • SYN/ACK 뒤에 ACK와 데이터가 이어졌는가? 이어졌다면 스캔을 넘어 실제 접속입니다.
  • 응답 TTL이 서버 본래 값인가, 중간 장비 값인가?

오탐 주의: 캡처 지점이 한 방향만 보는 구성(비대칭 라우팅, 단방향 TAP)에서는 SYN 없는 SYN/ACK가 정상적으로 보입니다. 센서 구성부터 확인합니다.


7. 핵심 정리

  • SYN/ACK는 tcp.flags == 0x012이며, tcp.ack_raw가 SYN의 tcp.seq_raw + 1이어야 같은 연결의 응답입니다.
  • SYN/ACK가 나갔다는 것은 포트가 LISTEN 중이고 방화벽이 통과시켰다는 증거입니다.
  • 옵션은 SYN이 제안한 범위 안에서만 응답되며, 양쪽 옵션을 비교해 협상 결과를 읽습니다.
  • SYN/ACK 재전송은 세 번째 ACK가 오지 않았다는 뜻으로 위조 출발지·SYN Flood의 단서가 됩니다.
  • 요청 없는 SYN/ACK는 Backscatter일 수 있지만, 먼저 센서가 양방향을 보는지 확인합니다.
profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글