📚 네트워크 · 패킷 분석 › 05. 네트워크 스캔 징후 분석 — 209편
이전 글: 208. SYN Scan · 다음 글: 210. Port Range Scan
UDP Scan 은 UDP 포트에 데이터그램을 보내고, 돌아오는 응답 종류로 포트 상태를 판단하는 방식입니다. UDP에는 연결 수립 과정이 없기 때문에 TCP처럼 SYN/ACK·RST로 판단할 수 없고, ICMP 오류 메시지와 서비스 응답에 의존합니다.
DNS(53), NTP(123), SNMP(161), NetBIOS(137), IKE(500), SSDP(1900) 같은 UDP 서비스는 설정이 잘못되면 정보 노출이나 증폭 공격에 악용될 수 있어, 정찰에서 따로 확인하는 대상입니다. UDP 스캔 유형 전반의 특징 비교는 217. UDP Port Scan 특징에서 다루고, 이 글은 한 호스트에 대한 UDP 포트 확인이 남기는 흔적에 집중합니다.
| 대상 응답 | 판단 | 방어 측에서 보이는 것 |
|---|---|---|
| UDP 응답 | open | 서비스가 응답 패킷 전송 |
| ICMP Type 3, Code 3 (Port Unreachable) | closed | 대상 호스트가 ICMP 오류를 내보냄 |
| ICMP Type 3, 기타 Code(1, 2, 9, 10, 13) | filtered | 라우터·방화벽이 ICMP 오류 전송 |
| 무응답 | open|filtered | 차단 로그 또는 아무 기록 없음 |
스캐너 ── UDP → 대상:53 (DNS 질의 형식 데이터) ──→ DNS 응답 → open
스캐너 ── UDP → 대상:69 (빈 데이터) ──→ ICMP 3/3 → closed
스캐너 ── UDP → 대상:161 (빈 데이터) ──→ 무응답 → open|filtered
(서비스는 형식이 맞지 않는 요청을 무시)
↓
대상 커널: 닫힌 포트마다 ICMP Port Unreachable 생성 → 대상의 "출발" ICMP가 대량 발생
↓
대상 커널의 ICMP 오류 발생 속도 제한 → 스캔이 느려지고 오래 지속됨
두 가지 점이 방어자에게 중요합니다.
Linux 등 많은 운영체제는 ICMP 오류 메시지 발생 속도를 제한합니다. 그래서 UDP 스캔은 TCP 스캔보다 훨씬 느리게, 오래 이어지는 모양으로 나타나는 경우가 많습니다.
| 기준 | 정상 UDP 통신 | UDP Scan |
|---|---|---|
| 목적지 포트 | 서비스 포트 1~2개(53, 123 등) | 여러 포트, 닫힌 포트 다수 포함 |
| ICMP Port Unreachable | 가끔(응답 지연 후 클라이언트 포트 닫힘) | 한 출발지를 향해 대량 |
| 요청 데이터 | 프로토콜 형식에 맞음 | 빈 데이터 또는 최소 형식 프로브 |
| 지속 시간 | 짧은 질의·응답 반복 | 속도 제한 때문에 길게 이어짐 |
실습 예시 — 본인 소유 실습망 서버에서 UDP 스캔 흔적을 확인하는 방어 측 명령입니다(Rocky/Ubuntu 공통, 값은 환경마다 다름).
# 서버가 내보내는 ICMP Port Unreachable 캡처
sudo tcpdump -nn -i ens33 'icmp[icmptype] == icmp-unreach and icmp[icmpcode] == 3'
# 캡처 파일에서 ICMP 오류 안에 담긴 원래 UDP 목적지 포트 분포 (Wireshark가 내부 헤더를 해석)
tshark -r /tmp/udp.pcapng -Y 'icmp.type == 3 && icmp.code == 3' \
-T fields -e ip.dst -e udp.dstport | sort -u | awk '{c[$1]++} END {for (s in c) print c[s], s}'
tcpdump 출력 형식 예시(값은 환경마다 다름):
11:02:13.401 IP 192.168.10.20 > 192.168.10.50: ICMP 192.168.10.20 udp port 69 unreachable, length 36
11:02:14.402 IP 192.168.10.20 > 192.168.10.50: ICMP 192.168.10.20 udp port 111 unreachable, length 36
11:02:15.403 IP 192.168.10.20 > 192.168.10.50: ICMP 192.168.10.20 udp port 137 unreachable, length 36
| 관찰 | 해석 |
|---|---|
| 서버 → 한 출발지로 Port Unreachable 연속 | 그 출발지가 여러 UDP 포트를 확인 중 |
| 약 1초 간격 | 서버의 ICMP 오류 속도 제한이 적용된 모양일 수 있음 |
| 내부 헤더의 포트가 계속 바뀜 | 수직형 UDP 포트 확인 |
Wireshark에서는 icmp.type == 3 && icmp.code == 3 필터 후 패킷 상세의 내부 UDP 헤더를 펼쳐 원래 목적지 포트를 확인합니다.
| 흔적 위치 | 확인 내용 |
|---|---|
| 경계 방화벽 | 인바운드 UDP 다수 포트 차단, 아웃바운드 ICMP Type 3 Code 3 |
| IDS | UDP 포트 스캔, SNMP·DNS 프로브 관련 Alert |
| 서비스 로그 | SNMP 인증 실패, 비정상 DNS 질의 |
| 패킷 캡처 | ICMP 오류 내부 헤더의 원래 포트 |
관제자가 확인할 질문
오탐 주의: traceroute(Linux 기본)는 33434번부터 증가하는 UDP 포트로 요청을 보내므로 UDP 스캔처럼 보입니다. 하지만 TTL이 1부터 증가하고 중간 라우터의 ICMP Time Exceeded(Type 11)가 함께 보인다는 점이 다릅니다. 응답이 늦게 도착한 DNS 응답 때문에 클라이언트가 Port Unreachable을 보내는 경우도 흔합니다.