Nmap 에서 서비스 배너 감지

NmapBeginner
지금 연습하기

소개

이 랩에서는 Nmap 을 사용하여 서비스 배너를 탐지하는 방법을 배우게 됩니다. 주요 목표는 서비스 이름, 버전, 운영 체제 등 대상 시스템에서 실행 중인 네트워크 서비스에 대한 정보를 수집하는 것입니다. 대상 IP 주소에서 배너 스크립트를 실행하고, 특정 포트를 스캔하며, 스캔에 상세 정보를 추가하고, 결과를 저장한 다음 Xfce 터미널에서 배너를 검토하고 비교합니다.

먼저 nmap --script banner 명령을 사용하여 대상의 모든 기본 포트를 스캔하는 것으로 시작합니다. 그런 다음 특정 포트를 스캔하고, 더 자세한 출력을 위해 상세도를 높이며, 결과를 파일에 저장하고, 마지막으로 배너를 분석하여 대상에서 실행 중인 서비스를 파악합니다.

이 단계에서는 Nmap 의 배너 수집 스크립트를 사용하여 대상 시스템에서 실행 중인 서비스를 식별합니다. 배너 수집은 연결이 설정될 때 네트워크 서비스가 전송하는 배너를 검사하여 해당 서비스에 대한 정보를 수집하는 기술입니다. 이 배너에는 서비스 이름, 버전 및 운영 체제와 같은 세부 정보가 포함되는 경우가 많습니다.

먼저 사용할 명령을 이해해 보겠습니다.

nmap --script banner 192.168.1.1

  • nmap: 이것은 명령줄 네트워크 스캐너입니다.
  • --script banner: 이 옵션은 Nmap 에게 열린 포트에서 배너를 수집하도록 설계된 banner 스크립트를 사용하도록 지시합니다.
  • 192.168.1.1: 이것은 대상 IP 주소입니다. 이 주소를 스캔할 권한이 있는 네트워크의 실제 시스템 IP 주소로 바꿔야 합니다. 이 랩 환경에서는 127.0.0.1 (localhost) 를 대상으로 사용합니다. 이렇게 하면 자신의 시스템을 스캔하고 잠재적인 윤리적 또는 법적 문제를 방지할 수 있습니다.

이제 명령을 실행해 보겠습니다. Xfce 터미널을 열고 다음을 입력합니다.

nmap --script banner 127.0.0.1

이 명령은 127.0.0.1의 모든 기본 포트를 스캔하고 열린 서비스에서 배너를 수집하려고 시도합니다.

다음과 유사한 출력을 볼 수 있습니다 (정확한 출력은 시스템에서 실행 중인 서비스에 따라 다릅니다).

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_

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

이 예에서 Nmap 은 포트 22 에서 실행 중인 SSH 서비스를 발견했습니다. 배너는 Ubuntu 에서 실행되는 OpenSSH 버전 8.2p1 임을 보여줍니다.

시스템에서 실행 중인 서비스가 없는 경우 배너 정보가 표시되지 않을 수 있습니다. 걱정하지 마세요. 명령은 여전히 작동하고 있습니다. 이후 단계에서 배너를 캡처할 수 있도록 서비스를 구성할 것입니다.

이전 단계에서는 배너 스크립트를 사용하여 모든 기본 포트를 스캔했습니다. 이제 특정 포트 스캔에 집중하겠습니다. 이는 관심 있는 서비스가 무엇인지 알고 있거나 스캔 시간을 줄이려는 경우 유용합니다.

사용할 명령은 다음과 같습니다.

nmap --script banner -p 22,80 127.0.0.1

명령을 분석해 보겠습니다.

  • nmap: 네트워크 스캐너.
  • --script banner: 배너 수집 스크립트를 지정합니다.
  • -p 22,80: 이 옵션은 Nmap 에게 포트 22 와 80 만 스캔하도록 지시합니다. 포트 22 는 일반적으로 SSH (Secure Shell) 에 사용되고, 포트 80 은 일반적으로 HTTP (웹 서버) 에 사용됩니다.
  • 127.0.0.1: 대상 IP 주소 (localhost).

명령을 실행하기 전에 이러한 포트에서 서비스가 실행 중인지 확인해 보겠습니다. LabEx VM 은 기본적으로 포트 22 에서 SSH 를 실행해야 합니다. 포트 80 에 간단한 웹 서버를 설치하겠습니다.

Xfce 터미널을 열고 다음 명령을 실행하여 Python 을 사용하여 기본 HTTP 서버를 설치합니다.

sudo apt update
sudo apt install -y python3-pip
sudo python3 -m pip install http.server

이제 포트 80 에서 HTTP 서버를 시작합니다. 먼저 ~/project 디렉토리로 이동합니다.

cd ~/project
python3 -m http.server 80

이 터미널 창을 열어두고 HTTP 서버를 실행합니다. 새 Xfce 터미널 창을 열어 Nmap 스캔을 계속합니다.

이제 새 터미널 창에서 Nmap 명령을 실행합니다.

nmap --script banner -p 22,80 127.0.0.1

다음과 유사한 출력을 볼 수 있습니다.

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:05 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_
80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

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

이 출력은 Nmap 이 포트 22 와 80 을 스캔하고, 배너를 수집하고, 서비스 정보를 표시했음을 보여줍니다. SSH 배너와 SimpleHTTP 서버 배너를 볼 수 있습니다.

이 단계를 완료한 후에는 실행 중인 터미널에서 Ctrl+C를 눌러 python http 서버를 중지하는 것을 잊지 마세요.

이 단계에서는 Nmap 스캔에 상세 정보를 추가합니다. 상세 정보는 스캔 프로세스에 대한 더 자세한 정보를 제공하며, 문제 해결 또는 Nmap 이 내부적으로 수행하는 작업을 이해하는 데 도움이 될 수 있습니다.

사용할 명령은 다음과 같습니다.

nmap -v --script banner 127.0.0.1

명령을 분석해 보겠습니다.

  • nmap: 네트워크 스캐너.
  • -v: 이 옵션은 상세 정보 수준을 높입니다. 더 많은 상세 정보를 원하면 -vv를 사용할 수 있습니다.
  • --script banner: 배너 수집 스크립트를 지정합니다.
  • 127.0.0.1: 대상 IP 주소 (localhost).

명령을 실행하기 전에 이전 단계에서 python http 서버가 여전히 실행 중인지 확인합니다. 그렇지 않은 경우 별도의 터미널 창에서 다시 시작합니다.

cd ~/project
python3 -m http.server 80

이제 새 터미널 창에서 상세 정보와 함께 Nmap 명령을 실행합니다.

nmap -v --script banner 127.0.0.1

다음과 유사한 출력을 볼 수 있습니다 (정확한 출력은 시스템에서 실행 중인 서비스에 따라 다릅니다).

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
Initiating Ping Scan at 10:10
Scanning localhost (127.0.0.1) [2 ports]
Completed Ping Scan at 10:10, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 10:10
Completed Parallel DNS resolution of 1 host. at 10:10, 0.00s elapsed
Initiating Connect Scan at 10:10
Scanning localhost (127.0.0.1) [1000 ports]
Discovered open port 22/tcp on 127.0.0.1
Discovered open port 80/tcp on 127.0.0.1
Completed Connect Scan at 10:10, 0.00s elapsed (1000 total ports)
Initiating Service scan at 10:10
Scanning 2 services on localhost (127.0.0.1)
Completed Service scan at 10:10, 0.01s elapsed (2 services total)
Initiating NSE script scan at 10:10
Scanning localhost (127.0.0.1)
Completed NSE script scan at 10:10, 0.09s elapsed
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_
80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds

-v 옵션으로 제공되는 추가 정보를 확인하십시오. Ping Scan, DNS resolution, Connect Scan 과 같은 스캔의 다양한 단계를 볼 수 있습니다. 이는 Nmap 의 작동 방식을 이해하고 문제를 진단하는 데 매우 유용할 수 있습니다.

이 단계를 완료한 후에는 실행 중인 터미널에서 Ctrl+C를 눌러 python http 서버를 중지하는 것을 잊지 마세요.

이 단계에서는 Nmap 스캔 결과를 파일에 저장합니다. 이는 나중에 분석하거나 보고서를 작성하는 데 유용합니다.

사용할 명령은 다음과 같습니다.

nmap --script banner -oN banners.txt 127.0.0.1

명령을 분석해 보겠습니다.

  • nmap: 네트워크 스캐너.
  • --script banner: 배너 수집 스크립트를 지정합니다.
  • -oN banners.txt: 이 옵션은 Nmap 에게 "normal" 형식으로 banners.txt라는 파일에 결과를 저장하도록 지시합니다. 다른 출력 형식도 사용할 수 있습니다 (예: Grepable 출력을 위한 -oG, XML 출력을 위한 -oX). 하지만 -oN은 사람이 읽을 수 있는 형식입니다.
  • 127.0.0.1: 대상 IP 주소 (localhost).

명령을 실행하기 전에 이전 단계에서 python http 서버가 여전히 실행 중인지 확인합니다. 그렇지 않은 경우 별도의 터미널 창에서 다시 시작합니다.

cd ~/project
python3 -m http.server 80

이제 새 터미널 창에서 Nmap 명령을 실행하여 결과를 파일에 저장합니다.

nmap --script banner -oN banners.txt 127.0.0.1

이번에는 스캔 결과가 터미널에 출력되지 않습니다. 대신 Nmap 은 출력을 현재 디렉토리 (~/project) 의 banners.txt 파일에 저장합니다.

파일이 생성되었고 스캔 결과를 포함하는지 확인하려면 cat 명령을 사용할 수 있습니다.

cat banners.txt

터미널에서 다음과 유사한 출력을 볼 수 있습니다.

## Nmap 7.80 scan initiated Fri Oct 27 10:15:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_
80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

## Nmap done at Fri Oct 27 10:15:00 2023 -- 1 IP address (1 host up) scanned in 0.10 seconds

이는 스캔 결과가 banners.txt 파일에 저장되었음을 확인합니다.

이 단계를 완료한 후에는 실행 중인 터미널에서 Ctrl+C를 눌러 python http 서버를 중지하는 것을 잊지 마세요.

Xfce 터미널에서 배너 상세 정보 검토

이 단계에서는 이전 단계에서 banners.txt 파일에 저장한 배너 세부 정보를 검토합니다. Xfce 터미널을 사용하여 파일의 내용을 보고 포함된 정보를 이해합니다.

먼저, ~/project 디렉토리에 banners.txt 파일이 있는지 확인합니다. 이전 단계를 완료하지 않았다면 진행하기 전에 완료하십시오.

banners.txt 파일의 내용을 보려면 터미널 창을 열고 cat 명령을 사용합니다.

cat banners.txt

출력은 파일의 내용을 표시하며, 다음과 유사하게 표시됩니다.

## Nmap 7.80 scan initiated Fri Oct 27 10:20:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000072s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_
80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

## Nmap done at Fri Oct 27 10:20:00 2023 -- 1 IP address (1 host up) scanned in 0.10 seconds

출력을 분석해 보겠습니다.

  • Nmap scan report for localhost (127.0.0.1): 이는 스캔이 localhost (127.0.0.1) 에서 수행되었음을 나타냅니다.
  • Host is up: 이는 대상 호스트에 연결할 수 있음을 확인합니다.
  • PORT STATE SERVICE: 이 섹션은 대상 호스트의 열린 포트에 대한 정보를 제공합니다.
  • 22/tcp open ssh: 이는 포트 22 가 열려 있고 SSH 서비스를 실행 중임을 나타냅니다.
  • | banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5: 이는 SSH 서비스에 대한 배너 정보입니다. SSH 버전과 운영 체제를 보여줍니다.
  • 80/tcp open http: 이는 포트 80 이 열려 있고 HTTP 서비스를 실행 중임을 나타냅니다.
  • | banner: Server: SimpleHTTP/3.10 Python/3.10: 이는 HTTP 서비스에 대한 배너 정보입니다. 서버 소프트웨어 및 버전을 보여줍니다.

배너 세부 정보를 검토하면 대상 호스트에서 실행 중인 서비스에 대한 귀중한 정보를 얻을 수 있습니다. 이 정보는 취약성 분석 또는 잠재적인 보안 위험 식별에 사용할 수 있습니다.

이 단계를 완료한 후에는 실행 중인 터미널에서 Ctrl+C를 눌러 python http 서버를 중지하는 것을 잊지 마세요.

Xfce 터미널에서 포트별 배너 비교

이 단계에서는 서로 다른 포트에서 얻은 배너 정보를 비교합니다. 이를 통해 해당 포트에서 실행 중인 서비스를 식별하고 해당 버전을 이해하는 데 도움이 될 수 있습니다. Xfce 터미널과 grep 명령을 사용하여 banners.txt 파일에서 배너 정보를 추출하고 비교합니다.

먼저, 이전 단계의 Nmap 스캔 결과가 포함된 banners.txt 파일이 ~/project 디렉토리에 있는지 확인합니다.

포트 22 (SSH) 에 대한 배너 정보를 추출하려면 다음 명령을 사용합니다.

grep "22/tcp" banners.txt

그러면 배너를 포함하여 포트 22 에 대한 정보가 포함된 줄이 출력됩니다.

22/tcp open  ssh
| banner: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
|_

마찬가지로, 포트 80 (HTTP) 에 대한 배너 정보를 추출하려면 다음 명령을 사용합니다.

grep "80/tcp" banners.txt

그러면 배너를 포함하여 포트 80 에 대한 정보가 포함된 줄이 출력됩니다.

80/tcp open  http
| banner: Server: SimpleHTTP/3.10 Python/3.10
|_

이제 배너 정보를 비교해 보겠습니다. 다음을 확인할 수 있습니다.

  • 포트 22 는 SSH 를 실행 중이며, 배너는 Ubuntu 에서 OpenSSH 버전 8.2p1 임을 보여줍니다.
  • 포트 80 은 HTTP 를 실행 중이며, 배너는 Python 3.10 으로 구현된 SimpleHTTP 서버임을 보여줍니다.

배너 정보를 비교하여 이러한 포트에서 실행 중인 서비스와 해당 버전을 빠르게 식별할 수 있습니다. 이 정보는 보안 평가 및 취약성 분석에 유용합니다. 예를 들어, SSH 또는 HTTP 서버의 특정 버전을 알면 해당 버전에 관련된 알려진 취약점을 확인할 수 있습니다.

이 간단한 예에서는 두 개의 포트만 비교했습니다. 그러나 이 기술을 확장하여 다양한 포트와 호스트 간의 배너를 비교하여 환경에서 실행 중인 네트워크 서비스에 대한 포괄적인 이해를 얻을 수 있습니다.

이 단계를 완료한 후에는 실행 중인 터미널에서 Ctrl+C를 눌러 python http 서버를 중지하는 것을 잊지 마세요.

요약

이 랩에서는 참가자들이 Nmap 을 사용하여 서비스 배너를 감지하는 방법을 배웁니다. 윤리적 및 법적 문제를 피하기 위해 127.0.0.1을 사용하여 대상 IP 에서 nmap --script banner로 배너 스크립트를 실행하는 것으로 시작합니다. 또한 특정 포트를 스캔하고, 스캔에 상세 정보를 추가하고, 결과를 파일에 저장하는 방법을 배웁니다. 마지막으로 Xfce 터미널에서 배너 세부 정보를 검토하고 비교합니다.