Источник: https://github.com/AnaktaCTF/CTF/blob/main — Forensic/Введение в анализ трафика Wireshark.md
Основы регулярных выражений и их синтаксис в Wireshark
Что такое регулярные выражения?
Регулярные выражения (RegEx) — это мощный инструмент для работы с текстовыми строками, позволяющий искать, заменять, проверять и извлекать данные на основе заданных паттернов или шаблонов. Регулярные выражения представляют собой последовательности символов, которые описывают набор строк, соответствующих определённому шаблону. В их основе лежат концепции символов-метасимволов и классов символов, которые позволяют создавать гибкие и мощные шаблоны для анализа текстовых данных.
В контексте сетевого анализа регулярные выражения позволяют фильтровать и извлекать данные из пакетов, что даёт возможность эффективно работать с большими объёмами трафика

Краткий обзор синтаксиса и базовых операторов:
- Базовые символы:
.— любой одиночный символ.\d— цифра (аналогично [0-9]).\w— любая буква, цифра или подчеркивание (аналогично [a-zA-Z0-9_]).\s— пробельный символ (пробел, табуляция, перенос строки и т. д.).
- Модификаторы и квантификаторы:
*— ноль или более повторений предыдущего символа.+— одно или более повторений предыдущего символа.?— ноль или одно повторение предыдущего символа.{n,m}— от n до m повторений предыдущего символа.^— начало строки.$— конец строки.
- Классы символов:
[abc]— любая из букв a, b или c.[^abc]— любой символ, кроме a, b или c.[a-z]— любой символ в диапазоне от a до z.\b— граница слова.
- Группировка и логические операторы:
()— группировка символов для работы с подвыражениями.|— логическое ИЛИ (альтернатива).[]— указание диапазона символов.
Примеры использования:
- Поиск всех HTTP-запросов, содержащих определенные параметры в URL
Регулярное выражение:
http.request.uri matches ".*(?:\?|&)token=[A-Za-z0-9]+.*"
http.request.uri — это поле в пакете HTTP, которое содержит URI (Uniform Resource Identifier), например, путь и параметры запроса.
matches — это оператор, который в Wireshark используется для применения регулярного выражения к содержимому поля.
.* — это выражение означает "любая последовательность символов", включая ноль символов.
(?:...) — это "незахватывающая" группа, которая используется для группировки символов без захвата для дальнейшей обработки (например, для работы с несколькими вариантами паттернов).
\? — это экранированный символ вопросительного знака, который означает начало строки параметров в URL.
& — символ амперсанда, который используется для разделения параметров в URL.
token=[A-Za-z0-9]+ — этот фрагмент ищет параметр с именем token, значение которого состоит из одного или более символов латинского алфавита и цифр.
.* в конце снова позволяет захватывать любые дополнительные символы после токена.
Этот фильтр позволит найти все HTTP-запросы, в которых присутствует параметр с именем token, значением которого является строка, состоящая из латинских букв и цифр (например, токены авторизации, ключи доступа и т. д.). Это особенно полезно для выявления утечек конфиденциальной информации или для поиска вредоносных запросов, которые могут использовать такие токены.
- Поиск подозрительных DNS-запросов на основе доменных имён с частичным совпадением
Регулярное выражение:
dns.qry.name matches ".*(evil|malware|phish).*"
dns.qry.name — это поле в DNS-запросе, которое содержит имя домена, на которое выполняется запрос.
matches — оператор, позволяющий применить регулярное выражение.
.* — захватывает любые символы до и после нужного паттерна.
(evil|malware|phish) — это альтернативный паттерн, который ищет совпадение с любым из указанных слов (evil, malware или phish) в имени домена.
.* — снова захватывает все символы после этих слов.
Данный фильтр позволяет искать в DNS-запросах домены, которые могут быть связаны с вредоносной деятельностью. Например, домены, содержащие слова вроде evil, malware, phish могут быть индикаторами того, что трафик относится к атакам типа phishing или распространению вредоносного ПО. Это помогает обнаружить вредоносные запросы на ранних стадиях атаки.
- Поиск аномальных паттернов в содержимом TCP-пакетов
Регулярное выражение:
tcp.payload matches "(select|drop|union|insert)\s+into\s+.*\s+values"
tcp.payload — это поле в TCP-пакете, которое содержит данные, передаваемые в теле пакета.
matches — оператор для применения регулярного выражения.
(select|drop|union|insert) — это группа, которая ищет одно из ключевых слов SQL-запроса (select, drop, union, insert), что может свидетельствовать о попытке SQL-инъекции.
\s+ — один или более пробельных символов, используемых для поиска пробелов между элементами SQL-запроса.
into\s+.*\s+values — это часть паттерна, которая ищет конструкции SQL-запроса типа INSERT INTO ... VALUES.
Этот фильтр нацелен на поиск SQL-запросов, которые могут быть частью атаки SQL-инъекции. С помощью регулярных выражений мы можем обнаружить типичные паттерны, используемые злоумышленниками для выполнения атак, такие как команды SELECT, DROP, INSERT, UNION, которые могут быть вставлены в запросы, передаваемые через TCP-соединения. Это позволяет своевременно обнаруживать подозрительные активности и реагировать на возможные угрозы.
4. Поиск всех пакетов, содержащих специфические SSL/TLS-сообщения с определёнными характеристиками
Регулярное выражение:
ssl.record.data matches ".*\x30\x82.*\x02\x01.*\x30\x82.*"
ssl.record.data — это поле, содержащее данные, передаваемые в SSL/TLS-запросах.
matches — оператор для применения регулярного выражения.
.* — это обычное регулярное выражение, которое захватывает любые символы. \x30\x82 — это шестнадцатеричное представление для первого байта в сертификатах X.509, что используется в данных SSL/TLS-сообщений.
\x02\x01 — это представление для определённого байта, который встречается в SSL-сообщениях и может быть использован для идентификации структуры сертификата.
Этот фильтр используется для поиска SSL/TLS-сообщений с определённой структурой, характерной для сертификатов X.509. Он помогает выявлять и анализировать пакеты, которые содержат важные данные, такие как цифровые подписи или сертификаты, что особенно полезно для расследований по безопасности. С помощью регулярных выражений можно настроить фильтрацию по конкретным байтам, что позволяет выделить специфические элементы протоколов SSL/TLS.
5. Выявление аномальных паттернов в трафике DNS для анализа DGA (Domain Generation Algorithm)
Регулярное выражение:
dns.qry.name matches "^[a-z0-9]{10,20}\.com$"
dns.qry.name — поле, содержащее доменное имя из DNS-запроса.
matches — оператор для регулярного выражения.
^[a-z0-9]{10,20}\.com$ — регулярное выражение для поиска доменных имён, которые состоят из 10-20 символов, состоящих из латинских букв и цифр, заканчивающихся на .com.
^[a-z0-9]{10,20} — начало строки, за которым следует от 10 до 20 символов, состоящих из латинских букв и цифр.
\.com$ — доменное имя заканчивается на .com.
Данный фильтр применяется для поиска доменов, которые могут быть сгенерированы алгоритмами генерации доменов (DGA), часто используемыми в ботнетах и других вредоносных приложениях. Такие домены обычно имеют случайный характер и часто состоят из букв и цифр. Регулярное выражение позволяет выделить такие паттерны и обнаружить домены, которые могут быть связаны с вредоносным трафиком.
**A-Packets: Инструмент для анализа сетевого трафика на основе файлов PCAP
A-Packets предоставляет сервис для детализированного анализа сетевых пакетов. С помощью этого инструмента пользователи могут анализировать файлы в формате PCAP, которые могут быть получены с помощью таких утилит, как Wireshark, tcpdump или других средств захвата трафика.
Анализ HTTP-данных
Извлечение переданных файлов: A-Packets может извлекать файлы, передаваемые через HTTP, такие как изображения, документы Office, PDF-файлы и другие типы данных.
Анализ заголовков HTTP: Платформа предоставляет подробную информацию о заголовках HTTP-запросов и ответов, таких как заголовки User-Agent, Referer, Cookie и другие.
Идентификация уязвимостей: Платформа может помочь в идентификации переданных данных, которые могут быть связаны с уязвимостями, например, при передаче чувствительных данных, таких как пароли.
Обнаружение сетевых устройств
Определять структуру сети: Выявление всех подключённых устройств, включая серверы, рабочие станции и устройства IoT.
Отслеживание соединений между устройствами: Определение взаимодействий между устройствами, что помогает анализировать несанкционированный трафик или подозрительные соединения.
Анализ беспроводных сетей (Wi-Fi)
Изучать данные о точках доступа: Определить SSID, каналы и другие характеристики точек доступа.
Выявлять потенциальные уязвимости: Проверить наличие уязвимых точек доступа или подключений, которые могут быть использованы злоумышленниками для атаки.
Извлечение файлов из сетевых пакетов
Восстановления переданных файлов: Когда данные передаются в виде файлов (например, через FTP или HTTP), A-Packets позволяет восстановить и просмотреть эти файлы.
Поиск скрытых или заражённых файлов: Выявление вредоносных файлов, переданных через различные протоколы, таких как HTTP, FTP или SMB.
Анализ SMB и NetBIOS
Идентификации аномальной активности: Например, если SMB-сессии содержат неожиданные или подозрительные запросы, это может указывать на атаки типа SMB-эксплойтов.
Анализа сетевых ресурсов: Определение подключённых устройств и их ресурсов в локальной сети.
Анализ DNS, mDNS и NBNS
Обнаружение подделанных DNS-запросов: Идентификация возможных атак с использованием подмены DNS-записей.
Изучение трафика mDNS (Multicast DNS) и NBNS (NetBIOS Name Service): Анализ использования локальных сетевых сервисов.
Анализ ARP (Address Resolution Protocol)
Выявления атак ARP-спуфинга: ARP-спуфинг — это метод перехвата сетевого трафика путём подмены MAC-адресов в локальной сети.
Отслеживания топологии сети: Понимание, какие устройства в сети используют какой MAC-адрес, может помочь в определении уязвимостей в безопасности.
Обнаружение паролей и хешей
Извлечения паролей: Обнаружение слабых или небезопасных паролей, передаваемых через небезопасные протоколы.
Анализа хешей: Извлечение хешей паролей для анализа на предмет их уязвимости (например, через атакующие методы брутфорс).
NetworkMiner
NetworkMiner — это такой мощный и удобный инструмент для анализа сетевого трафика, который поможет тебе копаться в пкапах и извлекать из них полезную информацию с минимальными усилиями. Он сделан для того, чтобы ты мог быстро и эффективно извлекать данные из захваченных сетевых пакетов и анализировать их без необходимости вручную разбирать каждый пакет.
Главные фичи
Когда ты загружаешь pcap-файл, NetworkMiner сам разбивает его на сессии, выявляет протоколы, пароли, файлы и другие данные. Это как твой личный анализатор трафика, который по сути экономит кучу времени.
Поддерживает HTTP, FTP, SMB, DNS, POP3, IMAP и многие другие. Это значит, что ты можешь смотреть трафик по этим протоколам и извлекать полезные вещи вроде паролей, файлов и даже флагов.
NetworkMiner может вытащить файлы, передаваемые по сети, такие как изображения, документы и даже архивы. Сильно помогает в задачах, где нужно найти какие-то скрытые фрагменты или зашифрованные данные.
С чем работает?
HTTP: Может парсить HTTP-трафик, вытаскивать запросы, ответы, куки, заголовки, формы. Часто в таких запросах можно найти флаги или скрытые данные.
DNS: Все запросы и ответы. Это полезно, когда ищешь странные DNS-запросы, которые могут скрывать флаги в виде строк в типах записей (например, TXT).
FTP, SMB и другие: Для этих протоколов извлекаются файлы, списки пользователей и пароли, передаваемые по сети. Особенно полезно, если задача CTF включает в себя работу с такими протоколами.
Как это работает?
Простой пример: у тебя есть pcap-файл с HTTP-трафиком. Ты загружаешь его в NetworkMiner, и он сам раскладывает трафик на сессии. К примеру, если в какой-то из запросов передавался файл, скажем, изображение или документ, то NetworkMiner покажет тебе этот файл, и ты сможешь его скачать.
Другими словами, ты не копаешься вручную в каждом пакете, чтобы найти флаг или полезную информацию — это делает сам NetworkMiner. Он просто берет весь трафик и умно сортирует его по категориям: файлы, DNS-запросы, HTTP-сессии и т.д.
Что реально круто?
Это то, что выделяет NetworkMiner среди других. Он делает структуру трафика наглядной. Ты видишь все запросы и ответы как цепочку событий, и это позволяет быстрее поймать ключевые моменты. Не нужно запоминать каждый IP-адрес или порт, NetworkMiner покажет тебе весь трафик с выделением ключевых сессий.
Интуитивно понятный. Ты загружаешь pcap-файл, и все, что нужно — это немного покликать по разным вкладкам, чтобы увидеть, что за файлы, какие пароли передавались и какие флаги могут скрываться в теле запросов.
Для решения CTF-задач тебе вполне хватит бесплатной версии NetworkMiner. Она предоставляет все нужные инструменты для анализа сетевого трафика, поиска флагов и извлечения файлов. Скачать инструмент можно с официального сайта: https://www.netresec.com/?page=NetworkMiner