NMAP Part2 - NSE(Nmap Script Engine)을 이용한 취약점 스캐닝

Nmap script 인 NSE는 nmap을 통해 네트워크 스캔을 진행하거나, 취약점 진단을 수행할 때 유용하게 쓰일 수 있는 스크립트입니다. Lua로 작성되어 있으며 nmap을 통해 포트스캔, 네트워크 접근 이외에도 더 넓은 범위의 테스트를 지원합니다. 오늘은 NSE에 대한 이야기를 하려고 합니다.

NSE(Nmap Script Engine)

위에서도 가볍게 설명드렸지만 NSE는 nmap에서 사용되는 script 입니다. lua로 개발되었으며 아래와 같이 5개 카테고리의 script 를 가지고 있습니다.

  • Network discovery
  • More sophisticated and accurate OS version detection
  • Vulnerability detection
  • Backdoor detection
  • Vulnerability exploitation

Update & List

nse script update는 nmap 사용 시 --script-update, --script-updatedb 옵션으로 업데이트를 진행할 수 있습니다.

nmap --script-update
nmap --script-updatedb

# Starting Nmap 6.47 ( http://nmap.org ) at 2016-03-14 12:19 KST
# NSE: Updating rule database.
# NSE: Script Database updated successfully.
# Nmap done: 0 IP addresses (0 hosts up) scanned in 0.51 seconds

위 명령을 수행하면 nmap.org에서 추가된 nse script 를 받아 nmap 디렉토리에 저장하게 되지요. 저장된 nse 파일은 find나 locate 명령으로 찾아볼 수 있습니다.

locate *.nse
# /usr/share/nmap/scripts/acarsd-info.nse
# /usr/share/nmap/scripts/address-info.nse
# /usr/share/nmap/scripts/afp-brute.nse
# /usr/share/nmap/scripts/afp-ls.nse
# /usr/share/nmap/scripts/afp-path-vuln.nse
# /usr/share/nmap/scripts/afp-serverinfo.nse
# /usr/share/nmap/scripts/afp-showmount.nse
# ..snip..

이제 nse를 사용하기 위한 준비 작업은 끝났습니다.

How to use

NSE의 사용은 nmap에서 --script 옵션을 통해 사용이 가능하며 인자값으로 해당 모듈 이름이 들어가게 되면 해당 nse를 사용하여 스캔을 진행합니다.

nmap --script ajp-auth

위와 같이 명령 시 ajp 인증 프로토콜에 대해 스캔을 진행합니다. 한번에 여러가지 스크립트를 사용하기 위해 * 등을 통해 규칙을 지정해줍니다.

간단한 예시로 취약성에 대해 스캔하는 모듈을 찾는다고 하면 아래와 같이 locate 명령을 줄 수 있겠지요.

locate *vul*.nse
# /usr/share/nmap/scripts/afp-path-vuln.nse
# /usr/share/nmap/scripts/ftp-vuln-cve2010-4221.nse
# /usr/share/nmap/scripts/http-huawei-hg5xx-vuln.nse
# /usr/share/nmap/scripts/http-iis-webdav-vuln.nse
# /usr/share/nmap/scripts/http-vmware-path-vuln.nse
# /usr/share/nmap/scripts/http-vuln-cve2009-3960.nse
# ..snip..

또한 nmap에서 스크립트를 사용할때도 동일한 방법으로 가능합니다.

nmap --script "http-*"
nmap --script "ssh*"

Category Scan

위에서는 각각 nse 스크립트를 사용하는 방법에 대해 보았다면 이번에는 좀 더 넓은 범위의 스캔 옵션을 볼까합니다. nse에 지정된 category를 통해서 한번에 여러가지 script에 대해 동작을 진행할 수 있습니다. 대표적으로 default 그룹과 safe 그룹등이 있겠네요.

Default Scan

Default Scan은 타겟 도메인의 전반적인 항목에 대해 스캔을 수행하는 옵션입니다. --script 옵션에 default를 인자값으로 주게되면 테스트를 진행하게 됩니다.

nmap --script=default 127.0.0.1
# Starting Nmap 6.47 ( http://nmap.org ) at 2016-03-14 12:21 KST
# Nmap scan report for 127.0.0.1
# Host is up (0.00096s latency).
# Not shown: 997 filtered ports
# PORT     STATE SERVICE
# 80/tcp   open  http
# |_http-generator: XpressEngine
# |_http-methods: No Allow or Public header in OPTIONS response (status code 302)
# | http-title: MAIN

Safe Scan

Safe Scan은 Safe 카테고리에 있는 항목들로 구성된 NSE 그룹입니다.

nmap --script=safe 127.0.0.1
### ..snip..

Traceroute

nmap --script-trace

More script

Installed script

locate *.nse

Supported from nmap

https://nmap.org/nsedoc/

Reference