Извлечение полей и форматирование данных

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

Введение

Анализ сетевого трафика часто требует извлечения конкретной информации из тысяч пакетов. Хотя чтение сводок пакетов полезно для человека, автоматизированным инструментам и скриптам требуются структурированные данные.

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

В этой лабораторной работе вы научитесь преобразовывать «сырой» сетевой трафик в структурированные, удобные для парсинга форматы с помощью tshark — консольной версии Wireshark. Вы попрактикуетесь в отключении стандартного вывода, предназначенного для чтения человеком, выборе конкретных полей протоколов (таких как IP-адреса, DNS-запросы и HTTP User-Agent) и форматировании результатов в формат CSV (Comma-Separated Values) для дальнейшего анализа.

Отключение стандартного вывода

На этом этапе вы узнаете, как изменить поведение вывода tshark по умолчанию.

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

Ключевая идея заключается в том, что сводки ориентированы на представление, а поля — на анализ. Сводная строка может выглядеть удобно для человека, но небольшие изменения в форматировании могут нарушить работу автоматизации. Извлечение именованных полей дает предсказуемый результат, который другие инструменты могут надежно обрабатывать.

Мы достигаем этого с помощью опции -T fields. Флаг -T означает "Text output format" (текстовый формат вывода), и установка значения fields указывает tshark, что мы хотим видеть только те конкретные поля данных, которые мы укажем.

Однако, если вы используете только -T fields без указания того, какие именно поля вам нужны, tshark ничего не выведет. Вы должны использовать его в паре с флагом -e, который определяет конкретное поле для извлечения.

Давайте начнем с извлечения только номера кадра (frame number) из нашего файла захвата. Убедитесь, что вы находитесь в своей рабочей директории /home/labex/project.

Выполните следующую команду, чтобы прочитать файл sample.pcap и извлечь только номера кадров:

tshark -r sample.pcap -T fields -e frame.number | head -n 5

Флаг -r указывает tshark читать данные из файла, а не захватывать трафик в реальном времени. Часть команды | head -n 5 ограничивает вывод первыми 5 строками, чтобы ваш терминал не был переполнен числами.

Вы должны увидеть вывод, похожий на этот:

1
2
3
4
5

Обратите внимание, насколько чище этот вывод по сравнению со стандартной сводкой tshark. Это основа для создания структурированных наборов данных из сетевого трафика.

Использование пользовательского форматирования столбцов

На этом этапе вы узнаете, как извлекать несколько полей одновременно и форматировать их как данные, разделенные запятыми (CSV).

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

Это может показаться незначительной деталью форматирования, но выбор формата определяет ваши дальнейшие возможности. Работа в сфере безопасности часто включает передачу данных между анализаторами пакетов, конвейерами оболочки (shell pipelines), электронными таблицами, блокнотами и дашбордами. Чем проще импортировать ваш вывод, тем легче масштабировать разовую команду в повторяемый рабочий процесс.

Чтобы изменить символ, разделяющий столбцы, мы используем опцию -E separator=.

Давайте извлечем номер кадра, IP-адрес источника и IP-адрес назначения, а затем отформатируем их как CSV. Имена полей для IP-адресов источника и назначения — ip.src и ip.dst.

Чтобы убедиться, что мы рассматриваем пакеты, которые действительно содержат IP-адреса (и пропустить низкоуровневые ARP-пакеты, которые их не имеют), мы будем использовать фильтр -Y "ip" вместе с извлечением полей.

Выполните следующую команду в терминале:

tshark -r sample.pcap -Y "ip" -T fields -e frame.number -e ip.src -e ip.dst -E separator=, | head -n 5

Вы должны увидеть вывод, похожий на этот:

12,127.0.0.1,127.0.0.11
13,127.0.0.11,127.0.0.1
14,127.0.0.1,127.0.0.11
15,127.0.0.11,127.0.0.1
16,172.60.1.88,104.18.26.120

Поскольку мы отфильтровали начальные ARP-пакеты, вы заметите, что номера кадров могут начинаться не с 1. Иногда пакет может не содержать определенного поля, и в таких случаях tshark просто оставит этот столбец пустым, гарантируя, что структура вашего CSV останется целостной.

Извлечение DNS-запросов

На этом этапе вы объедините извлечение полей с фильтрами отображения, чтобы изолировать и извлечь конкретную информацию из DNS-трафика.

При анализе сетевого трафика редко возникает необходимость извлекать поля из всех пакетов. Обычно вас интересует конкретный протокол. Вы можете использовать флаг -Y для применения фильтра отображения перед извлечением полей.

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

Например, если мы хотим увидеть, какие веб-сайты пытается посетить пользователь, мы можем посмотреть на его DNS-запросы. Фильтр отображения для DNS-трафика — это просто dns. Конкретное поле, содержащее запрашиваемое доменное имя, — dns.qry.name.

Давайте извлечем IP-адрес источника и имя DNS-запроса, но только для тех пакетов, которые действительно являются DNS-запросами или ответами.

Выполните следующую команду:

tshark -r sample.pcap -Y "dns" -T fields -e ip.src -e dns.qry.name -E separator=, | head -n 5

Ваш вывод будет выглядеть примерно так:

10.0.2.15,labex.io
168.63.129.16,labex.io
10.0.2.15,google.com
168.63.129.16,google.com

Объединяя -Y "dns" с -T fields, мы гарантируем, что наш CSV-вывод содержит только релевантные данные, отфильтровывая весь фоновый шум других сетевых протоколов.

Извлечение HTTP User-Agent

На этом заключительном этапе вы извлечете подробную информацию из HTTP-трафика, сосредоточившись на строке User-Agent.

User-Agent — это строка, отправляемая веб-браузером или клиентом на сервер, идентифицирующая используемое программное обеспечение (например, Chrome, Firefox или пользовательский скрипт). Аналитики безопасности часто извлекают User-Agent для выявления вредоносных автоматизированных скриптов или устаревших браузеров в сети.

Метаданные, такие как User-Agent, полезны, поскольку они дают подсказки о поведении без необходимости проверять каждый байт содержимого. В сетевой защите многие полезные выводы делаются на основе контекстных полей, таких как user agent, host header, TLS server name или DNS query name. Они помогают аналитикам отделять нормальный трафик приложений от подозрительной автоматизации.

Чтобы изолировать HTTP-запросы, мы можем использовать фильтр отображения http.request. Поля, которые мы хотим извлечь: IP-адрес источника (ip.src), запрашиваемый домен хоста (http.host), конкретный путь URI (http.request.uri) и строка User-Agent (http.user_agent).

Выполните следующую команду, чтобы извлечь эти HTTP-метаданные в формате CSV:

tshark -r sample.pcap -Y "http.request" -T fields -e ip.src -e http.host -e http.request.uri -e http.user_agent -E separator=,

Вы должны увидеть вывод, похожий на этот:

10.0.2.15,example.com,/,curl/7.81.0
10.0.2.15,neverssl.com,/,LabEx-Custom-Agent/1.0

Обратите внимание, как мы успешно извлекли пользовательский User-Agent LabEx-Custom-Agent/1.0, который был сгенерирован во время настройки лабораторной работы. Этот метод невероятно эффективен для создания автоматизированных отчетов или передачи сетевых данных в дашборды мониторинга безопасности.

Резюме

В этой лабораторной работе вы научились преобразовывать «сырые» захваченные сетевые пакеты в структурированные, пригодные для анализа данные с помощью tshark. Вы начали с отключения стандартного вывода, предназначенного для чтения человеком, с помощью -T fields. Затем вы узнали, как выбирать конкретные точки данных с помощью флага -e и форматировать их в CSV с помощью -E separator=,. Наконец, вы объединили эти методы форматирования с фильтрами отображения (-Y) для извлечения узкоспециализированной информации, такой как имена DNS-запросов и строки HTTP User-Agent. Эти навыки необходимы для автоматизации сетевого анализа и интеграции данных о пакетах с другими инструментами безопасности.