Windows. Вирусы. Ноутбуки. Интернет. Office. Утилиты. Драйверы


Автор: Riccardo Capecchi
Дата публикации: 22 марта 2011 г.
Перевод: А.Панин
Дата публикации перевода: 29 ноября 2012 г.

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

Помимо примера с FTP, описанного в предыдущей части статьи , существует еще один классический пример использования Wireshark - исследование HTTP-сессии. Как и раньше, запустите Wireshark и начните захват трафика с интерфейса, направленного во внешнюю сеть. В настоящее время большая часть HTTP-трафика подвергается сжатию для повышения скорости обмена информацией, поэтому по умолчанию Wireshark производит декомпрессию полезной нагрузки HTTP-пакетов. Вы можете выбрать пункты меню " Edit->Preferences->Protocols->HTTP " и убедиться, что параметр " Uncompress entity bodies " выбран.

Во время захвата пакетов, установите фильтр для отображения исключительно HTTP-трафика, введя http в качестве выражения фильтрации. Каждая веб-страница, которую посещает любой пользователь из вашей сети, будет генерировать вид трафика, который вы будете захватывать - следует ожидать большое количество информации. Возможно, вас интересует вас интересует определенный вид информации или определенный пользователь. Для этого в главном окне, где представлены все принятые пакеты, выберите http-запрос и с помощью правой кнопки мыши выберите пункт меню " Follow TCP Stream ". Wireshark откроет новое окно, содержащее полную реконструкцию HTTP-сессии в хронологическом порядке.

Вы также можете отделить запросы к определенному сайту, например, к Facebook - для того, чтобы увидеть, с каких IP-адресов происходили запросы, выражение в поле фильтра должно быть следующим: http.request.uri contains facebook .

Теперь предположим, что вам захотелось увидеть весь входящий и исходящий трафик для одного определенного компьютера. Вам понадобится фильтр по MAC-адресу для того, чтобы быть уверенным в том, что исследуется нужный клиент. Для получения MAC-адреса целевой системы на другом конце соединения, необходимо осуществить пинг по имени узла или URL для получения IP-адреса системы. После этого используется команда arp: ping target.com arp -a

В списке, выведенном командой arp , необходимо найти IP-адрес, полученный в результате выполнения команды ping . После того, как у вас в распоряжении будет MAC-адрес, скажем, " AA:BB:CC:DD:EE:FF " - введите выражение в поле фильтра: eth.addr == AA:BB:CC:DD:EE:FF

В качестве альтернативного варианта, вы можете использовать фильтрацию по IP-адресу, но в сетях, использующих DHCP для присвоения IP-адресов, IP-адрес целевой системы может измениться в любое время: ip.addr == 192.168.0.1

Нажмите " Apply " и вы увидите только входящий и исходящий трафик для выбранного IP- или MAC-адреса. В случае применения параметра " ip " отображается весь трафик, относящийся к межсетевому протоколу (Internet Protocol), что подходит в 99% случаев исследования сетей.

Вместо параметра фильтра " ip.addr ", вы можете использовать параметр " host " следующим образом: host 192.168.0.1

После установки такого фильтра, Wireshark захватывает весь трафик, идущий к узлу и от узла с адресом 192.168.0.1 независимо от типа.

Теперь представим, что вы хотите захватить весь трафик для узла, генерируемый приложениями, использующими заданные протоколы, такие, как pop3 , ftp , http или messenger . Введите выражение в поле фильтра: ip.addr == 192.168.0.1 and (http or ftp or messenger or pop)

Это выражение сообщает о том, что следует показывать только трафик, генерируемый или направленный к узлу с IP-адресом 192.168.0.1 и отображать только пакеты, относящиеся к протоколам ftp , pop или messenger .

Вы можете захватывать весь такой трафик, передающийся в сети с заданным адресом или от группы клиентов: ip.addr == 192.168.0 and (http or ftp or messenger or pop)

Наиболее часто используемые фильтры для Wireshark

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

  • ip.addr == 192.168.0.1 - Отображать трафик, передающийся относительно узла 192.168.0.1 в обоих направлениях.
  • tcp.port == 80 - Отображать весь трафик с исходным или целевым портом 80.
  • ip.src == 192.168.0.1 and ip.dst == 10.100.1.1 - Отображать весь трафик, генерируемый узлом 192.168.0.1 и направленный на узел 10.100.1.1
  • ftp - Отображать трафик, относящийся к протоколу FTP
  • http - Отображать трафик, относящийся к протоколу HTTP
  • dns - Отображать трафик, относящийся к протоколу DNS
  • http.request.uri contains string - Отображать HTTP-трафик, в том случае, когда URL содержит строку "string".

Технология BPF-фильтров делает Wireshark мощным и гибким инструментом, но в этой статье перечислена лишь малая часть того, что можно сделать при его помощи. Понадобится еще одна или даже несколько статей для того, чтобы описать такие вещи, как при помощи Wireshark вы можете проверить возможность атак отказа в обслуживании на вашу сеть или проанализировать качество связи для работы VOIP-системы на базе SIP-протокола.

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

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

Основные возможности Wireshark

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

  • Захват пакетов в реальном времени из проводного или любого другого типа сетевых интерфейсов, а также чтение из файла;
  • Поддерживаются такие интерфейсы захвата: Ethernet, IEEE 802.11, PPP, и локальные виртуальные интерфейсы;
  • Пакеты можно отсевать по множеству параметров с помощью фильтров;
  • Все известные протоколы подсвечиваются в списке разными цветами, например TCP, HTTP, FTP, DNS, ICMP и так далее;
  • Поддержка захвата трафика VoIP звонков;
  • Поддерживается расшифровка HTTPS трафика при наличии сертификата;
  • Расшифровка WEP, WPA трафика беспроводных сетей при наличии ключа и handshake;
  • Отображение статистики нагрузки на сеть;
  • Просмотр содержимого пакетов для всех сетевых уровней;
  • Отображение времени отправки и получения пакетов.

Программа имеет множество других функций, но это были те основные, которые могут вас заинтересовать.

Как пользоваться Wireshark

Я предполагаю, что программа у вас уже установлена, но если нет, то вы можете ее установить из официальных репозиториев. Для этого наберите команду в Ubuntu:

$ sudo apt install wireshark

После установки вы сможете найти программу в главном меню дистрибутива. Запускать Wireshark нужно с правами суперпользователя, потому что иначе программа не сможет анализировать сетевые пакеты. Это можно сделать из главного меню или через терминал, с помощью команды, для KDE:

$ kdesu wireshark

А для Gnome / Unity:

$ gksu wireshark

Главное окно программы разделено на три части, первая колонка содержит список доступных для анализа сетевых интерфейсов, вторая - опции для открытия файлов, а третья - помощь.

Анализ сетевого трафика

Для начала анализа выберите сетевой интерфейс, например, eth0 и нажмите кнопку Start.

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

  • Верхняя часть - это меню и панели с различными кнопками;
  • Список пакетов - дальше отображается поток сетевых пакетов, которые вы будете анализировать;
  • Содержимое пакета - чуть ниже расположено содержимое выбранного пакета, оно разбито по категориям в зависимости от транспортного уровня;
  • Реальное представление - в самом низу отображается содержимое пакета в реальном виде, а также в виде HEX.

Вы можете кликнуть по любому пакету, чтобы проанализировать его содержимое:

Здесь мы видим пакет запроса к DNS чтобы получить ip адрес сайта, в самом запросе отправляется домен, а в пакете ответа мы получаем наш вопрос, а также ответ.

Для более удобного просмотра можно открыть пакет в новом окне выполнив двойной клик по записи:

Фильтры Wireshark

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

  • ip.dst - целевой ip адрес;
  • ip.src - ip адрес отправителя;
  • ip.addr - ip отправителя или получателя;
  • ip.proto - протокол;
  • tcp.dstport - порт назначения;
  • tcp.srcport - порт отправителя;
  • ip.ttl - фильтр по ttl, определяет сетевое расстояние;
  • http.request_uri - запрашиваемый адрес сайта.

Для указания отношения между полем и значением в фильтре можно использовать такие операторы:

  • == - равно;
  • != - не равно;
  • < - меньше;
  • > - больше;
  • <= - меньше или равно;
  • >= - больше или равно;
  • matches - регулярное выражение;
  • contains - содержит.

Для объединения нескольких выражений можно применять:

  • && - оба выражения должны быть верными для пакета;
  • || - может быть верным одно из выражений.

Теперь рассмотрим подробнее на примерах несколько фильтров и попытаемся рассмотреть все знаки отношений.

Сначала отфильтруем все пакеты, отправленные на 194.67.215.125 (losst.ru). Наберите строку в поле фильтра и нажмите Apply . Для удобства фильтры wireshark можно сохранять, с помощью кнопки Save :

ip.dst == 194.67.215.125

А чтобы получить не только отправленные пакеты, но и полученные в ответ от этого узла можно объединить два условия:

ip.dst == 194.67.215.125 || ip.src == 194.67.215.125

Также мы можем отобрать переданные большие файлы:

http.content_length > 5000

Отфильтровав Content-Type, мы можем выбрать все картинки, которые были загружены, выполним анализ трафика wireshark, пакеты, которого содержат слово image:

http.content_type contains image

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

Например, я хочу вывести в виде колонки ttl (время жизни) пакета. Для этого откройте информацию о пакете, найдите это поле в разделе IP. Затем вызовите контекстное меню и выберите опцию Apply As Column :

Также само можно создать фильтр на основе любого нужного поля. Выберите нужное поле и вызовите контекстное меню, затем нажмите Apply as filter или Prepare as filter , затем выбрать Selected чтобы вывести только выбранные значения или Not selected , чтобы их убрать:

Указанное поле и его значение будет применено или во втором случае подставлено в поле фильтра:

Таким способом вы можете добавить в фильтр поле любого пакета или колонку. Там тоже есть эта опция в контекстном меню. Для фильтрации протоколов вы можете использовать и более простые условия. Например, выполним анализ трафика Wireshark для протоколов HTTP и DNS:

Еще одна интересная возможность программы - использование Wireshark для отслеживания определенного сеанса между компьютером пользователя и сервером. Для этого откройте контекстное меню для пакета и выберите Follow TCP stream .

Затем откроется окно, в котором вы найдете все данные переданные между сервером и клиентом:

Диагностика проблем Wireshark

Возможно, вам интересно, как пользоваться Wireshark 2 для обнаружения проблем в сети. Для этого в левом нижнем углу окна есть круглая кнопка, при нажатии на нее открывается окно Expet Tools . В нем Wireshark собирает все сообщения об ошибках и неполадках в сети:

Окно разделено на такие вкладки, как Errors, Warnings, Notices, Chats. Программа умеет фильтровать и находить множество проблем с сетью и тут вы можете их очень быстро увидеть. Здесь тоже поддерживаются фильтры wireshark.

Анализ трафика Wireshark

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

Для этого сначала нужно остановить захват трафика с помощью красного квадрата на панели. Затем откройте меню File -> Export Objects -> HTTP :

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

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

Введение

Из всех методов изучения компьютерных сетей анализ трафика, пожалуй, самый кропотливый и трудоемкий. Интенсивные потоки современных сетей порождают очень много «сырого» материала, отыскать в котором крупицы полезной информации далеко не просто. За время своего существования стек TCP/IP оброс многочисленными приложениями и дополнениями, счет которым идет на сотни и тысячи. Это прикладные и служебные протоколы, протоколы аутентификации, туннелирования, доступа к сети и так далее. Кроме знания азов сетевых взаимодействий, исследователю трафика (то есть тебе) нужно свободно ориентироваться во всем этом протокольном многообразии и уметь работать со специфичными программными инструментами - снифферами, или, по-научному, анализаторами трафика (протоколов).

Функциональность сниффера - это не только возможность использования «неразборчивого» (promiscuos) режима работы сетевой карты для перехвата. Подобный софт должен уметь эффективно фильтровать трафик как на этапе сбора, так и во время изучения отдельных единиц передачи (фреймов, пакетов, сегментов, датаграмм, сообщений). Причем чем больше протоколов сниффер «знает», тем лучше.

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

Знакомимся с фильтрами

Wireshark поддерживает два вида фильтров:

  • перехвата трафика (capture filters);
  • отображения (display filters).

Первая подсистема досталась Wireshark в наследство от библиотеки Pcap, обеспечивающей низкоуровневый API для работы с сетевыми интерфейсами. Выборка трафика на лету во время перехвата позволяет экономить оперативную память и место на жестком диске. Фильтр представляет собой выражение, состоящее из группы примитивов, при необходимости объединенных логическими функциями (and, or, not). Записывается это выражение в поле «Capture Filter» диалогового окна «Capture options». Наиболее употребляемые фильтры можно сохранять в профиле для повторного использования (рис. 1).

Рис. 1. Профиль фильтров перехвата

Язык фильтров перехвата стандартный для мира Open Source и используется многими Pcap-основанными продуктами (например, утилитой tcpdump или системой обнаружения/предотвращения вторжений Snort). Поэтому описывать синтаксис здесь нет особого смысла, так как он тебе, скорее всего, знаком. А детали можно посмотреть в документации, например в Linux на странице справочного руководства pcap-filter(7).

Фильтры отображения работают с уже перехваченным трафиком и являются «родными» для Wireshark. Отличия от Pcap - в формате записи (в частности, в качестве разделителя полей используется точка); также добавлены английская нотация в операциях сравнения и поддержка подстрок.

Вписать фильтр отображения можно прямо в соответствующее поле (внимание, работает выпадающий список-подсказка) главного окна программы после кнопки «Filter» (кстати, под этой кнопкой скрывается профиль для часто используемых выражений). А если кликнуть расположенную неподалеку кнопку «Expression…», то откроется многофункциональный конструктор выражений (рис. 2).


Слева (Field Name) представлено упорядоченное по алфавиту дерево полей сообщений протоколов, которые известны Wireshark. Для данного поля можно указать логический оператор (Relation), вписать значение (Value), указать диапазон (Range) или выбрать значение из списка (Predefined Value). В общем, полная сетевая энциклопедия в одном окошке.

Вот логические операторы, используемые в фильтрах отображения:

  • and (&&) - «И»;
  • or (||) - «ИЛИ»;
  • xor (^^) - исключающее «ИЛИ»;
  • not (!) - отрицание;
  • [...] - выборка подстроки. # Фильтруя по MAC-адресу своего сетевого адаптера, исключаем весь локальный трафик not (eth.addr eq aa:bb:cc:22:33:44) # Отметаем весь «служебный шум», чтобы сконцентрироваться на интересующем нас трафике!(arp or icmp or dns)

Что касается выборки подстроки, то это не совсем логическая операция, но весьма полезная опция. Она позволяет получить определенную часть последовательности. Например, так можно использовать в выражении первые (первое число в квадратных скобках - смещение) три байта (число после двоеточия - длина подпоследовательности) поля MAC-адреса источника:

Eth.src == 00:19:5b

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

К слову, выборку подстроки удобно использовать для выявления малвари в случае, если известна последовательность байт, идущая после заголовка (например, «0x90, 0x90, 0x90, 0x04» в UDP-пакете):

Udp == 90:90:90:04

Операции сравнения, используемые в логических выражениях:

  • eq (==) - равно;
  • ne (!=) - не равно;
  • gt (>) - больше;
  • lt (<) - меньше;
  • ge (>=) - больше или равно;
  • le (<=) - меньше или равно.tcp.dstport ne 8080 && tcp.len gt 0 && data eq A0

Собственно, теории для начала достаточно. Дальше используй здравый смысл и скобки по необходимости и без нее. Также не забывай, что фильтр по сути - логическое выражение: если оно истинно, то пакет отобразится на экране, если ложно - нет.

Pcap-фильтр для выявления сканирования Netbios-портов

dst port 135 or dst port 445 or dst port 1433 and tcp & (tcp-syn) != 0 and tcp & (tcp-ack) = 0 and src net 192.168.56.0/24

Ищем угонщика IP-адреса

В сегменте локальной сети случаются (по тем или иным причинам) совпадения IP-адресов у двух и более узлов. Методика «отлова» (определения MAC-адресов) конфликтующих систем общеизвестна: запускаем на третьем компьютере сниффер, чистим ARP-кеш и стимулируем запрос на разрешение MAC’а искомого IP, например пропинговав его:

# arp -d 192.168.56.5 # ping -n -c 1 192.168.56.5

А потом ищем в перехваченном трафике, с каких MAC’ов пришли ответы. Если Wireshark наловил слишком много пакетов, создаем фильтр отображения с помощью конструктора. В первой части выражения выбираем ARP-ответы, во второй - те сообщения, в которых исходный IP-адрес равен искомому. Примитивы объединяем оператором &&, так как нужно, чтобы оба условия выполнялись одновременно:

(arp.opcode == reply) && (arp.src.proto_ipv4 == 192.168.56.5)

Кстати, при выполнении этого сценария ни одна компьютерная сеть не пострадала, потому что были использованы две виртуальные машины Oracle VirtualBox и сетевое подключение типа «Виртуальный адаптер хоста».

Инспектируем сетевой и транспортный уровни

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

Как ты уже догадался, отфильтровать ICMP в Wireshark очень просто. Достаточно в строке фильтрации в главном окне программы написать: icmp. Кроме icmp, работают и многие другие ключевые слова, являющиеся именами протоколов, например arp, ip, tcp, udp, snmp, smb, http, ftp, ssh и другие.

Если ICMP-трафика много, то отображение можно детализировать, исключив, например, эхо-запросы (тип 0) и эхо-ответы (тип 8):

Icmp and ((icmp.type ne 0) and (icmp.type ne 8))

На рис. 4 показан пример небольшой выборки ICMP-сообщений, созданных тестовым Linux-маршрутизатором. Сообщение «Port Unreachable» обычно используется по умолчанию. Оно же генерируется сетевым стеком при получении UDP-датаграммы на неиспользуемый порт. Чтобы виртуальный роутер на основе Debian начал отдавать сообщения «Host unreachable» и «Communication administratively filtered», пришлось с ним повозиться. Cisco же информирует об административной фильтрации обычно по умолчанию. Сообщение «Time-to-live exceeded» говорит о наличии петли на каком-то участке сети (ну и при трассировке маршрута такие пакеты также могут появляться).

Кстати, о межсетевых экранах. Создавать правила для популярных файеров можно прямо в Wireshark, используя пункт «Firewall ACL Rules» меню «Tools». Предварительно нужно выбрать в списке пакет, информация которого будет использована. Доступны стандартные и расширенные ACL Cisco, правила UNIX-like продуктов IP Filter, IPFirewall (ipfw), Netfilter (iptables), Packet Filter (pf), а также Windows Firewall (netsh).

И теперь кратко об азах фильтрации на сетевом уровне, основу которой составляют поля заголовка IP-пакета - адрес отправителя (ip.src) и адрес получателя (ip.dst):

(ip.src == 192.168.56.6) || (ip.dst == 192.168.56.6)

Так мы увидим все пакеты, которые получил или отправил данный IP-адрес. Фильтровать целые подсети можно, используя CIDR-нотацию записи маски. Для примера выявим инфицированный хост, осуществляющий спам-рассылку (здесь 192.168.56.251 - это IP-адрес нашего SMTP-сервера):

Ip.src == 192.168.56.0/24 and tcp.dstport == 25 and !(ip.dst == 192.168.56.251)

К слову, для выборки по MAC-адресам следует использовать примитивы eth.src, eth.dst и eth.addr. Порой проблемы сетевого уровня куда теснее связаны с Ethernet-уровнем, чем об этом повествует теория. В частности, при настройке маршрутизации очень полезно бывает посмотреть, на MAC-адрес какого роутера упрямый узел отправляет пакеты. Впрочем, для такой простой задачи за глаза хватит утилиты tcpdump, практически штатной для UNIX-подобных систем.

С фильтрацией портов у Wireshark тоже никаких вопросов нет. Для TCP к твоим услугам ключевые слова tcp.srcport, tcp.dstport и tcp.port, для UDP - udp.srcport, udp.dstport и udp.port. Правда, у встроенного языка фильтров Wireshark не нашлось аналога примитива port в Pcap, обозначающего как порт UDP, так и TCP. Но это легко исправить с помощью логического выражения, например:

Tcp.port == 53 || udp.port == 53

Импровизируем с HTTP-трафиком

Прикладные протоколы, в частности HTTP, - это «вечная» тема в разрезе сниффинга. Справедливости ради нужно сказать, что для исследования веб-трафика создано немало специализированных программных средств. Но и такой универсальный инструмент, как Wireshark, с его гибкой системой фильтрации на этом поприще оказывается совсем не лишним.

Для начала соберем немного веб-трафика, сходив на первый пришедший на ум сайт. Теперь поищем в сообщениях протокола TCP, служащего транспортом для HTTP, упоминания любимого интернет-ресурса:

Tcp contains "сайт"

Оператор contains проверяет наличие подстроки в данном поле. Есть еще оператор matches, в нем можно использовать Perl-совместимые регулярные выражения.


Окошко «Filter Expressions», конечно, хороший помощник, но порой перелистывать длинный список в поисках нужного поля весьма утомительно. Есть более простой способ создания/модификации фильтров отображения: с помощью контекстного меню при просмотре пакетов. Для этого нужно просто кликнуть правой клавишей мыши по интересующему полю и выбрать один из подпунктов пункта «Apply As Filter» или пункта «Prepare a Filter». В первом случае изменения тут же вступят в силу, а во втором - можно будет подкорректировать выражение. «Selected» означает, что значение поля станет новым фильтром, «Not Selected» - то же самое, только с отрицанием. Пункты, начинающиеся с «...», добавляют значение поля к существующему выражению с учетом логических операторов.

Комбинируя различные средства графического интерфейса Wireshark и знание особенностей протокола HTTP, можно легко детализировать до требуемого уровня отображение трафика в главном окне программы.

Например, чтобы посмотреть, какие изображения браузер запрашивал у веб-сервера при формировании страницы, сгодится фильтр, анализирующий содержимое передаваемого серверу URI:

(http.host eq "www..request.uri contains ".jpg#26759185") or (http.request.uri contains ".png#26759185"))

То же самое, но с использованием matches:

(http.host eq "www..request.uri matches ".jpg|.png#26759185")

Разумеется, поля сообщений протоколов разных уровней можно смело смешивать в одном выражении. Например, чтобы узнать, какие картинки данный сервер передал клиенту, используем исходный адрес из IP-пакета и поле «Content-Type» HTTP-ответа:

(ip.src eq 178.248.232.27) and (http.content_type contains "image")

А с помощью поля HTTP-запроса «Referer» ты сможешь узнать, с каких еще серверов браузер берет контент при формировании страницы любимого сайта:

(http.referer eq "http://www..dst eq 178.248.232.27))

Рассмотрим еще несколько фильтров-полезняшек. Для выборки из трафика HTTP-запросов, сделанных методом GET, можно использовать следующее выражение:

Http.request.method == GET

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

Port 80 and tcp[((tcp & 0xf0) >> 2):4] = 0x47455420

Чтобы выяснить, какие www-подключения совершал пользователь хоста 192.168.56.8 в определенный интервал времени (скажем, в обеденный перерыв), задействуем примитив frame.time:

Tcp.dstport == 80 && frame.time >= "Yan 9, 2013 13:00:00" && frame.time < "Yan 9, 2013 14:00:00" && ip.src == 192.168.56.8

Ну и отображение URI запросов, содержащих слова «login» и «user», плюс «напоминалка» паролей:

Http.request.uri matches "login.*=user" (http contains "password") || (pop contains "PASS")

Перехват SSL-контента

Настоящий бич исследователя сетевого трафика - шифрование. Но если у тебя есть заветный файл с сертификатом (кстати, беречь его нужно как зеницу ока), то ты легко сможешь узнать, что прячут пользователи данного ресурса в SSL-сессиях. Для этого нужно указать параметры сервера и файл сертификата в настройках протокола SSL (пункт «Preferences» меню «Edit», слева в списке протоколов выбрать SSL). Поддерживаются форматы PKCS12 и PEM. В последнем случае нужно убрать пароль с файла командами:

Openssl pkcs12 -export -in server.pem -out aa.pfx openssl pkcs12 -in aa.pfx -out serverNoPass.pem –nodes

INFO

Извлечение трафика для мониторинга и отладки из сетевого трафика осуществляется пакетным фильтром. Пакетный фильтр входит в состав ядра операционной системы и получает сетевые пакеты от драйвера сетевой карты.

Примерами пакетных фильтров для UNIX-like ОС являются BPF (Berkeley Packet Filter) и LSF (Linux Socket Filter). В BPF фильтрация реализована на основе регистро-ориентированного примитивного машинного языка, интерпретатором которого и является BPF.


Анализируем трафик с удаленных хостов

Пользователи Windows могут работать не только с интерфейсами того компьютера, на котором запущен Wireshark, но и снимать трафик с удаленных машин. Для этого существует специальная служба (Remote Packet Capture Protocol) в поставке библиотеки WinPcap. Ее нужно предварительно включить в оснастке управления службами (services.msc). Теперь, запустив Wireshark на удаленном компьютере, можно подключиться к тому узлу, на котором работает сервис удаленного перехвата трафика (по умолчанию использует порт 2002), и данные по протоколу RPCAP потекут к тебе рекой.

Также приведу варианты подключения к домашнему *nix-роутеру «извне» для удаленного анализа трафика:

$ ssh [email protected] "tshark -f "port !22" -i any -w -" | wireshark -k -i - $ ssh [email protected] tcpdump -U -s0 -w - "not port 22" | wireshark -k -i -

Инструмент из разряда must have

Wireshark - широко известный инструмент перехвата и интерактивного анализа сетевого трафика, фактически стандарт для промышленности и образования. Распространяется под лицензией GNU GPLv2. Wireshark работает с большинством известных протоколов, имеет графический интерфейс пользователя на основе GTK+, мощную систему фильтров трафика и встроенный интерпретатор языка программирования Lua для создания декодеров и обработчиков событий.

Извлечь полезный груз

В определенных кругах широко известны специализированные инструменты, позволяющие «вытаскивать» из трафика конечные информационные объекты: файлы, изображения, видео- и аудиоконтент и прочее. Благодаря мощной аналитической подсистеме, Wireshark эту функциональность с лихвой покрывает, поэтому ищи в соответствующих окнах анализа кнопку «Save Payload…».

Заключение

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

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

While debugging a particular problem, sometimes you may have to analyze the protocol traffic going out and coming into your machine. Wireshark is one of the best tool used for this purpose. In this article we will learn how to use Wireshark network protocol analyzer display filter.

1. Download and Install Wireshark

After downloading the executable, just click on it to install Wireshark.

2. Select an Interface and Start the Capture

Once you have opened the wireshark, you have to first select a particular network interface of your machine. In most of the cases the machine is connected to only one network interface but in case there are multiple, then select the interface on which you want to monitor the traffic.

From the menu, click on ‘Capture –> Interfaces’, which will display the following screen:

3. Source IP Filter

A source filter can be applied to restrict the packet view in wireshark to only those packets that have source IP as mentioned in the filter. The filter applied in the example below is:

Ip.src == 192.168.1.1

4. Destination IP Filter

A destination filter can be applied to restrict the packet view in wireshark to only those packets that have destination IP as mentioned in the filter. For example:

Ip.dst == 192.168.1.1

5. Filter by Protocol

Its very easy to apply filter for a particular protocol. Just write the name of that protocol in the filter tab and hit enter. In the example below we tried to filter the results for http protocol using this filter:

6. Using OR Condition in Filter

This filter helps filtering the packets that match either one or the other condition.

Suppose, there may arise a requirement to see packets that either have protocol ‘http’ or ‘arp’. In that case one cannot apply separate filters. So there exists the ‘||’ filter expression that ORs two conditions to display packets matching any or both the conditions. In the example below, we tried to filter the http or arp packets using this filter:

Http||arp

7. Applying AND Condition in Filter

This filter helps filtering packet that match exactly with multiple conditions.

Suppose there is a requirement to filter only those packets that are HTTP packets and have source ip as ‘192.168.1.4’. Use this filter:

Http&&ip.src==192.168.1.4

8. Filter by Port Number

This can be done by using the filter ‘tcp.port eq ’. For example:

Tcp.port eq 80

9. Match Packets Containing a Particular Sequence

The filter syntax used in this is: ‘ contains ’.

Tcp contains 01:01:04

10. Reject Packets Based on Source or Destination

Filter here is ‘ip.src != ’ or ‘ip.dst != ’.

Ip.dst != 192.168.1.1

If you enjoyed this article, you might also like..

Больше всего вопросов при работе с программой WireShark у пользователей вызывают фильтры для захвата трафика. Сегодня мы рассмотри их основные примеры, и покажем, как их правильно настраивать!

В процессе анализа проблем с производительностью сети или приложений, если в вашей компании не установлено централизованной системы мониторинга производительности приложений, то для анализа проблем с 4 по 7 уровень сетевой модели OSI необходимо будет воспользоваться анализатором протоколов (он же сниффер).

Если у вас нет коммерческого решения с встроенными средствами автоматического анализа или экспертной системы, то, пожалуй, самый правильный путь будет такой:

    скачать и установить на ноутбук один из лучших бесплатных анализаторов протоколов WireShark (http://www.wireshark.org/download.html);

    освоиться с его интерфейсом;

    изучить стек протоколов и их структуру;

    научиться работать с фильтрами для захвата трафика;

    научится работать с фильтрами для анализа трафика.

В рамках этой статьи мы остановимся на предпоследнем пункте - как настроить фильтры для захвата трафика в WireShark.

Примеры настройки фильтров WireShark для захвата трафика

После выбора интерфейса мы можем приступить или к захвату трафика в режиме — всё подряд, но делать это не рекомендуется, так как, например, при 50% загрузке гигабитного интерфейса для передачи 100 000 пакетов требуется всего несколько миллисекунд. Поэтому важно понимать, какую проблему мы решаем. Тогда у нас как минимум будет уже или адрес (IP или MAC) пользователя или приложение, на которое он жалуется или сервер, к которому он обращается.

Таким образом, самый простой фильтр в Wireshark - это IP адрес устройства (хоста, host) и выглядит этот фильтр следующим образом:

В случае если проблема глобальнее и нам необходимо захватить трафик с отдельной подсети независимо от направления его передачи, то применяем фильтр:

    net 192.168.0.0/24 или net 192.168.0.0 mask 255.255.255.0

При захвате трафика от подсети фильтр будет выглядеть вот так:

    src net 192.168.0.0/24 или src net 192.168.0.0 mask 255.255.255.0

А если надо увидеть для анализа только приходящий трафик в нашу подсеть, то любой из фильтров:

    dst net 192.168.0.0/24

    dst net 192.168.0.0 mask 255.255.255.0

Если пользователь жалуется, что у него не открываются странице в браузере, проблема может быть с DNS сервером (порт 53) или с протоколом HTTP (порт 80), тогда захватываем трафик с использованием фильтра «порт»:

Если мы решили захватить весь трафик для конкретного сервера без учета HTTP и FTP, то фильтр настраивается по любому из этих двух примеров:

    host 192.168.0.1 and not (port 21 or port 80)

    host 192.168.0.1 and not port 21 and not port 80

Если мы хотим видеть весь трафик на порту, кроме трафика DNS, FTP, ARP, то логика будет аналогичной:

    port not dns and not 21 and not arp

При захвате трафика приложений, которые используют динамические порты из определенного диапазона, то фильтр будет сложно выглядеть в случае, если версия Libcap ниже чем 0.9.1:

    (tcp > 1500 and tcp < 1550) or (tcp > 1500 and tcp < 1550)

если версии более поздние, то фильтр будет менее угрожающим и понятным:

    tcp portrange 1501-1549

Для захвата кадров Ethernet типа EAPOL (Протокол передачи EAP-сообщений в стандарте 802.1x называется EAPOL (EAP encapsulation over LAN)):

    ether proto 0x888e

Для справки приведу список типов Ethernet кадров специфичных протоколов:

Ethertype (Hexadecimal)

Протокол

0x0000 — 0x05DC

IEEE 802.3 length

0x0101 — 0x01FF

IP, Internet Protocol

ARP, Address Resolution Protocol.

Frame Relay ARP

Raw Frame Relay

DRARP, Dynamic RARP. RARP, Reverse Address Resolution Protocol.

Novell Netware IPX

EtherTalk (AppleTalk over Ethernet)

IBM SNA Services over Ethernet

AARP, AppleTalk Address Resolution Protocol.

EAPS, Ethernet Automatic Protection Switching.

IPX, Internet Packet Exchange.

SNMP, Simple Network Management Protocol.

IPv6, Internet Protocol version 6.

PPP, Point-to-Point Protocol.

GSMP, General Switch Management Protocol.

MPLS, Multi-Protocol Label Switching (unicast).

MPLS, Multi-Protocol Label Switching (multicast).

PPPoE, PPP Over Ethernet (Discovery Stage).

PPPoE, PPP Over Ethernet (PPP Session Stage).

LWAPP, Light Weight Access Point Protocol.

LLDP, Link Layer Discovery Protocol.

EAPOL, EAP over LAN.

Loopback (Configuration Test Protocol)

VLAN Tag Protocol Identifier

VLAN Tag Protocol Identifier

Если необходимо захватить трафик определенного IP протокола, то можно использовать фильтр:

    ip proto tcp - захват TCP трафика

    ip proto udp - захват UDP трафика

Для захвата IP трафика применяется самый короткий фильтр:

Для захвата только unicast трафика при анализе трафика исходящего и приходящего к сетевому устройству используется фильтр в таком формате:

    not broadcast and not multicast

Простые фильтры, о которых мы поговорили, можно объединять с помощью не сложных символов:

    Отрицание: ! Или not

    Объединение: && или and

    Чередование: II или or

Пример: для захвата трафика от или к устройству с адресом 10.10.10.10, но не из сети 192.168.0.0 фильтр получится объединением с отрицанием:

    host 10.10.10.10 && !net 192.168

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

Смещаемся на восемь байт в IP пакете и захватываем трафик со значением TTL =1

Захватываем все пакеты TCP с адресом порта отправителя 80. Это эквивалент фильтру src port 80.

Для справки приведем байт смещения до наиболее интересных полей в пакете:

Поле в пакете

Длина в байтах

Фильтр

IP Header Length

IP Packet Length

IP Address Source

IP Address Destination

IP Fragmentation

flag = 3 and Offset = 13

ip & 0x2000 = 0x2000 or ip & 0x1fff !=0x0000

TCP Destination Port

TCP Header Length

Для закрепления полученной информации построим фильтр для захвата трафика с запросом HTTP GET. Протокол HTTP использует порт 80, транспортный протокол TCP. Значения в шестнадцатеричной системе исчисления слова GET будет выглядеть 0x47455420. Пример фильтра, который получится у нас:

    port 80 and tcp[((tcp & 0xf0 >>2):4]=0x47455420

В рамках данного материала мы разобрали, как настроить и использовать наиболее простые базовые фильтры для захвата трафика с помощью анализатора протоколов Wireshark.

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ: