Nmap 취약점 스캔

NmapBeginner
지금 연습하기

소개

이 랩에서는 Nmap 의 vuln 스크립트를 사용하여 취약점을 스캔하는 방법을 배우게 됩니다. 이 스크립트는 기본 자격 증명, 구식 소프트웨어, 잘못된 구성과 같은 일반적인 문제를 확인하여 잠재적인 보안 취약점을 식별하는 데 도움이 됩니다.

LabEx VM 환경 내에서 데모 목적으로 대상 IP 주소 (127.0.0.1 사용) 에 대해 vuln 스크립트를 실행하고, 특정 포트를 스캔하며, 더 자세한 출력을 위해 상세도를 추가하고, 결과를 파일에 저장한 다음, Xfce 터미널에서 식별된 취약점을 검토하여 서비스 감지 결과와 비교합니다.

nmap --script vuln 192.168.1.1 로 vuln 스크립트 실행

이 단계에서는 Nmap 의 vuln 스크립트를 사용하여 대상 IP 주소에서 알려진 취약점을 스캔합니다. vuln 스크립트는 시스템의 잠재적인 보안 취약점을 식별하는 데 도움이 되는 강력한 도구입니다.

시작하기 전에 Nmap 스크립트가 무엇인지 간략하게 살펴보겠습니다. Nmap 스크립트는 Lua 프로그래밍 언어로 작성되었으며 Nmap 의 기능을 확장할 수 있습니다. 취약점 탐지, 서비스 검색 및 네트워크 정찰을 포함한 다양한 작업에 사용할 수 있습니다.

vuln 스크립트는 일반적인 취약점을 식별하도록 설계된 스크립트 모음입니다. 기본 자격 증명, 구식 소프트웨어 버전 및 잘못된 구성과 같은 광범위한 문제를 확인합니다.

vuln 스크립트를 사용하여 대상 IP 주소 192.168.1.1을 스캔하는 것으로 시작해 보겠습니다. 192.168.1.1은 사설 IP 주소이므로 LabEx VM 환경에서 직접 액세스할 수 없을 가능성이 높습니다. 데모 목적으로 127.0.0.1 (localhost) 을 대상으로 사용합니다. 이는 스캔할 수 있는 서비스가 LabEx VM 에서 실행되고 있다고 가정합니다.

Xfce 터미널을 열고 다음 명령을 실행합니다.

sudo nmap --script vuln 127.0.0.1

Nmap 은 특정 스캔을 수행하기 위해 종종 권한 상승이 필요하므로 sudo를 사용해야 할 수 있습니다.

이 명령은 Nmap 에게 IP 주소 127.0.0.1에 대해 vuln 스크립트를 실행하도록 지시합니다. 그런 다음 Nmap 은 대상 시스템에서 취약점을 식별하려고 시도합니다.

출력은 스캔 결과를 보여줍니다. 발견된 취약점을 문제 설명 및 잠재적인 해결 단계와 함께 나열합니다.

예시 출력 (실제 출력은 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).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
22/tcp open  ssh
|_ vulners: Could not find vulnerability results.

80/tcp open  http
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_ vulners: Could not find vulnerability results.

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

이 예에서 Nmap 은 127.0.0.1에서 포트 22 와 80 을 스캔했습니다. vuln 스크립트 세트의 일부인 vulners 스크립트는 해당 포트에서 실행 중인 서비스에 대한 알려진 취약점을 찾을 수 없었습니다. 이것이 반드시 시스템이 완전히 안전하다는 의미는 아니지만, 즉시 눈에 띄는 취약점이 없음을 나타냅니다.

nmap --script vuln -p 80 127.0.0.1 로 특정 포트 스캔

이전 단계에서는 vuln 스크립트를 사용하여 127.0.0.1의 모든 포트를 스캔했습니다. 이 단계에서는 특정 포트, 즉 포트 80 에 스캔을 집중합니다. 이는 전체 시스템을 스캔하지 않고 특정 서비스의 취약점을 빠르게 확인하려는 경우에 유용합니다. 포트 80 은 일반적으로 HTTP (웹) 트래픽에 사용됩니다.

Nmap 의 -p 옵션을 사용하면 스캔할 포트를 지정할 수 있습니다. 단일 포트, 포트 범위 또는 쉼표로 구분된 포트 목록을 지정할 수 있습니다.

vuln 스크립트를 사용하여 127.0.0.1에서 포트 80 만 스캔하려면 Xfce 터미널에서 다음 명령을 실행합니다.

sudo nmap --script vuln -p 80 127.0.0.1

이 명령은 Nmap 에게 IP 주소 127.0.0.1의 포트 80 에 대해 vuln 스크립트를 실행하도록 지시합니다. 그런 다음 Nmap 은 해당 포트에서 실행 중인 서비스와 관련된 취약점을 식별하려고 시도합니다.

출력은 이전 단계와 유사하지만 포트 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.000073s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE
80/tcp open  http
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_ vulners: Could not find vulnerability results.

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

보시다시피 출력은 포트 80 에만 집중되어 있습니다. vulners 스크립트는 다시 알려진 취약점을 찾을 수 없었습니다.

특정 포트를 스캔하면 특히 특정 서비스에만 관심이 있는 경우 취약점 스캔을 수행하는 데 걸리는 시간을 크게 줄일 수 있습니다.

nmap -v --script vuln 192.168.1.1 로 상세 정보 추가

이 단계에서는 Nmap 스캔에 상세 정보를 추가합니다. 상세 정보는 Nmap 이 스캔 프로세스에 대한 더 자세한 정보를 제공한다는 의미입니다. 이는 Nmap 이 무엇을 하고 있는지 이해하고 발생할 수 있는 문제를 해결하는 데 도움이 될 수 있습니다.

Nmap 의 -v 옵션은 상세 수준을 높입니다. -v를 여러 번 사용하여 상세 정보를 더욱 높일 수 있습니다 (예: -vv 또는 -vvv).

상세 정보와 함께 127.0.0.1에 대해 vuln 스크립트를 실행하려면 Xfce 터미널에서 다음 명령을 실행합니다.

sudo nmap -v --script vuln 127.0.0.1

이 명령은 Nmap 에게 IP 주소 127.0.0.1에 대해 vuln 스크립트를 실행하고 상세 출력을 제공하도록 지시합니다.

이제 출력에는 실행 중인 스크립트, 스캔 중인 포트, 각 단계를 완료하는 데 걸리는 시간 등 스캔 프로세스에 대한 더 많은 정보가 포함됩니다.

예시 출력 (실제 출력은 127.0.0.1에서 실행 중인 서비스에 따라 다르며 상세 정보가 없는 출력보다 훨씬 깁니다):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
NSE: Loaded 151 scripts for scanning.
Initiating Ping Scan at 10:10
Scanning 127.0.0.1 [4 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 SYN Stealth 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 SYN Stealth Scan at 10:10, 0.06s 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, 6.41s elapsed (2 services total)
NSE: Script scanning 127.0.0.1.
NSE: Starting runlevel 1 (of 1) scan.
Initiating NSE at 10:10
Completed NSE at 10:10, 1.13s elapsed.
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000073s latency).
Other addresses for localhost (alias(es)): localhost

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p0 Ubuntu 7ubuntu2.4 (protocol 2.0)
|_ vulners: Could not find vulnerability results.
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_ vulners: Could not find vulnerability results.
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

NSE: Script Post-scanning.
Initiating NSE at 10:10
Completed NSE at 10:10, 0.00s elapsed.
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 7.70 seconds

상세 출력은 스캔 프로세스에 대한 훨씬 더 자세한 보기를 제공합니다. 스캔의 다양한 단계, 실행 중인 스크립트, 발생할 수 있는 오류 또는 경고를 확인할 수 있습니다.

nmap --script vuln -oN vuln.txt 127.0.0.1 로 취약점 결과 저장

이 단계에서는 Nmap 취약점 스캔 결과를 파일에 저장하는 방법을 배웁니다. 이는 나중에 분석, 보고 또는 시간 경과에 따른 결과 비교에 유용합니다.

Nmap 은 다양한 형식으로 스캔 결과를 저장하기 위한 여러 옵션을 제공합니다. -oN 옵션은 결과를 "일반" 사람이 읽을 수 있는 형식으로 저장합니다. 다른 옵션으로는 XML 형식의 -oX와 Grepable 형식의 -oG가 있습니다.

vuln 스크립트 스캔 결과를 일반 형식으로 vuln.txt라는 파일에 저장하려면 Xfce 터미널에서 다음 명령을 실행합니다.

sudo nmap --script vuln -oN vuln.txt 127.0.0.1

이 명령은 Nmap 에게 IP 주소 127.0.0.1에 대해 vuln 스크립트를 실행하고 일반 출력 형식을 사용하여 결과를 vuln.txt 파일에 저장하도록 지시합니다. vuln.txt 파일은 현재 디렉토리 (~/project) 에 생성됩니다.

스캔이 완료된 후 nano와 같은 텍스트 편집기를 사용하여 vuln.txt 파일의 내용을 볼 수 있습니다.

nano vuln.txt

이렇게 하면 vuln.txt 파일이 nano 편집기에서 열리고 스캔 결과를 검토할 수 있습니다. 출력은 -oN 옵션 없이 Nmap 을 실행할 때 화면에서 보는 것과 유사합니다.

vuln.txt의 예시 내용 (실제 내용은 127.0.0.1에서 실행 중인 서비스에 따라 다름):

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

PORT   STATE SERVICE
22/tcp open  ssh
|_ vulners: Could not find vulnerability results.
80/tcp open  http
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_ vulners: Could not find vulnerability results.

## Nmap done at Tue Oct 27 10:15:07 2023 -- 1 IP address (1 host up) scanned in 7.00 seconds

cat과 같은 다른 Linux 명령을 사용하여 파일도 볼 수 있습니다.

cat vuln.txt

스캔 결과를 파일에 저장하는 것은 취약점 평가 및 침투 테스트의 중요한 단계입니다. 이를 통해 결과를 문서화하고 시간 경과에 따른 변경 사항을 추적할 수 있습니다.

Xfce 터미널에서 취약점 검토

이 단계에서는 Xfce 터미널에서 직접 취약점 스캔 결과를 검토합니다. 여기에는 nmap --script vuln 명령의 출력을 검토하여 대상 시스템에서 잠재적인 취약점을 식별하는 작업이 포함됩니다.

먼저 127.0.0.1에 대해 취약점 스캔을 다시 실행해 보겠습니다. 이렇게 하면 검토할 최신 결과를 확보할 수 있습니다. Xfce 터미널에서 다음 명령을 실행합니다.

sudo nmap --script vuln 127.0.0.1

출력을 주의 깊게 검토하십시오. vuln 스크립트는 서비스 버전 및 구성을 확인하여 알려진 취약점을 식별하려고 시도합니다. 잠재적인 취약점을 나타내는 모든 줄을 찾으십시오.

출력에는 열린 포트와 해당 포트에서 실행 중인 서비스가 표시됩니다. vuln 스크립트 세트의 일부인 vulners 스크립트는 서비스 버전을 알려진 취약점과 일치시키려고 시도합니다.

예시 출력 (실제 출력은 127.0.0.1에서 실행 중인 서비스에 따라 다름):

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

PORT   STATE SERVICE
22/tcp open  ssh
|_ vulners: Could not find vulnerability results.
80/tcp open  http
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_ vulners: Could not find vulnerability results.

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

이 예에서 vulners 스크립트는 SSH 및 HTTP 서비스에 대한 취약점 결과를 찾을 수 없었습니다. 그러나 취약점이 발견된 경우 출력에는 특정 취약점에 대한 세부 정보와 관련 리소스에 대한 링크가 포함됩니다.

잠재적인 취약점을 나타내는 출력이 표시되면 해당 취약점을 추가로 조사하여 위험을 이해하고 이를 완화하는 방법을 파악하십시오. 서비스 버전 정보 (예: "Apache/2.4.29 (Ubuntu)") 를 사용하여 해당 특정 소프트웨어 버전에서 알려진 취약점을 검색할 수 있습니다.

이 단계는 대상 시스템의 보안 상태를 이해하고 잠재적인 문제 영역을 식별하는 데 매우 중요합니다.

Xfce 터미널에서 서비스 탐지와 비교

이 단계에서는 취약점 스캔 결과를 Nmap 에서 제공하는 표준 서비스 탐지 결과와 비교합니다. 이를 통해 vuln 스크립트가 Nmap 이 일반적으로 감지하는 것 이상의 추가 정보를 제공하는지 이해하는 데 도움이 됩니다.

먼저 127.0.0.1에 대해 표준 Nmap 서비스 탐지 스캔을 실행합니다. Xfce 터미널에서 다음 명령을 실행합니다.

sudo nmap -sV 127.0.0.1

-sV 옵션은 Nmap 에게 서비스 버전 탐지를 수행하도록 지시합니다. 이는 열린 포트에서 실행 중인 서비스의 특정 버전을 식별하려고 시도합니다.

예시 출력 (실제 출력은 127.0.0.1에서 실행 중인 서비스에 따라 다름):

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

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p0 Ubuntu 7ubuntu2.4 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))

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

이제 이 출력을 이전 단계에서 실행한 nmap --script vuln 127.0.0.1 명령의 출력과 비교합니다.

특히 다음을 찾으십시오.

  • 서비스 버전: -sV 스캔이 vuln 스크립트와 동일한 서비스 버전을 식별합니까? vuln 스크립트는 종종 서비스 버전 정보를 사용하여 잠재적인 취약점을 식별합니다.
  • 취약점 정보: vuln 스크립트가 -sV 스캔 출력에 없는 취약점에 대한 추가 정보를 제공합니까? vuln 스크립트는 vulners 라이브러리를 사용하여 서비스 버전을 기반으로 알려진 취약점을 확인합니다.

두 출력을 비교하여 vuln 스크립트가 제공하는 가치를 더 잘 이해할 수 있습니다. 많은 경우 vuln 스크립트는 표준 서비스 탐지 스캔에서 즉시 나타나지 않는 잠재적인 취약점을 식별합니다. 이는 vuln 스크립트가 알려진 취약점을 찾도록 특별히 설계된 반면, -sV 스캔은 주로 서비스와 해당 버전을 식별하는 데 중점을 두기 때문입니다.

이 비교는 Nmap 에서 얻을 수 있는 다양한 정보 수준과 가장 포괄적인 보안 평가를 얻기 위해 다양한 스크립트와 옵션을 사용하는 방법을 이해하는 데 도움이 됩니다.

요약

이 랩에서는 Nmap 의 vuln 스크립트를 사용하여 대상 시스템의 취약점을 스캔하는 방법을 살펴보았습니다. nmap --script vuln 127.0.0.1 명령을 사용하여 특정 IP 주소 (랩 환경으로 인해 실용적인 예로 127.0.0.1 사용) 에 대해 스크립트를 실행하는 방법을 배웠으며, 필요한 권한을 위해 종종 sudo가 필요합니다.

또한 이 랩에서는 nmap --script vuln -p 80 127.0.0.1을 사용하여 특정 포트를 스캔하고, nmap -v --script vuln 192.168.1.1을 사용하여 상세도를 높이고, nmap --script vuln -oN vuln.txt 127.0.0.1을 사용하여 스캔 결과를 파일에 저장하는 방법을 보여주었습니다. 마지막으로, 이 랩에서는 Xfce 터미널 내에서 취약점 스캔 결과를 검토하고 서비스 탐지 정보와 비교하는 작업을 수행했습니다.