콘텐츠로 이동

호스트 탐색 & 포트 스캔

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

요약

어떤 호스트가 살아 있는지(-sn), 그다음 어떤 포트가 응답하는지(-sS, -sT, -sU)를 찾습니다. 핵심은 Nmap이 붙인 상태를 읽고, 그 사이에 있는 네트워크에 대해 그 상태가 무엇을 말해 주는지 아는 것입니다.

호스트 탐색

sudo nmap 10.129.2.0/24 -sn -oA tnet | grep for | cut -d" " -f5
sudo nmap 10.129.2.18 -sn -PE --packet-trace --reason
플래그 의미
-sn 호스트 탐색만, 포트 스캔 생략
-PE ICMP Echo 요청 사용
-PS/-PA/-PU TCP SYN / TCP ACK / UDP 탐색 프로브
-Pn 탐색 생략, 모든 호스트를 살아 있다고 간주 (ICMP가 막혔을 때)
-n DNS 조회 안 함 (빠르고 DNS 로그에 덜 남음)
--disable-arp-ping 같은 세그먼트에서는 기본이 ARP인데, 이를 끄고 ICMP를 강제
--packet-trace 패킷 하나하나 표시
--reason 상태를 붙인 이유 표시 (arp-response, syn-ack 등)

같은 Layer-2 세그먼트에서는 Nmap이 ARP를 우선 쓰며, 호스트 방화벽은 ARP를 막지 못합니다. 출력의 reason: arp-response가 그 신호입니다. 라우터를 넘으면 ICMP echo로 바뀌므로 ICMP를 버리는 호스트는 죽은 것처럼 보입니다. 이때는 -Pn으로 다시 돌립니다.

TTL은 대략적인 OS 힌트입니다. 약 64는 Linux/Unix, 약 128은 Windows, 약 255는 네트워크 장비인 경우가 많습니다.

포트 상태

상태 의미
open 서비스가 연결을 받음 (SYN-ACK)
closed 호스트가 RST로 응답 — 도달은 되지만 listen 중인 것이 없음
filtered 응답이 없거나 ICMP 오류 — 방화벽이 답을 가리고 있음
unfiltered 도달은 되지만 open/closed 구분 불가 (ACK 스캔 전용)
open\|filtered 응답 없음, 열려 있거나 드롭됨 (UDP, FIN/NULL/Xmas)
closed\|filtered closed와 filtered 구분 불가 (idle 스캔 전용)

DROP vs REJECT

방화벽이 조용히 DROP하면 Nmap은 아무것도 받지 못하고 재시도 끝에 filtered로 표시합니다 (느림). REJECT하는 방화벽은 type 3 code 3(port unreachable) 같은 ICMP 오류나 RST를 보내므로 빠르고, 이것도 filtered/closed로 보입니다. --packet-trace --reason으로 구분할 수 있습니다. no-response면 DROP, port-unreach나 reset이면 REJECT입니다. 필터링이 어디에 있고 스캔 속도를 얼마나 낼 수 있는지 알려 줍니다.

스캔 유형

스캔 플래그 동작 비고
SYN ("half-open") -sS SYN → SYN-ACK → RST root일 때 기본. 핸드셰이크를 끝내지 않음
TCP Connect -sT 3-way handshake 완료 root가 아니면 기본. 애플리케이션 로그에 남음
ACK -sA ACK만 전송 방화벽 규칙 파악(filtered vs unfiltered), 열린 포트는 못 찾음
UDP -sU 빈 또는 프로토콜별 데이터그램 ICMP type 3 code 3 = closed, 응답 = open, 무응답 = open\|filtered. 느림
$ sudo nmap 10.129.2.28 -p 80 -sS --packet-trace -Pn -n --disable-arp-ping
SENT (0.0429s) TCP 10.10.14.2:63090 > 10.129.2.28:80 S ttl=56 ...
RCVD (0.0573s) TCP 10.129.2.28:80 > 10.10.14.2:63090 SA ttl=64 ...
PORT   STATE SERVICE
80/tcp open  http

S는 우리가 보낸 SYN, SA는 SYN-ACK이므로 포트가 열려 있습니다. RA가 오면 closed입니다.

UDP는 인내가 필요합니다. 먼저 -sU --top-ports 100을 돌리고, 특정 포트에 -sV를 붙이세요. UDP 서비스는 버전 프로브로만 응답하는 경우가 많습니다.

펜테스터 관점

  • 전체 TCP(-p-)를 먼저, 상위 UDP 포트는 그다음, 백그라운드로 돌립니다.
  • 랩에서는 --min-rate 1000이 괜찮습니다. 고객 운영망에서는 보수적으로, 속도를 합의하고 진행합니다.
  • 계속 filtered인 포트는 "닫힘"이 아닙니다. 메모해 두고 범위가 허용하면 다른 출발지나 경로에서 재시도하세요.

방어자 관점

  • SYN 스캔은 Zeek conn_state에 S0/REJ로 남고 애플리케이션 로그에는 닿지 않으므로, 호스트 로그가 놓치는 것을 방화벽과 네트워크 센서가 잡습니다.
  • Connect 스캔(-sT)은 서비스 로그에 남습니다 (예: SSH의 "connection closed by ... [preauth]", 웹 접근 로그).
  • 한 호스트에서 ICMP type 3이 쏟아지면 UDP 스캔에 대한 응답인 경우가 많습니다.