network

4 분 읽기

이번 글에서는 Nmap에 대한 소개와 자주 사용하는 주요 기능 및 옵션 위주로 설명한다. 자세한 사용법과 더 많은 옵션에 대해서는 다음 글에서 다루도록 한다.

Nmap

소개

Nmap(Network Mapper)는 네트워크 상의 호스트(연결된 기기)와 그 호스트의 포트, 서비스, 운영체제에 대한 정보를 탐색하는 네트워크 스캐닝 툴이다. 이름에서 알 수 있듯, 네트워크 “지도”를 함께 만드는 역할을 한다.

고든 라이온(Gordon Lyon)이 작성한 보안 스캐너로, 쉽고 유연하며, 강력한 기능들이 미리 스크립팅 되어있다. 보안 프로그램들이 그러하듯, 보안을 목적으로 태어났지만, 나쁜 의도를 가진 공격자가 사용할 경우엔 공격 대상을 편리하게 탐색하는 도구로 사용될 수 있다.

오픈소스이며, 네트워크 스캐닝 툴 중에서는 높은 점유율을 가지고 있다. 리눅스, 윈도우, MacOS 등 여러 운영체제에서 사용할 수 있다.

기능과 특징

(1) 기능

  • 호스트 탐지 : 네트워크에 존재하는 호스트 탐색
  • 포트 스캔 : 하나 혹은 그 이상의 대상 호스트에 열려 있는 포트 확인
  • 버전 탐지 : 포트 위에서 동작하는 서비스와 그 버전을 추정
  • 운영체제 탐지 : 호스트의 운영체제(OS) 핑거프린팅
  • 보안 점검 및 침투 테스트 사전 정찰

(2) 특징

  • TCP/IP 기반 다양한 스캔 기법을 지원한다.
  • 방화벽이나 IDS를 우회하는 스캔 옵션을 제공한다.
  • 이해하기 편한 방식으로 결과를 출력한다.

설치

nmap 사이트에서 패키지 다운로드가 가능하다.

https://nmap.org/download.html


기본 사용법

0. 기본 사용법

1
nmap [스캔 유형] [옵션] [대상]
  • 스캔 유형 : 어떤 방식으로 스캔할지
  • 옵션 : 범위(얼마나), 탐지 수준(어디까지), 출력방법(어떻게 남길지) 지정
  • 대상(Target) : IP, IP 범위, 도메인


1. 대상(호스트) 지정

하고 싶은 것 명령어
서버 1대 nmap 10.0.0.10
서버 여러 대 nmap 10.0.0.10 10.0.0.20
특정 범위 nmap 10.0.0.10-50
/24 네트워크 전체 nmap 10.0.0.0/24
도메인 대상 nmap example.com


2. 호스트 탐색

포트를 보기 전에 서버가 존재하는지 찾는 단계.

목적 옵션 이름 예시
살아있는 호스트 탐색 -sn 핑 스캔 nmap -sn 192.168.0.0/24
Ping 체크 생략 -Pn 핑 무시 nmap -Pn 192.168.0.10

(1) -sn (핑 스캔)

포트는 스캔하지 않으며, 대상 호스트가 살아있는지 여부만 탐색

1
nmap -sn 192.168.0.0/24

이 명령어는 개념적으로

1
2
3
4
5
6
7
8
192.168.0.0/24
       ↓
호스트 존재 여부 조사
       ↓
192.168.0.3
192.168.0.15
192.168.0.37
...

(2) -Pn (핑 무시 : 모든 호스트를 살아있는 것으로 간주)

방화벽 정책 또는 핑 허용 여부 설정에 따라 Ping 응답이 없는 경우, 호스트가 죽었다고 판단할 수 있다. 따라서 서버를 Ping이 아닌 직접 확인할 경우에는 이 옵션을 많이 사용한다.

1
nmap -Pn 192.168.0.10


3. 포트 지정

범위 명령어
기본 포트 nmap IP
80번 nmap -p 80 IP
22,80,443 nmap -p 22,80,443 IP
1~1000 nmap -p 1-1000 IP
전체 nmap -p- IP
※ -p- = -p 1-65535
주요 포트만 nmap -F IP

-F 옵션과 -p 옵션은 배치되므로 함께 사용할 수 없음


4. TCP / UDP 스캔 방식

어떤 통신 규칙으로 포트가 열려 있는지 확인할 것인가를 지정하는 옵션이다. TCP/UDP에 대한 설명과, 각각의 특징, 그리고 어떨 때 사용하면 좋은지는 다음 글에서 다룬다.

방식 옵션 특징 권한
SYN Scan -sS 빠르고 대표적인 TCP 스캔 보통 root 필요
Connect Scan -sT 실제 TCP 연결 수행 일반 사용자 가능
UDP Scan -sU UDP 서비스 탐색 보통 root 권장

(1) -sS SYN

1
sudo nmap -sS 192.168.0.10

보통 가장 대표적인 TCP 스캔

(2) -sT Connect

1
nmap -sT 192.168.0.10

TCP 연결을 실제로 수행하기 때문에 root 권한 없이 사용할 때 흔히 사용

(3) -sU UDP

1
sudo nmap -sU -p 53,123,161 192.168.0.10

DNS, NTP, SNMP 등을 확인할 때 쓸 수 있음.


5. 서비스 스캔

방식 옵션 특징
sV Scan -sV 해당 포트에서 어떤 서비스가 실행중인지 확인
1
nmap -sV 192.168.0.10
  • 결과 예시
결과 의미
80/tcp open http nginx nginx 웹 서버 추정
22/tcp open ssh OpenSSH SSH 서버
5432/tcp open postgresql PostgreSQL
3306/tcp open mysql MySQL/MariaDB 계열


6. OS 탐지와 종합 스캔

목적 옵션
OS 추정 -O
OS + 서비스 + NSE 등 -A

(1) -O : OS 탐색

1
sudo nmap -O 192.168.0.10

(2) -A : 종합

1
sudo nmap -A 192.168.0.10

-A는 편하지만 탐색량이 많기 때문에 무조건 사용하는 옵션이라기보다는 상세 분석 단계에서 사용하는 편이 좋음.


7. 속도 조절

옵션 이름 성격
-T0 Paranoid 극도로 느림
-T1 Sneaky 매우 느림
-T2 Polite 느림
-T3 Normal 기본값
-T4 Aggressive 빠름
-T5 Insane 매우 빠름

일반적인 내부 네트워크나 서버 점검에서는 -T4 가 가장 많이 사용됨

1
nmap -Pn -p- -T4 192.168.0.10


8. 결과 해석

상태 의미
open 서비스가 포트를 열고 연결을 기다리는 상태
closed 서버에는 도달했지만 해당 포트에 서비스가 없음
filtered 방화벽 등 때문에 판단할 수 없음 (주의 : 닫혀있다는 뜻이 아님)
unfiltered 접근 가능하지만 open/closed 여부 불확실
open\|filtered open 또는 filtered
closed\|filtered closed 또는 filtered
  • 예시
1
2
3
4
5
6
7
8
PORT     STATE     SERVICE
22/tcp   open      ssh
80/tcp   closed    http
443/tcp  filtered  https

# 22   → SSH 서비스 존재
# 80   → 서버까지는 도달하지만 서비스 없음
# 443  → 방화벽 등에 의해 판단 불가


9. 작업 흐름

1
2
3
4
5
[1. Host Discovery]
        ↓
[2. Port Discovery]
        ↓
[3. Service Analysis]
  • 1단계 : 대상 탐색
1
nmap -sn 192.168.0.0/24
  • 2단계 : 열린 포트 찾기
1
nmap -n -Pn -p- --open -T4 192.168.0.10
1
2
3
4
22/tcp    open
80/tcp    open
3936/tcp  open
5432/tcp  open
  • 3단계 : 발견한 포트만 상세 조사
1
nmap -n -Pn -sV -sC -p 22,80,3936,5432 192.168.0.10


Reference

https://nmap.org/book/man.html https://ko.wikipedia.org/wiki/Nmap

댓글 남기기