Nmap¶
하는 일
Nmap은 만든 패킷을 보내고, 돌아온 응답(또는 무응답)을 포트 상태와 서비스 정체로 분류합니다. 출력은 전부 "상대가 어떻게 답했는가"로부터의 추론이므로, 중간에 방화벽이 있으면 같은 출력도 의미가 달라질 수 있습니다.
이 섹션의 페이지¶
- 호스트 탐색 & 포트 스캔 — ARP/ICMP 탐색, 6가지 포트 상태, SYN/Connect/ACK/UDP 스캔, DROP vs REJECT.
- 서비스 열거 & NSE —
-sV, 배너, 스크립트 카테고리,-sC,-A,vuln. - 출력 & 성능 —
-oA, XML→HTML, 타이밍 템플릿, 속도 제한.
치트시트¶
| 목표 | 명령 |
|---|---|
| 서브넷의 살아 있는 호스트 (포트 스캔 없이) | 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 결과를 보고서 증거로 보관하세요.