Введение
В этом лабораторном занятии вы узнаете, как подделывать сетевые пакеты с помощью 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-проектами.
Сначала убедимся, что мы начинаем с правильного места. Эта команда переходит в стандартную рабочую директорию, где мы настроим наш проект:
cd ~/projectТеперь создадим виртуальное окружение с именем
scapy-env. Это создаст новую папку, содержащую все необходимые файлы Python для изолированного окружения:python -m venv scapy-envЧтобы начать использовать наше новое окружение, нам нужно его активировать. Когда окружение активно, вы увидите
(scapy-env)в начале строки приглашения терминала, которое напомнит вам, в каком окружении вы работаете:source scapy-env/bin/activateДаже если Scapy уже установлен на вашей системе, мы установим его специально для этого окружения. Это гарантирует, что у нас есть именно та версия, которая нужна для этого проекта:
pip install scapyУбедимся, что все настроено правильно. Эта команда показывает все установленные в нашем виртуальном окружении пакеты Python. Вы должны увидеть
scapyв списке, что подтверждает, что он готов к использованию:pip listКогда вы закончите работу (но не запускайте это сейчас, так как мы будем использовать окружение на следующих этапах), вы можете деактивировать виртуальное окружение, чтобы вернуться к обычной системной версии Python:
deactivate
Создание TCP-пакета
На этом этапе вы будете использовать Scapy для создания простого TCP-пакета. Понимание того, как создавать сетевые пакеты, является важной частью сетевого анализа и тестирования безопасности. Мы построим TCP-пакет послойно, имитируя работу реальной сетевой коммуникации.
Сначала убедитесь, что вы находитесь в правильной директории и ваше виртуальное окружение активно. Виртуальное окружение изолирует ваши Python-пакеты:
cd ~/project source scapy-env/bin/activateСоздайте новый Python-скрипт с именем
craft_tcp.py. Мы будем использовать текстовый редактор nano, но вы можете использовать любой редактор по вашему выбору:nano craft_tcp.pyДобавьте следующий код для создания простого 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()Сохраните файл (Ctrl+O, Enter, Ctrl+X в nano) и запустите его. Метод .show() отобразит структуру пакета:
python craft_tcp.pyВы должны увидеть вывод, похожий на этот, показывающий все поля пакета. Обратите внимание, как 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-пакетах, чтобы скрыть свою личность или имитировать другой системный узел.
Сначала убедитесь, что вы находитесь в правильной директории и ваше виртуальное окружение активно. Виртуальное окружение изолирует ваши Python-пакеты для данного проекта:
cd ~/project source scapy-env/bin/activateСоздайте новый Python-скрипт с именем
send_spoofed.py. Мы будем использовать текстовый редактор nano, который прост для начинающих:nano send_spoofed.pyДобавьте следующий код для отправки поддельных 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")Сохраните файл (Ctrl+O, Enter, Ctrl+X в nano) и запустите его. Скрипт сгенерирует и отправит один поддельный пакет:
python send_spoofed.pyВы должны увидеть вывод, похожий на этот, показывающий сгенерированный фальшивый исходный IP-адрес:
Sent spoofed TCP packet from 192.168.45.123 to 8.8.8.8Чтобы отправить несколько пакетов и увидеть различные поддельные 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-адресами.
Сначала убедитесь, что вы находитесь в правильной директории и ваше виртуальное окружение активно. Виртуальное окружение содержит все необходимые Python-пакеты для этой лабораторной работы:
cd ~/project source scapy-env/bin/activateУстановите Wireshark в виртуальной машине LabEx. Wireshark не предустановлен, поэтому сначала нужно его установить:
sudo apt-get update sudo apt-get install -y wiresharkЗапустите Wireshark в фоновом режиме. Символ '&' позволяет вам продолжать использовать терминал, пока Wireshark работает:
wireshark &В интерфейсе Wireshark:
- Выберите активный сетевой интерфейс (обычно eth0) - это представляет ваше сетевые подключение.
- Начните захват пакетов, нажав на значок акулы - это запускает запись всего сетевого трафика.
- Примените фильтр отображения:
tcp.port == 53- это фильтрует представление, чтобы показывать только TCP-трафик на порту 53 (порт DNS).
В отдельном терминале запустите снова скрипт для отправки поддельных пакетов. Это создаст новый трафик для захвата в Wireshark:
python send_spoofed.pyНаблюдайте за результатами в Wireshark:
- Вы должны увидеть TCP SYN-пакеты на порт 53 - это пакеты инициации соединения.
- Убедитесь, что исходные IP-адреса соответствуют вашим поддельным IP-адресам - это подтверждает, что создание поддельных пакетов прошло успешно.
- Обратите внимание на попытки TCP-рукопожатия (SYN-пакеты) - они показывают попытки установить соединение.
Чтобы сохранить захваченный трафик для дальнейшего анализа:
- Нажмите Файл → Сохранить.
- Сохраните как
spoofed_capture.pcapв~/project- файлы в формате PCAP содержат необработанные данные пакетов для дальнейшего использования.
Резюме
В рамках данной лабораторной работы вы научились устанавливать и настраивать Scapy для манипуляции сетевыми пакетами в изолированном виртуальном окружении Python. Процесс включал настройку окружения, установку Scapy и проверку его функциональности с помощью проверки версии и интерактивного тестирования.
Вы также получили практический опыт в создании TCP-пакетов, отправке поддельных пакетов для имитации сетевого трафика и анализе результатов с использованием Wireshark. Эти навыки являются основой для тестирования сетевой безопасности и применению методов манипуляции пакетами.


