Scapy 를 이용한 패킷 스푸핑

WiresharkBeginner
지금 연습하기

소개

이 랩에서는 강력한 Python 기반 패킷 조작 도구인 Scapy 를 사용하여 네트워크 패킷을 스푸핑하는 방법을 배우게 됩니다. Wireshark 로 결과를 분석하면서 사용자 지정 TCP 패킷을 제작하고 전송하는 실용적인 기술을 탐구할 것입니다.

이 랩은 Scapy 설치, Python 가상 환경 설정, 패킷 스푸핑 작업 등 필수 단계를 다룹니다. 실습을 통해 네트워크 트래픽 조작 및 보안 테스트 방법론에 대한 귀중한 통찰력을 얻을 수 있습니다.

Scapy 설치

이 단계에서는 네트워크 분석 및 보안 테스트에 사용되는 강력한 Python 기반의 대화형 패킷 조작 도구인 Scapy 를 설치합니다. Scapy 를 사용하면 세밀한 제어 기능을 통해 네트워크 패킷을 제작, 전송 및 캡처할 수 있습니다. 네트워크 패킷용 스위스 아미 나이프와 같다고 생각하면 됩니다. 필요한 모든 유형의 네트워크 패킷을 구축할 수 있습니다.

시작하기 전에 올바른 작업 디렉토리에 있는지 확인해 보겠습니다. ~/project 디렉토리는 모든 작업을 수행할 곳입니다.

cd ~/project

이제 Python 의 패키지 관리자인 pip 를 사용하여 Scapy 를 설치합니다. Pip 는 Python 패키지용 앱 스토어와 같습니다. Python Package Index (PyPI) 에서 소프트웨어를 다운로드하여 설치합니다.

pip install scapy

설치가 완료된 후에는 모든 것이 올바르게 설치되었는지 확인하는 것이 좋습니다. Scapy 의 버전 번호를 확인하여 이를 수행합니다. 이렇게 하면 Scapy 가 설치되었고 Python 이 이를 성공적으로 가져올 수 있는지 확인할 수 있습니다.

python -c "import scapy; print(scapy.__version__)"

다음과 유사한 출력을 볼 수 있습니다 (버전 번호는 약간 다를 수 있습니다).

2.4.5

마지막으로 Scapy 의 대화형 모드를 테스트해 보겠습니다. 이는 전체 스크립트를 작성하기 전에 패킷 제작을 실험할 수 있는 놀이터와 같습니다. 대화형 셸에 들어가려면 다음을 수행합니다.

python -m scapy

Scapy 의 명령 프롬프트 (>>>) 가 표시되면 작동하는 것입니다. 대화형 셸을 종료할 준비가 되면 exit()를 입력할 수 있습니다. 지금은 탐색에 대해 걱정하지 마십시오. 대화형 기능은 다음 단계에서 다룰 것입니다.

Python 환경 설정

이 단계에서는 Python 의 가상 환경을 사용하여 Scapy 실험을 위한 전용 작업 공간을 만들 것입니다. 컴퓨터의 다른 프로젝트에 영향을 주지 않고 작업할 수 있는 클린 룸을 설정하는 것과 같다고 생각하십시오. 가상 환경은 패키지 버전을 관리하고 서로 다른 Python 프로젝트 간의 충돌을 방지하는 데 도움이 됩니다.

  1. 먼저, 올바른 위치에서 시작하고 있는지 확인해 보겠습니다. 이 명령은 프로젝트를 설정할 기본 작업 디렉토리로 이동합니다.

    cd ~/project
  2. 이제 scapy-env라는 가상 환경을 만들 것입니다. 이렇게 하면 격리된 환경에 필요한 모든 Python 파일이 포함된 새 폴더가 생성됩니다.

    python -m venv scapy-env
  3. 새 환경을 사용하려면 활성화해야 합니다. 활성화되면 터미널 프롬프트 시작 부분에 (scapy-env)가 표시되어 어떤 환경에서 작업하고 있는지 알려줍니다.

    source scapy-env/bin/activate
  4. Scapy 가 이미 시스템에 설치되어 있을 수 있지만, 이 환경을 위해 특별히 설치할 것입니다. 이렇게 하면 이 프로젝트에 필요한 정확한 버전을 갖게 됩니다.

    pip install scapy
  5. 모든 것이 올바르게 설정되었는지 확인해 보겠습니다. 이 명령은 가상 환경에 설치된 모든 Python 패키지를 표시합니다. 목록에 scapy가 표시되어 사용 준비가 되었는지 확인할 수 있습니다.

    pip list
  6. 작업이 완료되면 (하지만 다음 단계에서 환경을 사용할 것이므로 지금 실행하지 마십시오) 가상 환경을 비활성화하여 일반 시스템 Python 으로 돌아갈 수 있습니다.

    deactivate

TCP 패킷 생성

이 단계에서는 Scapy 를 사용하여 기본 TCP 패킷을 생성합니다. 네트워크 패킷을 구성하는 방법을 이해하는 것은 네트워크 분석 및 보안 테스트에 필수적입니다. 실제 네트워크 통신 방식과 유사하게 TCP 패킷을 계층별로 구축합니다.

  1. 먼저, 올바른 디렉토리에 있고 가상 환경이 활성화되어 있는지 확인합니다. 가상 환경은 Python 패키지를 격리된 상태로 유지합니다.

    cd ~/project
    source scapy-env/bin/activate
  2. craft_tcp.py라는 새 Python 스크립트를 만듭니다. nano 텍스트 편집기를 사용하지만 원하는 편집기를 사용할 수 있습니다.

    nano craft_tcp.py
  3. 다음 코드를 추가하여 간단한 TCP 패킷을 생성합니다. 각 부분이 수행하는 작업을 자세히 살펴보겠습니다.

    • IP 계층은 소스 및 대상 주소를 정의합니다.
    • TCP 계층은 포트 및 연결 플래그 (이 경우 SYN) 를 지정합니다.
    • / 연산자는 이러한 계층을 결합하여 완전한 패킷을 만듭니다.
    from scapy.all import *
    
    ## Create IP layer
    ip = IP(src="192.168.1.100", dst="192.168.1.1")
    
    ## Create TCP layer
    tcp = TCP(sport=1234, dport=80, flags="S")  ## SYN packet
    
    ## Combine layers to create packet
    packet = ip/tcp
    
    ## Display packet details
    packet.show()
  4. 파일을 저장하고 (nano 에서 Ctrl+O, Enter, Ctrl+X) 실행합니다. .show() 메서드는 패킷 구조를 표시합니다.

    python craft_tcp.py
  5. 다음과 유사한 출력이 표시되어 모든 패킷 필드를 보여줍니다. Scapy 가 일부 값을 자동으로 채우고 다른 값은 None 으로 유지되는 것을 확인하십시오 (전송 시 계산됨).

    ###[ IP ]###
      version= 4
      ihl= None
      tos= 0x0
      len= None
      id= 1
      flags=
      frag= 0
      ttl= 64
      proto= tcp
      chksum= None
      src= 192.168.1.100
      dst= 192.168.1.1
      \options\
    ###[ TCP ]###
         sport= 1234
         dport= http
         seq= 0
         ack= 0
         dataofs= None
         reserved= 0
         flags= S
         window= 8192
         chksum= None
         urgptr= 0
         options= []

스푸핑된 패킷 전송

이 단계에서는 TCP 패킷 스크립트를 수정하여 가짜 소스 IP 주소로 스푸핑된 패킷을 전송합니다. 이는 공격자가 네트워크 통신에서 자신의 출처를 어떻게 숨길 수 있는지 보여줍니다. 스푸핑은 발신자가 자신의 신원을 숨기거나 다른 시스템을 가장하기 위해 IP 패킷의 소스 주소를 의도적으로 위조하는 일반적인 기술입니다.

  1. 먼저, 올바른 디렉토리에 있고 가상 환경이 활성화되어 있는지 확인합니다. 가상 환경은 이 프로젝트에 대한 Python 패키지를 격리된 상태로 유지합니다.

    cd ~/project
    source scapy-env/bin/activate
  2. send_spoofed.py라는 새 Python 스크립트를 만듭니다. 초보자를 위해 간단한 nano 텍스트 편집기를 사용합니다.

    nano send_spoofed.py
  3. 스푸핑된 TCP 패킷을 전송하려면 다음 코드를 추가합니다. 이 코드는 테스트에 안전한 개인 IP 범위 (192.168.x.x 및 10.x.x.x) 에서 임의의 IP 주소를 생성합니다. TCP 패킷은 SYN 플래그가 설정된 상태로 Google 의 DNS 서버 (8.8.8.8) 의 포트 53 으로 전송됩니다.

    from scapy.all import *
    import random
    
    ## Spoofed source IP (using private IP range)
    spoofed_ip = f"192.168.{random.randint(1,254)}.{random.randint(1,254)}"
    
    ## Create and send packet
    packet = IP(src=spoofed_ip, dst="8.8.8.8")/TCP(dport=53, flags="S")
    send(packet, verbose=False)
    
    print(f"Sent spoofed TCP packet from {spoofed_ip} to 8.8.8.8")
  4. 파일을 저장하고 (nano 에서 Ctrl+O, Enter, Ctrl+X) 실행합니다. 스크립트는 하나의 스푸핑된 패킷을 생성하고 전송합니다.

    python send_spoofed.py
  5. 생성된 가짜 소스 IP 를 보여주는 다음과 유사한 출력이 표시됩니다.

    Sent spoofed TCP packet from 192.168.45.123 to 8.8.8.8
  6. 여러 패킷을 전송하고 다른 스푸핑된 IP 가 작동하는 것을 보려면 스크립트를 수정하여 루프를 포함합니다. 이렇게 하면 10.x.x.x 범위에서 서로 다른 임의의 소스 IP 를 가진 3 개의 패킷이 전송됩니다.

    for i in range(3):
        spoofed_ip = f"10.0.{random.randint(1,254)}.{random.randint(1,254)}"
        packet = IP(src=spoofed_ip, dst="8.8.8.8")/TCP(dport=53, flags="S")
        send(packet, verbose=False)
        print(f"Sent packet {i+1} from {spoofed_ip}")

Wireshark 로 검증

이 단계에서는 Wireshark 를 사용하여 이전 단계에서 전송한 스푸핑된 패킷을 확인합니다. Wireshark 는 강력한 네트워크 프로토콜 분석기로, 네트워크 트래픽을 실시간으로 캡처하고 검사할 수 있습니다. 이 확인 프로세스는 스푸핑된 패킷이 수정된 소스 IP 주소로 실제로 네트워크에서 전송되고 있는지 확인하는 데 도움이 되므로 매우 중요합니다.

  1. 먼저, 올바른 디렉토리에 있고 가상 환경이 활성화되어 있는지 확인합니다. 가상 환경에는 이 랩에 필요한 모든 Python 패키지가 포함되어 있습니다.

    cd ~/project
    source scapy-env/bin/activate
  2. LabEx VM 에 Wireshark 를 설치합니다. Wireshark 는 미리 설치되어 있지 않으므로 먼저 설치해야 합니다.

    sudo apt-get update
    sudo apt-get install -y wireshark
  3. Wireshark 를 백그라운드에서 시작합니다. '&' 기호는 Wireshark 가 실행되는 동안 터미널을 계속 사용할 수 있도록 합니다.

    wireshark &
  4. Wireshark 인터페이스에서:

    • 활성 네트워크 인터페이스 (일반적으로 eth0) 를 선택합니다. 이는 네트워크 연결을 나타냅니다.
    • 상어 지느러미 아이콘을 클릭하여 패킷 캡처를 시작합니다. 이렇게 하면 모든 네트워크 트래픽 기록이 시작됩니다.
    • 표시 필터를 적용합니다: tcp.port == 53 - 이렇게 하면 포트 53(DNS 포트) 의 TCP 트래픽만 표시하도록 보기가 필터링됩니다.
  5. 별도의 터미널에서 스푸핑된 패킷 스크립트를 다시 실행합니다. 이렇게 하면 Wireshark 가 캡처할 새 트래픽이 생성됩니다.

    python send_spoofed.py
  6. Wireshark 에서 결과를 관찰합니다.

    • 포트 53 으로의 TCP SYN 패킷이 표시되어야 합니다. 이는 연결 시작 패킷입니다.
    • 소스 IP 주소가 스푸핑된 IP 와 일치하는지 확인합니다. - 스푸핑이 작동했음을 확인합니다.
    • TCP 핸드셰이크 시도 (SYN 패킷) 를 확인합니다. - 이는 연결 시도를 보여줍니다.
  7. 나중에 분석할 수 있도록 캡처를 저장하려면:

    • File → Save 를 클릭합니다.
    • ~/projectspoofed_capture.pcap로 저장합니다. - PCAP 파일에는 나중에 참조할 수 있도록 원시 패킷 데이터가 포함되어 있습니다.

요약

이 랩에서는 격리된 Python 가상 환경에서 네트워크 패킷 조작을 위해 Scapy 를 설치하고 구성하는 방법을 배웠습니다. 이 과정에는 환경 설정, Scapy 설치, 버전 확인 및 대화형 테스트를 통한 기능 확인이 포함되었습니다.

또한 TCP 패킷을 제작하고, 네트워크 트래픽을 시뮬레이션하기 위해 스푸핑된 패킷을 전송하고, Wireshark 를 사용하여 결과를 분석하는 실질적인 경험을 얻었습니다. 이러한 기술은 네트워크 보안 테스트 및 패킷 조작 기술의 기반을 제공합니다.