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
참고
- NSE 공식 문서
- NSE 스크립트 카테고리
- MITRE ATT&CK — T1595.002