콘텐츠로 이동

Nmap

MITRE ATT&CK: T1595 Active Scanning · T1046 Network Service Discovery · T1018 Remote System Discovery · 전술: Reconnaissance / Discovery · 최종 업데이트: 2026-10-13

하는 일

Nmap은 만든 패킷을 보내고, 돌아온 응답(또는 무응답)을 포트 상태와 서비스 정체로 분류합니다. 출력은 전부 "상대가 어떻게 답했는가"로부터의 추론이므로, 중간에 방화벽이 있으면 같은 출력도 의미가 달라질 수 있습니다.

이 섹션의 페이지

치트시트

목표 명령
서브넷의 살아 있는 호스트 (포트 스캔 없이) sudo nmap 10.129.2.0/24 -sn -oA hosts
전체 TCP 포트, 빠르게 sudo nmap <ip> -p- --min-rate 1000 -oA full_tcp
열린 포트만 버전 확인 sudo nmap <ip> -p 22,80,443 -sV -oA svc
기본 스크립트 + 버전 sudo nmap <ip> -sC -sV -oA default
상위 UDP 포트 sudo nmap <ip> -sU --top-ports 100 -oA udp
실제로 오간 패킷 보기 sudo nmap <ip> -p 80 --packet-trace -Pn -n --disable-arp-ping
왜 그 상태로 판단했는지 --reason 추가
진행 상황 Space 또는 --stats-every=5s

펜테스터 관점

  • 범위가 먼저. 교전 규칙(RoE)에 있는 대상만 스캔합니다. 범위 파일은 -iL scope.txt로 넘깁니다.
  • 진짜 위험은 탐지가 아니라 가용성. 펜테스트에서 고객은 보통 스캔 사실을 알고 있습니다. 문제가 되는 것은 약한 장비(프린터, PLC, 오래된 어플라이언스)가 공격적인 타이밍에 죽거나 intrusive/dos 스크립트를 돌렸을 때입니다. -T4는 랩에서만 쓰고, 고객 망에서는 --max-rate를 낮추며, 범위에 명시되지 않았다면 dos, intrusive, brute, exploit 스크립트는 피합니다.
  • 전부 저장. 매번 -oA. 보고서와 재확인은 기억이 아니라 저장된 파일로 합니다.
  • 2단계 흐름. 빠른 -p-로 포트를 찾고, 그 포트에만 -sV -sC. 65535개 포트에 -sV를 돌리는 것보다 트래픽이 훨씬 적습니다.

방어자 관점

위치 흔적 볼 것
Zeek conn.log conn_state = S0 (SYN만, 응답 없음) 또는 REJ (RST 응답) 한 출처가 짧은 시간에 여러 포트/호스트를 건드림
Zeek notice.log Scan::Port_Scan, Scan::Address_Scan 내장 스캔 탐지
방화벽 로그 한 출처의 다수 차단 src_ip별 dest_port 고유 개수
Windows 보안 로그 5156 허용 / 5157 차단 (Filtering Platform) 감사 정책이 켜져 있을 때만
IDS HTTP의 Nmap Scripting Engine User-Agent NSE 웹 스크립트는 식별이 쉬움
index=firewall action=blocked
| bin _time span=5m
| stats dc(dest_port) AS ports dc(dest_ip) AS hosts count BY _time src_ip
| where ports > 50 OR hosts > 20

bin _time span=5m은 이벤트를 5분 구간으로 묶고, stats dc()는 구간별·출처별 고유값 개수를 세며, where는 포트나 호스트를 많이 건드린 출처만 남깁니다.

CPTS 시험 메모

상위 1000개가 아니라 항상 전체 -p- TCP 스캔을 하세요. UDP 상위 포트도 돌리세요 (SNMP 161, DNS 53, TFTP 69가 자주 나옵니다). 모든 스캔의 -oA 결과를 보고서 증거로 보관하세요.