Главная / Блог / Wireshark для CTF: пошаговый анализ трафика от PCAP до флага

15 мин.00

Wireshark для CTF: пошаговый анализ трафика от PCAP до флага

Wireshark для CTF: пошаговый анализ трафика от PCAP до флага

Wireshark для CTF: пошаговый анализ трафика от PCAP до флага

В разборе задания EscapeRoom на CyberDefenders — 54 SSH-сессии, тысячи пакетов, три HTTP-объекта. Всё интересное укладывается в 0.3% незашифрованного трафика, остальные 99.7% — TLS, который без ключей бесполезен. Можно час прокручивать пакеты колесом мыши. А можно за три минуты открыть Statistics → Protocol Hierarchy, увидеть эти 0.3% HTTP и вытащить флаг из User-Agent заголовка wget-запроса.

Разница между «читаю пакеты сверху вниз» и «решил за пять минут» — не талант, а методика. Wireshark CTF анализ трафика — навык, который отрабатывается за десяток решённых заданий, если есть алгоритм. Его и разберём: от первого открытия PCAP-файла до извлечения флага через HTTP, FTP и DNS.

Требования к окружению

Перед первым PCAP — убедитесь, что рабочее место не подведёт.

Компонент Минимум Рекомендуется
ОС Windows 10, Linux (любой), macOS Kali Linux / Parrot OS (предустановлен)
Wireshark 3.6+ 4.0+ (улучшена производительность на крупных дампах)
tshark Входит в Wireshark Проверить: tshark --version
RAM 4 ГБ для дампов до 50 МБ 8 ГБ для файлов >200 МБ
CyberChef Веб-версия gchq.github.io/CyberChef Локальная копия для работы offline
Утилиты strings, file, grep На Windows — через WSL или Git Bash

Wireshark скачивается с wireshark.org. На Linux в security-дистрибутивах он предустановлен. На Windows при установке выберите Npcap вместо устаревшего WinPcap — без этого современные сетевые адаптеры могут работать криво.

Какие техники моделируют CTF-задания по сетевой криминалистике

Задания категории network forensics CTF моделируют конкретные техники из реальных атак. Понимание этих техник в терминах MITRE ATT&CK сразу подсказывает, на какие протоколы смотреть при анализе pcap файлов.

Техника MITRE ATT&CK Что ищем в PCAP Типичный CTF-сценарий
Network Sniffing (T1040, Credential Access) Перехваченные credentials Пароли в FTP/HTTP Basic/SMTP
Web Protocols (T1071.001, C2) C2-коммуникации через HTTP Скрытые команды в User-Agent или Cookie
File Transfer Protocols (T1071.002, C2) Передача файлов по FTP/TFTP Вредоносный бинарник в FTP-сессии
Credentials In Files (T1552.001, Credential Access) Пароли в конфигурационных файлах Файл с credentials, переданный по HTTP
Exfiltration Over Unencrypted Non-C2 Protocol (T1048.003) DNS exfiltration, ICMP tunneling Флаг закодирован в DNS-поддоменах
Standard Encoding (T1132.001, C2) Base64/hex в payload Закодированный флаг в HTTP-заголовке

Задание упоминает «утечку данных» — начинайте с DNS exfiltration или незашифрованного HTTP. «Скомпрометированные учётные данные» — проверяйте FTP и SMTP. «Загрузка вредоносного ПО» — ищите HTTP Export Objects и нестандартные User-Agent.

Разведка: первые пять минут с PCAP-файлом

Открыли файл — не начинайте читать пакеты сверху вниз. Это ловушка, в которую попадают все на первых соревнованиях. Первые пять минут — разведка: определить, куда потратить время, а что отсечь как фоновый шум.

Protocol Hierarchy — куда смотреть первым

Statistics → Protocol Hierarchy — первое, что открываете после загрузки PCAP. Окно показывает процентное распределение протоколов по количеству пакетов и объёму данных. Это карта сетевого дампа трафика — на ней сразу видно, где копать.

На что обращать внимание:

  • HTTP (0.1–5%) — тут чаще всего прячут флаги на начальном и среднем уровне. Credentials, файлы, скрытые строки в заголовках
  • DNS (5–15%) — если доля аномально высока или присутствуют TXT-записи, скорее всего DNS exfiltration
  • FTP (любой %) — credentials передаются в открытом виде, всегда проверяйте
  • TLS/SSL (>80%) — если доминирует, ищите ключ дешифрации в условии задания
  • ICMP — нетипично большие ICMP-пакеты могут содержать скрытые данные
  • Нестандартные порты — трафик на портах 4444, 8080, 1337 — классика для reverse shell и C2

В разборе evidence.pcap из CTF-задания Protocol Hierarchy показал: 88.4% пакетов — TCP, внутри TLS (91.1% по объёму), DNS — 11.6% пакетов, HTTP — 0.3%. Именно эти незашифрованные 0.3% содержали всё нужное для извлечения данных из pcap. Без Protocol Hierarchy пришлось бы копаться в зашифрованном TLS часами.

Conversations и Endpoints — кто с кем общается

Statistics → Conversations показывает все пары взаимодействующих хостов. Вкладка TCP, отсортированная по объёму переданных байтов, мгновенно выделяет «толстые» сессии.

Как использовать при анализе pcap файлов для CTF:

  • Сессии с большим объёмом данных от сервера — передача файлов или успешная аутентификация
  • Сессии с малым объёмом — неудачные попытки, сканирование, разведка
  • Один внешний IP с десятками соединений — brute-force или порт-сканирование
  • Трафик на нестандартных портах — C2 или reverse shell

В EscapeRoom именно Conversations позволил отличить 52 неудачных SSH brute-force попытки (малый объём данных от сервера) от двух успешных сессий (большой объём), как описано в разборе на InfoSec Writeups. Без этого пришлось бы вручную просматривать каждую из 54 сессий. Представьте удовольствие.

Statistics → Endpoints дополняет картину: один внутренний IP, общающийся с десятком внешних — нормально. Один внешний IP, инициирующий сотни соединений — аномалия, стоит копнуть.

Decision tree после разведки:

Что показала разведка Следующий шаг
Присутствует HTTP-трафик Фильтр http, затем Export Objects
Есть FTP-сессии Фильтр ftp, искать USER/PASS
Аномально много DNS Фильтр dns, проверить TXT-записи и длинные поддомены
Только TLS/SSL Искать ключ дешифрации в условии задания
Нестандартные порты (4444, 1337) Follow TCP Stream на эти порты
Большие ICMP-пакеты Проверить payload на скрытые данные в hex-представлении

Protocol Hierarchy и Conversations показывают статистику, не содержимое. Это инструмент для ответа «куда копать», а не для поиска флага напрямую.

Display-фильтры Wireshark для анализа трафика

Display-фильтры — основной инструмент навигации по дампу. Вводятся в строку в верхней части окна Wireshark и применяются по Enter. Без них packet capture анализ файла с тысячами пакетов превращается в лотерею.

Базовые wireshark фильтры для анализа, которые стоит знать наизусть:

  • http — весь HTTP-трафик
  • dns — все DNS-запросы и ответы
  • ftp — FTP-команды (без содержимого файлов; для данных — ftp-data)
  • smtp — электронная почта
  • tcp.port == 4444 — трафик на конкретном порту
  • ip.addr == 10.0.2.15 — все пакеты от/к конкретному IP
  • http.request.method == "POST" — только POST-запросы (формы, загрузки, credentials)
  • http.response.code == 200 — успешные HTTP-ответы

Комбинирование: && — логическое И, || — ИЛИ, ! — отрицание. Фильтр http && ip.src == 10.0.2.15 покажет HTTP-трафик от конкретного хоста. А !dns && !arp уберёт фоновый шум DNS-резолвинга и ARP-запросов — сразу станет чище.

Поиск флагов по содержимому пакетов

Когда формат флага известен (например, CTF{...} или flag{...}), поиск по содержимому — самый быстрый путь:

  • frame contains "flag" — ищет строку во всём фрейме, включая payload и заголовки
  • http contains "CTF{" — ищет только в HTTP-пакетах
  • tcp contains "password" — пароли в TCP-потоке
  • dns.qry.name contains "suspicious" — подстроки в DNS-запросах

Для регулярных выражений — оператор matches: фильтр http.request.uri matches ".*\\.php" покажет все запросы к PHP-скриптам, а dns.qry.name matches "^[a-f0-9]{8,}\\." выявит DNS-запросы с hex-строками в поддоменах — типичный признак DNS exfiltration.

Если формат флага неизвестен — последовательная серия запросов: frame contains "flag", затем frame contains "key", frame contains "secret", frame contains "pass". На CTF начального уровня флаг в открытом виде встречается примерно в половине заданий. Да, вот настолько просто — не усложняйте.

Фильтры по содержимому работают только с незашифрованным трафиком. Если пакеты идут через TLS и у вас нет ключа дешифрации — contains и matches на зашифрованных сессиях бесполезны.

Восстановление HTTP-сессий Wireshark и извлечение файлов

HTTP — самый частый источник pcap forensics флагов на CTF начального и среднего уровня. Две техники: Follow TCP Stream и Export Objects.

Follow TCP Stream для чтения диалогов

Правый клик на любом HTTP-пакете → Follow → TCP Stream. Wireshark собирает все пакеты одной TCP-сессии в единый читаемый поток. Красный текст — данные от клиента, синий — от сервера. Перехваченный диалог, склеенный из фрагментов.

В нижней части окна кнопки навигации между потоками — Stream 0, Stream 1, Stream 2 и далее. На CTF с небольшим количеством потоков стоит просмотреть каждый последовательно.

Типичные находки при Follow TCP Stream на CTF:

  • Credentials в HTTP Basic — заголовок Authorization: Basic с Base64-строкой
  • POST-данные — логины, пароли, формы отправки
  • Скрытые строки в заголовках — User-Agent, X-Custom-Header, Cookie
  • Команды в открытом виде — FTP USER/PASS, SMTP AUTH LOGIN

В EscapeRoom через Follow HTTP Stream обнаружился User-Agent со значением wget — ответ на вопрос «какой инструмент использовал атакующий для загрузки малвари». Это моделирует технику Web Protocols (T1071.001, Command and Control). Без Follow Stream это обнаружилось бы только случайно.

Export Objects — автоматическое извлечение файлов

File → Export Objects → HTTP открывает список всех файлов, переданных по HTTP за время захвата: изображения, скрипты, документы, бинарники. Аналогичные меню доступны для SMB, TFTP и email-вложений (IMF).

Алгоритм работы после экспорта:

  1. Определить тип файла: file <имя_файла> — читает magic bytes, показывает реальный тип даже при неправильном расширении
  2. Найти текстовые строки в бинарниках: strings <имя_файла> | grep -i flag
  3. Посчитать хеш для ответа на CTF-вопросы: md5sum <имя_файла> или sha256sum <имя_файла>

В EscapeRoom через Export Objects вытащили три файла: два ELF-бинарника и Bash-скрипт, как описано в разборе на InfoSec Writeups. Тип каждого файла определился через file, а MD5-хеш основного вредоноса стал ответом на один из вопросов.

Export Objects работает только для полностью захваченных передач. Если PCAP содержит лишь часть сессии (обрезанный захват), файл будет повреждён. В этом случае попробуйте Follow TCP Stream → Save As с выбором формата Raw — ручная реконструкция иногда спасает.

Анализ FTP-трафика в Wireshark: учётные данные в открытом виде

FTP передаёт credentials и команды без шифрования — идеальная мишень для CTF-заданий. В терминах MITRE ATT&CK это техники Credentials In Files (T1552.001) и File Transfer Protocols (T1071.002). Задания по FTP-трафику встречаются регулярно, а флаги прячут либо в самих credentials, либо в переданных файлах.

Фильтр ftp показывает управляющий канал: команды USER, PASS, RETR (скачивание), STOR (загрузка), LIST (листинг каталога). Фильтр ftp-data — отдельный канал с содержимым передаваемых файлов.

Пошаговый алгоритм анализа FTP-сессии:

  1. Применить фильтр ftp — найти пары USER/PASS. Credentials могут быть флагом или частью флага
  2. Проверить команды RETR и STOR — какие файлы скачивались или загружались
  3. Применить фильтр ftp-data — увидеть содержимое передаваемых файлов
  4. Правый клик на ftp-data пакете → Follow → TCP Stream — получить полное содержимое файла
  5. Сохранить через Save As → Raw — обязательно для бинарных файлов (выбор ASCII повредит данные)

FTP использует отдельные порты для данных (активный режим — порт 20, пассивный — случайный порт >1024). Wireshark обычно корректно связывает управляющий и data-канал, но при нестандартной конфигурации может не распознать ftp-data автоматически. Тогда используйте Decode As на соответствующем TCP-потоке — принудительно укажите протокол.

DNS exfiltration: когда флаг спрятан в запросах

DNS exfiltration — один из самых изящных CTF-сценариев в категории сетевая криминалистика CTF задания. Данные кодируются в поддоменах DNS-запросов: каждый запрос несёт фрагмент информации, а полный флаг собирается из серии запросов. Техника Exfiltration Over Unencrypted Non-C2 Protocol (T1048.003) в чистом виде.

Признаки DNS exfiltration в PCAP:

  • Аномально длинные поддомены — 6162636465.evil.com вместо www.example.com
  • Hex или Base64 строки в поддоменах — Q1RGe2V4ZmlsLi4ufQ.evil.com
  • TXT-записи в ответах с нестандартно длинными значениями
  • Высокая частота DNS-запросов к одному домену

Фильтр для обнаружения: dns.qry.name matches "^[a-f0-9]{8,}\\." покажет запросы с длинными hex-строками в поддоменах. Для TXT-записей: dns.txt. Если Protocol Hierarchy показал аномально высокую долю DNS — начните с этих фильтров.

Для массового извлечения поддоменов Wireshark GUI неудобен — сотни DNS-запросов проще обработать в tshark:

tshark -r dump.pcap -Y "dns.qry.name contains evil.com" \
  -T fields -e dns.qry.name | \
  awk -F'.' '{print $1}' | tr -d '\n' | xxd -r -p

Эта команда извлекает первый поддомен из каждого запроса к evil.com, склеивает их и декодирует из hex. Если данные закодированы в Base64, замените xxd -r -p на base64 -d.

На реальных CTF кодировка бывает многослойной — Base64 поверх hex поверх ROT13. Если первый вариант декодирования даёт мусор, пробуйте другие комбинации через CyberChef, перетаскивая рецепты в цепочку. Иногда приходится перебрать пять-шесть вариантов, прежде чем вылезет что-то читаемое.

Декодирование payload и расшифровка TLS

Типичные кодировки: Base64, hex, ROT13

Обнаружить закодированную строку — полдела. Частые кодировки на CTF и как их распознать:

  • Base64 — символы A-Za-z0-9+/, часто заканчивается на = или ==. Пример: Q1RGe3cxcjNzaDRya30= декодируется в CTF{w1r3sh4rk}. Техника Standard Encoding (T1132.001)
  • Hex — символы 0-9a-f, пары через пробел или слитно. Пример: 43 54 46 7b = CTF{
  • ROT13 — сдвиг букв латинского алфавита на 13 позиций. PGS{jverfunex} превращается в CTF{wireshark}
  • URL-encoding%43%54%46%7B = CTF{

CyberChef позволяет собрать цепочку рецептов: перетащите From Base64, затем ROT13, затем From Hex — результат обновится автоматически. Это на порядок быстрее, чем декодировать каждый слой руками в терминале.

Расшифровка TLS-трафика

Если Protocol Hierarchy показывает, что весь интересный трафик зашифрован (TLS >90%), ищите ключ дешифрации. На CTF его часто дают отдельным файлом в условии задания. Два варианта подключения:

  1. Pre-master secret log — файл с записями формата CLIENT_RANDOM .... Подключается через Edit → Preferences → Protocols → TLS → (Pre)-Master-Secret log filename
  2. RSA-ключ сервера — работает, если cipher suite использует RSA для обмена ключами (без DHE/ECDHE). Подключается через Edit → Preferences → Protocols → TLS → RSA keys list

После загрузки ключа Wireshark автоматически расшифрует сессии, и все фильтры по содержимому (contains, matches) начнут работать с расшифрованными данными.

Если cipher suite использует Perfect Forward Secrecy (DHE или ECDHE), серверный RSA-ключ не поможет — нужен именно pre-master secret log, который генерируется на стороне клиента. Согласно ctf101.org, при RSA без PFS возможен и третий путь — факторизация n в RSA-ключе, если он намеренно сделан слабым (на CTF иногда используют короткие ключи). Для этого нужны отдельные инструменты вроде RsaCtfTool — это уже за рамками Wireshark.

Автоматизация: tshark фильтры для CTF

Wireshark GUI удобен для визуального анализа, но при работе с большими дампами или серией файлов tshark экономит часы. Команды, которые покрывают большинство CTF-сценариев по извлечению данных из pcap:

# Все HTTP-запросы с хостом и URI
tshark -r file.pcap -Y "http.request" -T fields -e http.host -e http.request.uri

# Все DNS-запросы (уникальные имена)
tshark -r file.pcap -Y "dns.qry.name" -T fields -e dns.qry.name | sort -u

# Поиск строки во всём дампе (hex-вывод для контекста)
tshark -r file.pcap -Y 'frame contains "flag"' -x

# FTP credentials
tshark -r file.pcap -Y "ftp.request.command == USER || ftp.request.command == PASS" \
  -T fields -e ftp.request.command -e ftp.request.arg

# Статистика протоколов (аналог Protocol Hierarchy в CLI)
tshark -r file.pcap -q -z io,phs

Флаг -T fields с -e позволяет извлечь конкретные поля — результат легко передать в grep, sort, awk или Python-скрипт для дальнейшей обработки.

Когда tshark лучше GUI: дамп >100 МБ (GUI начинает тормозить), серия PCAP-файлов (скрипт for f in *.pcap; do tshark -r "$f" ...; done), удалённый сервер без графической оболочки, необходимость быстро проверить десяток гипотез подряд.

Wireshark vs tshark vs NetworkMiner: когда что использовать

Критерий Wireshark tshark NetworkMiner
Преимущества Визуальный анализ, Follow Stream, цветовая маркировка потоков Скорость, скриптуемость, стабильная работа без GUI Автоизвлечение файлов, credentials, изображений
Ограничения Тормозит на файлах >200 МБ, ручная работа Нет визуализации, крутая кривая обучения синтаксису фильтров Не работает с loopback-трафиком, ограниченная фильтрация
Когда использовать Первичная разведка, Follow Stream, визуальный анализ конкретных сессий Большие дампы, автоматизация, серийная обработка, работа через SSH Быстрое извлечение файлов и credentials из стандартных протоколов
Когда НЕ использовать Дампы >500 МБ, серийная обработка Когда нужно визуально проследить цепочку пакетов в сессии Нестандартные протоколы, loopback-интерфейс, шифрованный трафик

NetworkMiner заслуживает отдельного упоминания: в отличие от Wireshark, который фокусируется на пакетах, NetworkMiner фокусируется на хостах и контенте. Автоматически реконструирует файлы, изображения и учётные данные из PCAP. На Windows — портативный (не требует установки), на Linux — запускается через mono. Для быстрого первичного прохода по извлечению файлов он часто быстрее, чем ручной Export Objects в Wireshark. Но есть нюанс — он не работает с трафиком, захваченным на loopback-интерфейсе. Для части CTF-сценариев, где запись ведётся на localhost, он бесполезен.

Чеклист: алгоритм решения network forensics CTF задания

  1. Открыть PCAP в Wireshark
  2. Statistics → Protocol Hierarchy — определить распределение протоколов, отметить незашифрованные
  3. Statistics → Conversations — найти «толстые» сессии и аномальные паттерны
  4. По результатам разведки — выбрать вектор по decision tree (HTTP / FTP / DNS / нестандартные порты)
  5. Применить display-фильтр протокола: http, ftp, dns, smtp
  6. Быстрая проверка: frame contains "flag" / frame contains "CTF{" — флаг в открытом виде
  7. Follow TCP Stream — последовательно просмотреть потоки интересующего протокола
  8. File → Export Objects → HTTP/SMB/TFTP — извлечь переданные файлы
  9. Для извлечённых файлов: file <имя> для определения типа, затем strings <имя> | grep -i flag
  10. Проверить DNS на exfiltration: dns.qry.name matches "^[a-f0-9]{8,}\\." и dns.txt
  11. Закодированные строки — декодировать в CyberChef (пробовать Base64, hex, ROT13 и их комбинации)
  12. Если всё зашифровано — искать ключ TLS в условии задания, подключить через Preferences
  13. Для больших дампов или автоматизации — переключиться на tshark с пайплайном в grep/awk

Алгоритм закрывает порядка 90% заданий категории network forensics на CTF начального и среднего уровня. Для продвинутых заданий добавляются: стеганография в ICMP-пакетах, EAPOL-анализ WiFi-хендшейков через aircrack-ng, разбор кастомных бинарных протоколов через Decode As и Lua-диссекторы Wireshark.

Восемь из десяти заданий по сетевой криминалистике CTF решаются одним набором действий: Protocol Hierarchy → display filter → Follow TCP Stream → Export Objects. Остальные два — DNS exfiltration и TLS-дешифрация — требуют дополнительного шага, но тоже укладываются в алгоритм. Принцип один: от общего к частному. Сначала статистика, потом фильтрация, потом извлечение, потом декодирование. Не наоборот.

Network forensics — самая недооценённая категория на CTF. Команды вкладывают десятки часов в pwn и crypto, оставляя forensics «на потом». А по соотношению затраченного времени к заработанным очкам задания по анализу трафика почти всегда выгоднее. Проблема не в сложности Wireshark — он интуитивен. Проблема в том, что все описывают фильтры, но никто не описывает порядок действий и принятие решений. А именно порядок определяет, потратите вы пять минут или пятьдесят.

Второе наблюдение за несколько лет участия в CTF: навык чтения PCAP — один из немногих, который переносится из соревнований в production без модификаций. Тот же Wireshark, те же display filters, те же Export Objects — только последствия другие. CTF-игроки, которые начинают с network forensics, быстрее адаптируются к реальному DFIR. Если хочешь не просто решать таски, а понимать как выглядит веб-атака от первого запроса до компрометации — на WAPT эту цепочку проходят в течение двух модулей с лабами.

🚀 Хочешь закрепить на практике? Реши задачи по теме на HackerLab — категория «forensics».

Поделиться

0 комментариев

Пожалуйста, войдите, чтобы оставить комментарий.

Загрузка комментариев...