Nmap 및 스크립팅 엔진으로 네트워크 서비스 탐색

NmapBeginner
지금 연습하기

소개

이 랩에서는 Nmap 네트워크 스캔 도구의 강력한 부분인 Nmap 스크립팅 엔진 (NSE) 에 대해 배우게 됩니다. NSE 는 Nmap 의 기능을 향상시켜 고급 네트워크 검색, 취약점 탐지 및 서비스 열거를 수행할 수 있게 해줍니다.

이 엔진은 현대 네트워크 관리자, 보안 전문가 및 윤리적 해커에게 매우 중요합니다. 그들은 네트워크 토폴로지를 이해하고, 잠재적인 보안 문제를 파악하며, 네트워크 서비스에 대한 자세한 정보를 수집해야 합니다. 이 랩에서는 로컬 네트워크 서비스를 설정하고 Nmap 을 사용하여 이를 검색하고 분석합니다. 랩을 마치면 Nmap 과 스크립팅 엔진을 사용하여 네트워크 서비스를 탐색하고 데이터를 수집하는 기본 사항을 이해하게 될 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 88%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

스캔을 위한 로컬 네트워크 서비스 설정

이 단계에서는 간단한 네트워크 서비스를 생성할 것입니다. 왜 이렇게 할까요? 실제 사이버 보안 환경에서는 네트워크에서 실행 중인 서비스를 찾고 분석해야 하는 경우가 많습니다. 이 간단한 서비스를 생성함으로써 실제 상황과 마찬가지로 Nmap 을 사용하여 나중에 스캔하는 연습을 할 수 있습니다.

먼저, 터미널을 열어야 합니다. 터미널은 컴퓨터와 상호 작용하기 위해 명령을 입력할 수 있는 텍스트 기반 인터페이스입니다. 터미널을 연 후에는 프로젝트 디렉토리에 있는지 확인해야 합니다. 프로젝트 디렉토리는 이 프로젝트와 관련된 모든 파일이 저장되는 폴더와 같습니다. 프로젝트 디렉토리로 이동하려면 터미널에 다음 명령을 입력하십시오.

cd /home/labex/project

다음으로, 간단한 HTML 파일을 생성할 것입니다. HTML 은 HyperText Markup Language 의 약자로, 웹 페이지를 만드는 데 사용됩니다. 이 파일은 인터넷에서 보는 웹 페이지와 마찬가지로 서버에서 호스팅됩니다. 이 파일의 내용은 실제 웹 서버가 사용자에게 제공할 수 있는 내용입니다. 파일을 생성하려면 다음 명령을 사용하십시오.

echo "<h1>Welcome to the hidden treasure chamber</h1>" > treasure.html

이 명령은 두 가지 작업을 수행합니다. 먼저, HTML 제목이 있는 문자열을 생성합니다. 그런 다음, 해당 문자열을 treasure.html이라는 파일로 리디렉션합니다. 파일이 올바르게 생성되었는지 확인하려면 cat 명령을 사용할 수 있습니다. cat 명령은 파일의 내용을 표시하는 데 사용됩니다. 터미널에 다음 명령을 입력하십시오.

cat treasure.html

모든 것이 잘 진행되었다면, 방금 추가한 HTML 내용이 표시되어야 합니다.

<h1>Welcome to the hidden treasure chamber</h1>

이제 간단한 HTTP 서버를 시작할 것입니다. HTTP 는 HyperText Transfer Protocol 의 약자로, 인터넷을 통해 웹 페이지를 전송하는 데 사용되는 프로토콜입니다. Python 의 내장 모듈을 사용하여 이 서버를 시작합니다. 이 서버는 포트 8000 에서 수신 대기합니다. 포트는 네트워크 트래픽이 들어오거나 나갈 수 있는 컴퓨터의 문과 같습니다. 서버는 현재 디렉토리, 즉 이전에 이동했던 프로젝트 디렉토리에서 파일을 제공합니다. 서버를 시작하려면 터미널에 다음 명령을 입력하십시오.

python3 -m http.server 8000

이 명령을 실행한 후 다음과 유사한 출력이 표시되어야 합니다.

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

이 출력은 HTTP 서버가 현재 실행 중이며 포트 8000 에서 연결을 기다리고 있음을 나타냅니다. 이 터미널 창을 열어 두십시오. 닫으면 서버가 실행을 중지하고 나중에 Nmap 으로 스캔할 수 없습니다.

Nmap 을 이용한 네트워크 서비스 탐지

이제 네트워크 서비스를 성공적으로 설정했으므로 Nmap 을 사용하여 이를 검색하고 분석할 차례입니다. Nmap 은 Network Mapper 의 약자로, 잘 알려진 강력한 오픈 소스 도구입니다. 네트워크 검색 (네트워크에서 사용 가능한 장치 및 서비스를 찾는 것을 의미) 및 보안 감사 (잠재적인 보안 위험 식별에 도움) 에 널리 사용됩니다.

먼저, 새 터미널 창을 엽니다. HTTP 서버가 실행 중이므로 이전 터미널 창을 열어 두십시오. 새 터미널을 연 후에는 프로젝트 디렉토리로 이동해야 합니다. 이 프로젝트와 관련된 모든 명령이 이 디렉토리에서 실행되므로 중요합니다. 다음 명령을 사용하여 디렉토리를 변경합니다.

cd /home/labex/project

기본 포트 스캔부터 시작해 보겠습니다. 포트 스캔은 장치에서 어떤 포트가 열려 있고 서비스를 실행 중인지 확인하는 데 사용되는 기술입니다. 포트는 네트워크 트래픽이 장치로 들어오고 나가는 문과 같습니다. 이 경우, 현재 작업 중인 머신을 나타내는 localhost 의 포트 8000 을 스캔합니다. 다음 명령을 실행합니다.

nmap -p 8000 localhost

이 명령은 Nmap 에게 로컬 머신의 포트 8000 을 구체적으로 스캔하도록 지시합니다. 명령을 실행한 후 다음과 유사한 출력을 볼 수 있습니다.

Starting Nmap 7.80 ( https://nmap.org ) at 2023-XX-XX XX:XX XXX
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000016s latency).

PORT     STATE SERVICE
8000/tcp open  http-alt

Nmap done: 1 IP address (1 host up) scanned in X.XX seconds

출력은 포트 8000 이 열려 있음을 나타내며, 이는 해당 포트에서 서비스가 실행 중임을 의미합니다. "http-alt"는 Nmap 이 대체 HTTP 서비스를 식별하는 기본 방법입니다.

다음으로, 이 서비스에 대한 더 자세한 정보를 수집하려고 합니다. Nmap 과 함께 -sV 플래그를 사용합니다. 이 플래그는 Nmap 에게 실행 중인 서비스의 버전을 확인하도록 지시합니다. 서비스 버전을 아는 것은 보안 목적으로 매우 중요할 수 있습니다. 특정 버전과 관련된 알려진 취약점이 있는지 식별하는 데 도움이 되기 때문입니다. 다음 명령을 실행합니다.

sudo nmap -sV -p 8000 localhost > /home/labex/project/nmap_output_service_version.txt

이 명령은 포트 8000 에서 버전 감지 스캔을 수행합니다. sudo는 일부 Nmap 작업에 필요할 수 있는 관리자 권한으로 명령을 실행하는 데 사용됩니다. > 기호는 명령의 출력을 nmap_output_service_version.txt라는 파일로 리디렉션합니다. 이렇게 하면 나중에 분석할 수 있도록 결과를 저장할 수 있습니다.

결과를 보려면 다음 명령을 사용하십시오.

cat /home/labex/project/nmap_output_service_version.txt

가능한 소프트웨어 버전을 포함하여 HTTP 서비스에 대한 더 자세한 정보를 볼 수 있습니다. 출력은 다음과 같을 수 있습니다.

Starting Nmap 7.80 ( https://nmap.org ) at 2023-XX-XX XX:XX XXX
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000016s latency).

PORT     STATE SERVICE VERSION
8000/tcp open  http    Python http.server 3.10.X (Python 3.10.X)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in X.XX seconds

이 출력은 서비스가 Python 으로 구동되는 HTTP 서버임을 확인하며, 이는 이전 단계에서 설정한 내용과 일치합니다.

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

Nmap Scripting Engine (NSE) 은 Lua 스크립트를 사용하여 Nmap 의 기능을 확장할 수 있는 강력한 도구입니다. Lua 는 가벼운 프로그래밍 언어이며, 이러한 스크립트는 광범위한 작업을 수행할 수 있습니다. 예를 들어, 네트워크 장치에서 어떤 서비스가 실행 중인지 더 정확하게 식별하는 고급 서비스 감지에 도움이 될 수 있습니다. 또한 시스템의 보안 취약점을 찾는 데 중요한 취약점 스캔에도 사용할 수 있습니다.

HTTP 서버에 대한 더 많은 정보를 수집하기 위해 NSE 를 사용해 보겠습니다. NSE 스크립트는 다양한 범주로 그룹화됩니다. 이러한 범주에는 일반적으로 사용되고 안전한 스크립트가 포함된 "default", 네트워크 서비스를 찾는 "discovery", 대상 시스템에 해를 끼치지 않는 "safe", 취약점 스캔에 사용되는 "vuln"이 있습니다.

먼저, 어떤 HTTP 관련 스크립트를 사용할 수 있는지 확인하고 싶습니다. 이를 위해 다음 명령을 사용합니다.

ls /usr/share/nmap/scripts/http*

이 명령은 /usr/share/nmap/scripts/ 디렉토리에서 http로 시작하는 모든 NSE 스크립트를 나열합니다. 이 명령을 실행하면 HTTP 서비스와 상호 작용하도록 설계된 스크립트 목록이 표시됩니다. 이러한 스크립트는 웹 페이지 제목 가져오기와 같은 간단한 정보 수집부터 HTTP 서비스의 취약점을 스캔하는 것과 같은 더 복잡한 작업까지 다양한 기능을 수행할 수 있습니다.

이제 http-title 스크립트를 사용하여 웹 페이지에서 제목을 추출해 보겠습니다. http-title 스크립트는 HTTP 서비스를 살펴보고 제공하는 웹 페이지의 제목을 찾는 방식으로 설계되었습니다. 이 스크립트를 실행하는 명령은 다음과 같습니다.

sudo nmap --script=http-title -p 8000 localhost > /home/labex/project/nmap_script_output.txt

이 명령에서 sudo는 일부 Nmap 작업에 필요할 수 있으므로 관리자 권한으로 명령을 실행하는 데 사용됩니다. nmap은 기본 명령이고, --script=http-title은 Nmap 에게 http-title 스크립트를 사용하도록 지시합니다. -p 8000은 HTTP 서버가 실행 중인 포트 8000 을 대상으로 지정함을 지정합니다. localhost는 대상이며, 이는 자체 머신에서 스캔을 실행하고 있음을 의미합니다. > 기호는 명령의 출력을 /home/labex/project/nmap_script_output.txt 파일로 리디렉션합니다.

명령의 출력을 확인해 보겠습니다. 다음 명령을 사용하여 이 작업을 수행할 수 있습니다.

cat /home/labex/project/nmap_script_output.txt

cat 명령은 파일의 내용을 표시하는 데 사용됩니다. 이 명령을 실행하면 웹 페이지 제목에 대한 정보가 포함된 출력이 표시됩니다. 출력은 다음과 같을 수 있습니다.

Starting Nmap 7.80 ( https://nmap.org ) at 2023-XX-XX XX:XX XXX
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000040s latency).

PORT     STATE SERVICE
8000/tcp open  http-alt
|_http-title: Directory listing for /

Nmap done: 1 IP address (1 host up) scanned in X.XX seconds

이제 여러 스크립트를 사용하여 더 포괄적인 스캔을 시도해 보겠습니다. "default" 범주에는 대상에 대한 유용한 정보를 제공하는 안전한 스크립트가 포함되어 있습니다. 포트 8000 에서 HTTP 서버에 대해 "default" 범주의 모든 스크립트를 실행하려면 다음 명령을 사용합니다.

sudo nmap --script=default -p 8000 localhost > /home/labex/project/nmap_default_scripts.txt

이 명령은 이전 명령과 유사하지만 단일 스크립트를 지정하는 대신 Nmap 에게 "default" 범주의 모든 스크립트를 실행하도록 지시합니다.

이 스캔의 결과를 살펴보겠습니다. cat 명령을 다시 사용하여 이 작업을 수행할 수 있습니다.

cat /home/labex/project/nmap_default_scripts.txt

출력에는 기본적으로 실행되는 다양한 NSE 스크립트에서 수집한 HTTP 서버에 대한 더 자세한 정보가 포함됩니다.

마지막으로, 특정 스크립트에 대해 자세히 알아보려면 스크립트 도움말 기능을 살펴보겠습니다. http-title 스크립트에 대해 자세히 알고 싶다면 다음 명령을 사용할 수 있습니다.

nmap --script-help=http-title

이 명령은 http-title 스크립트에 대한 문서를 표시합니다. 문서에는 스크립트의 목적, 사용 방법 및 출력 형식이 포함되어 있습니다. 특정 작업에 NSE 를 사용할 때는 스크립트 문서를 이해하는 것이 필수적입니다. 스크립트가 수행하는 작업과 이를 올바르게 사용하는 방법을 알 수 있기 때문입니다.

요약

이 랩에서는 네트워크 서비스 검색 및 분석을 위해 Nmap Scripting Engine (NSE) 을 사용하는 방법을 배웠습니다. 먼저 로컬 HTTP 서버를 설정한 다음 다양한 Nmap 명령을 사용하여 이 서비스에 대한 정보를 스캔하고 수집했습니다.

테스트를 위한 기본 네트워크 서비스 설정, Nmap 을 사용하여 열린 포트 및 실행 중인 서비스 찾기, -sV 플래그를 사용한 버전 감지 수행, NSE 스크립트를 활용하여 자세한 서비스 정보 얻기, Nmap 스캔 결과를 해석하여 서비스 특성 이해와 같은 기술을 습득했습니다. 이러한 기술은 네트워크 관리자, 보안 전문가 및 윤리적 해커에게 필수적입니다. 사이버 보안에서 발전함에 따라 Nmap 과 Scripting Engine 은 네트워크 검색 및 보안 평가에 유용할 것입니다.