📚 네트워크 · 패킷 분석 › 05. 네트워크 스캔 징후 분석 — 203편
이전 글: 202. 정찰(Reconnaissance)의 개념 · 다음 글: 204. Nmap 기본 사용법
Nmap(Network Mapper) 은 Gordon Lyon(Fyodor)이 1997년에 처음 공개한 오픈소스 네트워크 탐색·보안 점검 도구입니다. 관리자가 자기 네트워크에 어떤 호스트가 있고 어떤 포트·서비스가 노출되어 있는지 인벤토리를 만들고 점검하는 용도로 널리 쓰이며, 같은 이유로 공격자의 정찰에도 자주 쓰입니다.
관제자가 Nmap을 알아야 하는 이유는 사용법이 아니라 흔적 때문입니다. 가장 널리 쓰이는 스캔 도구이므로 IDS 시그니처, 방화벽 스캔 탐지 임계치, 패킷 분석 예제의 상당수가 Nmap이 만드는 트래픽 모양을 기준으로 만들어져 있습니다.
| 구성 요소 | 역할 | 관제 관점 |
|---|---|---|
| nmap | 호스트 확인, 포트 스캔, 서비스·OS 식별 | 대부분의 스캔 흔적의 출처 |
| NSE(Nmap Scripting Engine) | Lua 스크립트로 추가 점검 | 웹·SMB 등 서비스 로그에 요청 흔적 |
| Zenmap | 그래픽 사용자 인터페이스 | 트래픽은 nmap과 동일 |
| Ndiff | 두 스캔 결과 비교 | 관리자가 노출 변화 추적에 활용 |
| Ncat, Nping | 연결·패킷 생성 보조 도구 | 용도가 다양해 단독 판단 어려움 |
⚠️ Nmap 사용은 본인 소유 실습망 또는 명시적 허가를 받은 범위로 한정합니다. 허가 없는 스캔은 법적 문제가 될 수 있습니다.
Nmap 공식 문서는 한 번의 실행을 여러 단계로 설명합니다. 설정에 따라 일부 단계는 생략되지만, 관제자에게 중요한 것은 단계마다 다른 장비에 흔적이 남는다는 점입니다.
대상 목록 확정 (IP 대역, 도메인 이름)
↓
Host Discovery (살아 있는 호스트 확인) → ICMP·ARP·TCP 흔적 (205편, 206편)
↓
역방향 DNS 조회 (IP → 이름) → 스캐너가 쓰는 DNS 서버에 PTR 질의 다수
↓
Port Scanning (포트 상태 판단) → 방화벽 차단 로그, IDS 스캔 Alert
↓
Version / OS Detection (선택) → 서비스 로그의 비정상 요청, 특이한 프로브
↓
Script Scanning (선택, NSE) → 웹·SMB 등 애플리케이션 로그
↓
결과 출력
역방향 DNS 조회는 대상 네트워크가 아니라 스캐너가 설정한 DNS 서버로 갑니다. 내부 단말이 내부 대역을 스캔하면 사내 DNS 서버에 짧은 시간 동안 연속된 PTR 질의가 몰리는 흔적이 남을 수 있습니다.
| 기능 | 관리자에게 주는 결과 | 방어 측에 남는 흔적 |
|---|---|---|
| Host Discovery | 살아 있는 호스트 목록 | ICMP Echo·Timestamp, ARP 요청, 443·80 포트 TCP |
| Port Scan | 포트별 상태(open, closed, filtered 등) | 다수 포트 SYN·UDP, RST/ACK·ICMP 응답 |
| Service/Version Detection | 서비스 이름·버전 | 배너 수집, 프로토콜 프로브 문자열 |
| OS Detection | 운영체제 추정 | 비정상 플래그 조합의 TCP, ICMP 프로브 |
| NSE | 스크립트별 점검 결과 | HTTP User-Agent, 특정 URL 요청 |
Nmap Scripting Engine 문자열이 포함됩니다. 사용자가 바꿀 수 있으므로 없다고 Nmap이 아니라고 단정하지 않습니다.실습 예시 — 본인 소유 실습망의 웹 서버와 DNS 서버에서 Nmap 사용 흔적을 찾는 방어 측 명령입니다. 값은 환경마다 다릅니다.
# 웹 서버 접근 로그에서 NSE 기본 User-Agent 검색
# Rocky(httpd): /var/log/httpd/access_log Ubuntu(apache2): /var/log/apache2/access.log
sudo grep -i "Nmap Scripting Engine" /var/log/httpd/access_log | awk '{print $1}' | sort | uniq -c
# 짧은 시간의 PTR 질의 급증 확인 (BIND querylog가 켜져 있는 경우)
sudo journalctl -u named --since "30 min ago" | grep -c "IN PTR"
웹 접근 로그 형식 예시(값은 환경마다 다름):
192.168.10.50 - - [30/Sep/2026:10:12:03 +0900] "GET /nmaplowercheck1727658723 HTTP/1.1" 404 196 "-" "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)"
192.168.10.50 - - [30/Sep/2026:10:12:03 +0900] "GET / HTTP/1.1" 200 4897 "-" "Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)"
존재하지 않는 경로 요청 뒤에 루트 페이지 요청이 이어지는 모양은 웹 서버의 응답 특성을 확인하는 점검 요청의 흔적으로 해석할 수 있습니다. 요청 경로·순서는 스크립트와 버전에 따라 다릅니다.
| 흔적 위치 | 확인 내용 |
|---|---|
| 방화벽 | 출발지별 목적지 포트·IP 수 |
| IDS/IPS | 스캔 임계치 Alert, 도구 특징 기반 시그니처 (237. Snort Scan 탐지, 238. Suricata Scan 탐지) |
| DNS 서버 | 연속된 PTR 질의 |
| 웹·서비스 로그 | NSE User-Agent, 존재하지 않는 경로 요청 |
관제자가 확인할 질문
오탐 주의: 취약점 관리 솔루션 중 일부는 내부적으로 Nmap을 사용하므로 같은 시그니처가 반복적으로 발생합니다. 예외 처리는 출발지 IP와 점검 시간대를 함께 묶어 등록해야 무분별한 예외가 되지 않습니다.