사이버 보안에서 Nmap 을 사용하여 여러 IP 주소를 동시에 스캔하는 방법

NmapAdvanced
지금 연습하기

소개

사이버 보안 분야에서 네트워크 인프라를 이해하는 것은 보안 유지를 위해 필수적입니다. Nmap (Network Mapper) 은 보안 전문가가 컴퓨터 네트워크에서 호스트와 서비스를 발견하는 데 사용하는 널리 사용되는 오픈 소스 도구입니다. 이 튜토리얼은 Nmap 을 사용하여 여러 IP 주소를 동시에 스캔하는 과정을 안내하여 네트워크를 효율적으로 매핑하고 잠재적인 보안 문제를 식별할 수 있도록 돕습니다.

이 랩을 마치면 Nmap 을 설치하고, 기본적인 스캔을 수행하며, 다양한 기술을 사용하여 여러 IP 주소를 대상으로 지정하고, 결과를 해석하는 방법을 이해하게 될 것입니다. 이러한 기술은 사이버 보안 평가에서 네트워크 정찰의 기본적인 부분을 형성하며, 방어 및 공격 보안 운영 모두에 유용합니다.

Nmap 설치 및 첫 번째 스캔 수행

이 첫 번째 단계에서는 Ubuntu 시스템에 Nmap 을 설치하고, 제대로 작동하는지 확인하기 위해 기본적인 스캔을 수행합니다.

Nmap 설치

Nmap 은 Ubuntu 저장소에서 사용할 수 있으므로 쉽게 설치할 수 있습니다. 터미널을 열고 다음 명령을 실행합니다.

## 패키지 목록 업데이트
sudo apt update

## Nmap 설치
sudo apt install nmap -y

이 명령은 Nmap 과 필요한 모든 종속성을 다운로드하여 설치합니다. Nmap 버전을 확인하여 설치가 성공했는지 확인해 보겠습니다.

nmap --version

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

Nmap version 7.80 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.3.3 openssl-1.1.1f libssh2-1.8.0 libz-1.2.11 libpcre-8.39
Compiled without: nmap-update npcap ipv6
Available nsock engines: epoll poll select

Nmap 기본 구문 이해

Nmap 의 기본 구문은 다음과 같습니다.

nmap [scan type] [options] [target]

여기서:

  • [scan type]은 수행할 스캔 유형을 지정합니다 (예: TCP SYN 스캔).
  • [options]는 스캔을 사용자 정의하기 위한 추가 매개변수입니다.
  • [target]은 스캔할 호스트 또는 네트워크입니다.

첫 번째 스캔: 로컬 머신 스캔

로컬 머신에 대한 간단한 스캔으로 시작해 보겠습니다. 이는 외부 네트워크를 스캔하지 않고 Nmap 을 테스트하는 안전한 방법입니다.

nmap localhost

이 명령은 로컬 머신에서 가장 일반적인 1000 개의 TCP 포트를 스캔합니다. 다음과 유사한 출력을 볼 수 있습니다.

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-23 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https

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

출력은 다음을 보여줍니다.

  • 스캔 시작 시간
  • 스캔 대상
  • 호스트 상태 (up 또는 down)
  • 서비스 이름과 함께 열린 포트
  • 스캔 통계

시스템 구성에 따라 정확한 열린 포트가 다를 수 있습니다.

포트 상태 이해

Nmap 은 포트를 다음과 같은 다양한 상태로 분류합니다.

  • open: 응용 프로그램이 이 포트에서 연결을 적극적으로 수락하고 있습니다.
  • closed: 포트는 액세스 가능하지만 응용 프로그램이 수신 대기하고 있지 않습니다.
  • filtered: 방화벽이 액세스를 차단하여 Nmap 이 포트가 열려 있는지 확인할 수 없습니다.
  • unfiltered: 포트는 액세스 가능하지만 Nmap 이 열려 있는지 닫혀 있는지 확인할 수 없습니다.
  • open|filtered: Nmap 이 포트가 열려 있는지 필터링되었는지 확인할 수 없습니다.
  • closed|filtered: Nmap 이 포트가 닫혔는지 필터링되었는지 확인할 수 없습니다.

스캔 결과에서 대부분의 포트는 "closed"로 나열되고, 시스템에서 실행 중인 서비스에 대해 몇 개의 "open" 포트가 표시됩니다.

다양한 방법으로 여러 IP 주소 스캔

이제 Nmap 을 설치하고 첫 번째 스캔을 수행했으므로, 여러 IP 주소를 동시에 스캔하는 다양한 방법을 살펴보겠습니다. 이는 여러 시스템을 효율적으로 평가해야 하는 네트워크 관리자 및 보안 전문가에게 특히 유용합니다.

방법 1: IP 범위 사용

여러 IP 주소를 스캔하는 가장 쉬운 방법 중 하나는 IP 범위를 지정하는 것입니다. 안전하게 스캔할 작은 가상 네트워크를 만들어 보겠습니다.

먼저, 현재 네트워크 인터페이스를 확인해 보겠습니다.

ip addr show

이제 로컬 네트워크에서 IP 주소 범위를 스캔합니다. 시연을 위해 작은 범위를 사용하겠습니다.

nmap 127.0.0.1-5

이 명령은 5 개의 IP 주소 (127.0.0.1, 127.0.0.2, 127.0.0.3, 127.0.0.4, 127.0.0.5) 를 스캔합니다. 스캔에 응답하는 각 호스트에 대한 출력을 볼 수 있습니다. 일반적으로 127.0.0.1 (localhost) 만 응답합니다.

방법 2: CIDR 표기법 사용

여러 대상을 지정하는 또 다른 일반적인 방법은 IP 주소 범위를 간결하게 지정하는 CIDR (Classless Inter-Domain Routing) 표기법을 사용하는 것입니다.

로컬 루프백 범위를 스캔해 보겠습니다.

nmap 127.0.0.0/24

이 명령은 127.0.0.0 에서 127.0.0.255 까지 256 개의 IP 주소를 스캔합니다. /24는 IP 주소의 처음 24 비트가 고정되어 있고 마지막 8 비트가 가변적임을 나타냅니다.

스캔 속도를 높이고 포트 스캔 없이 활성 호스트를 찾는 데 집중하기 위해 -sn 옵션을 사용할 수 있습니다.

nmap -sn 127.0.0.0/24

이는 포트를 스캔하지 않고 호스트가 온라인 상태인지 여부만 확인하는 ping 스캔을 수행합니다. 다음과 같은 출력을 볼 수 있습니다.

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-23 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).
Nmap done: 256 IP addresses (1 host up) scanned in 2.66 seconds

방법 3: IP 주소 목록 사용

특정 비순차적 IP 주소의 경우, 대상을 포함하는 파일을 만들고 -iL 옵션을 사용할 수 있습니다.

몇 개의 IP 주소가 있는 파일을 만들어 보겠습니다.

echo "127.0.0.1
127.0.0.2
127.0.0.5" > targets.txt

이제 이러한 특정 대상을 스캔합니다.

nmap -iL targets.txt

이 명령은 targets.txt 파일에서 IP 주소를 읽고 각 주소를 스캔합니다.

방법 4: 여러 대상 사양 결합

Nmap 을 사용하면 단일 명령에서 다양한 대상 지정 방법을 결합할 수 있습니다. 예를 들어:

nmap 127.0.0.1 127.0.0.5-10 127.0.0.0/29

이 명령은 다음을 스캔합니다.

  • 단일 IP 주소 127.0.0.1
  • 127.0.0.5 에서 127.0.0.10 까지의 IP 범위
  • CIDR 범위 127.0.0.0/29 (127.0.0.0 에서 127.0.0.7 까지 포함)

스캔 속도 최적화

여러 대상을 스캔할 때 스캔 시간이 크게 증가할 수 있습니다. Nmap 은 스캔 타이밍을 제어하고 효율성을 높이는 옵션을 제공합니다.

nmap -T4 127.0.0.0/24

-T4 옵션은 "공격적" 타이밍 템플릿을 설정하여 스캔 속도를 높입니다. 타이밍 템플릿은 0 (paranoid) 에서 5 (insane) 까지이며, 값이 높을수록 스캔 속도는 빨라지지만 신뢰성은 떨어질 수 있습니다. 일상적인 스캔의 경우, -T4는 속도와 신뢰성 사이에서 균형을 잘 유지합니다.

Nmap 출력 이해 및 결과 저장

네트워크 스캔을 수행할 때 결과를 해석하고 추가 분석 또는 보고를 위해 저장하는 방법을 이해하는 것이 중요합니다. 이 단계에서는 다양한 Nmap 출력 형식과 스캔 결과를 저장하는 방법을 살펴보겠습니다.

자세한 Nmap 출력 이해

Nmap 의 출력을 더 잘 이해하기 위해 localhost 에 대한 더 자세한 스캔을 수행해 보겠습니다.

nmap -v localhost

-v 옵션은 자세한 출력을 활성화하여 스캔에 대한 더 많은 정보를 제공합니다. 다음과 유사한 출력을 볼 수 있습니다.

Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-23 10:30 UTC
Initiating Ping Scan at 10:30
Scanning localhost (127.0.0.1) [2 ports]
Completed Ping Scan at 10:30, 0.00s elapsed (1 total hosts)
Initiating Connect Scan at 10:30
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
Discovered open port 443/tcp on 127.0.0.1
Completed Connect Scan at 10:30, 0.02s elapsed (1000 total ports)
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https

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

이 출력은 다음을 제공합니다.

  • 스캔 진행 상황
  • 실시간으로 발견된 각 열린 포트
  • 열린 포트 및 서비스가 포함된 최종 스캔 보고서
  • 타이밍 통계

스캔 결과를 파일에 저장

Nmap 은 여러 형식으로 결과를 저장할 수 있으며, 이는 문서화, 추가 분석 또는 팀 구성원과의 공유에 유용합니다.

일반 출력 형식

스캔 결과를 Nmap 의 표준 출력 형식으로 저장하려면:

nmap localhost -oN normal_output.txt

이렇게 하면 터미널에 표시되는 것과 동일한 형식으로 스캔 결과가 포함된 normal_output.txt라는 파일이 생성됩니다.

XML 출력 형식

XML 출력은 스캔 결과를 프로그래밍 방식으로 처리하는 데 유용합니다.

nmap localhost -oX xml_output.xml

이렇게 하면 다른 도구나 스크립트에서 구문 분석할 수 있는 XML 파일이 생성됩니다.

Grepable 출력 형식

grep과 같은 명령줄 도구로 쉽게 구문 분석할 수 있도록:

nmap localhost -oG grep_output.txt

이 형식은 grep과 같은 도구를 사용하여 특정 정보를 빠르게 추출하는 데 특히 유용합니다.

모든 형식 한 번에

출력을 세 가지 형식으로 모두 동시에 저장하려면:

nmap localhost -oA scan_results

이렇게 하면 scan_results.nmap, scan_results.xmlscan_results.gnmap의 세 개의 파일이 생성됩니다.

저장된 결과 보기

저장된 출력 파일 중 하나를 살펴보겠습니다.

cat normal_output.txt

이전에 이 파일에 저장된 Nmap 스캔 결과를 볼 수 있습니다.

여러 IP 스캔과 출력 옵션 결합

이제 여러 IP 를 스캔하고 결과를 저장하여 배운 내용을 결합해 보겠습니다.

nmap 127.0.0.1-5 -oN multiple_hosts.txt

이 명령은 5 개의 IP 주소를 스캔하고 결과를 multiple_hosts.txt에 저장합니다.

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

cat multiple_hosts.txt

지정된 모든 IP 주소에 대한 스캔 결과를 볼 수 있습니다. 일반적으로 이 예에서는 127.0.0.1 만 열린 포트와 함께 "up"으로 표시됩니다.

서비스 버전 감지 추가

열린 포트에서 실행 중인 서비스에 대한 자세한 정보를 수집하려면 -sV 옵션을 사용할 수 있습니다.

nmap -sV localhost -oN service_scan.txt

이렇게 하면 서비스 버전 감지가 수행되고 결과가 service_scan.txt에 저장됩니다.

이것이 어떤 추가 정보를 제공하는지 살펴보겠습니다.

cat service_scan.txt

이제 출력에는 감지된 서비스에 대한 버전 정보가 포함되어야 합니다. 이는 특정 버전에 알려진 취약점이 있을 수 있으므로 보안 평가에 유용합니다.

네트워크 평가를 위한 고급 스캔 옵션

Nmap 의 기본 사항과 여러 대상을 스캔하는 방법을 이해했으므로, 사이버 보안 평가에 특히 유용한 몇 가지 고급 스캔 옵션을 살펴보겠습니다.

포트 선택 및 스캔 유형

기본적으로 Nmap 은 가장 일반적인 1000 개의 TCP 포트를 스캔합니다. 그러나 스캔할 포트를 사용자 정의할 수 있습니다.

특정 포트 스캔

특정 포트를 스캔하려면:

nmap -p 22,80,443 localhost

이 명령은 포트 22, 80 및 443 만 스캔합니다.

포트 범위를 스캔하려면:

nmap -p 20-25 localhost

이것은 포트 20 에서 25 까지 스캔합니다.

모든 65535 개의 TCP 포트를 스캔하려면:

nmap -p- localhost

모든 포트를 스캔하는 데 시간이 훨씬 더 오래 걸린다는 점에 유의하십시오.

다른 스캔 유형 사용

Nmap 은 다양한 스캔 기술을 지원합니다. 기본값은 TCP SYN 스캔 (-sS) 이지만, 이 작업에는 root 권한이 필요합니다. root 권한이 없으면 Nmap 은 TCP connect 스캔 (-sT) 을 사용합니다.

TCP connect 스캔을 명시적으로 시도해 보겠습니다.

nmap -sT localhost

더 은밀한 스캔을 위해 (root 권한 필요):

sudo nmap -sS localhost

UDP 포트를 스캔하려면 (종종 간과되지만 보안에 중요함):

sudo nmap -sU -p 53,161,162 localhost

이것은 UDP 포트 53 (DNS), 161 및 162 (SNMP) 를 스캔합니다.

OS 감지 및 버전 스캔

더 포괄적인 정보를 얻기 위해 OS 감지 및 서비스 버전 스캔을 결합해 보겠습니다.

sudo nmap -sS -O -sV localhost

-O 옵션은 대상의 운영 체제를 식별하려고 시도합니다. 이는 보안 평가에 유용한 정보를 제공하며, 운영 체제에 따라 취약점이 다를 수 있습니다.

각 옵션이 수행하는 작업을 자세히 살펴보겠습니다.

  • -sS: SYN 스캔을 수행합니다 (root 필요)
  • -O: 대상의 운영 체제를 식별하려고 시도합니다
  • -sV: 열린 포트를 조사하여 서비스/버전 정보를 확인합니다

출력에는 대상에서 실행 중인 운영 체제 및 서비스 버전에 대한 자세한 정보가 포함됩니다.

Nmap 스크립트 사용

Nmap 에는 고급 서비스 감지에서 취약성 스캔에 이르기까지 광범위한 작업을 수행할 수 있는 강력한 Nmap Scripting Engine (NSE) 이 포함되어 있습니다.

일반적으로 노출된 서비스를 확인하는 기본 스크립트를 실행해 보겠습니다.

nmap --script=default localhost

보안에 더 중점을 둔 스캔을 위해:

nmap --script=vuln localhost

이것은 대상에 대해 취약성 감지 스크립트를 실행하여 일반적인 보안 문제를 식별할 수 있습니다.

타이밍 및 성능 옵션

여러 대상을 스캔할 때 스캔 성능을 최적화하는 것이 중요해집니다. 이미 -T 옵션을 보았지만, 더 세분화된 제어가 가능합니다.

nmap -T4 --max-rtt-timeout 200ms --min-rate 1000 127.0.0.1/24

이 명령은 다음을 수행합니다.

  • "공격적" 타이밍 템플릿 사용 (-T4)
  • 최대 왕복 시간 초과를 200ms 로 설정
  • 초당 최소 1000 개의 패킷 속도 설정

이러한 설정은 여러 호스트의 스캔 속도를 크게 높일 수 있지만, 혼잡하거나 대기 시간이 긴 네트워크에서는 신뢰성이 떨어질 수 있습니다.

포괄적인 스캔을 위해 모든 것을 결합

로컬 네트워크에 대한 포괄적인 스캔을 위해 여러 기술을 결합해 보겠습니다.

sudo nmap -sS -sV -O -p 1-1000 --script=default -T4 -oA comprehensive_scan 127.0.0.1

이 명령은 다음을 수행합니다.

  • SYN 스캔
  • 서비스 버전 감지
  • OS 감지
  • 포트 1-1000 스캔
  • 기본 스크립트 실행
  • 공격적인 타이밍 사용
  • "comprehensive_scan" 접두사를 사용하여 모든 형식으로 결과 저장

결과를 살펴보겠습니다.

cat comprehensive_scan.nmap

이 포괄적인 스캔은 열린 포트, 실행 중인 서비스, 서비스 버전 및 잠재적 취약성을 포함하여 대상 시스템에 대한 풍부한 정보를 제공합니다.

윤리적 고려 사항 및 모범 사례

마무리하기 전에, Nmap 은 스캔할 명시적인 권한이 있는 네트워크에서만 사용해야 함을 강조하는 것이 중요합니다. 무단 스캔은 불법일 수 있으며 적대적인 행위로 간주될 수 있습니다.

따라야 할 몇 가지 모범 사례는 다음과 같습니다.

  1. 항상 네트워크 또는 시스템을 스캔하기 전에 권한을 얻으십시오.
  2. 가능한 경우 네트워크 영향을 최소화하기 위해 덜 공격적인 스캔을 사용하십시오.
  3. 오탐 및 오검출의 가능성을 인식하십시오.
  4. 참조 및 책임성을 위해 스캔 활동을 문서화하십시오.
  5. 발견된 정보의 개인 정보 보호 및 기밀성을 존중하십시오.

요약

이 랩에서는 네트워크 관리자 및 사이버 보안 전문가에게 중요한 기술인 Nmap 을 사용하여 여러 IP 주소를 동시에 효율적으로 스캔하는 방법을 배웠습니다. 다음 내용을 다루었습니다.

  1. Nmap 설치 및 기본 스캔 수행을 통해 핵심 기능을 이해합니다.
  2. IP 범위, CIDR 표기법 및 대상 목록을 포함한 여러 대상을 지정하는 다양한 방법
  3. 추가 분석을 위해 다양한 형식으로 스캔 결과를 해석하고 저장하는 방법
  4. 네트워크 서비스 및 잠재적 취약성에 대한 더 깊은 통찰력을 제공하는 고급 스캔 기술

이러한 기술은 네트워크 정찰 및 보안 평가의 기반을 형성합니다. 여러 IP 주소를 효율적으로 스캔함으로써 네트워크를 빠르게 매핑하고, 실행 중인 서비스를 식별하며, 잠재적인 보안 취약점을 발견할 수 있습니다.

Nmap 기술을 더 발전시키려면 다음을 고려하십시오.

  • 집중적인 보안 평가를 위한 더 전문적인 NSE 스크립트
  • Nmap 과 다른 보안 도구의 통합
  • 정기적인 보안 모니터링을 위한 스크립트를 사용한 스캔 자동화
  • 특정 스캔 요구 사항에 대한 사용자 지정 NSE 스크립트 개발

Nmap 과 같은 네트워크 스캔 도구는 항상 대상 시스템을 스캔할 적절한 권한을 가지고 책임감 있고 윤리적으로 사용해야 합니다.