Nmap 을 사용하여 방화벽 제한 감지 및 우회

NmapBeginner
지금 연습하기

소개

이 랩에서는 네트워크 보안 분야에서 Nmap 을 사용하여 방화벽 제한을 탐지하고 우회하는 방법을 배우게 됩니다. 방화벽은 미리 정의된 규칙에 따라 네트워크 트래픽을 필터링하는 중요한 보안 요소입니다. 보안 전문가로서, 포괄적인 보안 평가 및 취약점 식별을 위해 방화벽을 우회하는 방법을 이해하는 것이 중요합니다.

강력한 네트워크 스캔 도구인 Nmap 을 사용하여 다양한 방화벽 우회 기술을 탐구할 것입니다. 이러한 기술을 통해 보안 전문가는 잠재적 공격자가 보안 조치를 우회하려는 시도를 모방하여 네트워크 방어를 테스트할 수 있습니다. 이 랩을 마치면 Nmap 의 방화벽 우회 기능에 대한 실질적인 경험을 얻고 네트워크 보안에서의 적용 방법을 이해하게 될 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 92%입니다.학습자들로부터 98%의 긍정적인 리뷰율을 받았습니다.

스캔을 위한 로컬 서비스 설정

Nmap 스캔 기술을 연습하기 전에 스캔할 대상 서비스가 있어야 합니다. 마치 사격장에서 표적을 갖는 것과 같습니다. 이 단계에서는 로컬 머신에 간단한 HTTP 서버를 생성합니다. 이 서버는 모든 스캔 연습의 대상 역할을 합니다.

먼저 터미널을 열어야 합니다. 터미널은 컴퓨터에 지시를 내릴 수 있는 명령 센터와 같습니다. 터미널이 열리면 HTTP 서비스에 대한 디렉토리 구조를 생성합니다. 디렉토리는 컴퓨터의 폴더와 유사하며 파일을 구성하는 데 도움이 됩니다.

mkdir -p /home/labex/project/http_service

mkdir 명령은 "make directory"의 약자입니다. -p 옵션은 경로에 중간 디렉토리가 존재하지 않는 경우 생성되도록 합니다. 따라서 이 명령은 /home/labex/project 경로 내에 http_service라는 디렉토리를 생성합니다.

다음으로, 새로 생성된 디렉토리로 이동해야 합니다. 컴퓨터에서 폴더를 열어 내용을 액세스하는 것처럼, cd 명령을 사용하여 디렉토리로 이동합니다.

cd /home/labex/project/http_service

이제 간단한 HTML 파일을 생성합니다. HTML 은 웹 페이지를 만드는 데 사용되는 언어입니다. HTTP 서버는 이 HTML 파일을 요청하는 모든 사람에게 제공합니다.

echo "<html><body><h1>Welcome to the StarPath Exploration Server</h1></body></html>" > index.html

echo 명령은 따옴표 안의 텍스트를 출력합니다. > 기호는 해당 출력을 index.html이라는 파일로 리디렉션합니다. 따라서 이 명령은 지정된 기본 HTML 콘텐츠를 사용하여 index.html이라는 파일을 생성합니다.

파일이 올바르게 생성되었는지 확인하기 위해 내용을 볼 수 있습니다. 이 목적으로 cat 명령을 사용합니다.

cat index.html

cat 명령은 파일의 내용을 읽어 터미널에 표시합니다. 방금 생성한 HTML 콘텐츠가 표시되어야 합니다.

<html><body><h1>Welcome to the StarPath Exploration Server</h1></body></html>

이제 간단한 HTTP 서버를 시작할 차례입니다. Python 의 내장 http.server 모듈을 사용합니다. Python 은 프로그래밍 언어이며, 이 모듈을 사용하면 웹 서버를 빠르게 설정할 수 있습니다.

python3 -m http.server 8000

Python 의 -m 옵션은 모듈을 스크립트로 실행하는 데 사용됩니다. 여기서는 http.server 모듈을 실행하고 포트 8000 에서 수신하도록 지시합니다. 포트는 데이터가 컴퓨터에 들어오고 나가는 문과 같습니다.

이 명령을 실행한 후 다음과 유사한 출력이 표시되어야 합니다.

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

이 출력은 HTTP 서버가 실행 중이며 포트 8000 에서 연결을 기다리고 있음을 나타냅니다. 이 터미널 창을 열어 두는 것이 중요합니다. 닫으면 서버가 실행을 중지합니다.

로컬 서비스를 성공적으로 설정했습니다. 다음 단계에서는 이 서비스를 Nmap 스캔 연습의 대상으로 사용합니다.

호스트 검색 우회를 통한 기본 Nmap 스캔

이 단계에서는 첫 번째 Nmap 스캔을 수행합니다. 하지만 시작하기 전에 핵심 개념을 이해해 보겠습니다. 많은 방화벽은 "ping"으로 일반적으로 알려진 ICMP 에코 요청을 차단하도록 구성되어 있습니다. Nmap 은 일반적으로 포트를 스캔하기 전에 이러한 ping 요청을 사용하여 호스트가 온라인 상태인지 확인합니다. 그러나 이 호스트 검색 단계를 우회함으로써 방화벽이 ICMP 트래픽을 차단하는 경우에도 대상을 스캔할 수 있습니다.

먼저 이전 터미널에서 HTTP 서버가 계속 실행 중인지 확인합니다. 그런 다음 새 터미널 창을 엽니다. 이 새 터미널에서 프로젝트 디렉토리로 이동해야 합니다. 프로젝트 디렉토리는 이 실험과 관련된 모든 파일과 구성이 저장되는 곳입니다. 이를 위해 "change directory"의 약자인 cd 명령을 사용합니다. 다음은 명령입니다.

cd /home/labex/project

이제 올바른 디렉토리에 있으므로 로컬 HTTP 서버에 대해 기본 Nmap 스캔을 실행할 차례입니다. Nmap 명령에서 -Pn 옵션을 사용합니다. 이 옵션은 Nmap 에게 호스트 검색 단계를 건너뛰고 대상이 온라인 상태라고 가정하도록 지시합니다. 다음은 명령입니다.

nmap -Pn --reason -p 8000 localhost

각 옵션이 수행하는 작업을 이해하기 위해 명령 옵션을 분석해 보겠습니다.

  • -Pn: 이 옵션은 호스트 검색 프로세스를 건너뜁니다. ping 을 사용하여 대상이 온라인 상태인지 확인하는 대신 Nmap 은 대상을 직접 온라인 상태로 간주하고 포트 스캔을 시작합니다.
  • --reason: 이 옵션은 Nmap 이 포트가 특정 상태인 이유를 표시하도록 합니다. 예를 들어 포트가 열려 있으면 열려 있는 이유를 알려줍니다.
  • -p 8000: 이 옵션은 Nmap 에게 포트 8000 만 스캔하도록 지시합니다. 로컬 HTTP 서버가 이 포트에서 실행 중이므로 이 특정 포트에 관심이 있습니다.
  • localhost: 이것은 스캔하려는 대상입니다. 이 경우 localhost는 로컬 머신을 나타냅니다.

명령을 실행한 후 다음과 유사한 출력이 표시되어야 합니다.

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

PORT     STATE SERVICE      REASON
8000/tcp open  http-alt     syn-ack

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

출력은 포트 8000 이 열려 있고 HTTP 서비스를 실행 중임을 보여줍니다. "REASON" 열은 "syn-ack"라고 표시되어 있는데, 이는 Nmap 이 포트에 연결을 시도했을 때 포트가 SYN-ACK 패킷으로 응답했음을 의미합니다. 이것은 TCP 프로토콜에서 서버가 연결 요청을 수락하는 표준 방법입니다.

다음으로 스캔 결과를 파일에 저장하려고 합니다. 결과를 저장하는 것은 나중에 분석하거나, 다른 사람과 공유하거나, 향후 스캔과 비교할 수 있으므로 유용합니다. 결과를 저장하려면 Nmap 명령의 출력을 파일로 리디렉션하는 > 기호를 사용합니다. 다음은 명령입니다.

nmap -Pn --reason -p 8000 localhost > /home/labex/project/nmap_scan.txt

마지막으로 저장된 스캔 결과를 확인해 보겠습니다. "concatenate"의 약자인 cat 명령을 사용합니다. 이 명령은 파일의 내용을 읽어 터미널에 표시합니다. 다음은 명령입니다.

cat /home/labex/project/nmap_scan.txt

이전에 터미널에 표시되었던 것과 동일한 스캔 결과가 표시되어야 합니다.

이 기본 스캔은 -Pn 옵션을 사용하여 ping 프로브를 차단하는 방화벽 규칙을 우회하는 방법을 보여줍니다. 실제 상황에서 이 기술은 ICMP 트래픽을 차단하는 방화벽으로 보호되는 호스트를 스캔해야 할 때 매우 유용할 수 있습니다.

패킷 조각화를 이용한 고급 방화벽 우회

이 단계에서는 패킷 단편화라는 보다 진보된 방화벽 우회 기술을 살펴봅니다. 시작하기 전에 패킷 단편화가 무엇인지 이해해 보겠습니다. 데이터가 네트워크를 통해 전송될 때 패킷이라고 하는 더 작은 단위로 나뉩니다. 일부 방화벽 및 침입 탐지 시스템 (IDS) 은 악성 활동의 징후가 있는지 이러한 패킷을 검사하도록 설계되었습니다. 그러나 이러한 보안 시스템은 더 작은 조각으로 분해된 패킷인 단편화된 패킷을 처리하는 데 어려움을 겪을 수 있습니다. 이러한 어려움은 스캔 중에 특정 보안 조치를 우회할 수 있는 기회를 제공할 수 있습니다.

스캔 대상으로는 로컬 HTTP 서버를 계속 사용합니다. 먼저 이전 스캔을 수행한 터미널에서 해당 디렉토리로 이동해야 합니다. 이 디렉토리는 프로젝트 파일이 있는 곳이며, 명령이 올바르게 작동하려면 이 디렉토리에 있어야 합니다. 이렇게 하려면 다음 명령을 실행합니다.

cd /home/labex/project

이제 올바른 디렉토리에 있으므로 Nmap 의 단편화 옵션을 사용하여 스캔을 실행할 준비가 되었습니다. 이 옵션은 IP 패킷을 더 작은 조각으로 분할하여 패킷 필터가 스캔을 감지하기 어렵게 만듭니다. 다음은 사용할 명령입니다.

sudo nmap -f -Pn --reason -p 8000 localhost

이 명령에서 추가 옵션 -f를 분석해 보겠습니다. -f 옵션은 Nmap 에게 IP 패킷을 단편화하도록 지시합니다. 이렇게 하면 패킷 필터가 패킷을 분석하고 스캔을 수행하고 있음을 감지하는 것이 더 어려워집니다.

명령을 실행한 후 다음과 유사한 출력이 표시되어야 합니다.

Starting Nmap 7.80 ( https://nmap.org ) at 2025-03-18 16:46 CST
Nmap scan report for localhost (127.0.0.1)
Host is up, received user-set (0.000062s latency).
Other addresses for localhost (not scanned): ::1

PORT     STATE SERVICE  REASON
8000/tcp open  http-alt syn-ack ttl 64

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

이 출력은 스캔 결과를 보여줍니다. 호스트 (localhost) 가 작동 중이고 포트 8000 이 열려 있음을 알려줍니다.

다음으로 이러한 결과를 별도의 파일에 저장하려고 합니다. 이렇게 하면 나중에 참조하고 다른 스캔 결과와 비교할 수 있습니다. 결과를 저장하려면 다음 명령을 실행합니다.

sudo nmap -f -Pn --reason -p 8000 localhost > /home/labex/project/nmap_frag_scan.txt

이 명령의 > 기호는 Nmap 스캔의 출력을 지정된 파일로 리디렉션합니다.

이제 이 파일의 내용을 확인하여 결과가 올바르게 저장되었는지 확인해 보겠습니다. 파일의 내용을 표시하는 데 사용되는 cat 명령을 사용합니다.

cat /home/labex/project/nmap_frag_scan.txt

스캔 결과는 이전 스캔과 유사하게 보일 수 있지만 기본 기술은 다릅니다. 이 경우 Nmap 은 IP 패킷을 더 작은 조각으로 단편화하여 상태 비저장 패킷 필터가 스캔을 감지하기 어렵게 만듭니다.

지금까지 사용한 두 가지 스캔 방법, 즉 일반 스캔과 단편화된 스캔을 비교해 보겠습니다. 이 비교를 저장할 새 파일을 만듭니다. 다음은 이를 수행하는 명령입니다.

echo "Comparing regular scan vs. fragmented scan:" > /home/labex/project/scan_comparison.txt
echo "---------------------------------------------" >> /home/labex/project/scan_comparison.txt
echo "" >> /home/labex/project/scan_comparison.txt
echo "1. Regular scan with -Pn:" >> /home/labex/project/scan_comparison.txt
cat /home/labex/project/nmap_scan.txt >> /home/labex/project/scan_comparison.txt
echo "" >> /home/labex/project/scan_comparison.txt
echo "2. Fragmented scan with -f -Pn:" >> /home/labex/project/scan_comparison.txt
cat /home/labex/project/nmap_frag_scan.txt >> /home/labex/project/scan_comparison.txt

이 명령은 먼저 비교 파일에 헤더를 쓰고, 일반 스캔 및 단편화된 스캔의 결과를 파일에 추가합니다.

이제 비교 파일의 내용을 표시하여 비교를 검토해 보겠습니다.

cat /home/labex/project/scan_comparison.txt

제어된 환경에서는 두 스캔의 결과가 유사하게 보일 수 있습니다. 그러나 실제 시나리오에서는 이러한 다양한 기술이 서로 다른 방화벽 구성에 대해 다양한 수준의 성공을 거둘 수 있습니다. 패킷 단편화 (-f) 는 상태 비저장 패킷 필터에 특히 효과적입니다. 상태 비저장 패킷 필터는 각 패킷을 독립적으로 검사하며 종종 조각을 다시 조립하여 전체 패킷을 검사할 수 없으므로 단편화된 스캔이 이러한 필터를 우회할 가능성이 더 큽니다.

더 많은 단편화를 위해 Nmap 을 사용하면 여러 -f 플래그 (예: -ff) 를 사용하거나 --mtu 옵션으로 사용자 지정 MTU(Maximum Transmission Unit) 크기를 지정하여 수준을 높일 수 있습니다. MTU 는 네트워크를 통해 전송할 수 있는 패킷의 최대 크기입니다. 사용자 지정 MTU 를 지정하면 패킷이 단편화되는 방식을 제어할 수 있습니다.

이 기술은 보안 평가를 수행할 때 패킷 단편화를 방화벽 감지를 회피하는 추가 방법으로 사용할 수 있음을 보여줍니다.

요약

이 Lab 에서는 Nmap 의 방화벽 회피 기술을 사용하여 방화벽 제한을 식별하고 우회하는 방법을 배웠습니다. 먼저, 외부 시스템에 영향을 주지 않고 다양한 스캔 방법을 연습할 수 있는 안전한 환경을 조성하기 위해 로컬 HTTP 서버를 스캔 대상으로 설정했습니다. 그런 다음, 방화벽이 ICMP 에코 요청을 차단할 때 유용한 호스트 검색을 우회하기 위해 -Pn 옵션을 사용하여 기본 Nmap 스캔을 수행했습니다. 이를 통해 방화벽 규칙 뒤에 숨겨져 있을 수 있는 포트를 스캔할 수 있었습니다.

다음으로, -f 옵션을 사용한 패킷 단편화라는 고급 회피 기술을 탐구했습니다. 이 방법은 IP 패킷을 단편화하여 상태 비저장 패킷 필터가 스캔을 감지하고 차단하기 어렵게 만듭니다. 두 기술의 결과를 비교하여 차이점과 적용 방법을 이해했습니다. 이러한 기술은 보안 전문가가 철저한 보안 평가를 수행하는 데 필수적입니다. 그러나 법률 및 정책 위반을 방지하기 위해 적절한 권한을 가진 승인된 평가에만 사용해야 합니다.