Programming/OS, Program, Framework Tip

nmap - 포트/IP 스캔 등 네트워크 스캔 도구

awesometic 2018. 5. 24. 14:22
반응형


nmap

Network Mapper 라고도 불리는 nmap은 여러 가지 네트워크 스캔 관련 스크립트를 포함하고 있어 이미 20년 이상 사랑받고 있는 프로그램입니다. 커뮤니티도 크고, 오픈 소스이기 때문에 개발도 활발해요.

네트워크 스캔 툴이라는 점에서, 기본적으로 같은 서브 네트워크 안이라면 어떤 PC에서 어떤 포트가 열려있는지 nmap 프로그램 하나만으로도 알 수 있어요. 그렇기 때문에 수 많은 해커와 보안 전문가들이 좋아하는 툴이기도 합니다. 무려 여러 영화에서도 출현합니다.

하지만 보안 전문가나 해커가 아니라도 리눅스 사용자라면 nmap 툴 사용 방법 정돈 알고 있어야 자기 서버를 관리하기도 쉬울 건 확실합니다. 간단한 사용법을 알아볼게요.


설치

nmap이 설치되어 있지 않다면 설치해줍니다. 데비안 계열 운영체제일 경우 apt를 이용해줍시다.

sudo apt update
sudo apt install nmap

macOS 에선 brew 를 이용해주세요.

brew update
brew install nmap

사용법

nmap은 기본적으로 전송 계층 포매팅이 적용되지 않은 raw 패킷을 사용합니다. Raw 패킷은 각종 프로토콜에 대한 포매팅이 안 된 패킷인데, 보안의 이유도 있고 해서 사용자 공간에선 다룰 수 없어요. 따라서 필요한 기능들은 root 권한으로 사용해야만 합니다.

help 를 때려볼게요.

nmap --help
Nmap 7.60 ( https://nmap.org )
Usage: nmap [Scan Type(s)] [Options] {target specification}
TARGET SPECIFICATION:
  Can pass hostnames, IP addresses, networks, etc.
  Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
  -iL : Input from list of hosts/networks
  -iR : Choose random targets
  --exclude : Exclude hosts/networks
  --excludefile : Exclude list from file
HOST DISCOVERY:
  -sL: List Scan - simply list targets to scan
  -sn: Ping Scan - disable port scan
  -Pn: Treat all hosts as online -- skip host discovery
  -PS/PA/PU/PY[portlist]: TCP SYN/ACK, UDP or SCTP discovery to given ports
  -PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes
  -PO[protocol list]: IP Protocol Ping
  -n/-R: Never do DNS resolution/Always resolve [default: sometimes]
  --dns-servers : Specify custom DNS servers
  --system-dns: Use OS's DNS resolver
  --traceroute: Trace hop path to each host
SCAN TECHNIQUES:
  -sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
  -sU: UDP Scan
  -sN/sF/sX: TCP Null, FIN, and Xmas scans
  --scanflags : Customize TCP scan flags
  -sI : Idle scan
  -sY/sZ: SCTP INIT/COOKIE-ECHO scans
...

... 너무 길어서 잘랐습니다. nmap 소개글을 쓰는 저도 당연히 모든 사용법은 몰라요 :)

간단히, 많이 쓰이는 사용법들 좀 가져와봤습니다. 크게 호스트를 찾는 것과(Host Discovery), 열려있는 포트를 찾는 걸로 나뉩니다(Port Scan). 나무위키를 많이 참고했습니다.

  • -sL
  • 리스트 스캔. 빠른 속도로 목적 네트워크 대역의 살아있는 호스트들을 보여줍니다.

  • -sn
  • 핑 스캔. 목적지 네트워크 대역에 핑을 날려 응답이 있는 호스트만 보여줍니다.

  • -Pn
  • 핑에 대한 응답이 있는 호스트만 살아있다고 판단하는 게 아니라, 해당 호스트가 핑 응답이 없더라도 계속해서 스캔해 살아있는지 확인합니다.

  • -sT
  • 일반적인 TCP 방식을 이용한 포트 스캔입니다. 3 Way Handshake 방식을 사용합니다.

  • -sS
  • 스텔스 TCP 포트 스캔입니다. 마지막 ACK 응답을 보내지 않아 로그가 안 남는다곤 하지만, 실제론 충분히 추적당할 수 있습니다.

  • -sN, -sF, -sX
  • 차례대로 TCP Null, Fin, Xmas 스캔입니다. 스텔스 스캔의 일종이지만 역시 충분히 추적당할 수 있습니다.

  • -sU
  • 일반적인 UDP 방식을 이용한 포트 스캔입니다.

  • -p
  • 포트를 지정하여 해당 포트가 열려있는지만을 스캔합니다.

  • -f
  • 스캔 패킷 차단 방지를 우회할 수 있도록 패킷을 단편화하여 스캔합니다.

  • -S
  • 가짜 IP를 사용합니다.

  • -O
  • 대상 호스트의 운영체제를 알아냅니다.

  • -sV
  • 대상 호스트의 운영체제와 각 포트별 프로그램, 버전을 알아냅니다.

  • -A
  • -sV와 비슷하지만 보다 더 많은 정보를 보여줍니다.

  • -v
  • 검색 결과를 좀 더 상세하게 출력합니다. -vv일 경우 더 상세한 정보를 출력합니다.

  • Examples
  • # 192.168.0.* 중 살아있는 호스트 검색
    nmap -sn 192.168.0.0/24
    
    # 192.168.0.61 의 열려있는 포트 검색
    sudo nmap -sT 192.168.0.61
    
    # 192.168.0.61 의 운영체제, 열려있는 포트 검색을 포함한 상세 정보
    sudo nmap -A 192.168.0.61

이 외에도 DNS, IPv4, IPv6, ICMP, ... 관련 설정으로 엄청나게 상세한 조정을 할 수 있습니다. 대단히 강력한 툴이에요.

다만, 포트 스캔도 해킹 시도로 간주된다고 하니 개인적인 용도 이외에 사용할 땐 항상 주의해주세요.


참고

반응형