📚 네트워크 · 패킷 분석 › 05. 네트워크 스캔 징후 분석 — 220편
이전 글: 219. Null Scan · 다음 글: 221. FIN Scan

1. 개념

XMAS Scan 은 TCP 플래그 중 FIN, PSH, URG 세 개를 동시에 설정한 패킷을 보내는 스캔입니다. 패킷 분석 화면에서 여러 플래그가 켜진 모습이 크리스마스 트리 전구 같다고 해서 이런 이름이 붙었습니다.

판단 원리는 219. Null Scan과 같습니다. SYN·ACK·RST가 없는 세그먼트이므로 열린 포트는 버리고, 닫힌 포트는 RST로 응답합니다. 이 글은 XMAS 패킷의 모양과 식별, 비슷한 비정상 조합과의 구분에 집중합니다.

플래그비트 값정상 의미XMAS 패킷에서
URG0x20긴급 데이터 포인터 유효설정
PSH0x08수신 즉시 애플리케이션에 전달설정
FIN0x01연결 종료 요청설정
합계0x29—ACK·SYN·RST 없음

2. 동작 원리

스캐너 ── 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가 설정된 패킷이 여러 포트로 들어오는 것도 드문 모양입니다.


3. 주요 특징

  • 도구별 표기: tcpdump는 Flags [FPU], Wireshark는 tcp.flags == 0x029, iptables LOG는 줄 끝에 URG PSH FIN처럼 표시합니다.
  • URG 포인터: URG가 설정되어 있어도 긴급 포인터 값이 의미 없는 값(예: 0)인 경우가 많아, 데이터가 없는 패킷에 URG만 켜진 모양이 됩니다.
  • 결과 판단 한계: 무응답은 열림과 필터링을 구분하지 못하므로 결과는 open|filtered입니다. 일부 OS는 포트 상태와 관계없이 RST를 보냅니다(216. TCP Port Scan 특징).

비정상 플래그 조합은 여러 가지이며, 조합에 따라 해석이 조금씩 다릅니다.

조합필터 값 예흔한 해석
FIN+PSH+URGtcp.flags == 0x029XMAS Scan
플래그 없음tcp.flags == 0x000Null Scan
FIN만tcp.flags == 0x001FIN Scan(221. FIN Scan)
SYN+FINtcp.flags.syn == 1 && tcp.flags.fin == 1OS 탐지 프로브·필터 우회 시도

4. 예시

실습 예시 — 본인 소유 실습망에서 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 차단 여부 점검

5. 보안 관점

  • XMAS 패킷은 정상 운영체제가 만들지 않으므로 탐지 근거가 명확합니다. 동시에 상태 비저장 필터만 있는 구간을 통과할 수 있다는 점이 방어 측 점검 포인트입니다.
  • 결과로 얻는 정보가 제한적이라, 이 방식이 보였다면 상대가 여러 방식을 시험 중일 가능성이 있습니다. 같은 출발지의 다른 방식 스캔을 함께 묶어 하나의 사건으로 봅니다.
  • 과거 일부 시스템은 비정상 플래그 조합 처리에 문제가 있었던 사례가 있어, 이런 패킷은 경계에서 일괄 차단하는 것이 일반적인 권고입니다.

6. SOC 관점

흔적 위치확인 내용
방화벽INVALID 차단, 로그의 URG PSH FIN 표기
IDSXMAS·비정상 플래그 시그니처(룰셋마다 이름 다름)
패킷 캡처[FPU], 대상의 RST 응답 포트
NDR출발지별 비정상 플래그 통계

관제자가 확인할 질문

  • XMAS 패킷이 몇 개 포트·대상으로 들어왔고, 방화벽에서 차단되었는가?
  • 대상이 RST로 응답한 포트와 응답하지 않은 포트는 무엇인가?
  • 같은 출발지의 Null·FIN·SYN 방식 시도가 앞뒤로 있는가?

오탐 주의: XMAS 조합은 정상 통신에서 거의 나오지 않아 오탐 가능성이 낮은 편입니다. 다만 손상 패킷이나 패킷 생성 도구를 쓰는 내부 테스트가 원인일 수 있으므로, 내부 출발지라면 인가된 테스트 여부를 먼저 확인합니다.


7. 핵심 정리

  • XMAS Scan은 FIN·PSH·URG(0x29)를 동시에 설정한 패킷으로 닫힌 포트의 RST와 열린 포트의 무응답 차이를 이용합니다.
  • ACK 없는 FIN 포함 패킷은 정상 TCP에서 나올 수 없어 탐지 근거가 명확합니다.
  • tcpdump [FPU], Wireshark tcp.flags == 0x029, iptables URG PSH FIN 표기로 식별합니다.
  • 상태 비저장 필터만 있는 구간을 통과할 수 있으므로 구간별 INVALID 차단 적용을 점검합니다.
  • 같은 출발지의 다른 방식 스캔과 묶어 하나의 정찰 사건으로 분석합니다.
profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글