📚 네트워크 · 패킷 분석 › 05. 네트워크 스캔 징후 분석 — 216편
이전 글: 215. 전체 Port Scan · 다음 글: 217. UDP Port Scan 특징
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가 오면 RST | ACK 방식에서 필터링 여부 판단 |
유형별로 보내는 패킷과 대상의 응답은 다음과 같습니다(방화벽이 없는 경우).
| 유형 | 보내는 플래그 | 열린 포트 응답 | 닫힌 포트 응답 | 알아내는 것 |
|---|---|---|---|---|
| Connect | SYN (연결 완료) | SYN/ACK | RST/ACK | 열림·닫힘 |
| SYN | SYN (연결 미완성) | SYN/ACK | RST/ACK | 열림·닫힘 |
| FIN | FIN | 무응답 | RST/ACK | 닫힘, 나머지는 열림 또는 필터링 |
| Null | 없음 | 무응답 | RST/ACK | 위와 같음 |
| XMAS | FIN+PSH+URG | 무응답 | RST/ACK | 위와 같음 |
| ACK | ACK | RST | RST | 필터링 여부만 |
방어 측에서는 이 표를 거꾸로 읽어 유형을 판별합니다.
의심 출발지의 패킷·로그 수집
↓
출발지가 보낸 첫 패킷의 플래그 확인
├─ SYN ──→ 열린 포트의 세 번째 패킷이 ACK? → Connect / RST? → SYN
├─ FIN, 없음, FIN+PSH+URG ──→ FIN / Null / XMAS (규격 밖 패킷)
└─ 연결 없는 ACK ──→ ACK (방화벽 규칙 파악 목적)
↓
대상 응답 확인 (SYN/ACK, RST, 무응답, ICMP)
↓
상대가 알아냈을 정보 추정 → 열림 확인 포트 목록 작성
| 판별 단서 | 확인 방법 |
|---|---|
| 첫 패킷 플래그 | 패킷 캡처, IDS 페이로드 정보 |
| 세 번째 패킷(ACK/RST) | 스트림별 패킷 순서 |
| 방화벽 로그 유형 | 허용 세션 생성 여부, INVALID 차단 여부 |
| 대상의 아웃바운드 RST | 방화벽·NetFlow의 대상 → 출발지 방향 통계 |
실습 예시 — 본인 소유 실습망의 캡처 파일에서 출발지별 첫 패킷 플래그 분포를 집계하는 방어 측 명령입니다(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개 |
| 흔적 위치 | 확인 내용 |
|---|---|
| 방화벽 | SYN 차단·허용 세션, INVALID 차단(비SYN 유형) |
| IDS | 유형별 스캔 시그니처, 포트 스캔 임계치 Alert |
| 패킷 캡처 | 첫 패킷 플래그, 세 번째 패킷, 대상 응답 |
| NetFlow | 대상 → 출발지 RST 급증 |
관제자가 확인할 질문
오탐 주의: 세션 만료 후 늦게 도착한 정상 FIN·ACK, 비대칭 라우팅으로 한쪽 방향만 보이는 트래픽은 세션 없는 패킷으로 차단되어 스캔처럼 보일 수 있습니다. 목적지 포트가 하나이고 이전에 정상 세션이 있었는지 확인합니다.