Nmap 을 이용한 방화벽 우회

NmapBeginner
지금 연습하기

소개

이 랩에서는 실제 사이버 보안 시나리오에서 방화벽 보호를 우회하기 위한 고급 Nmap 기술을 배우게 됩니다. iptables 로 구성된 방화벽을 사용하면서 조각화 스캔 (fragmented scanning) 및 위장 IP 스푸핑 (decoy IP spoofing) 과 같은 회피 방법을 연습할 것입니다.

실습을 통해 Nmap 설치, 방화벽 규칙 구성 및 결과 분석을 안내합니다. 제어된 스캔 실험을 통해 네트워크 보안 조치를 평가하고 우회하는 실질적인 경험을 얻게 될 것입니다.

Nmap 설치

이 단계에서는 보안 감사 및 네트워크 탐색에 사용되는 강력한 네트워크 스캔 도구인 Nmap 을 설치합니다. Nmap 은 패킷을 보내고 응답을 분석하여 네트워크의 호스트와 서비스를 식별하는 데 도움이 됩니다. 네트워크에 어떤 장치가 연결되어 있고 어떤 서비스를 실행하고 있는지 발견하는 디지털 지도 제작자와 같습니다.

LabEx VM 환경에는 이미 필요한 종속성이 설치되어 있어 설치 과정이 간단합니다. 다음 단계에 따라 Nmap 을 설치하십시오.

  1. LabEx VM 에서 터미널을 엽니다 (Xfce 터미널을 사용하거나 데스크탑을 마우스 오른쪽 버튼으로 클릭하고 "Open Terminal"을 선택할 수 있습니다). 터미널은 이 랩의 모든 명령을 입력하는 곳입니다.

  2. 먼저, 최신 버전을 얻을 수 있도록 패키지 목록을 업데이트합니다. 이는 새로운 소프트웨어를 다운로드하기 전에 앱 스토어를 새로 고치는 것과 같습니다.

    sudo apt update
  3. 다음 명령을 사용하여 Nmap 을 설치합니다. -y 플래그는 설치 중 모든 프롬프트를 자동으로 확인합니다.

    sudo apt install -y nmap
  4. 설치가 완료된 후, Nmap 버전을 확인하여 Nmap 이 올바르게 설치되었는지 확인합니다. 이는 설치가 성공했음을 확인합니다.

    nmap --version

    다음과 유사한 출력이 표시됩니다.

    Nmap version 7.92 ( https://nmap.org )
  5. 추가 확인을 위해 localhost (자신의 머신) 에 대해 간단한 스캔을 실행합니다. 이는 다른 대상을 스캔하기 전에 Nmap 의 작동 방식을 이해하는 데 도움이 됩니다.

    nmap -sV 127.0.0.1

    이 명령은 로컬 머신 (127.0.0.1) 을 스캔하고 열린 포트를 표시합니다 (-sV 플래그는 서비스 버전을 감지합니다). 머신에서 실행 중인 서비스 목록이 표시되며, 이는 Nmap 의 출력 형식을 이해하는 데 유용합니다.

방화벽 대상 준비

이 단계에서는 iptables를 사용하여 간단한 방화벽을 구성하여 Nmap 스캔 테스트를 위한 보호된 대상 환경을 만듭니다. 방화벽은 네트워크 트래픽을 제어하는 보안 장벽 역할을 하며, 이를 통해 스캔하는 방법을 이해하는 것은 네트워크 보안 전문가에게 필수적입니다. 이 설정은 네트워크 스캔이 방화벽 보호를 우회해야 하는 실제 시나리오를 시뮬레이션합니다.

  1. 먼저, 시스템에서 iptables를 사용할 수 있는지 확인해 보겠습니다. iptables는 관리자가 Linux 에서 방화벽 규칙을 구성할 수 있도록 하는 사용자 공간 유틸리티 프로그램입니다. LabEx VM 에 사전 설치되어 있어야 합니다.

    sudo iptables --version
  2. 새로운 규칙을 만들기 전에 기존 방화벽 규칙을 지우는 것이 좋습니다. 이렇게 하면 깨끗한 상태에서 시작하고 이전 구성과의 충돌을 방지할 수 있습니다.

    sudo iptables -F
    sudo iptables -X
  3. 이제 기본 정책을 설정합니다. 기본 정책은 특정 규칙과 일치하지 않는 패킷에 어떤 일이 발생하는지 결정합니다. 나가는 연결을 허용하면서 모든 들어오는 트래픽과 전달된 트래픽을 DROP 합니다.

    sudo iptables -P INPUT DROP
    sudo iptables -P FORWARD DROP
    sudo iptables -P OUTPUT ACCEPT
  4. 엄격한 방화벽 규칙이 있더라도 localhost (lo) 통신을 허용해야 합니다. 많은 시스템 서비스가 내부 통신에 의존하므로 이 예외는 필수적입니다.

    sudo iptables -A INPUT -i lo -j ACCEPT
  5. 보호된 웹 서버를 시뮬레이션하기 위해 특정 규칙을 만들어 보겠습니다. 이러한 규칙은 SSH (22), HTTP (80) 및 HTTPS (443) 에 대한 표준 포트에서만 들어오는 트래픽을 허용하여 일반적인 프로덕션 서버 구성을 모방합니다.

    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT  ## SSH
    sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT  ## HTTP
    sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT ## HTTPS
  6. 규칙을 구성한 후에는 이를 확인하는 것이 중요합니다. -L 플래그는 모든 규칙을 나열하고, -n은 숫자 출력을 표시하며 (더 빠르고 DNS 조회를 피함), -v는 자세한 정보를 제공합니다.

    sudo iptables -L -n -v

    구성된 규칙과 일치하지 않는 트래픽에 대한 기본 DROP 정책을 보여주는 출력이 표시되어야 합니다.

  7. 마지막으로, 규칙을 영구적으로 유지하기 위해 저장합니다. 이 단계는 재부팅 시 규칙을 유지하기 위해 Docker 에서 systemctl 을 사용할 수 없으므로 LabEx 환경에서 특히 중요합니다.

    sudo sh -c "iptables-save > /etc/iptables.rules"

Fragmented Scan 실행

이 단계에서는 Nmap 을 사용하여 기본 방화벽 보호를 우회하기 위해 조각화된 스캔을 수행하는 방법을 배웁니다. 방화벽은 종종 완전한 네트워크 패킷을 검사하지만, 조각화는 패킷을 더 작은 조각으로 분할하여 조각을 다시 조립하지 않는 간단한 방화벽 규칙으로 감지하기 어렵게 만듭니다.

  1. 먼저, 이전 단계의 방화벽 규칙이 여전히 활성 상태인지 확인합니다. 이는 회피 기술을 테스트하기 전에 기준선을 설정하는 데 도움이 됩니다.

    sudo iptables -L -n -v
  2. 회피 기술 없이 방화벽이 어떻게 응답하는지 확인하기 위해 localhost 에 대해 표준 Nmap SYN 스캔을 수행합니다. 이를 통해 어떤 포트가 적극적으로 차단되고 있는지 알 수 있습니다.

    nmap -sS 127.0.0.1

    필터링되거나 닫힌 것으로 표시된 포트를 기록해 둡니다. 이는 방화벽이 보호하고 있는 포트입니다.

  3. 이제 -f 옵션을 사용하여 조각화된 스캔을 실행합니다. 이는 Nmap 에게 TCP 헤더를 여러 개의 작은 패킷 (8 바이트 조각) 으로 분할하도록 지시합니다.

    nmap -f -sS 127.0.0.1

    일부 방화벽은 이러한 조각을 제대로 다시 조립하지 못하여 스캔이 통과하도록 허용할 수 있습니다.

  4. 더 공격적인 조각화를 위해 --mtu 옵션을 사용하여 더 작은 패킷 크기를 사용합니다. 이는 최대 전송 단위 (Maximum Transmission Unit, MTU) 를 16 바이트로 설정하여 훨씬 더 작은 조각을 생성합니다.

    nmap --mtu 16 -sS 127.0.0.1

    더 작은 조각은 더 원시적인 방화벽 구현을 우회할 수 있습니다.

  5. 추가적인 스텔스를 위해 조각화와 타이밍 제어를 결합합니다. -T2 옵션은 스캔을 느리게 만들고 침입 탐지 시스템을 트리거할 가능성을 줄입니다.

    nmap -f -T2 -sS 127.0.0.1

    이 접근 방식은 더 일반적인 네트워크 트래픽 패턴을 모방합니다.

  6. 조각화의 효과를 평가하기 위해 서로 다른 스캔 유형의 결과를 비교합니다.

    nmap -sS 127.0.0.1 | grep filtered
    nmap -f -sS 127.0.0.1 | grep filtered

    필터링된 포트 수의 차이점을 확인합니다. 필터링된 포트가 적을수록 방화벽 회피에 성공했음을 나타냅니다.

Decoy IP 추가

이 단계에서는 Nmap 의 데코이 스캔 기술을 사용하여 여러 개의 가짜 소스 주소 사이에 실제 IP 주소를 숨기는 방법을 배웁니다. 이렇게 하면 실제 스캔 머신을 식별하기 어렵게 만들어 탐지를 피하는 데 도움이 됩니다. 보안 시스템이 여러 IP 에서 트래픽이 오는 것을 감지하면 어떤 IP 가 실제 스캐너인지 쉽게 결정할 수 없습니다.

  1. 먼저, 현재 IP 주소를 확인하여 무엇을 숨기려는지 이해합니다. 이는 데코이 IP 가 실제 주소를 어떻게 가릴지 확인할 수 있도록 기준선을 설정합니다.

    ip a

    실제 IP 주소 (일반적으로 172 또는 192 로 시작) 를 기록해 둡니다. 이는 데코이 사이에 숨길 주소입니다.

  2. -D 옵션을 사용하여 데코이 IP 로 기본 스캔을 수행합니다. 여기서는 세 개의 가짜 IP 를 지정하고 ME 자리 표시자를 사용하여 실제 IP 를 포함합니다.

    sudo nmap -D 192.168.1.1,192.168.1.2,192.168.1.3,ME 127.0.0.1

    ME 자리 표시자는 데코이와 함께 섞일 실제 IP 주소를 나타냅니다.

  3. 더 현실적인 데코이를 위해 임의의 IP 주소를 사용합니다. 이는 예측 가능한 IP 패턴을 사용하는 것보다 더 나은 경우가 많습니다.

    sudo nmap -D RND:5 127.0.0.1

    이는 모니터링 시스템에 더 자연스럽게 보이는 5 개의 임의 데코이 IP 주소를 생성합니다.

  4. 조각화 (-f) 및 타이밍 제어 (-T2) 와 같은 이전 회피 기술과 데코이를 결합합니다.

    sudo nmap -D 10.0.0.1,10.0.0.2,10.0.0.3 -f -T2 127.0.0.1

    여러 회피 방법을 계층화하면 탐지가 훨씬 더 어려워집니다.

  5. 방화벽 로그 (시뮬레이션) 를 확인하여 데코이 효과를 확인합니다. 이는 방화벽이 여러 소스 IP 를 어떻게 보는지 보여줍니다.

    sudo iptables -L -n -v | grep -E "192.168|10.0"

    스캔에 사용한 모든 데코이 IP 에 대한 항목이 표시되어야 합니다.

  6. 고급 사용의 경우 데코이 네트워크를 지정합니다. 이는 동일한 네트워크에서 데코이 주소 범위를 생성합니다.

    sudo nmap -D 192.168.1.1-10 127.0.0.1

    이는 192.168.1.0 네트워크에서 10 개의 순차적인 데코이 IP 를 생성합니다.

Evasion 성공 여부 확인

이 마지막 단계에서는 방화벽 로그를 분석하고 서로 다른 방법의 스캔 결과를 비교하여 스캔 회피 기술의 효과를 평가합니다. 이를 통해 어떤 기술이 방화벽 탐지를 성공적으로 우회했는지, 그리고 어떤 기술이 의심스러운 활동으로 플래그 지정되었는지 이해하는 데 도움이 됩니다.

  1. 먼저, 현재 방화벽 로그를 확인하여 감지된 스캔 시도를 확인합니다. 이는 회피 방법을 테스트하기 전에 정상적인 방화벽 활동이 어떻게 보이는지에 대한 기준선을 제공합니다.

    sudo iptables -L -n -v | grep -E "DROP|REJECT"

    이 명령은 방화벽 규칙에 의해 차단된 패킷 수를 보여주며, 카운터는 탐지 시도를 나타냅니다.

  2. 이제 비교를 위해 두 개의 스캔 보고서를 생성합니다. 하나는 기본 스캔을 사용하고 다른 하나는 회피 기술을 사용합니다. 이 둘의 차이점은 회피의 효과를 보여줍니다.

    nmap -sS 127.0.0.1 -oN basic_scan.txt
    nmap -f -D RND:3 127.0.0.1 -oN evasion_scan.txt

    첫 번째 명령은 표준 SYN 스캔을 수행하고, 두 번째 명령은 조각화 (-f) 및 데코이 IP (-D RND:3) 를 사용합니다.

  3. 각 경우에 어떤 포트가 필터링되었는지 확인하기 위해 스캔 결과의 차이점을 분석합니다.

    diff basic_scan.txt evasion_scan.txt

    각 보고서에서 "filtered" 포트 수에 특히 주의하십시오. 회피 스캔에서 필터링된 포트가 적을수록 성공적인 우회를 나타냅니다.

  4. 성공적인 회피를 구체적으로 확인하기 위해 방화벽 카운터를 재설정하고 탐지를 모니터링하면서 회피 스캔을 실행합니다.

    sudo iptables -Z && sudo nmap -f -D RND:3 127.0.0.1 && sudo iptables -L -n -v

    카운터 값은 회피 시도 중에 방화벽에 의해 감지된 패킷 수를 보여줍니다.

  5. 포괄적인 테스트를 위해 여러 회피 기술을 결합하여 보안을 우회할 가능성을 극대화합니다.

    sudo nmap -f -D RND:5 -T2 --data-length 24 127.0.0.1 -oN final_scan.txt

    이는 조각화, 5 개의 데코이 IP, 더 느린 타이밍 (-T2) 및 임의 데이터 패딩 (--data-length 24) 을 사용합니다.

  6. 마지막으로, 기본 스캔과 회피 스캔 간의 필터링된 포트를 비교하는 요약 보고서를 생성합니다.

    echo "Basic scan filtered ports:" && grep filtered basic_scan.txt | wc -l
    echo "Evasion scan filtered ports:" && grep filtered evasion_scan.txt | wc -l

    두 스캔 간에 필터링된 포트가 크게 감소하면 성공적인 방화벽 회피를 보여줍니다.

요약

이 랩에서는 사이버 보안 평가를 위한 필수적인 Nmap 방화벽 회피 기술을 배웠습니다. 이 연습을 통해 Nmap 설치, 기본 스캔, 그리고 iptables 를 사용하여 보호된 네트워크를 시뮬레이션하는 제어된 테스트 환경을 만드는 과정을 안내했습니다.

두 가지 주요 회피 방법, 즉 탐지 시스템을 우회하기 위한 패킷 조각화와 스캔 출처를 숨기기 위한 데코이 IP 주소를 연습했습니다. 이러한 기술을 통해 윤리적인 테스트 표준을 유지하면서 실제 공격 패턴을 복제하여 네트워크 방어를 평가할 수 있습니다.