📚 네트워크 · 패킷 분석 › 05. 네트워크 스캔 징후 분석 — 216편
이전 글: 215. 전체 Port Scan · 다음 글: 217. UDP Port Scan 특징

1. 개념

TCP 포트 스캔은 여러 유형이 있지만, 모두 "TCP 스택은 정해진 규칙대로 응답한다" 는 한 가지 사실에 기대고 있습니다. 대상에게 어떤 플래그의 패킷을 보내느냐만 다를 뿐, 판단은 돌아온 응답(SYN/ACK, RST, 무응답, ICMP 오류)으로 합니다.

이 글은 개별 유형을 다시 설명하지 않고, 유형들을 한자리에서 비교해 로그·패킷만 보고 어떤 유형인지 가려내는 기준을 정리합니다. 개별 유형은 207. TCP Connect Scan, 208. SYN Scan, 219. Null Scan, 220. XMAS Scan, 221. FIN Scan, 222. ACK Scan에서 다룹니다.

TCP 스택 규칙(RFC 793 기준)스캔에서의 의미
LISTEN 포트가 SYN을 받으면 SYN/ACK열림 판단 근거
닫힌 포트(CLOSED)는 RST가 아닌 모든 세그먼트에 RST로 응답닫힘 판단 근거
LISTEN 포트에 SYN·RST·ACK 없는 세그먼트가 오면 버림FIN·Null·XMAS에서 무응답 = 열림 추정
LISTEN 포트에 연결 없는 ACK가 오면 RSTACK 방식에서 필터링 여부 판단

2. 동작 원리

유형별로 보내는 패킷과 대상의 응답은 다음과 같습니다(방화벽이 없는 경우).

유형보내는 플래그열린 포트 응답닫힌 포트 응답알아내는 것
ConnectSYN (연결 완료)SYN/ACKRST/ACK열림·닫힘
SYNSYN (연결 미완성)SYN/ACKRST/ACK열림·닫힘
FINFIN무응답RST/ACK닫힘, 나머지는 열림 또는 필터링
Null없음무응답RST/ACK위와 같음
XMASFIN+PSH+URG무응답RST/ACK위와 같음
ACKACKRSTRST필터링 여부만

방어 측에서는 이 표를 거꾸로 읽어 유형을 판별합니다.

의심 출발지의 패킷·로그 수집
      ↓
출발지가 보낸 첫 패킷의 플래그 확인
  ├─ SYN ──→ 열린 포트의 세 번째 패킷이 ACK? → Connect / RST? → SYN
  ├─ FIN, 없음, FIN+PSH+URG ──→ FIN / Null / XMAS (규격 밖 패킷)
  └─ 연결 없는 ACK ──→ ACK (방화벽 규칙 파악 목적)
      ↓
대상 응답 확인 (SYN/ACK, RST, 무응답, ICMP)
      ↓
상대가 알아냈을 정보 추정 → 열림 확인 포트 목록 작성

3. 주요 특징

  • SYN 기반과 비SYN 기반의 차이: SYN 기반은 정상 연결의 시작과 모양이 같아 방화벽 허용 포트에서는 세션을 만듭니다. FIN·Null·XMAS·ACK는 세션에 속하지 않는 패킷이므로 상태 추적 방화벽에서 INVALID로 차단되는 경우가 많습니다(장비·설정마다 다름).
  • 운영체제 차이: 일부 운영체제(대표적으로 Windows 계열)는 FIN·Null·XMAS에 대해 포트 상태와 관계없이 RST를 보내는 것으로 알려져 있어, 이 유형으로는 모든 포트가 닫힌 것처럼 보입니다.
  • 공통 흔적: 유형과 관계없이 한 출발지가 많은 포트로 짧은 요청을 보내고, 대상은 RST를 대량으로 내보냅니다. 아웃바운드 RST 급증은 유형 판별 전에 먼저 보이는 신호입니다.
판별 단서확인 방법
첫 패킷 플래그패킷 캡처, IDS 페이로드 정보
세 번째 패킷(ACK/RST)스트림별 패킷 순서
방화벽 로그 유형허용 세션 생성 여부, INVALID 차단 여부
대상의 아웃바운드 RST방화벽·NetFlow의 대상 → 출발지 방향 통계

4. 예시

실습 예시 — 본인 소유 실습망의 캡처 파일에서 출발지별 첫 패킷 플래그 분포를 집계하는 방어 측 명령입니다(Rocky/Ubuntu 공통, 값은 환경마다 다름).

# 출발지별 TCP 플래그 값 분포 (0x002=SYN, 0x001=FIN, 0x000=없음, 0x029=FIN+PSH+URG, 0x010=ACK)
tshark -r /tmp/scan.pcapng -Y 'ip.src == 203.0.113.45 && tcp' \
  -T fields -e tcp.flags | sort | uniq -c | sort -rn

# 대상 서버가 그 출발지에 보낸 RST 개수
tshark -r /tmp/scan.pcapng -Y 'ip.dst == 203.0.113.45 && tcp.flags.reset == 1' | wc -l

결과 형식 예시(값은 환경마다 다름, tshark 버전에 따라 표기 자릿수가 다를 수 있음):

   1000 0x0002
      3 0x0004
987
관찰해석
첫 패킷이 모두 SYN(0x0002)SYN 기반 유형
출발지 RST(0x0004) 3건열린 포트 3개에서 SYN/ACK를 받고 ACK 없는 RST로 거절 → SYN 방식
대상 RST 987건나머지 포트 대부분 닫힘 응답, 무응답 필터링은 약 10개

5. 보안 관점

  • 유형은 달라도 상대가 얻는 핵심 결과는 열림으로 확인된 포트 목록입니다. 대응은 유형보다 그 목록과 후속 접근에 집중합니다.
  • 경계 방화벽이 닫힌 포트에 RST를 대신 보내지 않고 무응답 차단하면, 모든 유형에서 판단이 filtered로 흐려져 정찰 효율이 떨어집니다.
  • 비SYN 유형은 정상 통신에서 나오지 않는 패킷을 쓰므로, 발견 자체가 의도적 탐색의 강한 근거가 됩니다(146. 비정상 TCP Traffic 분석).

6. SOC 관점

흔적 위치확인 내용
방화벽SYN 차단·허용 세션, INVALID 차단(비SYN 유형)
IDS유형별 스캔 시그니처, 포트 스캔 임계치 Alert
패킷 캡처첫 패킷 플래그, 세 번째 패킷, 대상 응답
NetFlow대상 → 출발지 RST 급증

관제자가 확인할 질문

  • 출발지가 보낸 첫 패킷의 플래그는 무엇이며, 한 유형만 쓰였는가 여러 유형이 섞였는가?
  • 대상이 SYN/ACK로 응답한 포트(열림 확인)는 무엇인가?
  • 비SYN 유형이 방화벽을 통과해 대상까지 도달했는가?

오탐 주의: 세션 만료 후 늦게 도착한 정상 FIN·ACK, 비대칭 라우팅으로 한쪽 방향만 보이는 트래픽은 세션 없는 패킷으로 차단되어 스캔처럼 보일 수 있습니다. 목적지 포트가 하나이고 이전에 정상 세션이 있었는지 확인합니다.


7. 핵심 정리

  • TCP 스캔 유형들은 모두 RFC 793의 응답 규칙(열림 SYN/ACK, 닫힘 RST, 규격 밖 패킷 무시)에 기댑니다.
  • 첫 패킷 플래그와 열린 포트의 세 번째 패킷으로 Connect·SYN·FIN·Null·XMAS·ACK를 구분합니다.
  • 비SYN 유형은 상태 추적 방화벽에서 INVALID로 차단되는 경우가 많고, 일부 OS는 규칙과 다르게 응답합니다.
  • 유형과 관계없이 대상의 아웃바운드 RST 급증이 공통 신호입니다.
  • 대응은 유형보다 열림 확인 포트와 후속 접근에 집중합니다.
profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글