Nmap 을 이용한 네트워크 스캐닝

NmapBeginner
지금 연습하기

소개

이 실습에서는 보안 전문가들이 널리 사용하는 강력한 오픈 소스 네트워크 스캐닝 도구인 Nmap 의 활용 방법을 배웁니다. Nmap 은 네트워크 내에서 활성화된 호스트, 열린 포트, 실행 중인 서비스를 식별하는 데 도움을 주며, 보안 평가에 필수적인 가시성을 제공합니다.

기본적인 Nmap 스캔을 수행하고, 스캔 결과를 해석하며, 다양한 스캐닝 기술을 이해하는 실무 경험을 쌓게 됩니다. 이러한 기술은 네트워크 보안 분석의 기초가 되며, 반드시 권한이 부여된 네트워크에서만 수행해야 한다는 윤리적 스캐닝 관행의 중요성을 함께 강조합니다.

Nmap 설치하기

네트워크 탐색을 시작하기 전에 적절한 도구를 갖춰야 합니다. Nmap(Network Mapper) 은 네트워크 관리자와 보안 전문가가 네트워크상의 장치를 검색하고 사용 가능한 서비스를 식별하는 데 도움을 주는 무료 오픈 소스 유틸리티입니다. 이번 단계에서는 시스템에 Nmap 을 설치해 보겠습니다.

  1. 먼저 터미널을 엽니다. 터미널은 모든 Nmap 명령을 실행할 장소입니다. 이번 실습 환경과 같은 리눅스 시스템에서 터미널은 네트워킹 도구와 상호작용하는 주요 수단입니다. 바탕 화면에서 Xfce Terminal 을 찾아 실행하세요.

Xfce Terminal window open

참고: 무료 사용자는 인터넷 연결이 제한되므로 실습 환경에 Nmap 이 이미 사전 설치되어 있습니다. 목록의 4 번 항목 (Nmap 설치 확인) 으로 바로 넘어가셔도 됩니다. 직접 Nmap 설치를 연습해보고 싶다면 Pro 플랜으로 업그레이드하세요.

Pro 사용자 전용
  1. 터미널이 열리면 패키지 목록을 업데이트해야 합니다. 이는 시스템이 최신 소프트웨어 버전 정보를 알 수 있도록 보장하는 중요한 첫 단계입니다. 다음 명령어를 입력하고 Enter 를 누르세요.
sudo apt-get update

sudo 는 "superuser do"의 약자로, 소프트웨어 설치에 자주 필요한 관리자 권한을 부여합니다.

  1. 패키지 목록이 최신 상태가 되었으므로 이제 Nmap 을 설치해 보겠습니다. 다음 명령어는 필요한 의존성 파일과 함께 Nmap 을 다운로드하고 설치합니다.
sudo apt-get install nmap -y

-y 플래그는 설치 과정 중 나타나는 모든 확인 질문에 자동으로 "예"라고 응답하므로, 스크립트를 실행하거나 설치를 확신할 때 유용합니다.

  1. 설치가 완료되면 Nmap 이 올바르게 설치되었는지 확인해야 합니다. 버전을 확인하면 설치 성공 여부를 알 수 있을 뿐만 아니라 현재 사용 중인 버전 정보도 파악할 수 있습니다. 다음을 입력하세요.
nmap --version

다음과 유사한 출력이 나타나야 합니다.

Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.6 openssl-3.0.2 nmap-libssh2-1.8.2 libz-1.2.11 libpcre-8.39 libpcap-1.10.1 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select

Nmap 은 새로운 기능과 개선 사항으로 정기적으로 업데이트되므로 버전 번호는 다를 수 있습니다.

축하합니다! 이제 Nmap 이 설치되어 사용할 준비가 되었습니다. Nmap 을 네트워크에서 무슨 일이 일어나고 있는지 보여주는 강력한 손전등이라고 생각하세요. 어떤 장치가 연결되어 있는지, 어떤 서비스가 실행 중인지, 심지어 어떤 운영 체제를 사용하는지도 보여줄 수 있습니다. 이러한 기능 덕분에 Nmap 은 네트워크 관리와 보안 테스트 모두에 필수적인 도구입니다.

Nmap 의 전체 기능을 더 자세히 알아보고 싶다면 터미널에 man nmap을 입력하여 매뉴얼 페이지를 확인할 수 있습니다. 이 문서에는 모든 고급 옵션과 기능이 포함되어 있지만, 너무 부담 가질 필요는 없습니다. 이 실습에서는 기초부터 시작하여 단계별로 지식을 쌓아나갈 것입니다.

IP 주소의 이해

네트워크 스캐닝을 시작하기 전에 IP 주소를 이해하는 것이 매우 중요합니다. IP 주소는 네트워크상에서 컴퓨터를 위한 집 주소와 같다고 생각하면 됩니다. 우체국에서 편지를 배달하기 위해 집 주소가 필요한 것처럼, 네트워크상의 다른 장치들도 여러분의 컴퓨터와 통신하기 위해 IP 주소가 필요합니다.

  1. IP 주소는 네트워크 장치의 고유 식별자입니다. 보통 192.168.1.1 과 같이 점으로 구분된 일련의 숫자로 표시됩니다. 이 숫자들은 0 에서 255 사이의 범위를 가지며, 각 세그먼트는 네트워크 계층 구조의 일부를 나타냅니다. 앞부분은 네트워크 자체를 식별하고, 뒷부분은 특정 장치를 식별합니다.
graph LR
    A[Internet] --- B[Router 192.168.1.1]
    B --- C[PC 192.168.1.10]
    B --- D[Laptop 192.168.1.11]
    B --- E[Smartphone 192.168.1.12]
    B --- F[Smart TV 192.168.1.13]
    style A fill:#f9f,stroke:#333,stroke-width:4px
    style B fill:#bbf,stroke:#333,stroke-width:2px
    style C fill:#dfd,stroke:#333,stroke-width:2px
    style D fill:#dfd,stroke:#333,stroke-width:2px
    style E fill:#dfd,stroke:#333,stroke-width:2px
    style F fill:#dfd,stroke:#333,stroke-width:2px
  1. 자신의 IP 주소를 찾기 위해 네트워크 인터페이스 정보를 보여주는 명령어를 사용하겠습니다. 네트워크의 다른 장치를 스캔하기 전에 자신의 주소를 먼저 아는 것이 중요하기 때문입니다. 다음 명령어를 입력하세요.
ip addr show | grep inet

이 명령어를 단계별로 분석해 보겠습니다.

  • ip addr show는 시스템의 모든 네트워크 인터페이스에 대한 상세 정보를 표시합니다.
  • | 기호 (파이프라고 함) 는 첫 번째 명령어의 출력을 다음 명령어로 전달합니다.
  • grep inet은 출력 내용 중 우리가 쉽게 읽을 수 있는 IP 주소 형식이 포함된 "inet" 라인만 필터링하여 보여줍니다.

다음과 유사한 출력이 나타납니다.

inet 127.0.0.1/8 scope host lo
inet 172.19.0.3/16 brd 172.19.255.255 scope global eth1

슬래시 뒤의 숫자 (/8 또는 /16 등) 는 CIDR(Classless Inter-Domain Routing) 표기법을 사용한 것입니다. 이 표기법은 IP 주소의 비트 중 몇 개가 네트워크 부분으로 사용되고 몇 개가 장치 부분으로 사용되는지를 나타냅니다. 예를 들어 /16은 처음 16 비트 (처음 두 숫자) 가 네트워크를 식별하고, 나머지 비트가 개별 장치에 할당될 수 있음을 의미합니다.

  1. 이 출력에서 여러 IP 주소를 볼 수 있습니다. 실제적인 의미는 다음과 같습니다.

    • 127.0.0.1은 "루프백 (loopback)" 또는 "로컬호스트 (localhost)" 주소라고 불립니다. 이 특수 주소는 항상 자기 자신을 가리키며, 프로그램이 자기 자신과 통신해야 할 때 사용됩니다.
    • 172.19.0.3은 현재 머신의 실제 네트워크 주소입니다. 도로명 주소가 집을 식별하는 것처럼, 다른 장치들이 여러분의 컴퓨터로 데이터를 보낼 때 사용하는 주소입니다.
  2. 127.0.0.1 이 아닌 IP 주소 (이 경우 172.19.0.3) 를 메모해 두세요. 스캐닝 연습에서 이 실제 네트워크 주소를 사용할 것입니다.

이 CIDR 표기법은 어떤 장치가 로컬 네트워크에 있는지 아니면 원격 네트워크에 있는지 이해하는 데 중요합니다.

"fe80::"으로 시작하는 주소도 보일 수 있는데, 이는 IPv4 를 대체하기 위해 설계된 최신 버전의 IP 주소 체계인 IPv6 주소입니다. IPv6 의 중요성이 점점 커지고 있지만, 대부분의 로컬 네트워크는 여전히 여기서 살펴본 것과 같은 IPv4 주소를 주로 사용합니다. 이번 네트워크 스캐닝 실습에서는 로컬 네트워크 환경에서 더 흔히 사용되는 IPv4 주소에 집중하겠습니다.

기본 Nmap 스캔 수행하기

이제 IP 주소를 이해하고 Nmap 설치도 마쳤으니 첫 번째 네트워크 스캔을 수행해 보겠습니다. 이 초기 스캔은 자신의 머신을 대상으로 합니다. 이는 다른 시스템을 스캔하기 전에 Nmap 의 기본 기능을 배우는 가장 안전한 방법입니다.

  1. 먼저 이전 단계에서 확인한 IP 주소를 사용합니다. 기본 Nmap 스캔 명령어는 대상 IP 주소만 있으면 됩니다. 다음 명령어를 실행하되, <YOUR_IP> 부분을 확인한 IP 주소로 바꾸세요.
nmap <YOUR_IP>

예를 들어, IP 가 172.19.0.3이라면 다음과 같이 실행합니다.

nmap 172.19.0.3

이 명령어는 Nmap 에게 지정된 IP 주소에서 가장 흔히 사용되는 1000 개의 TCP 포트를 스캔하도록 지시합니다. TCP 포트는 네트워크 서비스가 통신할 수 있는 컴퓨터상의 번호가 매겨진 문과 같습니다.

  1. 명령어를 실행하면 Nmap 이 스캔을 수행하고 결과를 표시합니다. 일반적인 출력 예시는 다음과 같습니다.
Starting Nmap 7.80 ( https://nmap.org ) at 2024-09-24 10:00 CST
Nmap scan report for 336efdcfb776.external (172.19.0.3)
Host is up (0.00017s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus

Nmap done: 1 IP address (1 host up) scanned in 0.19 seconds
  1. Nmap 이 무엇을 알려주는지 이해하기 위해 출력의 각 부분을 살펴보겠습니다.

    • "Starting Nmap 7.80": 사용 중인 Nmap 버전을 보여줍니다. 버전에 따라 기능이나 출력 형식이 약간 다를 수 있습니다.
    • "Host is up (0.00017s latency)": 대상 머신이 네트워크 요청에 응답했음을 확인하며, 응답 시간을 초 단위로 보여줍니다.
    • "Not shown: 998 closed ports": 스캔한 1000 개의 공통 포트 중 998 개가 연결을 수락하지 않았음을 나타냅니다.
    • "PORT STATE SERVICE": 스캔 중에 발견된 모든 열린 포트를 나열합니다.
      • 22/tcp open ssh: 22 번 포트가 열려 있으며 SSH(Secure Shell) 가 실행 중입니다. 이는 시스템의 안전한 원격 관리에 사용됩니다.
      • 3001/tcp open nessus: 3001 번 포트가 열려 있으며 Nmap 은 이를 취약점 스캐너인 Nessus 로 판단하고 있습니다.
  2. 이 기본 스캔은 머신에서 실행 중인 네트워크 서비스에 대한 귀중한 정보를 제공합니다. 실무적으로 이 정보는 다음과 같은 작업에 도움이 됩니다.

    • 악용될 수 있는 불필요한 열린 포트를 식별하여 보안 감사 수행
    • 예상되는 서비스가 사용 가능한지 확인하여 네트워크 문제 해결
    • 침해 사고를 암시할 수 있는 예기치 않은 서비스 포착

기억하세요. 네트워크 스캐닝은 본인 소유의 시스템이나 명시적인 테스트 허가를 받은 시스템에서만 수행해야 합니다. 권한 없는 네트워크 스캐닝은 법률 및 윤리 지침을 위반할 수 있습니다. 본인의 시스템이 아닌 경우 스캔하기 전에 항상 적절한 권한을 얻으세요.

OS 탐지 스캔 수행하기

Nmap 은 단순히 열린 포트를 찾는 데 그치지 않습니다. 대상 머신의 운영 체제 (OS) 를 파악하려고 시도할 수도 있습니다. 운영 체제마다 취약점이 다르고 필요한 보안 조치가 다르기 때문에, 이 기능은 네트워크 관리자와 보안 전문가에게 매우 유용합니다.

시작하기 전에 OS 탐지가 어떻게 작동하는지 이해하는 것이 중요합니다. Nmap 은 대상에 특수하게 제작된 패킷을 보내고 그 응답을 분석합니다. 각 운영 체제는 네트워크 요청에 대해 약간씩 다르게 응답하며, Nmap 은 이 고유한 "지문 (fingerprint)"을 데이터베이스와 대조하여 일치하는 항목을 찾습니다.

  1. OS 탐지 스캔을 수행하려면 -O 플래그를 사용합니다 (숫자 0 이 아니라 대문자 'O'임에 주의하세요). 이 스캔은 로우 레벨에서 원시 패킷을 보내고 분석해야 하므로 루트 권한이 필요합니다. sudo를 사용하여 이 명령을 실행하겠습니다. <YOUR_IP>를 스캔하려는 실제 IP 주소로 바꾸세요.
sudo nmap -O <YOUR_IP>

예를 들어, 대상 IP 가 172.19.0.3이라면 다음과 같이 실행합니다.

sudo nmap -O 172.19.0.3
  1. 출력 결과에는 기본 스캔처럼 열린 포트가 표시되지만, 이제 운영 체제 정보가 포함됩니다. 일반적인 결과는 다음과 같습니다.
Starting Nmap 7.80 ( https://nmap.org ) at 2024-09-24 10:01 CST
Nmap scan report for 336efdcfb776.external (172.19.0.3)
Host is up (0.000035s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6.32
OS details: Linux 2.6.32
Network Distance: 0 hops

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.76 seconds
  1. 새로 추가된 OS 관련 정보를 자세히 살펴보겠습니다.

    • "Device type: general purpose": 장치가 라우터나 IoT 기기와 같은 특수 하드웨어가 아닌 일반적인 컴퓨터 시스템임을 알려줍니다.
    • "Running: Linux 2.6.X": 운영 체제 제품군 및 버전에 대한 Nmap 의 1 차 추측입니다.
    • "OS CPE": 운영 체제 버전에 대한 표준화된 식별자입니다.
    • "OS details": 지문 일치를 기반으로 한 더 구체적인 버전 식별 정보입니다.
  2. 이 정보를 이해하는 것은 여러 실무 응용 분야에서 가치가 있습니다.

    • 보안 전문가는 패치가 필요한 잠재적 취약 시스템을 식별하는 데 사용합니다.
    • 네트워크 관리자는 네트워크 장치의 정확한 인벤토리를 유지 관리합니다.
    • 시스템 관리자는 머신이 예상되는 운영 체제에서 실행 중인지 확인합니다.

OS 탐지가 항상 완벽한 것은 아니라는 점을 기억하세요. 다음과 같은 요인이 정확도에 영향을 줄 수 있습니다.

  • 방화벽이 Nmap 이 탐지에 사용하는 프로브 (probe) 를 차단할 수 있습니다.
  • 사용자 정의 커널 설정이 표준 지문과 일치하지 않을 수 있습니다.
  • 가상 머신은 때때로 게스트 OS 대신 호스트 OS 정보를 보여주기도 합니다.

최상의 결과를 얻으려면 OS 탐지를 다른 Nmap 기술과 결합하고, 가능한 경우 여러 방법을 통해 결과를 검증하세요.

네트워크 범위 스캐닝

실제 네트워크 환경에서는 여러 IP 주소나 전체 네트워크 세그먼트를 스캔해야 하는 경우가 많습니다. 이는 네트워크상의 모든 장치를 검색하는 데 유용하며, 네트워크 관리자와 보안 전문가의 일반적인 업무이기도 합니다. 네트워크 범위를 스캔해 보겠습니다.

  1. 먼저 작은 범위의 IP 주소를 스캔하는 것부터 시작합니다. 이는 낯선 네트워크를 탐색할 때 흔히 취하는 첫 번째 단계입니다. 아래 명령어는 172.19.0.1 부터 시작하여 연속된 20 개의 IP 주소를 스캔합니다.
nmap 172.19.0.1-20

이 명령어는 Nmap 에게 172.19.0.1 부터 172.19.0.20 까지 각 IP 주소를 순차적으로 확인하여 어떤 호스트가 온라인 상태인지, 어떤 포트가 열려 있는지 보고하도록 지시합니다.

  1. 이제 앞서 배운 CIDR 표기법을 사용하여 전체 서브넷을 스캔해 보겠습니다. /24 접미사는 마지막 옥텟의 256 개 주소 전체를 스캔한다는 의미입니다. <YOUR_NETWORK>를 여러분의 네트워크 주소로 바꾸어 다음 명령어를 실행하세요.
nmap YOUR_NETWORK /24

예를 들어 다음과 같습니다.

nmap 172.19.0.0/24

이 스캔은 172.19.0.0 부터 172.19.0.255 까지의 모든 IP 를 확인합니다. /24 표기법은 서브넷 마스크 255.255.255.0 과 동일합니다.

  1. 문서화나 나중의 분석을 위해 스캔 결과를 저장하려면 -oN(일반 출력) 플래그를 사용합니다. 이렇게 하면 사람이 읽을 수 있는 텍스트 파일이 생성됩니다.
nmap 172.19.0.0/24 -oN network_scan.txt

이 명령어는 동일한 서브넷 스캔을 수행하지만, 그 결과를 현재 작업 디렉터리의 network_scan.txt 파일에 기록합니다.

  1. 출력 파일의 내용을 확인해 보겠습니다.
cat network_scan.txt

출력 결과는 응답이 있는 각 호스트에 대한 상세 정보를 보여줍니다. 다음은 그 예시입니다.

## Nmap 7.80 scan initiated Fri Sep 27 15:45:29 2024 as: nmap -oN network_scan.txt 172.19.0.0/24
Nmap scan report for iZrj9gvdh5xn02z8rmsn9mZ (172.19.0.1)
Host is up (0.00045s latency).
Not shown: 997 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
111/tcp   open  rpcbind
10010/tcp open  rxapi

Nmap scan report for node_openresty.external (172.19.0.2)
Host is up (0.00047s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for 36cff415ddd9.external (172.19.0.3)
Host is up (0.00045s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus

Nmap scan report for 041bf22f47a1.external (172.19.0.4)
Host is up (0.00050s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus

Nmap scan report for 2299e8eff7e5.external (172.19.0.5)
Host is up (0.00048s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3001/tcp open  nessus

## Nmap done at Fri Sep 27 15:45:32 2024 -- 256 IP addresses (5 hosts up) scanned in 3.25 seconds
  1. 출력을 분석해 보겠습니다.

    • 스캔은 172.19.0.0/24 범위 내의 가능한 256 개 주소 전체를 대상으로 했습니다.
    • 그중 5 개의 호스트만 스캔에 응답했습니다 ("up" 상태).
    • 각 호스트 항목은 다음을 보여줍니다.
      • 호스트 이름 (확인 가능한 경우) 및 IP 주소
      • 네트워크 지연 시간 (latency) 측정값
      • 확인된 포트 수 (닫힌 포트는 기본적으로 표시되지 않음)
      • 열린 포트 목록과 관련 서비스
  2. 네트워크 스캐닝의 실무적 활용 사례는 다음과 같습니다.

    • 네트워크 인벤토리: 네트워크상의 모든 장치에 대한 정확한 목록 유지
    • 보안 감사: 승인되지 않은 장치나 서비스 식별
    • 문제 해결: 네트워크 연결 및 서비스 가용성 확인
    • 취약점 평가: 잠재적으로 취약한 서비스 발견

네트워크 스캐닝은 본인 소유의 네트워크나 명시적인 스캔 권한이 있는 네트워크에서만 수행해야 함을 잊지 마세요. 무단 스캐닝은 개인정보 보호법이나 네트워크 이용 정책을 위반할 수 있습니다.

요약

이 실습에서는 네트워크 정찰 및 보안 평가를 위한 강력한 도구인 Nmap 을 사용하여 네트워크 스캐닝의 기초를 배웠습니다. Nmap 설치, 열린 포트와 서비스를 식별하기 위한 기본 스캔 수행, 운영 체제 탐지, 그리고 스캔 출력을 효과적으로 관리하면서 네트워크 범위를 탐색하는 방법을 연습했습니다.

이러한 기술은 더 발전된 네트워크 보안 실무의 토대가 됩니다. 네트워크를 스캔하기 전에는 항상 적절한 권한을 얻어야 하며, 디지털 보안을 강화하기 위해 이 지식을 책임감 있게 사용하시기 바랍니다.