Создание поддельных пакетов в Scapy

WiresharkBeginner
Практиковаться сейчас

Введение

В этом лабораторном занятии вы узнаете, как подделывать сетевые пакеты с помощью Scapy, мощного инструмента для манипулирования пакетами на основе Python. Вы изучите практические методы создания и отправки пользовательских TCP-пакетов, а также проанализируете результаты с помощью Wireshark.

В рамках лабораторной работы рассматриваются основные этапы, включая установку Scapy, настройку виртуальной среды Python и операции по подделке пакетов. В результате практического опыта вы получите ценные знания о манипуляции сетевым трафиком и методах тестирования безопасности.

Установка Scapy

На этом этапе вы установите Scapy, мощный интерактивный инструмент для манипулирования пакетами на основе Python, используемый для сетевого анализа и тестирования безопасности. Scapy позволяет создавать, отправлять и захватывать сетевые пакеты с точным контролем. Представьте его как мультифункциональный нож для сетевых пакетов - вы можете создать любой тип сетевого пакета, который вам нужен.

Перед началом убедимся, что находимся в правильной рабочей директории. Директория ~/project - это место, где мы будем выполнять всю нашу работу:

cd ~/project

Теперь установим Scapy с помощью менеджера пакетов Python pip. 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

На этом этапе вы создадите специальное рабочее пространство для своих экспериментов с Scapy с использованием виртуального окружения Python. Представьте это как создание чистой комнаты, где вы можете работать, не влияя на другие проекты на вашем компьютере. Виртуальные окружения помогают управлять версиями пакетов и предотвращать конфликты между разными 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. Создайте новый Python-скрипт с именем craft_tcp.py. Мы будем использовать текстовый редактор 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. Сохраните файл (Ctrl+O, Enter, Ctrl+X в nano) и запустите его. Метод .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-адресом. Это демонстрирует, как злоумышленники могут скрыть свою истинную точку отправки в сетевых коммуникациях. Создание поддельных пакетов (spoofing) - это распространённая техника, при которой отправитель намеренно подделывает исходный адрес в IP-пакетах, чтобы скрыть свою личность или имитировать другой системный узел.

  1. Сначала убедитесь, что вы находитесь в правильной директории и ваше виртуальное окружение активно. Виртуальное окружение изолирует ваши Python-пакеты для данного проекта:

    cd ~/project
    source scapy-env/bin/activate
    
  2. Создайте новый Python-скрипт с именем send_spoofed.py. Мы будем использовать текстовый редактор nano, который прост для начинающих:

    nano send_spoofed.py
    
  3. Добавьте следующий код для отправки поддельных TCP-пакетов. Код генерирует случайные IP-адреса в частных диапазонах (192.168.x.x и 10.x.x.x), которые безопасны для тестирования. TCP-пакет отправляется на DNS-сервер Google (8.8.8.8) на порт 53 с установленным флагом SYN:

    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. Сохраните файл (Ctrl+O, Enter, Ctrl+X в nano) и запустите его. Скрипт сгенерирует и отправит один поддельный пакет:

    python send_spoofed.py
    
  5. Вы должны увидеть вывод, похожий на этот, показывающий сгенерированный фальшивый исходный IP-адрес:

    Sent spoofed TCP packet from 192.168.45.123 to 8.8.8.8
    
  6. Чтобы отправить несколько пакетов и увидеть различные поддельные IP-адреса в действии, измените скрипт, добавив цикл. Это отправит 3 пакета с разными случайными исходными IP-адресами из диапазона 10.x.x.x:

    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. Установите Wireshark в виртуальной машине LabEx. Wireshark не предустановлен, поэтому сначала нужно его установить:

    sudo apt-get update
    sudo apt-get install -y wireshark
    
  3. Запустите Wireshark в фоновом режиме. Символ '&' позволяет вам продолжать использовать терминал, пока Wireshark работает:

    wireshark &
    
  4. В интерфейсе Wireshark:

    • Выберите активный сетевой интерфейс (обычно eth0) - это представляет ваше сетевые подключение.
    • Начните захват пакетов, нажав на значок акулы - это запускает запись всего сетевого трафика.
    • Примените фильтр отображения: tcp.port == 53 - это фильтрует представление, чтобы показывать только TCP-трафик на порту 53 (порт DNS).
  5. В отдельном терминале запустите снова скрипт для отправки поддельных пакетов. Это создаст новый трафик для захвата в Wireshark:

    python send_spoofed.py
    
  6. Наблюдайте за результатами в Wireshark:

    • Вы должны увидеть TCP SYN-пакеты на порт 53 - это пакеты инициации соединения.
    • Убедитесь, что исходные IP-адреса соответствуют вашим поддельным IP-адресам - это подтверждает, что создание поддельных пакетов прошло успешно.
    • Обратите внимание на попытки TCP-рукопожатия (SYN-пакеты) - они показывают попытки установить соединение.
  7. Чтобы сохранить захваченный трафик для дальнейшего анализа:

    • Нажмите Файл → Сохранить.
    • Сохраните как spoofed_capture.pcap в ~/project - файлы в формате PCAP содержат необработанные данные пакетов для дальнейшего использования.

Резюме

В рамках данной лабораторной работы вы научились устанавливать и настраивать Scapy для манипуляции сетевыми пакетами в изолированном виртуальном окружении Python. Процесс включал настройку окружения, установку Scapy и проверку его функциональности с помощью проверки версии и интерактивного тестирования.

Вы также получили практический опыт в создании TCP-пакетов, отправке поддельных пакетов для имитации сетевого трафика и анализе результатов с использованием Wireshark. Эти навыки являются основой для тестирования сетевой безопасности и применению методов манипуляции пакетами.