Nmap 으로 서비스 및 버전 탐지

NmapBeginner
지금 연습하기

소개

이 랩에서는 Nmap 을 사용하여 서비스와 해당 버전을 탐지하는 방법을 배우게 됩니다. 이 랩은 로컬 호스트에서 기본적인 서비스 탐지, 스캔 강도 조정, 특정 포트에서 서비스 탐지, 전체 탐지 수행, Xfce 터미널에서 출력 분석, 그리고 결과를 텍스트 파일로 저장하는 내용을 다룹니다. nmap -sV 127.0.0.1nmap -sV -oN services.txt 192.168.1.1과 같은 명령을 실행하여 Nmap 의 서비스 버전 탐지 기능에 대한 실질적인 경험을 쌓을 것입니다.

nmap -sV 127.0.0.1 로 서비스 탐지 실행

이 단계에서는 Nmap 을 사용하여 기본적인 서비스 탐지 스캔을 수행합니다. 서비스 탐지는 대상 시스템의 열린 포트에서 실행 중인 애플리케이션과 버전을 식별하는 데 도움이 됩니다. 이 정보는 취약점 평가 및 침투 테스트에 매우 중요합니다.

nmap -sV 127.0.0.1 명령은 Nmap 에게 로컬 호스트 (127.0.0.1) 에서 서비스 버전 탐지 (-sV) 를 수행하도록 지시합니다. 로컬 호스트는 자신의 머신입니다.

명령을 실행해 보겠습니다.

  1. Xfce 터미널을 엽니다.

  2. 다음 명령을 입력하고 Enter 키를 누릅니다.

nmap -sV 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.000073s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http    Apache httpd 2.4.52 ((Ubuntu))
111/tcp  open  rpcbind 2-4 (RPC #100000)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

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

설명:

  • Starting Nmap...: 사용 중인 Nmap 버전을 나타냅니다.
  • Nmap scan report for localhost (127.0.0.1): 스캔 대상를 보여줍니다.
  • Host is up: 대상에 연결할 수 있음을 확인합니다.
  • Not shown: 997 closed ports: 997 개의 포트가 닫혀 있고 표시되지 않았음을 나타냅니다. Nmap 은 기본적으로 열린 포트, 필터링된 포트 또는 필터링되지 않은 포트만 표시합니다.
  • PORT STATE SERVICE VERSION: 이 섹션은 열린 포트, 해당 상태 (open), 포트에서 실행 중인 서비스 및 서비스 버전을 표시합니다. 예를 들어, 포트 22 는 열려 있으며 OpenSSH 버전 8.9p1 을 실행 중입니다. 포트 80 은 열려 있으며 Apache httpd 버전 2.4.52 를 실행 중입니다.
  • Service Info: 운영 체제에 대한 추가 정보를 제공합니다.
  • Nmap done: 스캔이 완료되었음을 나타내며 소요 시간을 보여줍니다.

이 간단한 스캔은 머신에서 실행 중인 서비스에 대한 귀중한 정보를 제공합니다. 다음 단계에서는 서비스 탐지를 위한 더 고급 옵션을 살펴보겠습니다.

nmap -sV --version-intensity 7 192.168.1.1 로 강도 조절

이 단계에서는 Nmap 의 서비스 버전 탐지 강도를 조정하는 방법을 배우게 됩니다. --version-intensity 옵션을 사용하면 Nmap 이 서비스 정보를 얼마나 적극적으로 프로브할지 제어할 수 있습니다. 강도 수준이 높을수록 Nmap 은 더 많은 프로브를 시도하여 잠재적으로 더 정확한 결과를 얻을 수 있지만 시간이 더 오래 걸립니다.

--version-intensity 옵션은 0 에서 9 까지의 값을 사용하며, 0 은 가장 가볍고 9 는 가장 적극적입니다. 기본 강도는 7 입니다.

중요: 진행하기 전에, 192.168.1.1을 스캔하는 것은 LabEx VM 환경에서 직접 작동하지 않을 수 있습니다. 이는 내부 네트워크 주소일 가능성이 높기 때문입니다. 데모 목적으로, 대신 127.0.0.1 (로컬 호스트) 을 사용합니다. 실제 시나리오에서는 이를 실제 대상 IP 주소로 대체합니다.

강도 수준 7 로 명령을 실행해 보겠습니다.

  1. Xfce 터미널을 엽니다.

  2. 다음 명령을 입력하고 Enter 키를 누릅니다.

nmap -sV --version-intensity 7 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.000073s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http    Apache httpd 2.4.52 ((Ubuntu))
111/tcp  open  rpcbind 2-4 (RPC #100000)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

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

이제 2 와 같이 더 낮은 강도 수준을 시도해 보겠습니다.

nmap -sV --version-intensity 2 127.0.0.1

출력을 관찰하십시오. 스캔이 더 빨리 완료되지만 버전 정보가 덜 상세하거나 정확할 수 있습니다.

설명:

  • nmap -sV --version-intensity 7 127.0.0.1: 로컬 호스트에서 강도 수준 7 로 서비스 버전 탐지를 수행합니다.
  • nmap -sV --version-intensity 2 127.0.0.1: 로컬 호스트에서 강도 수준 2 로 서비스 버전 탐지를 수행합니다.

--version-intensity 옵션을 조정하여 스캔 속도와 정확성 사이의 균형을 미세 조정할 수 있습니다. 시간이 중요한 상황에서는 낮은 강도 수준이 더 적합할 수 있습니다. 더 철저한 평가를 위해서는 더 높은 강도 수준이 권장됩니다.

nmap -sV -p 80 192.168.1.1 로 특정 포트 탐지

이 단계에서는 특정 포트에 대한 서비스 탐지 스캔에 집중합니다. 이는 이미 관심 있는 포트를 알고 있거나, 특정 서비스만 대상으로 하여 스캔 시간을 줄이려는 경우에 유용합니다.

Nmap 의 -p 옵션을 사용하면 스캔하려는 포트를 지정할 수 있습니다. 이 경우, HTTP (웹) 서비스에 일반적으로 사용되는 포트 80 을 스캔합니다.

중요: 이전 단계와 마찬가지로, 192.168.1.1을 스캔하는 것은 LabEx VM 환경에서 직접 작동하지 않을 수 있습니다. 대신 127.0.0.1 (로컬 호스트) 를 사용합니다. 실제 시나리오에서는 이를 실제 대상 IP 주소로 대체해야 합니다.

명령을 실행해 보겠습니다.

  1. Xfce 터미널을 엽니다.

  2. 다음 명령을 입력하고 Enter 키를 누릅니다.

nmap -sV -p 80 127.0.0.1

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

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000073s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.52 ((Ubuntu))

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

설명:

  • nmap -sV -p 80 127.0.0.1: 로컬 호스트 (127.0.0.1) 의 포트 80(-p 80) 에서 서비스 버전 탐지 (-sV) 를 수행합니다.
  • 출력은 포트 80 이 열려 있고 Apache httpd 버전 2.4.52 를 실행 중임을 보여줍니다.
  • 단일 포트만 스캔하므로 스캔 시간이 이전 스캔에 비해 상당히 짧다는 것을 알 수 있습니다.

-p 옵션을 사용하여 포트 범위를 지정할 수도 있습니다. 예를 들어, 포트 80, 443 및 8080 을 스캔하려면 다음 명령을 사용합니다.

nmap -sV -p 80,443,8080 127.0.0.1

이를 통해 단일 스캔에서 여러 특정 포트를 대상으로 지정할 수 있습니다.

nmap -sV --version-all 127.0.0.1 로 전체 탐지 사용

이 단계에서는 Nmap 의 --version-all 옵션을 사용하여 가능한 가장 포괄적인 서비스 버전 탐지를 수행합니다. 이 옵션은 Nmap 에게 각 열린 포트에 대해 모든 버전 탐지 프로브를 시도하도록 지시합니다. 이는 가장 적극적인 설정이며 가장 정확한 결과를 제공할 수 있지만 완료하는 데 가장 오랜 시간이 걸립니다.

명령을 실행해 보겠습니다.

  1. Xfce 터미널을 엽니다.

  2. 다음 명령을 입력하고 Enter 키를 누릅니다.

nmap -sV --version-all 127.0.0.1

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

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000073s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http    Apache httpd 2.4.52 ((Ubuntu))
111/tcp  open  rpcbind 2-4 (RPC #100000)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

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

설명:

  • nmap -sV --version-all 127.0.0.1: 로컬 호스트 (127.0.0.1) 에서 --version-all 옵션을 사용하여 서비스 버전 탐지 (-sV) 를 수행합니다.
  • 출력은 열린 포트와 탐지된 서비스 버전을 보여줍니다.
  • Nmap 이 가능한 모든 프로브를 시도하므로 스캔 시간이 이전 스캔에 비해 더 길다는 것을 알 수 있습니다.

중요 고려 사항:

  • --version-all을 사용하면 스캔 시간이 크게 증가할 수 있습니다.
  • 경우에 따라 기본 강도 수준보다 훨씬 더 정확한 결과를 제공하지 못할 수 있습니다.
  • 이러한 적극적인 스캔은 더 많은 트래픽을 생성할 수 있으므로 대상 시스템에 미치는 잠재적 영향을 염두에 두십시오.

이 옵션은 가능한 가장 정확한 서비스 버전 정보가 필요하고 더 긴 스캔 시간을 기꺼이 감수할 때 가장 유용합니다.

Xfce 터미널에서 출력 분석

이 단계에서는 Xfce 터미널에서 직접 Nmap 스캔의 출력을 분석하는 방법을 배웁니다. 출력을 이해하는 것은 잠재적인 취약점을 식별하고 대상 시스템에 대한 통찰력을 얻는 데 매우 중요합니다.

예를 들어, 이전 Nmap 명령 중 하나를 이미 실행했다고 가정해 보겠습니다.

nmap -sV 127.0.0.1

출력은 터미널에 직접 표시됩니다. 출력의 주요 요소를 분석해 보겠습니다.

  • Starting Nmap...: 이 줄은 Nmap 버전과 스캔이 시작된 시간을 나타냅니다.
  • Nmap scan report for...: 이 줄은 대상 IP 주소 또는 호스트 이름을 보여줍니다.
  • Host is up...: 이는 대상 호스트에 연결할 수 있는지 여부를 나타냅니다.
  • PORT STATE SERVICE VERSION: 이는 스캔 결과를 포함하는 주요 테이블입니다.
    • PORT: 포트 번호.
    • STATE: 포트의 상태 (예: open, closed, filtered).
    • SERVICE: 포트에서 실행 중인 감지된 서비스 (예: http, ssh, smtp).
    • VERSION: 감지된 서비스의 버전 (예: Apache httpd 2.4.52, OpenSSH 8.9p1).
  • Service detection performed...: 이 줄은 서비스 버전 탐지가 수행되었음을 나타냅니다.
  • Nmap done...: 이 줄은 스캔 기간과 스캔된 호스트 수를 보여줍니다.

출력 분석:

  1. Open Ports (열린 포트): 열린 포트를 식별합니다. 이는 연결을 적극적으로 수신 대기하고 공격자의 잠재적 진입점인 포트입니다.
  2. Services (서비스): 열린 포트에서 실행 중인 서비스를 결정합니다. 서비스를 알면 해당 서비스와 관련된 잠재적 취약점을 조사할 수 있습니다.
  3. Versions (버전): 서비스의 버전을 식별합니다. 이전 버전의 소프트웨어에는 종종 악용될 수 있는 알려진 취약점이 있습니다.

예시:

출력에 포트 22 가 열려 있고 OpenSSH 7.6p1을 실행 중인 것으로 표시되면 해당 특정 버전의 OpenSSH 에 대한 알려진 취약점을 조사할 수 있습니다.

grep을 사용하여 출력 필터링:

grep 명령을 사용하여 Nmap 출력을 필터링하고 특정 정보에 집중할 수 있습니다. 예를 들어, "open"이라는 단어가 포함된 모든 줄을 찾으려면 Nmap 출력을 grep으로 파이프할 수 있습니다.

먼저 nmap 명령을 다시 실행합니다.

nmap -sV 127.0.0.1

그런 다음 출력을 grep 으로 파이프합니다. 이전 명령의 출력은 이미 터미널에 있으므로 직접 파이프할 수 없습니다. 그러나 grep을 사용하여 터미널의 기록에서 명령의 출력을 검색할 수 있습니다.

history | grep "nmap -sV 127.0.0.1" | tail -n 1 | xargs -L 1 bash -c 'eval $(echo $1 | sed "s/^[ ]*[0-9]*[ ]*//")'

이 명령은 먼저 기록에서 nmap 명령을 포함하는 줄을 찾은 다음 명령 자체를 추출하고 마지막으로 실행합니다. 그런 다음 nmap 명령의 출력이 터미널에 표시됩니다.

이제 grep을 사용하여 출력을 필터링해 보겠습니다. 이전 명령의 출력을 직접 파이프할 수 없으므로 nmap 명령을 다시 실행하고 출력을 grep으로 파이프해야 합니다.

nmap -sV 127.0.0.1 | grep "open"

이렇게 하면 "open"이라는 단어가 포함된 줄만 표시되어 열린 포트를 쉽게 식별할 수 있습니다.

터미널에서 출력을 분석하는 것은 네트워크 관리자 및 보안 전문가에게 기본적인 기술입니다. 이를 통해 시스템의 보안 상태를 신속하게 평가하고 잠재적인 취약점을 식별할 수 있습니다.

nmap -sV -oN services.txt 192.168.1.1 로 결과 저장

이 단계에서는 Nmap 스캔 결과를 나중에 분석하거나 보고하기 위해 파일에 저장하는 방법을 배웁니다. Nmap 은 여러 출력 형식을 제공하며, 이 예제에서는 "normal" 출력 형식 (-oN) 을 사용합니다.

  1. Xfce 터미널을 엽니다.

  2. 다음 명령을 입력하고 Enter 키를 누릅니다.

nmap -sV -oN services.txt 192.168.1.1

이 명령은 대상 IP 주소 192.168.1.1에서 서비스 버전 탐지 스캔 (-sV) 을 수행하고 "normal" 형식 (-oN) 으로 출력을 현재 디렉토리 (~/project) 의 services.txt 파일에 저장합니다.

설명:

  • nmap -sV: 서비스 버전 탐지를 수행합니다.
  • -oN services.txt: 출력을 "normal" 형식으로 services.txt라는 파일에 저장하도록 지정합니다.
  • 192.168.1.1: 대상 IP 주소입니다. 참고: 192.168.1.1 에 호스트가 없는 경우 대신 127.0.0.1을 사용할 수 있습니다.

스캔이 완료된 후 cat 명령을 사용하여 services.txt 파일의 내용을 볼 수 있습니다.

cat services.txt

이렇게 하면 Nmap 스캔 결과가 터미널에 표시됩니다.

또는 nano와 같은 텍스트 편집기로 services.txt 파일을 열 수 있습니다.

nano services.txt

이렇게 하면 결과를 보다 구조화된 방식으로 탐색할 수 있습니다.

출력 형식 이해:

"normal" 출력 형식은 사람이 읽을 수 있도록 설계되었으며 스캔 결과의 간결한 요약을 제공합니다. 대상 호스트, 열린 포트, 감지된 서비스 및 해당 버전에 대한 정보를 포함합니다.

기타 출력 형식:

Nmap 은 다음과 같은 여러 다른 출력 형식을 지원합니다.

  • -oX: 다른 도구에서 구문 분석하기에 적합한 XML 출력 형식.
  • -oS: Script Kiddie 출력 형식 (재미를 위해).
  • -oG: grep 및 기타 명령줄 도구로 쉽게 구문 분석할 수 있도록 설계된 Grepable 출력 형식.

스캔 결과를 저장하는 것은 발견 사항을 문서화하고, 다른 사람과 공유하고, 시간이 지남에 따라 변경 사항을 추적하는 데 필수적입니다.

요약

이 랩에서는 참가자들이 서비스 및 버전 탐지를 위해 Nmap 을 사용하는 방법을 배웁니다. nmap -sV 127.0.0.1 명령을 사용하여 로컬 호스트에서 기본적인 서비스 탐지 스캔으로 시작합니다. 또한 스캔의 강도를 조정하고, 특정 포트에서 서비스를 탐지하고, 전체 탐지를 수행하는 방법을 배웁니다. 또한 Xfce 터미널에서 출력을 분석하고 -oN 옵션을 사용하여 결과를 텍스트 파일에 저장합니다.