Анализаторы сетевых потоков
Реализация
WinDump - это просто порт Windows утилиты tcpdump. Использование tcpdump и WinDump почти взаимозаменяемо. В этой лекции мы сосредоточимся на утилите tcpdump, отмечая все различия между WinDump и tcpdump по мере продвижения. Вообще, если вы работаете дома, один, то можете использовать tcpdump вместо WinDump.
Первое обстоятельство, которое нужно иметь в виду, заключается в том, что утилита tcpdump обычно требует привилегированного доступа (root). Она должна выполняться с доступом root или setuid root. Этот тип доступа необходим утилите tcpdump и библиотеке libpcap для того, чтобы иметь очень низкий уровень доступа (то есть уровень ядра) к сетевым интерфейсам и сетевым данным. Это также удерживает "пользователя Джо" от установки анализатора сетевых пакетов для неуместного использования. Некоторые системы Unix требуют большего, а некоторые меньшего доступа - детали смотрите с помощью утилиты man или в файле README.
Другая причина, по которой пользователи libpcap и WinPcap нуждаются в низкоуровневом доступе, состоит в том, что по умолчанию эти анализаторы сетевых потоков переводят сетевой интерфейс, на котором они работают, в смешанный режим. Если вы помните наше обсуждение в начале лекции, некоторые сетевые устройства, типа хабов Ethernet, фактически передают пакет ко всем портам хаба, надеясь, что законный получатель обнаружит себя и примет пакет. Другие хосты, связанные с хабом, также получают этот пакет, но они, как предполагается, игнорируют его. Смешанный (Promiscuous) режим предписывает интерфейсу вмешиваться в чужие дела, и это позволяет утилите tcpdump видеть весь сетевой трафик на хабе, а не только трафик, который направлен к хабу или от него. То же самое происходит, если вы выполняете tcpdump на маршрутизаторе или брандмауэре. Если интерфейс не находится в смешанном режиме, вы видите только трафик, направленный непосредственно маршрутизатору. Н о если мы помещаем интерфейс в смешанный режим, то можем прослушивать каждый пакет, который проходит через устройство. Многие организации захотят установить анализатор сетевых пакетов ( packet sniffers ) на своих главных маршрутизаторах выхода в интернет с целью контроля.
Теперь нам нужно выполнить приложение. Если вы просто напечатаете tcpdump в приглашении к вводу команды, то tcpdump будет пытаться прослушивать первый доступный сетевой интерфейс (или все интерфейсы, если это возможно) и выдаст все данные, которые она увидит. В зависимости от того, насколько занята ваша система, или от того, связана ли она с хабом или с портом монитора коммутатора, вы можете увидеть большие свитки текста. Вы можете заметить, что tcpdump, похоже, отображает только хосты, вовлеченные в сетевые транзакции, метку времени и некоторые другие IP-данные. Но где же содержание пакета? Очевидно, вам надо узнать больше об этом инструменте, чтобы заставить его сообщать вам больше информации.
tcpdump - мощный инструмент, но у него нет дружественного интерфейса. Подобно Netcat, nmap и другим чрезвычайно полезным инструментальным средствам, запускаемым из командной строки, которые мы описали ранее, утилита tcpdump становится полезной только после того, как вы овладеете синтаксисом и опциями командной строки.
Синтаксис командной строки: спецификации фильтров
Утилита tcpdump позволяет использовать булевское выражение для определения пакетного фильтра. Булевское выражение может состоять из нескольких выражений, объединенных вместе с помощью операторов AND, OR или NOT. Типичный формат выражения такой:
<Характеристика пакета> <значение>
Спецификаторы типа. Наиболее типичные характеристики пакета, называемые спецификаторами ( qualifiers ) - спецификаторы типа: host (хост), net (сеть) и port (порт). Например, командная строка:
%tcpdump host 192.168.1.100
говорит о том, что мы хотим видеть только пакеты, идущие по адресу 192.168.1.100 или от него. Если нас интересует только Web-трафик, мы можем попробовать следующее:
%tcpdump host 192.168.1.100 and port 80
Это выражение позволяет нам иметь тот же самый уровень функциональности фильтра, который мы имели с программой BUTTSniffer. Но утилита tcpdump имеет еще несколько модификаторов, из которых вы можете выбирать. В данном случае, нам не надо сначала исключать весь трафик, чтобы сосредоточиться на определенном хосте.
Спецификаторы направления. tcpdump позволяет определять фильтры направлений. Например, если нас интересует только трафик, прибывающий с адреса 192.168.1.100, который предназначен чьему-то Web-порту, мы используем спецификаторы направлений src и dst:
%tcpdump src host 192.168.1.100 and dst port 80
Этот фильтр дает нам именно то, что мы ищем. Иначе, мы видели бы трафик, прибывающий из других мест на Web-сервер хоста 192.168.1.100, когда это нас совсем не интересует.
Если вы не указываете спецификатор направления для спецификатора типа, tcpdump подразумевает src или dst. Вторая команда, которую мы рассматривали, могла бы быть переписана следующим образом:
%tcpdump src or dst host 192.168.1.100 and src or dst port 80
Спецификаторы протокола. У tcpdump также есть спецификаторы протокола, которые могут применяться к вашему выражению. Например, строка
%tcpdump src host 192.168.1.100 and udp dst port 53
даст исходящие DNS (Domain Name System) запросы с хоста 192.168.1.100. Обратите внимание на спецификатор протокола udp, расположенный перед спецификатором порта dst. Другие спецификаторы протокола для спецификаторов типа порта - tcp и icmp. Некоторые спецификаторы протокола используются при спецификаторах типа хоста, например ip, ip6, arp и ether.
Эта команда дает все arp-запросы на нашей локальной подсети:
%tcpdump arp net 192.168.1
Если мы знаем MAC-адрес определенного хоста, и хотим установить на него фильтр, то можно использовать следующую строку:
%tcpdump ether host 00:e0:29:38:b4:67
Если никакие спецификаторы протокола не даны, tcpdump подразумевает значения ip, arp или rarp для спецификаторов типа хоста, и tcp или udp для спецификаторов типа порта.
Другие спецификаторы. До сих пор синтаксис для отдельного выражения, устанавливающего соответствие пакетов некоторым требованиям, выглядит так:
[Спецификатор протокола] [спецификатор направления] <спецификатор типа> значение
Несколько других необязательных спецификаторов, которые могут использоваться для определения дополнительных характеристик пакета, показаны в таблице 14.1.
Значения. Очевидно, что значения для спецификаторов зависят от используемого спецификатора. В общем виде, значение может быть или символическим названием, или соответствующим числом.
- host - спецификаторы типа хостов имеют значения имен хостов или числовых адресов. (Являются ли они IP-адресами, MAC-адресами или другими адресами, зависит от предшествующего им спецификатора протокола.)
- port - спецификаторы типа портов используют символические названия (из /etc/services) для портов или непосредственно номера портов.
- net - спецификаторы типа сети используют сетевые адреса и маски сети написанные или с сетевыми октетами (типа 192.168), с последующим числом сетевых байтов (192.168.0.0/16), или с последующей сетевой маской (192.168.0.0 mask 255.255.0.0).
- proto - спецификаторы типа протокола используют символические названия ( ip, tcp, udp ) или номера протоколов, определенные в /etc/protocols.