Nmap을 이용한 취약점 스캔

NmapBeginner
지금 연습하기

소개

이 실습에서는 네트워크 탐색 및 보안 감사를 위한 강력한 오픈 소스 도구인 Nmap(Network Mapper)을 사용하여 네트워크 스캔의 기초를 배웁니다. 기본적인 포트 스캔부터 시작하여 서비스 및 버전 탐지로 나아가고, Nmap 스크립트 엔진(NSE)을 활용하여 취약점 점검을 수행합니다. 마지막으로, 보고를 위해 스캔 결과를 다양한 형식으로 분석하고 저장하는 방법을 배웁니다. 이 실습은 효과적인 네트워크 보안 평가를 위한 Nmap의 핵심 기능을 단계별 실습을 통해 소개합니다.

기본 네트워크 스캔 수행

이 단계에서는 기본적인 스캔을 수행하여 Nmap에 익숙해집니다. 기본 스캔은 대상 머신에서 어떤 포트가 열려 있는지 확인하는 데 사용됩니다. 열린 포트는 웹 서버나 SSH와 같은 서비스가 실행 중이며 연결을 기다리고 있음을 나타냅니다.

실습 환경은 연습을 위해 localhost(사용자의 가상 머신)에서 여러 서비스가 실행되도록 미리 구성되어 있습니다. nmap 도구는 이미 설치되어 있습니다.

먼저 Nmap이 설치되어 있는지 확인하고 버전을 체크합니다. 터미널을 열고 다음 명령어를 실행하세요.

nmap --version

다음과 같이 Nmap 버전을 확인하는 출력이 나타나야 합니다.

Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.3 openssl-1.1.1f libssh2-1.8.0 libz-1.2.11 libpcre-8.39 nmap-libpcap-1.9.1
Compiled without:
Available nsock engines: epoll poll select

이제 localhost를 대상으로 첫 번째 스캔을 수행합니다. 이 명령어는 Nmap에게 로컬 머신에서 가장 일반적으로 열려 있는 포트를 확인하도록 지시합니다.

nmap localhost

출력을 검토하세요. Nmap은 발견된 열린 포트와 해당 포트의 상태 및 관련 서비스를 나열합니다. 출력은 이 실습을 위해 준비된 서비스들을 보여주며 다음과 비슷하게 나타날 것입니다.

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000092s latency).
Not shown: 995 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
2121/tcp open  ccproxy-ftp
2222/tcp open  EtherNetIP-1
3001/tcp open  nessus
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

이 초기 스캔은 실행 중인 서비스의 지도를 제공하며, 이는 모든 네트워크 보안 평가의 첫 번째 단계입니다.

서비스 버전 탐지

이 단계에서는 Nmap을 사용하여 서비스 및 버전 탐지를 수행합니다. 어떤 포트가 열려 있는지 아는 것도 유용하지만, 보안 분석가에게는 해당 포트에서 실행 중인 정확한 소프트웨어와 버전을 아는 것이 훨씬 더 강력한 정보가 됩니다. 오래된 소프트웨어는 취약점의 주요 원인이기 때문입니다.

Nmap에게 열린 포트를 조사하여 상세한 서비스 및 버전 정보를 결정하도록 지시하는 -sV 플래그를 사용합니다.

localhost를 대상으로 버전 탐지 스캔을 실행합니다. 스캔 효율성을 높이기 위해 모든 포트를 스캔하는 대신 이 예제에서 사용된 특정 포트를 대상으로 지정합니다.

nmap -sV -p 22,8080 localhost

전문가 팁: 특정 포트를 대상으로 지정하면 스캔 시간이 획기적으로 단축됩니다. -sV를 사용한 전체 포트 범위 스캔은 몇 분이 걸릴 수 있지만, 이와 같은 타겟팅 방식은 일반적으로 몇 초 안에 완료됩니다.

출력을 1단계의 기본 스캔 결과와 비교해 보세요. 이제 각 포트에서 실행 중인 소프트웨어에 대한 세부 정보를 제공하는 VERSION 열이 추가된 것을 볼 수 있습니다.

출력은 다음과 같이 더 자세하게 나타납니다.

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00011s latency).
Not shown: 995 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
8080/tcp open  http    nginx 1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Nmap done: 1 IP address (1 host up) scanned in 2.15 seconds

이 정보는 매우 중요합니다. 예를 들어, 스캔 결과 알려진 치명적인 취약점이 있는 오래된 버전의 nginx가 발견되었다면, 어디에 수정 작업을 집중해야 할지 정확히 알 수 있습니다.

Nmap 스크립트 엔진(NSE) 사용

이 단계에서는 Nmap의 가장 강력한 기능 중 하나인 Nmap 스크립트 엔진(NSE)을 사용합니다. 이 엔진을 사용하면 스크립트 라이브러리를 활용하여 다양한 네트워크 작업을 자동화할 수 있습니다. 이러한 스크립트는 고급 탐색, 취약점 탐지, 심지어 공격(exploitation)에도 사용될 수 있습니다.

탐색에 안전하고 유용하다고 간주되는 기본 스크립트 세트를 실행하는 -sC 플래그를 사용합니다. 이 실습의 FTP 서비스는 비표준 포트인 2121에서 실행되므로, Nmap이 일치하는 스크립트를 선택하기 전에 서비스를 식별할 수 있도록 -sC와 서비스 탐지(-sV)를 함께 사용합니다.

서비스 탐지와 기본 스크립트가 활성화된 Nmap 스캔을 localhost에 대해 실행합니다. FTP 및 웹 서비스의 스크립트 출력을 확인하면서 스캔 속도를 유지하기 위해 21218080 포트를 대상으로 지정합니다.

nmap -sV -sC -p 2121,8080 localhost

출력을 검토하세요. 각 포트 아래에 들여쓰기된 추가 정보를 볼 수 있습니다. 이것이 바로 NSE 스크립트의 출력입니다. 예를 들어, ftp-anon 스크립트는 포트 2121에서 익명 FTP 로그인이 허용됨을 보고할 수 있고, http-title 스크립트는 포트 8080의 웹 페이지 제목을 가져오며, SSL 스크립트는 인증서 세부 정보를 보고할 수 있습니다.

출력은 다음과 같이 더 상세해집니다.

Starting Nmap 7.80 ( https://nmap.org ) at ...
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000099s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 995 closed ports
PORT     STATE SERVICE VERSION
2121/tcp open  ftp     vsftpd 3.0.5
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
| ftp-syst:
|   STAT:
| FTP server status:
|      Logged in as ftp
|_End of status
8080/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
Service Info: OS: Unix

Nmap done: 1 IP address (1 host up) scanned in 0.62 seconds

보시다시피, 기본 스크립트는 포트 2121에서 익명 FTP 로그인이 허용됨을 발견했고 포트 8080의 웹 페이지 제목을 가져왔습니다. 이는 자동으로 수집된 귀중한 정보입니다.

취약점 스캔 실행

이 단계에서는 NSE 스크립트를 사용하여 취약점을 찾습니다. NSE에는 알려진 보안 결함을 확인하기 위해 특별히 설계된 스크립트 범주가 포함되어 있습니다. vuln 범주의 모든 스크립트를 실행하여 광범위한 취약점 스캔을 수행할 수 있습니다.

길거나 중요한 스캔 결과는 항상 파일로 저장하는 것이 모범 사례입니다. Nmap의 일반 형식으로 출력을 저장하기 위해 -oN 플래그를 사용합니다.

먼저 배운 내용을 결합해 보겠습니다. 서비스 탐지(-sV)를 포함하고 모든 취약점 스크립트(--script vuln)를 실행하는 스캔을 수행합니다. 출력을 vuln_scan.txt라는 파일로 저장합니다.

nmap -sV --script vuln -oN vuln_scan.txt localhost

이 스캔은 각 열린 포트에 대해 많은 스크립트를 실행하므로 몇 분 정도 걸릴 수 있습니다.

스캔이 완료되면 현재 디렉토리(/home/labex/project)에 vuln_scan.txt라는 파일이 생성됩니다. cat 명령어를 사용하여 내용을 확인할 수 있습니다.

cat vuln_scan.txt

출력 파일이 길기 때문에 키워드를 검색하는 것이 더 효율적입니다. grep을 사용하여 취약점을 나타내는 줄을 찾습니다. "VULNERABLE"이라는 용어는 강력한 지표입니다.

grep "VULNERABLE" vuln_scan.txt

발견된 취약점을 보여주는 출력이 나타나야 합니다. 이 실습 환경에서는 Apache의 byterange 필터와 관련된 취약점을 볼 수 있습니다.

|   VULNERABLE:
|     State: VULNERABLE

전체 취약점 세부 정보를 보려면 특정 CVE를 검색하거나 전체 스캔 출력을 확인하면 됩니다. 예를 들어, 포트 8080에서 Apache DoS 취약점(CVE-2011-3192)을 찾을 수 있습니다. 일부 스크립트 오류(예: clamav-exec: ERROR)가 나타날 수 있는데, 이는 정상이며 무시해도 됩니다. 이는 특정 취약점 스크립트가 실습 환경에서 제대로 실행될 수 없을 때 발생합니다.

이 단계는 단순한 탐색에서 타겟팅된 보안 감사로 나아가며 약점을 적극적으로 조사하는 방법을 보여줍니다.

스캔 결과 저장 및 형식화

이 단계에서는 결과를 여러 형식으로 저장하고 사용자 친화적인 HTML 보고서를 만드는 방법을 배웁니다. 결과를 적절하게 문서화하고 보고하는 것은 모든 보안 전문가에게 필수적인 기술입니다. Nmap은 다양한 목적에 적합한 여러 출력 형식을 지원합니다.

먼저 보고서를 정리할 전용 디렉토리를 만듭니다.

mkdir -p ~/project/reports

이제 스캔을 다시 실행하되, 이번에는 일반 텍스트(-oN)와 XML(-oX) 두 가지 형식으로 동시에 저장합니다. XML은 다른 도구로 처리하기에 이상적인 구조화된 형식입니다.

nmap -sV -p 8080 --script vuln -oN ~/project/reports/scan_report.txt -oX ~/project/reports/scan_report.xml localhost

XML 형식은 사람이 읽기에 적합하지 않습니다. Nmap은 XML 파일을 깔끔한 HTML 보고서로 변환하는 xsltproc라는 유틸리티를 제공합니다. 다음 명령어를 실행하여 scan_report.html을 생성합니다.

xsltproc ~/project/reports/scan_report.xml -o ~/project/reports/scan_report.html

모든 보고서 파일이 ~/project/reports 디렉토리에 생성되었는지 확인합니다. ls -l 명령어를 사용하여 파일과 세부 정보를 나열합니다.

ls -l ~/project/reports

세 개의 보고서 파일이 보여야 합니다.

total 40
-rw-rw-r-- 1 labex labex 14276 Aug 28 15:12 scan_report.html
-rw-rw-r-- 1 labex labex  5686 Aug 28 15:11 scan_report.txt
-rw-rw-r-- 1 labex labex 14924 Aug 28 15:11 scan_report.xml

이제 빠른 검토를 위한 일반 텍스트 파일, 기계 처리를 위한 XML 파일, 공유 및 프레젠테이션을 위한 HTML 파일을 갖추게 되었습니다.

요약

이 실습에서는 사이버 보안의 기본 도구인 Nmap에 대한 실무 경험을 쌓았습니다. 네트워크 호스트에서 열린 서비스를 식별하기 위해 기본적인 포트 스캔을 수행하는 것으로 시작했습니다. 그런 다음 특정 소프트웨어와 버전을 식별하기 위한 서비스 버전 탐지(-sV)를 포함한 고급 기술로 나아갔습니다. 또한 기본 스크립트(-sC)와 전체 취약점 스캔(--script vuln)을 실행하여 Nmap 스크립트 엔진(NSE)의 강력함을 탐구했습니다. 마지막으로 스캔 결과를 여러 형식(-oN, -oX)으로 저장하고 분석 및 문서화를 위해 읽기 쉬운 HTML 보고서로 변환하는 전문적인 관행을 배웠습니다. 이러한 기술은 실제 네트워크 보안 평가에서 Nmap을 사용하기 위한 탄탄한 기반이 됩니다.