Nmap
Nmap은 원래 고든 라이온(Gordon Lyon)이 작성한 보안 스캐너이다. 이것은 컴퓨터와 서비스를 찾을 때 쓰이며, 네트워크 "지도"를 함께 만든다. 다른 간단한 포트 스캐너들처럼, Nmap은 서비스 탐지 프로토콜로 자신을 광고하지 않는 수동적인 서비스들도 찾아낼 수 있다. 게다가 Nmap은 원격 컴퓨터들의 자세한 정보를 알아낼 수 있다. 이 상세 정보에는 운영 체제, 장치 종류, 운영 시간, 서비스에 쓰이는 소프트웨어 제품, 그 제품의 정확한 버전, 방화벽 기술의 존재와 심지어 근거리 네트워크에서 네트워크 카드의 공급자도 포함한다.
Nmap은 리눅스, 윈도, 솔라리스와 맥 OS X를 포함한 BSD, AmigaOS 에서 실행된다. 리눅스가 가장 자주 사용하는 nmap 플랫폼이며, 윈도가 그 두 번째이다.
Feature
- 호스트 탐지 - 네트워크상의 컴퓨터들을 확인한다. 예를 들어 ping 응답이나 특정 포트가 열린 컴퓨터들을 나열한다.
- 포트 스캔 (Port scanner) - 하나 혹은 그 이상의 대상 컴퓨터들에 열린 포트들을 나열한다.
- 버전 탐지 - 응용 프로그램의 이름과 버전 번호를 확인하기 위해 원격 컴퓨터의 네트워크 서비스에 주의를 기울인다.
- 운영 체제 탐지 - 원격으로 운영 체제와 네트워크 장치의 하드웨어 특성을 확인한다.
Options
| Flags | Remarks |
| | "Ping Scan" 옵션. 포트 스캔 없이 호스트가 살아있는지(ping 응답 여부)만 확인합니다. [^0] |
| | 일반적인 TCP 포트스캐닝. |
| | 이른바 'half-open' 스캔으로 추적이 어렵다. |
| | ping 을 이용한 일반적인 스캔. [^1] |
| | UDP 포트 스캐닝. |
| | 대상 호스트에 대한 ping 응답을 요청하지 않음. log 기록과 filtering 을 피할 수 있다. |
| | 일반적이 ICMP ping이 아닌 ACK 패킷으로 ping 을 보내고 RST 패킷으로 응답을 받는다. |
| | 일반적인 ICMP ping 으로 방화벽이나 필터링에 의해 걸러진다. |
| | ping 을 할 때 ICMP ping 과 TCP ping을 동시에 이용한다. |
| | ping 을 할 때 ACK 패킷대신 SYN 패킷을 보내 스캔. |
| | 대상 호스트의 OS 판별. |
| | 대상 호스트의 특정 포트를 스캔하거나, 스캔할 포트의 범위를 지정. (ex: |
| | Decoy 기능으로 대상 호스트에게 스캔을 실행한 호스트의 주소를 속인다. |
| | /etc/services 파일 내에 기술된 포트만 스캔. |
| | TCP 프로세서의 identd 정보를 가져온다. |
| | IP 주소를 DNS 호스트명으로 바꾸지 않는다. 속도가 빠르다. |
| | IP 주소를 DNS 호스트명으로 바꿔서 스캔. 속도가 느리다. |
| | 스캔 결과를 택스트 파일로 저장. |
| | 스캔 대상 호스트의 정보를 지정한 파일에서 읽어서 스캔. |
| | 오픈된 녀석만 출력하라. |
| | 도움말 보기 |
SCAN TECHNIQUES
-sS - TCP SYN
- 스텔스 스캔 또는 Half-open 스캔이라고 불립니다.
- TCP 3-way handshake를 완료하지 않고 SYN 패킷만 보낸 후 응답을 확인합니다
- SYN/ACK 응답이 오면 포트가 열려있다고 판단하고, 즉시 RST 패킷을 보내 연결을 종료합니다
- 연결이 완료되지 않아 많은 시스템에서 로그에 남지 않습니다
- 가장 빠르고 일반적으로 사용되는 스캔 방식입니다
- root 권한이 필요합니다
-sT - Connect()
- 전체 연결 스캔입니다.
- 운영체제의
connect()시스템 콜을 사용하여 완전한 TCP 연결을 시도합니다 - TCP 3-way handshake를 완료합니다.
- root 권한이 없을 때 사용되는 기본 스캔 방식입니다
- 연결이 완료되므로 대상 시스템의 로그에 남을 가능성이 높습니다
- SYN 스캔보다 느리고 더 쉽게 탐지됩니다
-sA - ACK
- 방화벽 규칙 매핑에 사용됩니다.
- ACK 패킷만 전송합니다
- 포트가 열려있는지 닫혀있는지 구분하지 못합니다
- RST 응답이 오면 포트가 필터링되지 않음(unfiltered)을, 무응답이면 필터링됨(filtered)을 의미합니다
- 방화벽이 stateful인지 확인하거나 방화벽 규칙을 파악하는 데 유용합니다
자세한 내용은 Transmission Control Protocol#ACK 전송 시나리오 항목 참조.
-sW - Window
- ACK 스캔의 개선 버전입니다.
- ACK 패킷을 보내고 RST 응답의 TCP window 크기를 확인합니다
- 일부 시스템에서는 열린 포트와 닫힌 포트의 window 크기가 다릅니다
- 이를 통해 포트의 열림/닫힘 상태를 구분할 수 있습니다
- 모든 시스템에서 작동하지는 않습니다
-sM - Maimon scans
- Uriel Maimon이 발견한 기법입니다.
- FIN/ACK 패킷을 전송합니다
- RFC 793에 따르면 포트가 열려있든 닫혀있든 RST로 응답해야 하지만, 일부 BSD 계열 시스템에서는 열린 포트에 대해 패킷을 무시합니다
- 현대의 대부분 시스템에서는 효과가 없습니다
- 특정 구형 BSD 시스템에서만 유용합니다
일반적인 사용 권장사항
- 기본적으로는
-sS(SYN 스캔)을 사용하는 것이 가장 효과적입니다 - root 권한이 없다면
-sT가 자동으로 사용됩니다 - 방화벽 분석이 목적이라면
-sA를 사용합니다
Example
To install nmap, enter
-
nmap -sn 192.168.1.0/24 - Once it is installed, enter
-
nmap -sT localhost - TCP Port Open scan
-
sudo nmap -sS localhost - 참고로,
-sS는 root 권한이 필요하다.
-
sudo nmap --top-ports 30000 -sS git.server.com - 총 30000개의 포트를 검사한다.
-
nmap -p 80 192.168.0.1 - 대상 시스템에서 포트 80을 스캔
-
nmap -p 1-200 192.168.0.1 - 대상 시스템의 포트 1 에서 200 까지 스캔
-
nmap -F 192.168.0.1 - 주로 사용하는 포트 (빠른) 스캔
-
nmap -p– 192.168.0.1 - 1 에서 65535 까지의 모든 포트 스캔
-
nmap -p 22 192.168.0.0/24 - 192.168.0.1 ~ 192.168.0.255 까지 IP 중 SSH(22) 접속 가능한 IP 스캔
-
nmap --open -p 554 10.0.0.1-254 -oG - | grep "/open" - ONVIF#Scan 방법
네트워크에 있는 사용자 확인 방법
다음과 같이 결과 출력된다:
Starting Nmap 7.80 ( https://nmap.org ) at 2023-12-19 16:52 KST
Nmap scan report for ******* (192.168.0.1)
Host is up (0.0068s latency).
Nmap scan report for ******* (192.168.0.222)
Host is up (0.00036s latency).
Nmap scan report for ******* (192.168.0.111)
Host is up (0.0075s latency).
Nmap done: 256 IP addresses (3 hosts up) scanned in 2.93 seconds
네트워크 스캔 추가 예제들
-
sudo nmap -sn -R 192.168.88.0/24 - DNS 해석을 포함한 상세 스캔
-
sudo nmap -A 192.168.88.0/24 - OS 감지를 포함한 공격적 스캔
Troubleshooting
=== Assertion `htn.toclock_running == true' failed. === 다음과 같이 했더니:
다음과 같은 경고가 출력됨:
Starting Nmap 7.80 ( https://nmap.org ) at 2026-01-09 08:04 KST
nmap: Target.cc:503: void Target::stopTimeOutClock(const timeval*): Assertion `htn.toclock_running == true' failed.
Aborted
sudo 를 제거하고 사용하자.