소개
NSE 를 이용한 취약점 스캔 실습에 오신 것을 환영합니다.
Nmap(Network Mapper) 은 네트워크 탐색 및 보안 감사를 위해 널리 사용되는 강력한 오픈 소스 도구입니다. Nmap 의 가장 유연하고 강력한 기능 중 하나는 Nmap Scripting Engine(NSE) 입니다. NSE 를 사용하면 사용자가 간단한 스크립트를 작성하고 공유하여 다양한 네트워크 작업을 자동화할 수 있습니다.
NSE 를 취약점 스캔에 사용하는 것은 매우 강력하지만, 스캔의 성격 자체를 변화시킵니다. 단순히 노출 여부를 관찰하는 것을 넘어, 알려진 취약점을 찾기 위해 능동적으로 조사하는 것이기 때문입니다. 따라서 스캔 범위 제어와 결과에 대한 신중한 해석이 더욱 중요해집니다.
이 실습에서는 Nmap 을 단순한 포트 스캐너에서 능동적 취약점 스캐너로 전환하는 방법을 배웁니다. vuln과 같은 특정 스크립트 카테고리를 활용하여 대상 서비스를 능동적으로 조사할 것입니다. 이 과정을 통해 알려진 CVE(Common Vulnerabilities and Exposures) 와 위험한 서버 설정 오류를 식별할 수 있습니다. 실습을 마칠 때쯤이면 스크립트 데이터베이스를 업데이트하고, 카테고리 기반 스캔을 실행하며, HTTP 및 SMB 와 같은 특정 서비스를 감사하고, 스캔 결과를 분석할 수 있게 될 것입니다.
NSE 스크립트 데이터베이스 업데이트
이 단계에서는 Nmap Scripting Engine(NSE) 데이터베이스를 업데이트하는 방법을 배웁니다.
Nmap 은 /usr/share/nmap/scripts/ 디렉토리에 수백 개의 스크립트가 미리 포함되어 제공됩니다. 이 스크립트들은 default, discovery, safe, intrusive, vuln, exploit 등 목적에 따라 분류되어 있습니다.
취약점 스캔을 실행하기 전에 Nmap 의 내부 스크립트 데이터베이스가 최신 상태인지 확인하는 것이 좋습니다. 이 데이터베이스는 인덱스 역할을 하여 Nmap 이 스크립트를 빠르게 찾고 분류할 수 있게 합니다. 시스템에 새로운 스크립트가 추가되거나 기존 스크립트가 수정되면, Nmap 이 이를 올바르게 사용할 수 있도록 데이터베이스를 업데이트해야 합니다.
이는 보안의 일반적인 원칙과도 일맥상통합니다. 탐지 및 평가 콘텐츠는 빠르게 노후화됩니다. 도구의 성능은 그 도구가 의존하는 규칙, 서명 또는 템플릿의 최신성에 달려 있습니다.
NSE 스크립트 데이터베이스를 업데이트하려면 --script-updatedb 인수를 사용해야 합니다. 이 명령은 Nmap 설치 디렉토리의 시스템 파일을 수정하므로 관리자 권한이 필요합니다.
터미널에서 다음 명령을 실행하세요:
sudo nmap --script-updatedb
데이터베이스가 성공적으로 업데이트되었음을 나타내는 다음과 유사한 출력이 표시될 것입니다:
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 15:25 CST
NSE: Updating rule database.
NSE: Script Database updated successfully.
Nmap done: 0 IP addresses (0 hosts up) scanned in 1.09 seconds
이제 Nmap 이 사용 가능한 스크립트와 카테고리 인덱스를 성공적으로 새로 고쳤습니다. 스캔을 시작할 준비가 되었습니다.
취약점 스캔 실행 (vuln 카테고리)
이 단계에서는 NSE 스크립트의 vuln 카테고리를 사용하여 로컬 머신의 알려진 취약점을 스캔합니다.
vuln 카테고리에는 알려진 취약점을 확인하고 보고하도록 특별히 설계된 스크립트들이 포함되어 있습니다. 단일 스크립트 이름 대신 카테고리를 지정하면, Nmap 은 발견된 열린 포트에 대해 해당 카테고리에 속한 모든 스크립트를 자동으로 실행합니다.
이러한 스크립트의 결과는 최종적인 침해 증거가 아니라 하나의 단서입니다. 긍정적인 결과는 종종 "이 서비스가 알려진 문제와 일치하는 것으로 보임"을 의미하며, 분석가의 검토가 여전히 필요합니다.
가장 정확한 결과를 얻으려면 NSE 스크립트와 버전 탐지를 결합하는 것이 좋습니다. 버전 탐지 (-sV) 는 열린 포트에서 실행 중인 소프트웨어와 버전을 정확히 파악하려고 시도합니다. 많은 취약점 스크립트는 침입적인 프로브를 보내기 전에 대상이 취약할 가능성이 있는지 판단하기 위해 이 버전 정보에 의존합니다.
버전 탐지와 vuln 스크립트 카테고리를 사용하여 로컬 머신 (localhost) 을 스캔합니다.
다음 명령을 실행하세요:
nmap -sV --script vuln -p 80,139,445 localhost
취약점 스크립트는 복잡한 검사를 수행하므로 스캔이 완료되는 데 1~2 분 정도 걸릴 수 있습니다. 출력 결과는 다음과 유사할 것입니다:
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 15:25 CST
Pre-scan script results:
| broadcast-avahi-dos:
| Discovered hosts:
| 224.0.0.251
| After NULL UDP avahi packet DoS (CVE-2011-1002).
|_ Hosts are all up (not vulnerable).
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0014s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.52 ((Ubuntu))
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
|_http-csrf: Couldn't find any CSRF vulnerabilities.
|_http-dombased-xss: Couldn't find any DOM based XSS.
| http-enum:
|_ /server-status/: Potentially interesting folder
|_http-server-header: Apache/2.4.52 (Ubuntu)
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.
| vulners:
| cpe:/a:apache:http_server:2.4.52:
| PACKETSTORM:176334 9.8 https://vulners.com/packetstorm/PACKETSTORM:176334 *EXPLOIT*
| HTTPD:C072933AA965A86DA3E2C9172FFC1569 9.8 https://vulners.com/httpd/HTTPD:C072933AA965A86DA3E2C9172FFC1569
| ... (truncated for brevity)
139/tcp open netbios-ssn Samba smbd 4.6.2
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
| vulners:
| cpe:/a:samba:samba:4.6.2:
| SSV:93139 10.0 https://vulners.com/seebug/SSV:93139 *EXPLOIT*
| SAMBA_IS_KNOWN_PIPENAME 10.0 https://vulners.com/canvas/SAMBA_IS_KNOWN_PIPENAME *EXPLOIT*
| ... (truncated for brevity)
445/tcp open netbios-ssn Samba smbd 4.6.2
|_clamav-exec: ERROR: Script execution failed (use -d to debug)
| vulners:
| cpe:/a:samba:samba:4.6.2:
| SSV:93139 10.0 https://vulners.com/seebug/SSV:93139 *EXPLOIT*
| ... (truncated for brevity)
Host script results:
|_samba-vuln-cve-2012-1182: Could not negotiate a connection:SMB: ERROR: Server returned less data than it was supposed to (one or more fields are missing); aborting [9]
|_smb-vuln-ms10-054: false
|_smb-vuln-ms10-061: Could not negotiate a connection:SMB: ERROR: Server returned less data than it was supposed to (one or more fields are missing); aborting [9]
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 66.86 seconds
이 출력에서 Nmap 은 포트 80 의 Apache 웹 서버와 포트 139, 445 의 Samba 서비스를 발견했습니다. vuln 카테고리의 스크립트들이 이 서비스들에 대해 자동으로 실행되어, 흥미로운 HTTP 디렉토리나 알려진 SMB 취약점과 같은 일반적인 문제들을 확인했습니다.
특정 서비스 감사 (예: SMB/HTTP)
이 단계에서는 전체 카테고리를 실행하는 대신 개별 NSE 스크립트를 사용하여 특정 서비스를 타겟팅하는 방법을 배웁니다.
vuln과 같은 전체 카테고리를 실행하는 것은 소음이 많고 시간이 오래 걸릴 수 있습니다. 보안 평가 중에는 웹 서버나 파일 공유와 같은 특정 서비스를 식별하고, 해당 서비스에 대해서만 타겟팅된 스크립트를 실행하고 싶을 때가 많습니다.
예를 들어, http-enum 스크립트는 인기 있는 웹 애플리케이션과 서버에서 사용하는 디렉토리를 열거합니다. 이는 숨겨진 관리자 패널이나 백업 폴더를 찾는 좋은 방법입니다. 스캔 속도를 높이려면 -p 플래그를 사용하여 Nmap 이 서비스가 실행 중인 특정 포트 (예: HTTP 의 경우 80 번 포트) 만 스캔하도록 지정할 수 있습니다.
로컬 Apache 웹 서버를 감사하려면 다음 명령을 실행하세요:
nmap -p 80 --script http-enum localhost
포트 80 에만 집중된 출력이 표시됩니다:
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 15:27 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000096s latency).
PORT STATE SERVICE
80/tcp open http
| http-enum:
|_ /server-status/: Potentially interesting folder
Nmap done: 1 IP address (1 host up) scanned in 0.62 seconds
마찬가지로 Samba(SMB) 서비스를 타겟팅할 수 있습니다. SMB 는 네트워크 파일 공유 프로토콜로, 역사적으로 공격의 빈번한 대상이었습니다. smb-os-discovery 스크립트를 사용하여 운영 체제 및 SMB 구성에 대한 자세한 정보를 수집할 수 있습니다. SMB 는 일반적으로 139 번과 445 번 포트에서 실행됩니다.
로컬 SMB 서비스를 감사하려면 다음 명령을 실행하세요:
nmap -p 139,445 --script smb-os-discovery localhost
출력 결과는 SMB 서비스에 대한 자세한 정보를 제공합니다:
Starting Nmap 7.80 ( https://nmap.org ) at 2026-03-09 15:27 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000087s latency).
PORT STATE SERVICE
139/tcp open netbios-ssn
445/tcp open microsoft-ds
Nmap done: 1 IP address (1 host up) scanned in 0.21 seconds
특정 포트와 스크립트를 타겟팅함으로써 스캔 시간을 크게 단축하고 매우 집중적이며 실행 가능한 결과를 생성할 수 있습니다.
NSE 출력 분석
마지막 단계에서는 Nmap 스캔 결과를 파일로 저장하고 특정 키워드에 대해 출력을 분석하는 방법을 배웁니다.
취약점 스캔을 수행할 때 출력 결과는 매우 방대할 수 있습니다. 나중에 검토하거나 팀과 공유하거나, 다른 명령줄 도구를 사용하여 파싱할 수 있도록 결과를 파일로 저장하는 것이 중요합니다. Nmap 은 여러 출력 형식을 제공합니다. -oN 플래그는 사람이 읽을 수 있는 일반 텍스트 형식으로 결과를 저장합니다.
로컬 머신에 대해 취약점 스캔을 실행하고 결과를 프로젝트 디렉토리의 vuln_scan.txt라는 파일로 저장합니다.
다음 명령을 실행하세요:
nmap -sV --script vuln -p 80,139,445 localhost -oN ~/project/vuln_scan.txt
스캔이 완료될 때까지 기다리세요. 완료되면 결과가 ~/project/vuln_scan.txt에 안전하게 저장됩니다.
이제 이 파일을 분석할 수 있습니다. 실제 환경에서는 특정 침해 지표나 심각한 취약점을 찾고 있을 수 있습니다. grep 명령을 사용하여 텍스트 파일을 검색할 수 있습니다. 예를 들어, "VULNERABLE"이라는 단어를 검색 (대소문자 구분 없이 -i 플래그 사용) 하여 확인된 문제를 빠르게 찾아낼 수 있습니다.
출력 파일을 검색하려면 다음 명령을 실행하세요:
grep -i "VULNERABLE" ~/project/vuln_scan.txt
|_ Hosts are all up (not vulnerable).
파일이 생성되었고 스캔 데이터가 포함되어 있는지 확인하려면 head 명령을 사용하여 파일의 처음 몇 줄을 볼 수 있습니다:
head -n 10 ~/project/vuln_scan.txt
표준 Nmap 헤더와 스캔 보고서의 시작 부분을 볼 수 있습니다:
## Nmap 7.80 scan initiated Mon Mar 9 15:27:21 2026 as: nmap -sV --script vuln -p 80,139,445 -oN /home/labex/project/vuln_scan.txt localhost
Pre-scan script results:
| broadcast-avahi-dos:
| Discovered hosts:
| 224.0.0.251
| After NULL UDP avahi packet DoS (CVE-2011-1002).
|_ Hosts are all up (not vulnerable).
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000085s latency).
결과를 저장하고 파싱하는 것은 모든 보안 전문가에게 필수적인 기술이며, 이를 통해 방대한 양의 데이터를 효율적으로 관리할 수 있습니다.
요약
축하합니다! NSE 를 이용한 취약점 스캔 실습을 성공적으로 마쳤습니다.
이 실습에서 여러분은 Nmap 을 표준 포트 스캐너에서 능동적 취약점 평가 도구로 격상시키는 방법을 배웠습니다. 먼저 Nmap Scripting Engine 데이터베이스를 업데이트하여 최신 스크립트를 사용할 수 있도록 했습니다. 그런 다음 vuln 카테고리를 활용하여 발견된 서비스의 알려진 취약점을 자동으로 조사했습니다. 또한 HTTP 및 SMB 와 같은 특정 서비스를 개별 스크립트로 타겟팅하여 집중적인 감사를 수행하는 연습을 했습니다. 마지막으로 스캔 결과를 파일로 저장하고 명령줄 도구를 사용하여 효율적으로 분석하는 방법을 익혔습니다.
이러한 기술들은 네트워크 보안 감사 및 취약점 관리의 강력한 기반이 됩니다.



