Анализ пакетов wireshark. Лучшие инструменты пен-тестера: сниферы и работа с пакетами

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

Wireshark

Netcat

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

Scapy

Сайт:
www.secdev.org/projects/scapy

Must-have для любого хакера, представляющий собой мощнейшую тулзу для
интерактивной манипуляции пакетами. Принять и декодировать пакеты самых
различных протоколов, ответить на запрос, инжектировать модифицированный и
собственноручно созданный пакет - все легко! С ее помощью можно выполнять целый
ряд классических задач, вроде сканирования, tracorute, атак и определения
инфраструктуры сети. В одном флаконе мы получаем замену таких популярных утилит,
как: hping, nmap, arpspoof, arp-sk, arping, tcpdump, tetheral, p0f и т.д. В то
же самое время Scapy позволяет выполнить любое, даже самое специфическое
задание, которое никогда не сможет сделать уже созданное другим разработчиком
средство. Вместо того чтобы писать целую гору строк на Си, чтобы, например,
сгенерировать неправильный пакет и сделать фаззинг какого-то демона, достаточно
накидать пару строчек кода с использованием Scapy ! У программы нет
графического интерфейса, а интерактивность достигается за счет интерпретатора
Python. Чуть освоишься, и тебе уже ничего не будет стоить создать некорректные
пакеты, инжектировать нужные фреймы 802.11, совмещать различные подходы в атаках
(скажем, ARP cache poisoning и VLAN hopping) и т.д. Разработчики сами настаивают
на том, чтобы возможности Scapy использовались в других проектах. Подключив ее
как модуль, легко создать утилиту для различного рода исследования локалки,
поиска уязвимостей, Wi-Fi инжекции, автоматического выполнения специфических
задач и т.д.

packeth

Сайт:
Платформа: *nix, есть порт под Windows

Интересная разработка, позволяющая, с одной стороны, генерировать любой
ethernet пакет, и, с другой, отправлять последовательности пакетов с целью
проверки пропускной способности. В отличие от других подобных тулз, packeth
имеет графический интерфейс, позволяя создавать пакеты в максимально простой
форме. Дальше - больше. Особенно проработано создание и отправка
последовательностей пакетов. Ты можешь устанавливать задержки между отправкой,
слать пакеты с максимальной скоростью, чтобы проверить пропускную способность
участка сети (ага, вот сюда-то и будут ддосить) и, что еще интереснее -
динамически изменять параметры в пакетах (например, IP или MAC-адрес).

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 :

Введение

В работе компьютерной сети и сетевого стека узлов иногда возникают проблемы, причины которых трудно обнаружить общеизвестными утилитами сбора статистики (такими например, как netstat) и стандартными приложениями на основе протокола ICMP (ping, traceroute/tracert и т.п.). В подобных случаях для диагностики неполадок часто приходится использовать более специфичные средства, которые позволяют отобразить (прослушать) сетевой трафик и проанализировать его на уровне единиц передачи отдельных протоколов («сниффинг», sniffing ).

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

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

Рассматриваемый в данной статье продукт Wireshark является широко известным инструментом перехвата и интерактивного анализа сетевого трафика, фактически, стандартом в промышленности и образовании. К ключевыми особенностям Wireshark можно отнести: многоплатформенность (Windows, Linux, Mac OS, FreeBSD, Solaris и др.); возможности анализа сотен различных протоколов; поддержку как графического режима работы, так и интерфейса командной строки (утилита tshark); мощную систему фильтров трафика; экспорт результатов работы в форматы XML, PostScript, CSV и т. д.

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

Установка Wireshark

Последнюю версию Wireshark для операционных систем Windows и OS X, а также исходный код можно скачать с сайта проекта . Для дистрибутивов Linux и BSD-систем, данный продукт обычно доступен в стандартных или дополнительных репозиториях. Опубликованные в данной статье снимки экранов сделаны с версии 1.6.2 Wireshark для Windows. Более ранние версии программы, которые можно найти в репозиториях Unix-подобных операционных систем, также можно успешно использовать, так как Wireshark давно уже стабильный и функциональный продукт.

Работа Wireshark базируется на библиотеке Pcap (Packet Capture) , предоставляющей собой прикладной интерфейс программирования для реализации низкоуровневых функций взаимодействия с сетевыми интерфейсами (в частности перехвата и генерации произвольных единиц передачи сетевых протоколов и протоколов локальных сетей) . Библиотека Pcap является также основой таких известных сетевых средств, как tcpdump, snort, nmap, kismet и т. д. Для Unix-подобных систем Pcap обычно присутствует в стандартных репозиториях программного обеспечения. Для семейства операционных систем Windows существует версия Pcap, которая называется Winpcap. Ее можно скачать с сайта проекта . Впрочем, обычно в этом нет необходимости, так как библиотека Winpcap включена в пакет установки Wireshark для Windows.

Процесс установки программы не сложен для любой операционной системы, с поправкой, разумеется, на специфику используемой Вами платформы. Например, Wireshark в Debian/Ubuntu устанавливается так, что непривилегированные пользователи по умолчанию не имеют права перехватывать пакеты, поэтому программу нужно запускать с использованием механизма смены идентификатора пользователя sudo (или же произвести необходимые манипуляции согласно документации стандартного DEB-пакета).

Азы работы c Wireshark

Пользовательский интерфейс Wireshark построен на основе библиотеки GTK+ (GIMP Toolkit). Главное окно программы включает следующие элементы: меню, панели инструментов и фильтров просмотра, список пакетов, детальное описание выбранного пакета, отображение байтов пакета (в шестнадцатеричной форме и в виде текста) и строку состояния:

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

Итак, эргономика Wireshark отражает многоуровневый подход к обеспечению сетевых взаимодействий. Все сделано таким образом, что, выбрав сетевой пакет из списка, пользователь получает возможность просмотреть все заголовки (слои), а также значения полей каждого слоя сетевого пакета, начиная от обертки — кадра Ethernet, непосредственно IP-заголовка, заголовка транспортного уровня и данных прикладного протокола, содержащихся в пакете.

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

Проблема поиска необходимых пакетов в больших объемах перехваченного трафика решается двумя типами фильтров : сбора трафика (capture filters) и его отображения (display filters) . Фильтры сбора Wireshark основаны на языке фильтров библиотеки Pcap, т.е. синтаксис в данном случае аналогичен синтаксису утилиты tcpdump . Фильтр представляет собой серию примитивов, объединенных, если это необходимо, логическими функциями (and, or, not). Часто используемые фильтры можно сохранять в профиле для повторного использования .

На рисунке показан профиль фильтров сбора Wireshark:

Анализатор сетевых пакетов Wireshark также имеет свой простой, но многофункциональный язык фильтров отображения . Значение каждого поля в заголовке пакета может быть использовано как критерий фильтрации (например, ip.src — IP-адрес источника в сетевом пакете, frame.len — длина Ethernet-фрейма и т.д.). С помощью операций сравнения значения полей можно сопоставлять заданным величинам (например, frame.len а несколько выражений объединять логическими операторами (например: ip.src==10.0.0.5 and tcp.flags.fin). Хорошим помощником в процессе конструирования выражений является окно настройки правил отображения (Filter Expression) :

Средства анализа сетевых пакетов

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

Одной из полезных функций Wireshark является пункт «Follow TCP Stream» (буквально, «Следовать за TCP-потоком») подменю анализа «Analyze», позволяющий извлечь данные прикладного протокола из TCP-сегментов потока, которому принадлежит выбранный пакет:

Еще один интересный пункт подменю анализа - «Expert Info Composite» , вызывающий окно встроенной экспертной системы Wireshark, которая попытается обнаружить ошибки и замечания в пакетах, автоматически выделить из дампа отдельные соединения и охарактеризовать их. Данный модуль находится в процессе разработки и совершенствуется от версии к версии программы.

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

Функция «Endpoint» дает многоуровневую статистику по входящему/исходящему трафику каждого узла. Пункт «Conversations» (буквально, «разговоры») позволяет определить объемы трафика различных протоколов (канального, сетевого и транспортного уровня модели взаимодействия открытых систем), переданного между взаимодействовавшими друг с другом узлами. Функция «Packet Lengths» отображает распределение пакетов по их длине.

Пункт «Flow Graph...» представляет потоки пакетов в графическом виде. При этом, при выборе элемента на графике становится активным соответствующий пакет в списке в главном окне программы:

Отдельное подменю в последних версиях Wireshark отведено IP-телефонии. В подменю «Tools» есть пункт «Firewall ACL Rules» , для выбранного пакета попытается создать правило межсетевого экрана (в версии 1.6.х поддерживаются форматы Cisco IOS, IP Filter, IPFirewall, Netfilter, Packet Filter и Windows Firewall).

Программа также имеет встроенный интерпретатор легковесного языка программирования Lua . Используя Lua, Вы можете создавать собственные «декодеры» протоколов и обработчики событий в Wireshark.

Вместо заключения

Анализатор сетевых пакетов Wireshark является примером Opensource-продукта, успешного как в рамках платформы Unix/Linux, так популярного среди пользователей Windows и Mac OS X. Конечно, кроме Wireshark, существуют тяжеловесные комплексные интеллектуальные решения в области исследования сетевого трафика, функционал которых гораздо шире. Но они, во-первых, стоят больших денег, во-вторых, сложны в освоении и эксплуатации; в-третьих, нужно понимать, что не все можно автоматизировать и никакая экспертная система не заменит хорошего специалиста. Так что, если перед Вами стоят задачи, требующие анализа сетевого трафика, то Wireshark — это инструмент для Вас. А поклонники командной строки могут пользоваться утилитой tshark — консольной версией Wireshark .

Привет, Мир! Сейчас расскажем об одном полезном методе траблшутинга и поиска проблем на роутерах MikroTik . Суть данного метода заключается в том, чтобы отлавливать (“сниффить”) пакеты, проходящие через определённые интерфейсы нашего роутера и анализировать их сразу же при помощи Wireshark .

Prerequisites

Итак, для того, чтобы воспользоваться данным методом нам понадобится:

  • Роутер MikroTik (в нашем случае использовался RB951Ui-2HnD с версией прошивки RouterOS 6.40.2)
  • Программа Wireshark (в нашем случае версия 2.4.1)
  • Компьютер или сервер, находящийся в одной сети с роутером с запущенным Wireshark’ом

Настройка

Первым делом открываем Wireshark, выбираем интерфейс, на котором хотим “сниффить” (в нашем случае это Ethernet, то есть интерфейс, с помощью которого компьютер подключается к роутеру) и устанавливаем следующий фильтр - udp port 37008 . Как показано на рисунке:

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

Что же это за фильтр такой и что за порт - 37008 ? Дело в том, что MikroTik шлёт UDP дэйтаграммы, то есть весь перехваченный трафик, именно на этот порт streaming server’а , а в качестве этого стриминг сервера, как вы могли догадаться, у нас выступает наш компьютер с запущенным Wireshark’ом. Эти пакеты инкапсулируются по протоколу TZSP (TaZmen Sniffer Protocol), который используется для переноса в себе других протоколов.

Итак, запускаем перехват пакетов на определённом интерфейсе с фильтром udp port 37008 и видим, что ничего не происходит и пакетов нет.


А теперь самое интересное – подключаемся к MikroTik’у через WinBox, переходим в раздел Tools далее Packet Sniffer и видим следующее окно с настройками:


На вкладке General можем оставить всё по умолчанию, переходим на вкладку Streaming :


Ставим галочку в Streaming Enabled , в поле Server указываем IP адрес нашего компьютера, на котором запустили Wireshark и ставим галочку на Filter Stream , чтобы активировать фильтр, который будет настраиваться на следующей вкладке - Filter

На данной вкладке мы можем отфильтровать интересующий нас трафик. Например, у нас в сети есть IP-АТС Asterisk и мы хотим посмотреть, какие пакеты он получает и отправляет через роутер MikroTik. Так, например, можно отследить коммуникацию IP-АТС с сервером провайдера VoIP услуг.

Итак, выбираем интерфейсы, на которых хотим отлавливать пакеты (в нашем случае это bridge), далее отфильтруем трафик по определённому IP-адресу в поле IP Address (Наша IP-АТС), укажем протокол - 17 (udp) и порт 5060 (sip) . Направление укажем любое - any и Filter Operation = or , то есть логика работы данного фильтра – “или”. Если вы хотите отлавливать пакеты только по жёстко определённому фильтру, то логику следует указать and , то есть – совпадение всех условий фильтра.


Отлично, теперь отправляемся в Wireshark и видим, что он нам уже наловил нужных пакетов в соответствии с правилами фильтра.


В нашем случае – это коммуникация IP-АТС Asterisk с сервером провайдера VoIP услуг, запрос на регистрацию и подтверждение с обратной стороны. Обратите внимание, что тип инкапсуляции - TZSP , однако, Wireshark смог правильно деинкапсулировать эти пакеты и отобразить нам пакеты SIP .

Полезна ли Вам эта статья?

Пожалуйста, расскажите почему?

Нам жаль, что статья не была полезна для вас:(Пожалуйста, если не затруднит, укажите по какой причине? Мы будем очень благодарны за подробный ответ. Спасибо, что помогаете нам стать лучше!

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

теория

Для начала немного разберемся с терминологией.

Слово sniffer (дословно с английского это можно перевести как "нюхач" или "вынюхиватель") в самом общем смысле суть некое прослушивающее устройство, внедренное в сеть для перехвата передаваемых по ней данных. В более узком смысле сниффер - это ПО, взаимодействующее с (часто говорят "садящееся" пошел от является зарегистрированной торговой марки компании Network Associates, ссылающейся на продукт "Sniffer(r) Network Analyzer", однако впоследствии слово постигла та же участь, что и PC, xerox, kleenex - сниффер становится понятием нарицательным, обозначающим весь класс подобных продуктов.

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

Все-таки логичней было бы утверждать, что сниффинг - это совокупность мер по перехвату траффика. В рамках же конкретного продукта могут быть реализованы следующие вещи: захват пакетов (packet capturing). На этом этапе мы получаем некий сырой (mashine readable) дамп данных, обычно разделенный на куски по границам кадров (пакетов). И уж что мы с ним собираемся делать - наши проблемы. Но обычно, раз уж мы зачем-то запустили работать сниффер - нам интересно получить некий результат в human readable формате, для чего используется декодирование пакетов (decoding) или анализ протоколов;

Собственно, это процесс "разгребания" нашего дампа. Вот, к примеру, был у нас такой сырой материал.

Как вы могли заметить, состоит это дело из трех колонок: смещение каждой линии, данные в шестнадцатеричном формате и их ASCII-эквивалент. Этот пакет содержит 14-байтовый заголовок Ethernet, 20-байтовый IP-заголовок, 20-байтовый TCP-заголовок, заголовок HTTP, оканчивающийся двумя подряд CRLF (0D 0A 0D 0A), а дальше собственно данные прикладного уровня, в нашем случае - веб-трафик.

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

ETHER: Destination address: 0000BA5EBA11 ETHER: Source address: 00A0C9B05EBD ETHER: Frame Length: 1514 (0x05EA) ETHER: Ethernet Type: 0x0800 (IP) IP: Version = 4 (0x4) IP: Header Length = 20 (0x14) IP: Service Type = 0 (0x0) IP: Precedence = Routine IP:...0.... = Normal Delay IP:....0... = Normal Throughput IP:.....0.. = Normal Reliability IP: Total Length = 1500 (0x5DC) IP: Identification = 7652 (0x1DE4) IP: Flags Summary = 2 (0x2) IP:.......0 = Last fragment in datagram IP:......1. = Cannot fragment datagram IP: Fragment Offset = 0 (0x0) bytes IP: Time to Live = 127 (0x7F) IP: Protocol = TCP — Transmission Control IP: Checksum = 0xC26D IP: Source Address = 10.0.0.2 IP: Destination Address = 10.0.1.201 TCP: Source Port = Hypertext Transfer Protocol TCP: Destination Port = 0x0775 TCP: Sequence Number = 97517760 (0x5D000C0) TCP: Acknowledgement Number = 78544373 (0x4AE7DF5) TCP: Data Offset = 20 (0x14) TCP: Reserved = 0 (0x0000) TCP: Flags = 0x10:.A.... TCP:..0..... = No urgent data TCP:...1.... = Acknowledgement field significant TCP:....0... = No Push function TCP:.....0.. = No Reset TCP:......0. = No Synchronize TCP:.......0 = No Fin TCP: Window = 28793 (0x7079) TCP: Checksum = 0x8F27 TCP: Urgent Pointer = 0 (0x0) HTTP: Response (to client using port 1909) HTTP: Protocol Version = HTTP/1.1 HTTP: Status Code = OK HTTP: Reason = OK ....

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

Виды снифферов и сниффинга

Все, что будет описано в этом абзаце, естественно, носит некоторый оттенок условности, поскольку официальную "Теорию сниффинга" еще никто в полном объеме не описал. Придется придумывать классификацию "на ходу";)

Итак, по "месторасположению" (если тут применим этот термин) сниффер может работать:

На маршрутизаторе (шлюзе)

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

На оконечном узле сети

Применительно к Ethernet мы будем иметь два основных возможных варианта прослушки. Классический, некоммутируемый Ethernet предполагает, что каждый сетевой интерфейс в принципе "слышит" весть траффик своего сегмента. Однако в нормальном режиме работы сетевой карты, прочитав первые 48 бит заголовка фрейма, станция сравнивает свой МАС-адрес с адресом получателя, указанном в фрейме. Если адрес чужой, станция "стыдливо закрывает уши", то бишь перестает читать чужой фрейм. Таким образом в нормальном режиме вы можете перехватывать и анализировать только свой траффик. Для перехвата пакетов всех станций сегмента требуется перевести вашу сетевую карту в режим под названием promiscuous mode, чтобы она "бесстыдно" продолжала читать не предназначенные ей пакеты. Практически все реализации снифферов позволяют переход карты в promiscuous mode.

Примечание: использование коммутируемого Ethernet создает ситуацию, когда даже переход карты в promiscuous mode делает прослушивание не предназначенного вашей станции трафика практически невозможным. Однако существует технология организации такого прослушивания путем так называемого ARP-спуфинга. Суть в следующем: коммутатор создает так называемый "broadcast domain", и хост с установленным сниффером с помощью подделки ARP-сообщений может притвориться, например, пограничным маршрутизатором (рассылая постоянно АRP-сообщения, где сетевому адресу маршрутизатора соответствует MAC-адрес прослушивающей станции). Таким образом трафик соседей насильственно завернется в сторону "шпиена".

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

Поддерживаемые физические интерфейсы и протоколы канального уровня;

Качество декодирования и количество "узнаваемых" протоколов;

Пользовательский интерфейс и удобство отображения;

Дополнительные фичи: статистика, просмотр в реальном времени, генерирование или модификация пакетов и другое...

При выборе сниффера (как, впрочем, и любого другого софта) есть смысл руководствоваться следующими соображениями: из того, что существует под вашу ОС выбираем либо то, что точно соответсвует вашим задачам (имеет смысл в том случае, если вы планируете либо разовое мероприятие, либо постоянное выполнение одной и той же операции) либо максимально навороченное решение, в случае, если вы чувствуете, что сниффер будет вам полезен, но еще не знаете в какой ситуации:) А ситуации бывают разные...

Зачем нам нужен сниффер?

Традиционно идея сниффинга жила как бы в двух ипостасях: легальное и нелегальное применение. Что характерно, слово "сниффер" чаще применяется в нелегальной сфере, а "сетевой анализатор" - в легальной. Начнем, пожалуй, с легального применения;)

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

Например: ICQ, Europe Online. Под подозрительными технологиями/ПО следует понимать ситуации, когда вы предполагаете наличие в программе закладки или иной недокументированной функциональности. Например, ходили слухи, что клиентская часть знаменитого cDc Back Orifice также является троянской лошадкой и посылает некие сведения хозяевам - авторам ПО. Установка BO Client "на прослушивание" показала, что слухи не соответствуют действительности.

Не менее полезен сниффер для отладки вашего собственного ПО. Никогда не забуду момент, когда прокси-сервер не желал устанавливать соединение, если GET-запрос оканчивался на \n\n вместо требуемого \r\n\r\n. Только исследование пакетов, отправляемых "законопослушным" браузером и сравнение их с пакетами, отправляемыми моим "выскочкой"-скриптом, указало мне на досадную ошибку. Очень и очень часто в повседневной админской практике мне приходится сталкиваться и с анализом на уровне TCP/UDP.

Обучение. Можно довестись до полуобморочного состояния, зазубривая форматы заголовков пакетов различных протоколов и методы взаимодействия (скажем, 3-way TCP handshake, DNS, прикладные методы плана traceroute), но эти знания будут мертвыми, пока вы не попытаетесь "потрогать это руками" - написав однажды программу либо... заглянув в сниффер! Попробуйте после прочтения документации на неизвестный или плохо понятный вам протокол, смоделировать взаимодействие, перехватить пакеты и проанализировать их - уверяю вас, все станет чрезвычайно понятно и более того, это знание более реально и надолго отложится в голове. В случае же с закрытыми технологиями, сниффер может оказаться чуть ли не единственным средством для их изучения.

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

Теперь поговорим о нелегальной стороне сниффинга. Ну, во-первых, это банальное

Подслушивание. Грамотно установив сниффер вы можете шпионить за ближними своими и удаленными - врагами, приятелями, супругами;) Вас могут заинтересовать такие вопросы: для чего человек использует сеть, какие веб-ресурсы он посещает, какие данные передает, с кем и о чем общается? Да простят меня органы государственной безопасности, но пресловутый СОРМ, правомерность которого в виде тотального протоколирования трафика суть баааальшой вопрос, я отношу пока именно в этот раздел, хотя он мог бы оказаться и в последнем абзаце "легального сниффинга";)

Более меркантильное подслушивание. Однако значительная часть "хакерского" сообщества не разменивает свои таланты на слежку за неверными супругами и прочую бытовуху. Чаще всего злоумышленника интересует некий материал, с помощью которого можно продвинуться в нелегком деле вламывания в чужие системы и сети. Как вы могли догадаться, речь идет, главным образом, о перехвате имен пользователей и паролей, проходящих по сети в незашифрованном (plain text) виде. В частности, это касается паролей к telnet, POP, IMAP, NNTP, IRC, к веб-приложениям, не использующим шифрование, SNMP v1 community-strings и т.п.

Реализации

Теперь, более-менее разобравшись с теоретической частью, вернемся на грешную землю - поговорим о конкретных реализациях снифферов под различные платформы. На самом деле такого софта очень много, разбежка в функциональных возможностях и ценнике (особенно в последнем) - колоссальная. Составитель "Sniffing (network wiretap, sniffer) FAQ" Robert Graham рекомендует попробовать следующие продукты:

WinNT Server
Microsoft"овский WinNT Server поставляется со встроенной программой под названием "Network Monitor". Зайдите в панель управления сетью, выберите "Services", нажмите "Add..." и выберите "Network Monitor Tools and Agent". После установки программа будет доступна в старт-меню в разделе "Administrative Tools".

На самом деле BlackICE является системой обнаружения вторжений (IDS, Intrusion Detection System), но одна из функций ее - писать сырые дампы пакетов в форме, приемлемой для расшифровки анализаторами протоколов. Одно но: программа просматривает только трафик, проходящий через локальные интерфейсы хоста, на котором работает, то бишь является non-promiscuous. Скачать прогу можно на сайте

Эта программа, наоборот, может только анализировать пакеты, записанные сниффером вроде BlackICE Pro.

Бесплатный анализатор протоколов.

Естественно, этот список далеко не полный, вы можете залезть на любую поисковую систему или в коллекцию софта для даунлоада и найти что-нибудь подходящее слева на боковом меню. Более того, в обзоре не упомянут самый, на мой взгляд, выдающийся продукт такого рода для Win32 - NetXRay, нынче переименованный в Sniffer Basic. О нем мы поговорим чуть попозже.

Snort
Базирующийся на libpcap сниффер с расширенными возможностями фильтрации.

Опять же, список далек от совершенства, можете поискать что-нибудь еще. Друго дело, что в *NIX-сообществе особо не принято "распыляться" - есть проверенные временем, постоянно совершенствующиеся продукты-лидеры, и большинство предпочитает именно их, даже не пытаясь искать альтернативу. Абсолютные лидеры тут - tcpdump и sniffit.

Tcpdump & WinDump

(by Ghost//Necrosoft)

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

WinDump - порт TcpDump с *nix систем, выполняет те же самые функции и имеет такой же синтаксис, что и TcpDump, но имеет пару дополнительных опций командной строки, о которых будет рассказано ниже.

Небольшая аннотация к использованию TcpDump под различными системами. Под SunOS с использованием устройств nit или bpf: для запуска tcpdump вы должны иметь доступ на чтение к /dev/nit или /dev/bpf*. Под Solaris с dlpi вы должны иметь доступ к псевдосетевым адаптерам, таким как /dev/le. Под HP-UX с dlpi: вы должны быть root"ом или на tcpdump должен быть установлен uid на root. Под IRIX с snoop и Linux: требования, аналогичные HP-UX. Под Ultrix и Digital UNIX: только суперюзеру доступны promiscuous-mode операции, используя pfconfig(8) можно получить право на запуск tcpdump. Под BSD: вы должны иметь доступ к /dev/bpf*. Под Win32: вы должны установить NDIS packet capture driver.

А теперь подробно разберем опции командной строки.

TcpDump [ -adeflnNOpqStvx ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ expression ]. Специфические опции Windump [-D] [ -B size ].

-a разрешает конвертировать сетевые и широковещательные адреса в имена.

-c выход после обработки count пакетов.

-d выводит содержимое пакета в удобочитаемом виде.

-dd выводит содержимое пакета как фрагмент Си-программы.

-ddd выводит содержимое пакета в десятичном виде.

-e выводит заголовки канального уровня в каждой новой строке.

-f выводит адреса удаленных и локального хостов без преобразования в имена.

-F использовать file с описанием параметров фильтрации (дополнительные выражения в командной строке игнорируются).

-i использовать интерфейс interface для трассировки. Если не определен, tcpdump находит активный сетевой интерфейс с наименьшим номером (исключая loopback). В Windows interface — имя сетевого адаптера или его номер (можно узнать, запустив WinDump —D).

-l использует буферизированный вывод на stdout. Полезным может оказаться конструкция вида "tcpdump -l | tee dat"" or "tcpdump -l > dat & tail -f dat"".

-n не преобразовывать адреса (т.e. адрес хоста, номер порта и т.д.) в имена.

-N не печатать доменное имя в имени хоста. Т.е. если использован данный флаг, tcpdump напечатает "nic"" вместо "nic.ddn.mil"".

-O не запускать оптимизатор пакетов. Эта опция полезна, если вы сами разгребаете пакеты.

-p не переводить сетевой интерфейс в "promiscuous mode".

-q сокращенный вывод. Выводит информацию в сокращенном виде.

-r читает пакеты из файла file (которые созданы при помощи опции -w). Если вы хотите использовать в качестве ввода консоль, то file это "-"".

-s выдает snaplen байт каждого пакета (в SunOS"овсоком NIT минимальное количество 96). 68 байт достаточно для протоколов IP, ICMP, TCP и UDP, однако обрезает информацию с более высоких уровней, скажем, DNS и NFS пакетов.

-T принудительная интерпретация пакетов по типу type соответствующих маске "expression". На данный момент известны следующие типы: rpc (Remote Procedure Call), rtp(Real-Time Applications protocol), rtcp (Real-Time Applications control protocol), vat (Visual Audio Tool), и wb (distributed White Board).

-S выводит абсолютный номер TCP-пакета.

-t не выводит время в каждой строке.

-tt выводит неформатированное время в каждой строке.

-v детальный вывод. К примеру, время жизни пакетов и тип сервиса.

-vv более детальный вывод. К примеру, вывод дополнительных полей NFS reply packets.

-w записывает raw-пакеты в file, которые вы сможете в дальнейшем расшифровать с использованием опции —r. Если вы хотите использовать в качестве вывода консоль, то fileэто "-"".

-x выводит каждый пакет в шестнадцатеричном виде (без заголовка). На вывод будет отправлено snaplen байт.

Дополнительные опции WinDump:

-B устанавливает размер буфера драйвера size в килобайтах. По умолчанию размер буфера 1 мегабайт. Если в процессе работы некоторые пакеты не отображаются, попробуйте увеличить размер буфера. Если у вас РРР-соединение или 10 Мбит Ethernet, то размер буфера можно уменьшить вдвое или втрое.

-D выводит список сетевых устройств, которые присутствуют в вашей системе. Список имеет вид: number — номер сетевого устройства в системе, name — его имя, а за ними следует описание устройства. В последствии вы сможете использовать эти данные для того, чтобы работать со всеми имеющимися сетевыми интерфейсами вашей системы, которые доступны в данный момент. А выбрать устройство можно будет при помощи опции —I — "WinDump —i name" или "WinDump —i number".

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

expression может состоять из одного или более примитивов. Примитивы часто состоят из id (имя или номер) определителя. Существует три ключевых типа определителей:

type — определитель, задающий общую политику. Возможные типы — host, net и port. Т.е. "host foo", "net 128.3", "port 20". Если type не указан, то по умолчанию используетсяhost.

dir — определитель, указывающий направление передачи пакетов. Возможные варианты src, dst, src or dst и src and dst. Т.е "src foo", "dst net 128.3", "src or dst port ftp-data". Если dir не указан, то по умолчанию используется src or dst. Для "null" соединений (это ppp или slip) используется inbound и outbound определитель для указания желаемого направления.

proto — определитель позволяет фильтровать пакеты по конкретному протоколу. Возможные протоколы: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp и udp. Т.е. "ether src foo", "arp net 128.3", "tcp port 21". Если определитель отсутствует, то никакие пакеты не фильтруются. ("fddi" фактически является алиасом для "ether", т.к. в большинстве случаев FDDI-пакеты содержат Ethernet-адрес отправителя и получателя и часто содержат Ethernet-типы пакетов. FDDI-заголовки также содержат другие поля, которых нет в списке фильтров.)

В дополнение к вышесказанному, некоторые специальные примитивы не имеют шаблонов, это: gateway, broadcast, less, greater и арифметические выражения. Об этом чуть далее.

Множество составных выражений фильтров используют слова and, or и not для объединения примитивов. К примеру "host foo and not port ftp and not port ftp-data". Для упрощения ввода некоторые определители могут быть опущены. К примеру, "tcp dst port ftp or ftp-data or domain" — то же самое, что и "tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain".

Допускаются следующие выражения:

dst host host верно, если поле IP destination пакета — host, может быть адрес или имя хоста.

src host host верно, если поле IP source пакета — host.

host host верно, если source или destination пакета — host. Также могут употребляться префиксы: ip, arp, или rarp как: ip host host что эквивалентно ether proto \ip and hosthost. Если host — имя с несколькими IP-адресами, каждый адрес проверяется на соответствие.

ether dst ehost Верно, если Ethernet-адрес получателя — ehost. Ehost — любое из имен /etc/ethers или номер (см. ethers(3N).

ether src ehost верно, если Ethernet-адрес отправителя — ehost.

ether host ehost верно, если Ethernet-адреса получателя или отправителя — ehost.

gateway host верно, если host — gateway. Т.е. Ethernet-адрес отправителя или получателя — host, но ни IP отправителя, ни IP получателя не являются host. Host может быть именем, а также может находиться в /etc/hosts и /etc/ethers. (Что равносильно ether host ehost and not host host, который может использоваться с любым именем или номером для host / ehost.)

dst net net верно, если IP получателя имеет адрес — net. Net — любая запись из /etc/networks или адрес сети.

src net net верно, если IP отправителя имеет адрес — net.

net net Верно, если IP получателя или отправителя имеют адрес сети — net.

net net mask mask Верно, если IP-адрес совпадает с net c соответствующей netmask. Может быть определен совместно с src или dst.

net net/len верно, если IP равно net, a маска подсети — len в битовом виде (CIDR-формат). Может быть определен совместно с src или dst.

dst port port верно, если пакет ip/tcp или ip/udp и имеет порт получателя — port. port может быть числом или присутствовать в /etc/services (см tcp(4P) и udp(4P)). Если имя используется для двух или более портов, то проверяются оба номера порта и протоколы. Если используются недопустимые номер порта или имя, то проверяются только номера портов (т.е. dst port 513 выводит трафик tcp/login и udp/who, и port domain выводит tcp/domain и udp/domain).

src port port верно, если порт отправителя — port.

port port верно, если порт отправителя или получателя — port. Некоторые выражения можно комбинировать, к примеру: tcp src port port — только tcp-пакеты у которых порт —port.

less length верно, если длина пакета меньше или равна length, что равносильно len <= length.

greater length верно, если длина пакета больше или равна length, что равносильно len >= length.

ip proto protocol верно, если пакет является IP пакетом с протоколом protocol. Protocol может иметь номер или одно из имен icmp, igrp, udp, nd, или tcp.

ether broadcast верно, если пакет — широковещательный Ethernet-пакет. Выражение ether является необязательным.

ip broadcast верно, если пакет — широковещательный IP-пакет.

ether multicast верно, если пакет — Еthernet multicast-пакет. Выражение ether является необязательным. Это сокращенная запись для "ether & 1!= 0".

ip multicast верно, если пакет — IP-multicast пакет.

ether proto protocol верно, если пакет типа Ethernet. Protocol может быть число или имя: ip, arp, или rarp.

decnet src host верно, если DECNET-адрес получателя — host, который может быть адресом типа "10.123"", или DECNET-имя хоста. (DECNET имя хоста поддерживается только в Ultrix системах).

decnet dst host Верно, если DECNET-адрес получателя — host.

decnet host host Верно, если DECNET-адрес получателя или отправителя — host.

proto [ expr: size ]

Proto один из следующих протоколов ether, fddi, ip, arp, rarp, tcp, udp, или icmp, и показывает уровень протокола для данной операции. Смещение в байтах для данного уровня протокола берется из expr. Size — необязательное, показывает интерeсующее количество байт по данному смещению, может быть 1,2 или 4, по умолчанию 1.

Примеры использования tcpdump

Выдача всех вохдящих и исходящих пакетов от sundown: tcpdump host sundown

Выдача трафика между helios и одним из двух hot или ace: tcpdump host helios and \(hot or ace \)

Выдача всех пракетов между ace и другими хостами, исключая helios: tcpdump ip host ace and not helios

Выдача трафика между локальной машиной и машиной, находящейся в Berkeley: tcpdump net ucb-ether

Выдача ftp трафика через шлюз snup: tcpdump "gateway snup and (port ftp or ftp-data)"

Выдача трафика не принадлежащего машинам в локальной сети (если ваша машина — шлюз в другую сеть, tcpdump не сможет выдать трафик вашей локальной сети). tcpdump ip and not net localnet

Выдача старовых и стоп пакетов (SYN и FIN пакеты), которые не принадлежат локальной сети. tcpdump "tcp & 3!= 0 and not src and dst net localnet"

Выдача IP пакетов длиной более 576 байт, переданных через шлюз snup: tcpdump "gateway snup and ip > 576"

Выдача IP broadcast или multicast пакетов, которые не посылаются через Ethernet broadcast или multicast: tcpdump "ether & 1 = 0 and ip >= 224"

Выдача всех ICMP пакетов, которые не являются эхо запросами/ответами (т.е, не ping пакеты): tcpdump "icmp!= 8 and icmp!= 0"

NetXRay

By Alice D. Saemon

Та, которую люблю...

Long long time ago... NetXRay был первым сниффером, попавшим в поле моего зрения. Тогда, в 1997 году эта английская программа произвела фурор в кругах windows-ориентированных сетевиков. Прошли годы, но старенькая версия NetXRay (3.0.1) все еще в строю, в ежедневной работе на моей рабочей станции. На сегодняшний день продукт переименован в Sniffer Basic, добавлены некоторые новые возможности, но, с большего, основная функциональность осталась неизменной со времен 3.0.1. Это первая причина, почему в газете будет описан именно NetXRay 3.0.1. Вторая причина... (озираясь на анти-пиратскую полицию) - продукт очень дорогой (1643 фунтов, которые стерлингов), и trial"ные ограничения очень серьезные. Итак, приступим.

Пакет состоит из набора разных функций и действительно может называться скорее сетевым анализатором, нежели сниффером. Все возможности (модули) сгруппированы в меню "Tools", там же находятся и различные установки. С них и начнем. Вы можете выбрать адаптер, для которого проводится текущее тестирование (probe). Адаптер должен поддерживать стандарт NDIS 3.0/3.1.

Внимание, баг! Если вы "натравливаете" NetXRay на "неправильный" по его мнению адаптер или захватываете пакеты, которые он не может декодировать на канальном-сетевом уровне (например, трафик эксплойтов, посылающих криво фрагментированные пакеты) - на стадии декодирования (анализа протоколов) программа зависает намертво.

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

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

Ну вот, теперь приступаем к функциональным модулям пакета.

capture (захват пакетов)

Сердце NetXRay, собственно то, что в народном понимании есть сниффер. Поэтому позволю себе описать его наиболее подробно.

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

По адресам отправителя и получателя. Для облегчения сей задачи существует адресная книга и некоторый набор предустановленных адресов, например "Any".

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

По известным программе протоколам. Это:

Сетевые: AppleTalk, AppleTalk ARP, APOLLO, DECNET, IP, IP ARP, IPX, LAT, NetBEUI, OSI, SNA, VINES, VINES Loopback, VINES Echo, XNS

Выше в стеке IP: транспортные, служебные и маршрутизации - ICMP, IGMP, GGP, EGP, IGP, ISO-TP4, HELLO, IP-VINES, IGRP, OSPF, TCP, UDP; прикладного уровня - FTP, REXEC, RLOGIN, RSH, PRINTER, SMTP, TELNET, DNS(TCP), GOPHER, HTTP, POP, SUNRPC(TCP), NNTP, NETBIOS, X-WINDOW, DNS(UDP), BOOTP, TFTP, SUNRPC(UDP), SNMP, SNMPTRAP, BIFF, WHO, SYSLOG, RIP, GDP, NFS.

Выше в стеке IPX: NCP, SAP, NRIP, NBIOS, DIAGNOSTIC, SERIALIZATION, NMPI, NLSP, NSNMP, NSNMPTRAP, SPX.

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

Внимание! Протокольный фильтр имеет немного странный интерфейс: предполагается, что если все чекбоксы в границах одного уровня не помечены, захватываются все пакеты протоколов данного уровня и все что выше (ниже, если смотреть на пользовательский интерфейс;). Таким образом, если вы не поставили ни одной "птички" - ловится абсолютно все. Естественно, неизвестные протоколы прикладных уровней в таком случае ловятся тоже, но не декодируются в удобочитабельный вид, что естественно, раз уж они неизвестные:))

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

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

После отработки захвата нужного числа пакетов, при активизации просмотра мы вываливаемся в так называемое "окно результатов", имеющее по умолчанию имена XRay1, XRay2 ну и так далее по количеству текущих буферов. Такое окно вы можете лицезреть на скриншоте: сверху - список пакетов с краткой "аннотацией", посередине - декодированные данные (ну что смог декодировать;) и снизу - сырой пакет. Любопытно, что при нажатии на интересующее поле в декодированной секции подсвечивается соответствующее место в сыром пакете - можно проверить качество работы анализатора протоколов;)

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

Кроме накапливания пакетов в буфере или файле для последующего декодирования существует также возможность просмотра трафика в режиме реального времени.

Правда а) визуально это выглядит ужасно б) включается эта опция в таком нелогичном месте, что даже такой старый NetXRay-юзер как я забывает где же эта "птичка". Птичка устанавливается в меню Tools | Options... закладка General, чекбокс Realtime Display, а не в настройках Capture, где ее логично было бы искать;-/

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

packet generator

Вот уж поистине замечательная штука: можно с нуля "набросать" и отправить в сеть абсолютно любой пакет. Интерфейс состоит из главного окна и так называемого конструктора пакетов, разделенного на две секции - Configure и Decode.

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

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

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

Если "послать текущий пакет" вызывается из окна Packet Generator"а - автоматически вызывается конструктор пакетов. Будьте внимательны!

В конструкторе пакетов в секции Decode программа будет давать вам некоторые подсказки, в частности, высчитывать новую контрольную сумму при модификации пакета (она бы еще сама вносила соответствующие изменения, ленивое создание;). Однако AI оно тем и отличается от разума человеческого, что думать как следует не умеет. Поэтому когда, например, вы меняете IP-адрес получателя, подумайте, не следует ли заодно поменять его MAC-адрес?;)

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

Всякая всячина

Кроме вышеописанного программа содержит массу других полезных и не очень (как кому;) наворотов. О них кратко:

Dashboard. Статистика загруженности сети, точнее той ее части, которая вам видна. Количество пакетов, байт, ошибок всех типов, расчет утилизации. Меня всегда смущала эта фича, поскольку никогда в жизни я не видела сообщений об ошибках - ну быть не может такого чтоб их не было!;)

Host Table. Отлавливает различные сведения о видимых снифферу хостах и их деятельности (без полного захвата и анализа пакетов)

Matrix. Практически то же самое, что и Host Table, но представленное немного в другом формате.

History. Чертит графики и диаграммы по поведению сети в определенный промежуток времени.

Protocol Distribution. Как следует из названия, ведет статистику по использованию различных протоколов.

Statistics. Статистика по утилизации и размерам кадров.

Alarm log. Журнал учета определенных вами событий.

Ну вот вкратце и все. (ничего себе "вкратце получилось %-()) Скачивайте и тестируйте на здоровье - себе в радость и врагам назло:)

Заключение

Ну вот и закончена на сегодня сказка о снифферах. Кто слушал (дочитал до конца) - молодец, надеюсь получили ответы на большинство своих вопросов. Для ради справедливости отмечу: далеко не ВСЕ вопросы были рассмотрены в рамках этой статьи. За бортом остались по крайней мере две большие темы: внутреннее устройство снифферов, включая методы и подходы к написанию подобного софта, а также способы противостояния снифферингу.

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

Компьютер