📚 네트워크 · 패킷 분석 › 05. 네트워크 스캔 징후 분석 — 220편
이전 글: 219. Null Scan · 다음 글: 221. FIN Scan
XMAS Scan 은 TCP 플래그 중 FIN, PSH, URG 세 개를 동시에 설정한 패킷을 보내는 스캔입니다. 패킷 분석 화면에서 여러 플래그가 켜진 모습이 크리스마스 트리 전구 같다고 해서 이런 이름이 붙었습니다.
판단 원리는 219. Null Scan과 같습니다. SYN·ACK·RST가 없는 세그먼트이므로 열린 포트는 버리고, 닫힌 포트는 RST로 응답합니다. 이 글은 XMAS 패킷의 모양과 식별, 비슷한 비정상 조합과의 구분에 집중합니다.
| 플래그 | 비트 값 | 정상 의미 | XMAS 패킷에서 |
|---|---|---|---|
| URG | 0x20 | 긴급 데이터 포인터 유효 | 설정 |
| PSH | 0x08 | 수신 즉시 애플리케이션에 전달 | 설정 |
| FIN | 0x01 | 연결 종료 요청 | 설정 |
| 합계 | 0x29 | — | ACK·SYN·RST 없음 |
스캐너 ── TCP [FIN, PSH, URG] ──→ 대상 포트
│
정상 연결에서는 FIN·PSH에 항상 ACK가 함께 있음
→ ACK 없는 FIN+PSH+URG = 연결 맥락 없는 조작 패킷
↓
[상태 추적 방화벽] 세션 없음 → INVALID 차단 (장비·설정마다 다름)
↓ (통과 시)
[대상] 닫힌 포트: RST/ACK / 열린 포트: 버림(무응답)
↓
방어 측 흔적: tcpdump [FPU], Wireshark 0x029, IDS 비정상 플래그 Alert
정상 TCP에서는 첫 SYN 이후 모든 세그먼트에 ACK가 설정되므로, ACK 없이 FIN이 포함된 패킷은 그 자체로 비정상입니다. 또 URG는 현대 애플리케이션에서 거의 쓰이지 않아, URG가 설정된 패킷이 여러 포트로 들어오는 것도 드문 모양입니다.
Flags [FPU], Wireshark는 tcp.flags == 0x029, iptables LOG는 줄 끝에 URG PSH FIN처럼 표시합니다.비정상 플래그 조합은 여러 가지이며, 조합에 따라 해석이 조금씩 다릅니다.
| 조합 | 필터 값 예 | 흔한 해석 |
|---|---|---|
| FIN+PSH+URG | tcp.flags == 0x029 | XMAS Scan |
| 플래그 없음 | tcp.flags == 0x000 | Null Scan |
| FIN만 | tcp.flags == 0x001 | FIN Scan(221. FIN Scan) |
| SYN+FIN | tcp.flags.syn == 1 && tcp.flags.fin == 1 | OS 탐지 프로브·필터 우회 시도 |
실습 예시 — 본인 소유 실습망에서 XMAS 패킷을 확인하는 방어 측 명령입니다(Rocky/Ubuntu 공통, 값은 환경마다 다름).
# FIN, PSH, URG만 정확히 설정된 패킷
sudo tcpdump -nn -i ens33 'tcp[13] == 0x29'
# 캡처 파일에서 출발지별 XMAS 패킷 수와 목적지 포트 수
tshark -r /tmp/xmas.pcapng -Y 'tcp.flags == 0x029' -T fields -e ip.src -e tcp.dstport \
| sort -u | awk '{c[$1]++} END {for (s in c) print c[s], s}'
tcpdump 출력 형식 예시(값은 환경마다 다름):
10:40:11.201 IP 203.0.113.45.61022 > 192.168.10.20.23: Flags [FPU], seq 0, win 1024, urg 0, length 0
10:40:11.202 IP 192.168.10.20.23 > 203.0.113.45.61022: Flags [R.], seq 0, ack 1, win 0, length 0
10:40:11.203 IP 203.0.113.45.61022 > 192.168.10.20.22: Flags [FPU], seq 0, win 1024, urg 0, length 0
| 관찰 | 해석 |
|---|---|
Flags [FPU], length 0, urg 0 | 데이터 없는 XMAS 패킷 |
23번 포트는 [R.] 응답 | RST/ACK → 닫힌 포트 |
| 22번 포트는 응답 없음 | 열림 또는 필터링(open|filtered) |
| 대상의 RST가 관찰됨 | XMAS 패킷이 대상까지 도달 → 구간의 INVALID 차단 여부 점검 |
| 흔적 위치 | 확인 내용 |
|---|---|
| 방화벽 | INVALID 차단, 로그의 URG PSH FIN 표기 |
| IDS | XMAS·비정상 플래그 시그니처(룰셋마다 이름 다름) |
| 패킷 캡처 | [FPU], 대상의 RST 응답 포트 |
| NDR | 출발지별 비정상 플래그 통계 |
관제자가 확인할 질문
오탐 주의: XMAS 조합은 정상 통신에서 거의 나오지 않아 오탐 가능성이 낮은 편입니다. 다만 손상 패킷이나 패킷 생성 도구를 쓰는 내부 테스트가 원인일 수 있으므로, 내부 출발지라면 인가된 테스트 여부를 먼저 확인합니다.
[FPU], Wireshark tcp.flags == 0x029, iptables URG PSH FIN 표기로 식별합니다.