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

03.01.2022 Windows 7

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

Здравствуйте друзья! В этой статье я попытаюсь объяснить и рассказать о самом необходим, что нужно знать при использовании Wireshark на Linux , и покажу анализ трёх типов сетевого трафика. Данный мануал применим и для работы Wireshark под Windows.

Если вы новичок в информационной безопасности, и совсем хорошо понимаете что такое сниффер (анализатор трафика), советую почитать статью , и только потом читать эту статью о том как пользоваться Wireshark.

Очень популярный и чрезвычайно умелый анализатор сетевого протокола , который разработал Джеральд Комбс , Wireshark появился в июне 2006 г., когда Комбс переименовал сетевой инструмент Ethereal, также созданный им, поскольку сменил работу и не мог больше использовать старое название. Сегодня большинство используют Wireshark, a Ethereal сделался историей.

Wireshark: лучший сниффер

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

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

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

Чтобы новичок смог разобраться с Wireshark, ему нужно понять сетевой трафик. В таком случае цель этой статьи состоит в разъяснении вам основ TCP/IP, чтобы вы смогли сделать нужные выводы по сетевому трафику, который анализируете.

Формат пакета TCP и пакета IP.

Если вы запускаете Wireshark от имени обычного пользователя, вы не сможете использовать сетевые интерфейсы для сбора данных из-за имеющихся в сетевых интерфейсах разрешений файла Unix по умолчанию. Удобнее запускать Wireshark от имени root (sudo wireshark) при сборе данных и от имени обычного пользователя-для анализа данных.

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

Захват сетевых данных с помощью Wireshark

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

Чтобы прекратить процесс захвата данных, выберите в меню Capture > Stop . В качестве альтернативы, можете нажать на четвертый значок слева, с красным квадратиком (это сокращение от «Прекратить захват данных live») в панели инструментов Main (учтите, его точное расположение зависит от имеющейся у вас версии Wireshark). На эту кнопку можно нажимать только в процессе сбора сетевых данных.

При использовании описанного метода захвата данных вы не можете изменить настроенные в Wireshark по умолчанию Capture Options [Опции захвата]. Вы можете увидеть и изменить Capture Options, выбрав в меню Capture > Options . Здесь можно выбрать интерфейс(ы) сети, посмотреть свой IP-адрес, применить фильтры сбора данных, перевести свою сетевую карту в режим приема всех сетевых пакетов и сохранить собранные данные в один или несколько файлов. Вы даже можете велеть прекращать захват пакетов по достижении определенного числа сетевых пакетов, или определенного времени, или определенного объема данных (в байтах).

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

Wireshark позволяет читать и анализировать уже собранные сетевые данные из большого числа файловых форматов, в том числе tcpdump, libpcap, snoop от Sun, nettl от HP, текстовых файлов К12, и т.д. Короче, с помощью Wireshark можно читать практически любой формат собранных сетевых данных. Подобным же образом Wireshark позволяет сохранять собранные данные в разных форматах. Можно даже использовать Wireshark для конверсии файла из одного формата в другой.

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

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

Фильтры отображения Wireshark

Если во время захвата сетевых данных применяются фильтры захвата, то Wireshark не учитывает сетевой трафик, не соответствующий фильтру; тогда как фильтры отображения применяются после захвата данных и «прячут» сетевой трафик, не удаляя его. Вы всегда можете отключить Display filter и вернуть свои скрытые данные.

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

Wireshark выделяет синтаксически правильный фильтр светло-зеленым фоном. Если синтаксис содержит ошибки, фон розовеет.

Фильтры отображения поддерживают операторы сравнения и логические операторы. Фильтр отображения http.response.code


Три пакета (SYN, SYN+ACK и АСК) трехзтапной установки соединения TCP

404 && ip.addr == 192.168.1.1 показывает трафик, который либо идет с IP-адреса 192.168.1.1, либо идет на IP-адрес 192.168.1.1, который также имеет в себе код отклика 404 (Not Found) HTTP. Фильтр!Ьоо1р &&!ip &&!агр исключает из результата трафик BOOTP, IP и ARP. Фильтр eth.addr == 01:23:45:67:89:ab && tcp.port == 25 отображает трафик идущий от или к сетевому устройству с MAC-адресом 01:23:45:67:89:аЬ, которое использует во входящих и исходящих соединениях порт TCP за номером 25.

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

Продолжение статьи на следующей странице. Для перехода на следующую страницу нажмите на кнопку 2 которая находится под кнопками социальных сетей.

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

Где и как скачать Wireshark

Wireshark является свободным софтом и распространяется абсолютно бесплатно. На официальном сайте разработчика https://www.wireshark.org вы можете не только скачать утилиту, но и пожертвовать добровольно средства на развитие проекта.

  • Интерфейс сайта довольно прост: нажмите сначала на кнопку “Download”.
  • Затем выберете тип вашей системы: Windows или MacOS, 32-битная или 64. Скачивание именно вашей версии начнется незамедлительно. Если вы не уверены в своей системе, посмотрите точнее в параметрах “Система” в панели управления.


  • Установка программы происходит легко, вам достаточно кликать на клавишу “Next” и порой выполнять инструкции с экрана, однако, некоторые моменты требуют разъяснения.
  • Когда вам предложат выбрать набор установки утилиты, отмечайте галочками все поля. Так вы сможете пользоваться полным набором инструментов Wireshark.


  • В данном окне вы самостоятельно должны настроить параметры, согласно вашим предпочтениям. Здесь указывается создание ярлыка, кнопки в меню Пуск, ассоциацию типов файлов. Если вы не уверены в своем решении, то лучше перенести все галочки со скриншота в свое окно.


Как включить мониторинг трафика в Wireshark

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

  • В центре окна вы увидите кнопку “Refresh interfaces” или “No interfaces found”. Нажмите на нее, чтобы загрузить интерфейсы. У вас может быть подключение через маршрутизатор, напрямую к кабелю, по сетям Wi Fi или через модем LTE.
  • Если же у вас беспроводное подключение Wi Fi, зайдите во вкладку “Wireless”.


  • Нажмите “WLAN Truffic”.


  • Если же подключение происходит через модем, обратите внимание на вкладку “Telephony”, нажмите строку “LTE”.


  • Что бы вы ни выбрали, трафик предстанет перед вами примерно в таком виде. Сверху в строке “Filter” вы можете ввести фильтр, чтобы отсеять ненужную вам информацию и видеть сетевые протоколы только по определенному критерию.
  • Нажав мышкой на один из них, в нижнем окне вы увидите больше информации. Главным критерием может стать строка с хостом: сайт, который принял или отдал запрос. Такие данные указаны после слов “Host”, а также “Accept”.
  • Как говорилось ранее, работать с протоколами без малейшего понимания их работы практически невозможно. Вы не поймете, какой именно пакет когда и куда ушел. Тем не менее, если эта тема вам хоть каплю знакома, всё становится интуитивно понятно.


Как включить интерфейсы Wireshark, если они недоступны

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

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

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


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

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

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

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

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

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

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

sudo apt install wireshark

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

А для Gnome / Unity:

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

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

Для начала анализа выберите сетевой интерфейс, например 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.. Наберите строку в поле фильтра и нажмите 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.0 для обнаружения проблем в сети. Для этого в левом нижнем углу окна есть круглая кнопка, при нажатии на неё открывается окно Expet Tools . В нём Wireshark собирает все сообщения об ошибках и неполадках в сети:

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

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

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

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

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

Лучшее место для перехвата паролей - ядро сети, где ходит трафик всех пользователей к закрытым ресурсам (например, почта) или перед маршрутизатором для выхода в Интернет, при регистрациях на внешних ресурсах. Настраиваем зеркало и мы готовы почувствовать себя хакером.

Шаг 1. Устанавливаем и запускаем Wireshark для захвата трафика

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

Захват трафика начался.

Шаг 2. Фильтрация захваченного POST трафика

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

Вводим в окне специальный фильтр для отображения захваченных пакетов: http. request. method == “ POST”

И видим вместо тысячи пакетов, всего один с искомыми нами данными.

Шаг 3. Находим логин и пароль пользователя

Быстрый клик правой кнопки мыши и выбираем из меню пункт Follow TCP Steam


После этого в новом окне появится текст, который в коде восстанавливает содержимое страницы. Найдем поля «password» и «user», которые соответствуют паролю и имени пользователя. В некоторых случаях оба поля будут легко читаемы и даже не зашифрованы, но если мы пытаемся захватить трафик при обращении к очень известным ресурсам типа: Mail.ru, Facebook, Вконтакте и т.д., то пароль будет закодирован:

HTTP/1.1 302 Found

Server: Apache/2.2.15 (CentOS)

X-Powered-By: PHP/5.3.3

P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"

Set-Cookie: password=; expires=Thu, 07-Nov-2024 23:52:21 GMT; path=/

Location: loggedin.php

Content-Length: 0

Connection: close

Content-Type: text/html; charset=UTF-8

Таким образом, в нашем случае:

Имя пользователя: networkguru

Пароль:

Шаг 4. Определение типа кодирования для расшифровки пароля

Заходим, например, на сайт http://www.onlinehashcrack.com/hash-identification.php#res и вводим наш пароль в окно для идентификации. Мне выдан был список протоколов кодирования в порядке приоритета:

Шаг 5. Расшифровка пароля пользователя

На данном этапе можем воспользоваться утилитой hashcat:

~# hashcat -m 0 -a 0 /root/wireshark-hash.lf /root/rockyou.txt

На выходе мы получили расшифрованным пароль: simplepassword

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

  • Протокол POP и фильтр выглядит следующим образом: pop.request.command == "USER" || pop.request.command == "PASS"
  • Протокол IMAP и фильтр будет: imap.request contains "login"
  • Протокол SMTP и потребуется ввод следующего фильтра: smtp.req.command == "AUTH"

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

Шаг 6. Что делать, если трафик зашифрован и используется HTTPS?

Для ответа на этот вопрос есть несколько вариантов.

Вариант 1. Подключиться в разрыв соединения между пользователем и сервером и захватить трафик в момент установления соединения (SSL Handshake). В момент установки соединения можно перехватить сеансовый ключ.

Вариант 2. Вы можете расшифровать трафик HTTPS, используя файл журнала сеансовых ключей, записываемый Firefox или Chrome. Для этого браузер должен быть настроен на запись этих ключей шифрования в файл журнала (пример на базе FireFox), и вы должны получить этот файл журнала. По сути, необходимо похитить файл с ключом сессии с жесткого диска другого пользователя (что является незаконным). Ну а далее захватить трафик и применить полученный ключ для его расшифровки.

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

После получения ключей по варианту 1 или 2 необходимо прописать их в WireShark:

  1. Идем в меню Edit - Preferences - Protocols - SSL.
  2. Ставим флаг «Reassemble SSL records spanning multiple TCP segments».
  3. «RSA keys list» и нажимаем Edit.
  4. Вводим данные во все поля и прописываем путь в файлу с ключом

WireShark может расшифровывать пакеты, которые зашифрованы с использованием алгоритма RSA. В случае если используются алгоритмы DHE/ECDHE, FS, ECC, сниффер нам не помощник.

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

БОНУС

ВИДЕО: Wireshark Packet Sniffing Usernames, Passwords, and Web Pages

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

Введение

Из всех методов изучения компьютерных сетей анализ трафика, пожалуй, самый кропотливый и трудоемкий. Интенсивные потоки современных сетей порождают очень много «сырого» материала, отыскать в котором крупицы полезной информации далеко не просто. За время своего существования стек 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 и проявив некоторую сноровку, ты сможешь увидеть сетевые взаимодействия, как они есть - в невинном, девственно обнаженном виде. И фильтры тебе в помощь!