ATT&CK: T1595.002 Vulnerability Scanning · Reconnaissance (TA0043)

nmap은 포트 스캐너로 알려져 있지만, NSE(Nmap Scripting Engine) 덕분에 아주 가벼운 취약점 스캐너 역할도 한다. 전용 스캐너(Nuclei, Nessus)만큼 깊진 않지만, 포트 스캔과 함께 1차 분류를 끝낼 수 있다는 게 장점.

1. 가장 흔한 조합

서비스 탐지 + default + vuln 스크립트:

nmap -sV --script "default,vuln" --script-timeout 60s \
     -p 22,80,443,445,3306,3389,8080 \
     -oA scans/nse 10.0.0.5
  • --script "default,vuln": 기본 스크립트 + vuln 카테고리.
  • --script-timeout: NSE가 끝없이 매달리는 걸 끊어낸다. 생략하면 하나의 스크립트가 전체 스캔을 멈춰세울 수 있음.

2. NSE 카테고리 요약

카테고리 쓸모
default (-sC) 안전·범용 정보 수집. HTTP 타이틀, SSL 인증서, SMB OS 등
safe 명시적으로 비파괴. 공격적 변경 없음
vuln 알려진 CVE 체크. False positive 적지만 커버리지는 좁음
exploit 실제 익스플로잇 시도. RoE 확인 후에만
discovery 네트워크/도메인 정보 열거. 꽤 소란스러움
brute 자격증명 brute force. 로그에 폭발적 흔적
malware 악성코드 흔적 체크. 블루팀 쪽

3. 특정 CVE만 보고 싶을 때

전체 vuln 카테고리를 돌리면 느리다. 알려진 CVE에 집중:

# SMB (EternalBlue 등)
nmap -p445 --script "smb-vuln-*" 10.0.0.0/24

# TLS/SSL 취약점
nmap -p443 --script "ssl-* and not brute" 10.0.0.5

# HTTP 흔한 취약점
nmap -p80,443 --script "http-vuln-* or http-sql-injection" 10.0.0.5

와일드카드와 and/or/not 조합이 가능하다.

4. 스크립트 업데이트와 사용자 스크립트

NSE 스크립트는 nmap 설치본에 함께 오지만 업데이트하는 게 좋다:

sudo nmap --script-updatedb

사용자 작성 스크립트는 --script /path/to/custom.nse로 로드. 커뮤니티 저장소(예: scipag/vulscan)를 받아 설치해두면 더 넓게 커버할 수 있다.

5. 결과 해석 주의

  • vuln 카테고리의 “VULNERABLE” 판정도 버전 비교 기반이 많다. 백포트 패치 환경에선 false positive 많음.
  • 실제 익스플로잇 가능 여부는 별도 검증 필요. “VULNERABLE: CVE-2017-0144” 하나로 보고서에 넣지 말 것.
  • exploit 카테고리는 테스트 환경에서만. 상용 시스템에선 서비스 다운 가능.

6. 조합 패턴 — 포트 스캔부터 vuln까지 한 번에

실전에서 자주 쓰는 2단계:

# 1) 전 포트 사전 식별 (서비스 X)
nmap -p- --min-rate 2000 -oG scans/pre.gnmap 10.0.0.5

# 2) 열린 포트만 NSE 포함 상세
ports=$(grep -oE '[0-9]+/open' scans/pre.gnmap | cut -d/ -f1 | sort -un | paste -sd, -)
nmap -sV -sC --script "vuln" -p "$ports" -oA scans/full 10.0.0.5

참고