Nmap & Service Scanning
Overview
Nmap (Network Mapper): 호스트 탐지, 포트 스캔, 서비스 식별, 운영체제 탐지 등을 수행하는 핵심 정보 수집 도구
- 목적: 열린 포트(공격 진입점)를 식별하고, 실행 중인 서비스 종류와 버전을 파악하여 취약점 공격(Exploit)을 위한 사전 정보 수집
1. Host Discovery
방화벽 우회 및 살아있는(Live) 호스트 식별을 위한 Ping 스캔
# 기본 Ping 스캔 (ICMP) 및 ARP 스캔(로컬망)
nmap -sn 192.168.1.0/24
nmap -PR 192.168.1.0/24
# Host 탐지 방화벽 우회 (Ping 생략) - 실무 권장
nmap -Pn 192.168.1.10
# TCP SYN / ACK / UDP Ping
nmap -PS 192.168.1.10
nmap -PA 192.168.1.10
nmap -PU 192.168.1.10
2. Port Scanning
기본 스캔 유형
# TCP SYN 스캔 (Stealth Scan) - root 권한 필요, 빠르고 은밀함 (실무 권장)
sudo nmap -sS <target>
# TCP Connect 스캔 - 완전한 Handshake (로그에 남음)
nmap -sT <target>
# UDP 스캔 - 느림, DNS/SNMP 등 확인용
sudo nmap -sU --top-ports 100 <target>
포트 지정
nmap -p 80,443 <target> # 특정 포트 지정
nmap -p 1-1000 <target> # 범위 지정
nmap -p- <target> # 전체 포트(1-65535) 스캔
nmap --top-ports 100 <target> # 상위 N개 포트 스캔
3. Service & OS Detection
열린 포트에서 동작 중인 데몬의 배너 및 버전을 식별하여 공격 벡터 파악
# 서비스 및 버전 스캔
nmap -sV <target>
# 강도 높은 버전 탐지 (0~9)
nmap -sV --version-intensity 9 <target>
# OS 운영체제 탐지
sudo nmap -O <target>
# 공격적인 통합 스캔 (OS, 버전, 기본 스크립트, Traceroute)
sudo nmap -A <target>
4. Nmap Scripting Engine (NSE)
Nmap 내장 스크립트(/usr/share/nmap/scripts/)를 이용한 취약점 스캔 및 자동 정보 수집
# 기본(Default) 범주 스크립트 및 버전 스캔 통합 실행
nmap -sC -sV <target>
# 특정 카테고리 또는 스크립트 지정
nmap --script vuln <target>
nmap --script "http-*" <target>
nmap --script smb-enum-shares,smb-os-discovery <target>
# 로컬 환경 내 스크립트 검색 방법
ls -lh /usr/share/nmap/scripts/ | grep ssh
nmap --script-help "smb*"
5. Advanced Techniques
방화벽 우회 (Firewall Evasion) 및 성능 최적화
# 패킷 단편화 및 MTU 설정
sudo nmap -f <target>
sudo nmap --mtu 24 <target>
# Decoy (미끼) IP 스푸핑
sudo nmap -D RND:10 <target>
sudo nmap -D 192.168.1.5,192.168.1.6,ME <target>
# 패킷 전송 속도 최적화 (T4 권장, 최소 패킷 속도 보장)
nmap -T4 --min-rate 1000 <target>
실전 빠른 스캔 워크플로우
# 1. 대상 전체 포트 빠른 식별 (포트만 찾기)
sudo nmap -p- --min-rate 10000 -Pn -n -T4 <target> -oG initial_ports.txt
# 2. 식별된 포트 대상으로 정밀 스캔 (버전/스크립트)
sudo nmap -p 22,80,443 -sC -sV -Pn <target> -oA detailed_scan
결과 저장 (Output Formats)
# Normal(텍스트), XML, Grepable 형식 모두 저장
nmap -p- <target> -oA scan_results
# Grepable 파일 파싱 예시 (열린 포트만 추출)
cat scan_results.gnmap | grep "open" | cut -d " " -f 2