Nmap 상세 출력(Verbosity) 레벨을 활용한 네트워크 스캔 탐색

NmapBeginner
지금 연습하기

소개

이번 실습에서는 강력한 네트워크 스캔 도구인 Nmap을 다양한 상세 출력(verbosity) 레벨로 활용하는 방법을 배웁니다. Nmap은 보안 전문가들이 컴퓨터 네트워크상의 호스트와 서비스를 찾아내는 데 즐겨 사용하는 도구입니다. Nmap의 상세 출력 옵션을 마스터하면 스캔 중에 표시되는 정보를 제어할 수 있으며, 이는 효율적인 네트워크 분석과 문제 해결에 필수적입니다.

실습을 진행하면서 스캔 연습을 위한 로컬 서버를 설정하게 됩니다. 또한 다양한 상세 출력 레벨이 스캔 결과와 제공되는 정보에 미치는 영향도 함께 살펴봅니다.

네트워크 스캔을 위한 환경 설정

이번 단계에서는 로컬 머신에 로컬 웹 서버를 설정합니다. 이 서버는 Nmap 스캔의 대상(타겟) 역할을 하게 됩니다. Nmap은 컴퓨터 네트워크의 호스트와 서비스를 발견하기 위해 사이버 보안에서 사용되는 강력한 네트워크 스캔 도구입니다. 로컬 서버를 사용하면 실제 네트워크에 영향을 주지 않고 안전하게 Nmap 사용법을 연습할 수 있습니다.

HTTP 서버 이해하기

서버를 만들기 전에 먼저 HTTP 서버가 무엇인지 이해해 봅시다. HTTP는 HyperText Transfer Protocol의 약자입니다. 웹 브라우저가 웹사이트와 통신하는 데 사용하는 프로토콜입니다. HTTP 서버는 URL(웹 주소)과 HTTP 프로토콜을 이해할 수 있는 소프트웨어 애플리케이션입니다. 브라우저에 웹 주소를 입력하면 브라우저는 해당 HTTP 서버에 HTTP 요청을 보내고, 서버는 요청받은 웹페이지를 다시 전송합니다. 이번 실습에서는 배우기 쉽고 널리 쓰이는 프로그래밍 언어인 파이썬(Python)을 사용하여 간단한 HTTP 서버를 만들어 보겠습니다.

HTTP 서버 생성하기

먼저 올바른 작업 디렉터리에 있는지 확인해야 합니다. 작업 디렉터리는 명령어들이 실행될 폴더를 의미합니다. 여기서는 /home/labex/project 디렉터리에 있어야 합니다. 이 디렉터리로 이동하려면 다음 명령어를 사용하세요.

cd /home/labex/project

올바른 위치로 이동했으므로, 파이썬의 내장 HTTP 서버 모듈을 사용하여 간단한 웹 서버를 생성하겠습니다. 이 서버가 8080 포트에서 수신 대기하도록 설정할 것입니다. 포트는 네트워크 트래픽이 들어오거나 나갈 수 있는 컴퓨터의 문과 같습니다. 서비스마다 서로 다른 포트를 사용합니다. 다음 명령어를 입력하세요.

python -m http.server --bind 127.0.0.1 8080 &

이 명령어가 수행하는 작업을 자세히 살펴보겠습니다.

  • python -m http.server: 이 부분은 파이썬의 내장 HTTP 서버 모듈을 시작합니다. 파이썬에게 HTTP 서버 기능을 실행하라고 지시합니다.
  • --bind 127.0.0.1: 이 설정은 이 환경에서 Nmap이 localhost를 스캔할 때 사용하는 IPv4 루프백 주소에서 서버가 수신 대기하도록 만듭니다.
  • 8080: 서버가 8080 포트에서 수신 대기하도록 지정합니다. 즉, 이 포트로 들어오는 모든 들어오는 HTTP 요청은 우리 서버가 처리하게 됩니다.
  • &: 명령어 끝에 앰퍼샌드(&)를 붙이면 서버가 백그라운드에서 실행됩니다. 이를 통해 서버가 실행되는 동안에도 터미널을 계속 사용하여 다른 명령어를 입력할 수 있어 유용합니다.

명령어를 실행하면 다음과 유사한 출력이 표시됩니다.

Serving HTTP on 127.0.0.1 port 8080 (http://127.0.0.1:8080/) ...

이 출력은 HTTP 서버가 현재 실행 중이며 8080 포트에서 연결을 받을 준비가 되었음을 나타냅니다. 이 서버가 실행됨에 따라, 다음 단계에서 Nmap을 사용하여 스캔할 수 있는 타겟이 준비되었습니다.

HTTP 서버가 실행 중인지 확인하기

서버가 실제로 올바르게 실행되고 있는지 확인하는 것은 중요합니다. 이를 위해 다음 명령어를 사용할 수 있습니다.

ss -tulwn | grep 8080

ss 명령어는 소켓 통계를 표시하는 데 사용됩니다. -tulwn 옵션은 ss에게 TCP, UDP, 수신 대기(listening), 그리고 숫자 형태의 소켓 정보를 보여주도록 지시합니다. |는 파이프(pipe)로, ss 명령어의 출력을 grep 명령어로 전달합니다. 그런 다음 grep 명령어는 출력에서 8080 문자열을 검색합니다. 서버가 실행 중이라면 이 명령어는 8080 포트에서 무언가 수신 대기 중임을 나타내는 출력을 보여주어야 하며, 이는 HTTP 서버가 활성화되어 Nmap 스캔 준비가 되었음을 확인해 줍니다.

Nmap 기초 및 기본 상세 출력(Verbosity) 이해하기

이번 단계에서는 타겟 서버가 실행된 상태에서 Nmap과 그 상세 출력 레벨을 탐색하기 시작하겠습니다. Network Mapper의 약자인 Nmap은 강력한 보안 스캐너입니다. 주요 목적은 컴퓨터 네트워크상의 호스트와 서비스를 발견하도록 돕는 것입니다. 이는 네트워크의 구조를 이해하고 잠재적인 보안 위험을 식별할 수 있게 해주므로 사이버 보안에서 매우 중요합니다.

Nmap 상세 출력(Verbosity)이란 무엇인가요?

Nmap에서 상세 출력(verbosity)은 스캔 중에 얼마나 많은 정보가 표시될지를 결정합니다. 스캔 결과의 상세 수준을 얼마나 원하느냐에 따라 다양한 상세 출력 레벨을 선택할 수 있습니다. 일반적인 상세 출력 레벨은 다음과 같습니다.

  • 레벨 0: 기본 레벨입니다. 스캔에 대한 기본 정보를 제공하는 표준 출력을 제공합니다.
  • 레벨 1: -v 옵션을 사용하면 스캔 출력에서 더 많은 세부 정보를 얻을 수 있습니다.
  • 레벨 2: -vv 옵션을 사용하면 훨씬 더 상세한 정보를 얻을 수 있습니다.

기본 상세 출력(레벨 0) 스캔 수행하기

Nmap의 기본 상세 출력 레벨을 사용하여 첫 번째 스캔을 수행해 보겠습니다. 이를 통해 추가적인 상세 출력 없이 어떤 종류의 정보를 얻을 수 있는지 기본 기준을 이해할 수 있습니다.

nmap -p 8080 localhost > /home/labex/project/verbosity-0.txt

이 명령어를 분해해서 살펴보겠습니다.

  • nmap: Nmap 스캔 도구를 호출하는 명령어입니다. 네트워크 스캔에 Nmap을 사용하도록 시스템에 지시합니다.
  • -p 8080: Nmap에게 8080 포트만 집중해서 스캔하라고 지시하는 옵션입니다. 포트는 컴퓨터의 문과 같으며, 서비스마다 서로 다른 포트를 사용합니다. 포트 8080을 지정함으로써 우리는 해당 특정 포트에서 실행 중인 서비스에만 관심을 갖게 됩니다.
  • localhost: 로컬 머신을 스캔하고 있음을 나타냅니다. 즉, Nmap 명령어를 실행하는 것과 동일한 컴퓨터에서 실행 중인 서비스를 확인하고 있습니다.
  • > /home/labex/project/verbosity-0.txt: 명령어의 이 부분은 스캔 출력을 /home/labex/project 디렉터리에 있는 verbosity-0.txt라는 파일로 리다이렉트(방향 전환)합니다. 출력을 파일로 저장해 두면 나중에 검토할 수 있습니다.

이제 스캔 결과를 확인해 봅시다.

cat /home/labex/project/verbosity-0.txt

이 명령어를 실행하면 다음과 유사한 출력이 표시됩니다.

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

PORT     STATE SERVICE
8080/tcp open  http-proxy

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

이 출력이 의미하는 바를 이해해 봅시다.

  • 스캔 시작 시간: 첫 번째 줄은 Nmap 스캔이 시작된 정확한 시간을 알려줍니다. 이는 정보가 수집된 시점을 추적하는 데 유용합니다.
  • 스캔 타겟: IP 주소 127.0.0.1을 가진 localhost를 스캔하고 있음을 보여줍니다.
  • 호스트 상태: 호스트가 켜져 있고 응답하며, 0.000097초의 매우 낮은 지연 시간(latency)을 가짐을 나타냅니다.
  • 포트 상태: 8080 포트가 open(열림) 상태이며, 해당 포트에서 수신 대기 중인 서비스가 있음을 알려줍니다.
  • 실행 중인 서비스: 8080 포트에서 실행 중일 가능성이 가장 높은 서비스가 http-proxy임을 시사합니다.
  • 스캔 완료 통계: 마지막 줄은 스캔에 걸린 시간에 대한 정보를 제공하며, 이 경우 0.05초가 걸렸습니다.

기본 레벨은 필수적인 정보를 제공하지만 상세한 통찰력이 부족합니다. 다음 단계에서는 더 높은 상세 출력 레벨이 스캔에 대한 더 심층적인 정보를 어떻게 제공할 수 있는지 살펴보겠습니다.

-v 옵션으로 상세 출력 수준 높이기

네트워크 스캔의 세계에서는 상세한 정보를 얻는 것이 매우 중요합니다. 이번 단계에서는 상세 출력 레벨을 높여 Nmap으로부터 더 심층적인 세부 정보를 얻는 방법을 배웁니다. Nmap에서의 상세 출력은 스캔 중에 표시되는 정보의 양을 의미합니다. 상세 출력 레벨을 1로 설정하는 -v 옵션은 네트워크 분석에 대단히 유용할 수 있는 추가 정보를 제공합니다.

상세 출력을 높여서 스캔 실행하기

먼저 상세 출력을 높여서 스캔을 실행해 보겠습니다. 다음 명령어를 사용합니다.

nmap -p 8080 localhost -v > /home/labex/project/verbosity-1.txt

이 명령어를 분해해서 살펴보겠습니다.

  • nmap은 Nmap 스캔 도구를 호출하는 명령어입니다. Nmap은 강력하고 널리 사용되는 네트워크 탐색 및 보안 감사 도구입니다.
  • -p 8080은 Nmap에게 8080 포트만 스캔하도록 지시합니다. 포트는 네트워크상의 문과 같으며, 포트를 지정함으로써 해당 포트에서 실행 중일 수 있는 특정 서비스에 스캔을 집중시킵니다.
  • localhost는 로컬 머신을 타겟으로 지정하고 있음을 나타냅니다. 이는 자신의 시스템에서 Nmap이 어떻게 작동하는지 테스트하고 이해하는 데 유용합니다.
  • -v는 상세 출력 레벨을 1로 높입니다. 즉, Nmap이 스캔 과정에 대한 더 많은 정보를 표시하게 됩니다.
  • > /home/labex/project/verbosity-1.txt는 스캔 출력을 /home/labex/project 디렉터리의 verbosity-1.txt 파일로 리다이렉트합니다. 출력을 파일로 저장해 두면 나중에 검토할 수 있습니다.

이제 스캔 결과를 확인해 봅시다.

cat /home/labex/project/verbosity-1.txt

이 명령어를 실행하면 다음과 유사한 더 상세한 출력이 표시됩니다.

Starting Nmap 7.80 ( https://nmap.org ) at 2023-08-10 15:35 UTC
Initiating Ping Scan at 15:35
Scanning localhost (127.0.0.1) [2 ports]
Completed Ping Scan at 15:35, 0.00s elapsed (1 total hosts)
Initiating Connect Scan at 15:35
Scanning localhost (127.0.0.1) [1 port]
Discovered open port 8080/tcp on 127.0.0.1
Completed Connect Scan at 15:35, 0.00s elapsed (1 total ports)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000089s latency).

PORT     STATE SERVICE
8080/tcp open  http-proxy

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

추가 정보 이해하기

상세 출력 레벨 1에서는 출력이 풍부한 추가 세부 정보를 제공합니다. 확인할 수 있는 내용은 다음과 같습니다.

  • 스캔 과정이 단계별로 나뉩니다. 예를 들어, 핑 스캔(Ping Scan)과 연결 스캔(Connect Scan)이 있습니다. 핑 스캔은 호스트에 도달할 수 있는지 확인하는 데 사용되며, 연결 스캔은 특정 포트에 연결을 설정하려고 시도합니다.
  • 각 단계별 타이밍 정보가 제공됩니다. 이를 통해 스캔의 각 부분이 얼마나 오래 걸렸는지 파악할 수 있습니다.
  • 열린 포트가 발견된 정확한 시점을 볼 수 있습니다. 이는 스캔의 명확한 타임라인을 제공하므로 중요합니다.
  • 스캔 중에 Nmap이 사용한 데이터 파일도 표시됩니다. 이 파일에는 Nmap이 스캔을 수행하는 데 사용하는 서비스, 포트 및 기타 네트워크 관련 데이터에 대한 정보가 포함되어 있습니다.

이러한 추가 정보는 다음과 같은 이유로 매우 유용합니다.

  • Nmap이 어떻게 스캔을 수행하는지 이해할 수 있습니다. 서로 다른 단계와 그 발생 순서를 확인함으로써 스캔 프로세스를 더 잘 파악할 수 있습니다.
  • 스캔 중 이벤트의 정확한 타임라인을 알 수 있습니다. 이는 문제 해결이나 네트워크 동작 이해에 유용할 수 있습니다.
  • 특정 포트와 서비스가 언제 발견되었는지 파악할 수 있습니다. 이는 보안 평가와 네트워크 관리에 매우 중요합니다.

상세 출력 레벨 비교하기

일반 스캔과 상세 출력을 높인 스캔 간의 차이를 더 명확하게 확인하기 위해 두 출력 파일을 비교해 보겠습니다. 다음 명령어를 사용하세요.

diff /home/labex/project/verbosity-0.txt /home/labex/project/verbosity-1.txt

diff 명령어는 두 파일의 내용을 비교하고 그 차이점을 보여줍니다. 이 명령어의 출력은 상세 출력 레벨을 높이는 것이 스캔 과정에 대한 더 많은 통찰력을 어떻게 제공하는지 증명해 줍니다. 이 추가 정보는 네트워크 문제를 해결하거나 상세한 보안 평가를 수행할 때 특히 유용할 수 있습니다.

추가 상세 출력 레벨

Nmap은 상세 출력 레벨 1에서 멈추지 않습니다. 더 높은 상세 출력 레벨도 지원합니다.

  • -vv는 상세 출력 레벨을 2로 설정합니다.
  • -vvv는 상세 출력 레벨을 3으로 설정합니다.

상세 출력 레벨을 높일수록 Nmap은 스캔 과정에 대해 점점 더 상세한 정보를 제공합니다. 네트워크를 더 깊이 파고들어 스캔의 모든 측면을 이해해야 할 때 매우 유용할 수 있습니다.

더 높은 상세 출력 레벨 및 실용적인 애플리케이션 탐색

이번 단계에서는 Nmap의 기능을 더 깊이 파고듭니다. 먼저 더 높은 상세 출력 레벨을 사용하여 스캔 과정에서 더 상세한 정보를 얻어보겠습니다. 그런 다음 다양한 상세 출력 설정의 실제 적용 사례를 학습하여 실제 시나리오에서 각 레벨을 언제 사용해야 하는지 파악하게 됩니다.

최대 상세 출력으로 스캔 실행하기

상세 출력 레벨 2로 스캔을 실행해 보겠습니다. Nmap에서는 -vv 옵션을 사용하여 상세 출력 레벨을 설정할 수 있습니다. 상세 출력 레벨 2는 스캔에 대한 상당한 양의 세부 정보를 제공합니다. 스캔을 실행하는 명령어는 다음과 같습니다.

nmap -p 8080 localhost -vv > /home/labex/project/verbosity-2.txt

이 명령어에서 -p 8080은 Nmap에게 8080 포트를 스캔하도록 지시합니다. localhost는 로컬 머신을 가리키는 스캔 타겟입니다. -vv 옵션은 상세 출력을 레벨 2로 높입니다. > 기호는 스캔 출력을 /home/labex/project/verbosity-2.txt 파일로 리다이렉트합니다.

이제 스캔 결과를 검토해 봅시다. cat 명령어를 사용하여 파일의 내용을 표시할 수 있습니다.

cat /home/labex/project/verbosity-2.txt

출력을 보면 스캔 과정에 대한 훨씬 더 기술적인 세부 정보가 포함되어 있음을 알 수 있습니다. 이러한 세부 정보에는 다음이 포함됩니다.

  • 더 심층적인 타이밍 정보: 스캔의 각 부분이 얼마나 오래 걸렸는지 이해하는 데 도움이 됩니다.
  • 추가 디버깅 정보: 스캔 중에 문제가 발생했을 때 유용할 수 있습니다.
  • 더 상세한 프로토콜 정보: 스캔과 관련된 네트워크 프로토콜을 더 잘 이해할 수 있게 해줍니다.

다양한 상세 출력 레벨의 실용적 활용

다양한 상세 출력 레벨은 서로 다른 시나리오에서 유용합니다. 각 레벨과 그 실용적인 용도를 살펴보겠습니다.

  • 기본 레벨 (0):

    • 기본 상세 출력 레벨은 빠른 스캔에 가장 적합합니다. 특정 포트가 열려 있는지 닫혀 있는지 등 타겟에 대한 기본 정보만 필요한 경우 이 레벨로 충분합니다.
    • 루틴 점검 및 간단한 네트워크 매핑에도 유용합니다. 예를 들어 서버 포트의 기본 상태를 빠르게 확인하고 싶을 때 기본 레벨을 사용할 수 있습니다.
    • 사용 사례 예시: 서버에서 특정 포트가 열려 있는지 확인하기. 너무 많은 세부 정보에 얽매이지 않고 빠르게 개요를 파악할 수 있습니다.
  • 상세 출력 레벨 1 (-v):

    • 이 레벨은 더 상세한 분석에 유용합니다. 기본 레벨보다 더 많은 정보를 제공하므로 스캔 타임라인을 더 잘 이해할 수 있습니다.
    • 연결 문제를 해결하는 경우 이 레벨의 추가 정보가 큰 도움이 될 수 있습니다. 스캔의 어떤 부분이 더 오래 걸리는지 또는 오류가 있는지 확인할 수 있습니다.
    • 사용 사례 예시: 연결 문제 해결하기. 추가 세부 정보를 사용하여 무엇이 문제를 일으키고 있는지 파악할 수 있습니다.
  • 더 높은 상세 출력 레벨 (-vv, -vvv):

    • 이 레벨은 심층 분석 및 디버깅에 이상적입니다. 최대 양의 정보를 제공하므로 보안 감사에 매우 유용합니다.
    • 상세한 보안 평가를 수행하거나 스캔이 타겟과 정확히 어떻게 상호 작용하는지 이해해야 할 때 더 높은 상세 출력 레벨을 사용하는 것이 좋습니다.
    • 사용 사례 예시: 상세한 보안 평가 또는 스캔이 타겟과 어떻게 상호 작용하는지 정확히 이해해야 할 때. 스캔 프로세스의 포괄적인 보기를 얻을 수 있습니다.

상세 출력과 다른 Nmap 옵션 결합하기

상세 출력 옵션을 다른 Nmap 옵션과 결합하여 더 강력한 스캔을 수행할 수 있습니다. 다음 명령어를 사용하여 더 고급 스캔을 시도해 봅시다.

nmap -p 8080 -sV localhost -v > /home/labex/project/advanced-scan.txt

이 명령어를 분해해서 살펴보겠습니다.

  • -p 8080은 8080 포트를 스캔하겠다고 지정합니다.
  • -sV는 버전 감지를 활성화합니다. 이 옵션은 스캔된 포트에서 실행 중인 서비스의 버전을 확인하려고 시도합니다.
  • -v는 상세 출력을 레벨 1로 높여 스캔 프로세스에 대한 더 자세한 정보를 얻을 수 있게 합니다.
  • > 기호는 스캔 출력을 /home/labex/project/advanced-scan.txt 파일로 리다이렉트합니다.

이제 스캔 결과를 살펴보겠습니다.

cat /home/labex/project/advanced-scan.txt

-sV를 추가함으로써 8080 포트에서 실행 중인 서비스 버전에 대한 정보가 제공되는 것을 확인할 수 있습니다. 동시에 -v 옵션은 스캔 프로세스에 대한 상세한 정보를 제공하여 결과를 더 쉽게 분석할 수 있도록 만들어 줍니다.

정리하기

이번 실험을 마치기 전에, 앞서 생성한 HTTP 서버를 올바르게 종료해야 합니다. 이를 위해 다음 명령어를 사용할 수 있습니다.

pkill -f "python -m http.server"

이 명령어는 8080 포트에서 실행 중인 파이썬 HTTP 서버 프로세스를 종료합니다. 향후 충돌이나 리소스 사용 문제를 방지하기 위해 올바르게 정리하는 것이 중요합니다.

요약

이번 실습에서는 네트워크 스캔 중에 표시되는 정보를 제어하기 위해 Nmap의 상세 출력(verbosity) 레벨을 효과적으로 사용하는 방법을 배웠습니다. 기본적인 로컬 HTTP 서버 설정부터 시작하여, 다양한 상세 출력 레벨이 Nmap 스캔 출력에 미치는 영향을 탐색했습니다.

기본 상세 출력 레벨(0)이 열린 포트와 서비스에 대한 필수 세부 정보를 제공한다는 것을 확인했습니다. -v 옵션을 사용하면 상세 출력이 높아져 스캔 과정에 대한 더 많은 통찰력을 얻을 수 있습니다. -vv-vvv와 같은 더 높은 레벨은 심층 분석을 위한 상세한 기술 정보를 제공합니다. 또한 상세 출력 옵션을 다른 Nmap 기법과 결합하여 더 강력한 네트워크 분석을 수행할 수 있습니다. 이러한 기술은 네트워크 관리자와 보안 전문가에게 매우 중요하며, 네트워크 데이터를 효율적으로 수집하고 특정 작업에 맞게 스캔을 조정할 수 있게 해줍니다.