Опубликован: 20.02.2007 | Уровень: специалист | Доступ: платный
Лекция 14:

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

Dsniff

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

Установка

Утилита dsniff доступна на сайте http://www.monkey.org/~dugsong/dsniff/. Она требует также нескольких других пакетов, включая OpenSSL, libpcap, Berkeley DB, libnet и libnids. Вам, вероятно, не составит труда найти двоичные версии этих пакетов для вашей конкретной операционной системы Unix.

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

dsniff компонуется подобно любому другому приложению Unix ( configure, make, make install ). Во время установки dsniff по умолчанию разместит все свои инструментальные средства в каталоге /usr/local/sbin.

Реализация: инструментальные средства

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

Arpspoof

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

ARP - это протокол, использующийся для преобразования IP-адресов в MAC-адреса Ethernet. Поскольку ARP-запросы передаются "широковещательно" для всей сети (типа такого: "Эй, вы, которая из ваших Ethernet-карт имеет IP-адрес 192.168.1.100?"), то они всегда будут доходить до всех. Хост, выполняющий Arpspoof, может сообщить подателю ARP-запроса, что искомый IP-адрес у него, даже если на самом деле это не так. Вы можете обмануть хост, подавший ARP-запрос и переключить посылку пакета на себя вместо получателя, которому он предназначался. Затем вы можете сделать копию пакета и использовать механизм пересылки пакета, чтобы отправить пакет его первоначальному адресату подобно ретранслятору.

Использование arpspoof из командной строки следующее: arpspoof host_to_snarf_packets _from (то есть хост, у которого надо перехватить пакет). С помощью опции -i вы можете указать сетевой интерфейс, который надо использовать, а, используя опцию -t, вы можете указать определенные хосты, которые хотите обмануть. По умолчанию, Arpspoof подделывает MAC-адрес хоста, который указан в командной строке ( host_to_snarf_packets_from ), под все хосты локальной сети (LAN). Наиболее популярным хостом, подверженным ARP-фальсификации в локальной сети, является заданный по умолчанию маршрутизатор. Поскольку весь трафик локальной сети пройдет через маршрутизатор, чтобы добраться до других сетей, то ARP-фальсификация маршрутизатора позволяет вам перехватывать все, посылаемое за пределы локальной сети! Только не забудьте установить пересылку пакетов так, чтобы маршрутизатор все же получил пакет; иначе, вся ваша локальная сеть потеряет свой выход в интернет!

Dnsspoof

Этот инструмент работает подобно Arpspoof. Он позволяет подделывать DNS-ответы для DNS-сервера локальной сети. Поскольку DNS выполняется по протоколу пользовательских дейтаграмм (UDP), не требующему установки соединения, то DNS-клиент сделает запрос и будет ожидать ответа. Инструмент dnsspoof просто подделает ответ (сообщая клиенту, что имя хоста оказалось соответствующим его IP-адресу) и попытается получить информацию прежде, чем прибудет реальный ответ от соответствующего DNS-сервера. dnsspoof может подделывать ответы для всех DNS-запросов, которые он получает. Вы также можете создать файл в формате hosts(5) (с именем spoofhosts, например) для преобразования только определенных имен в ваш локальный IP-адрес, а затем выполнить утилиту dnsspoof с опцией f spoofhosts, чтобы подделывать результат преобразования только для определенных имен.

Кроме той же самой опции i, которую Arpspoof принимает для определения сетевого интерфейса, единственным дополнительным параметром, который принимает dnsspoof, является выражение для фильтра перехватываемых пакетов, аналогичное используемому в tcpdump. Инструмент dnsspoof будет использовать это выражение для поиска какого-нибудь DNS-трафика, где он мог бы подделывать ответы на любые входящие запросы в локальную сеть, которую он может видеть. Если вы сначала используете Arpspoof для подделки MAC-адреса DNS-сервера, которому предназначался запрос, то можете быть уверенны, что dnsspoof будет всегда получать DNS-запросы для локальной сети (LAN) и будет всегда способен дать в ответ фальсифицированный результат отображения имен хоста/IP-адреса.

Dsniff

Инструмент dsniff представляет собой перехватчик паролей ( password sniffer ), который распознает несколько различных протоколов, включая telnet, FTP, SMTP, POP (Post Office Protocol), IMAP (Internet Message Access Protocol), HTTP, CVS, Citrix, SMB (Server Message Block), Oracle и многие другие. В то время как другие анализаторы и перехватчики сетевых пакетов, подобные Ethereal, дают вам тонны дополнительной информации о подключении и об индивидуальных пакетах, инструмент dsniff используется в случае, если вас интересуют только имена пользователей и пароли. Инструмент весьма эффективен. Он сохраняет только "полезную" информацию в выходном файле Berkeley DB.

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

Опция Объяснение
-c Включает полудуплексное ассемблирование TCP-потока, чтобы обеспечить корректную операцию прослушивания при использовании Arpspoof.
-d Запускает режим отладки.
-f <file> Загружает совокупность условий (то есть, типов служб для перехвата паролей) из файла с форматом /etc/services.
-i <if> Использует определенный сетевой интерфейс.
-m Использует файл dsniff.magic, чтобы попытаться автоматически определить протокол, используя характеристики, определенные в файле magic.
-n Не выполняет поиска хостов.
-r <file> Читает перехваченные данные из предварительно сохраненного сеанса (см. -w).
-s <len> Перехватывает, по крайней мере <len> (количество байтов) первых байтов пакета, что полезно, если информация об имени пользователя и пароле приходит после 1024-байтового предела, который задан по умолчанию.
-t <trigger> Загружает разделенный запятыми набор триггеров, используя формат port/proto=service ; например, по команде dsniff -t23/tcp=telnet, 21/tcp=ftp, 110/tcp=pop3 будет перехвачен пароль для сеансов telnet, FTP и SMTP.
-w <file> Записывает перехваченные данные в двоичный файл для последующего анализа (см. -r ).

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

Давайте запустим dsniff и посмотрим, пытается ли наш друг Боб войти в какую-нибудь систему.

[root@originix sbin]# dsniff -t 21/tcp=ftp,23/tcp=telnet -n
Kernel filter, protocol ALL, raw packet socket
dsniff: listening on eth0 []
---------
03/23/02 09:40:50 tcp 192.168.1.101.3482 -> 192.168.1.100.21 (ftp)
USER bob
PASS bob123
---------
03/23/02 09:41:52 tcp 192.168.1.101.3483 -> 192.168.1.100.23 (telnet)
root
guessme
jdoe
password
ls

Да, это Боб. Он устанавливает связь по FTP, и мы перехватили его пароль. А что можно сказать относительно сеанса telnet, который зарегистрирован ниже? dsniff, похоже, перехватил попытки получить вход в систему с привилегированным доступом ( root ) через telnet. Вход в систему, похоже, был неудачным, потому что пользователь затем попробовал войти в систему под именем jdoe с паролем password, и ему это удалось. Далее dsniff зарегистрировал выполнение команды ls. В настоящее время большинство систем не предоставляют доступ с привилегированными правами ( root ) через telnet, даже если вводится правильный пароль. Пароль guessme, вероятно, был паролем привилегированного доступа. И поскольку мы теперь знаем пароль для имени пользователя jdoe, мы можем проникнуть в систему и испытать ее.

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

Filesnarf

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

И снова, вы можете использовать опцию -i, чтобы указать сетевой интерфейс. В командной строке вы можете также указать выражение пакетного фильтра, как в tcpdump, чтобы использовать его для прослушивания соответствующего NFS-трафика и шаблона файла (перехватить только *.conf-файлы или файлы с именем passwd ). Если вы хотите перехватить все файлы кроме некоторых (скажем, вы хотите перехватить все, кроме файлов MP3), вы можете инвертировать соответствующий шаблон файла, используя опцию -v следующим образом.

filesnarf -v '*.mp3'
Macof

Инструмент macof заполнит локальную сеть случайными воображаемыми MAC-адресами в надежде, что коммутатор перестанет срабатывать, как полагается, и начнет действовать подобно хабу, позволяя инструменту dsniff действовать более успешно в сетевом окружении коммутатора. Вы можете выполнять macof без опций, чтобы сгенерировать случайный TCP/IP-трафик со случайными MAC-адресами, или можете определить тип трафика, используя флаги командной строки. Вы можете контролировать используемый сетевой интерфейс ( -i ), IP-адрес отправителя и получателя ( -s и -d ), порты отправителя и получателя ( -x и -y ), единственный аппаратный адрес назначения ( -e ) и число выдуманных пакетов для пересылки ( -n ).

Mailsnarf

Так же как filesnarf предназначен для перехвата NFS, инструмент mailsnarf повторно собирает перехваченные почтовые сообщения из SMTP- и POP-протоколов. Он сохраняет сообщения в стандартном формате mbox так, чтобы вы могли просматривать их так же, как бы вы просматривали любой почтовый ящик Unix, используя утилиты mutt, pine или любое приложение Unix по вашему выбору. При этом используются точно такие же опции, за исключением того, что вместо указания интересующего вас шаблона файла, вы указываете обычные выражения, совпадение с которыми надо искать в заголовке или теле сообщения.

Msgsnarf

Подобно другим программам вида *snarf, msgsnarf выполняет ту же самую операцию для популярных программ интернет-чата: AOL Instant Messenger, Internet Relay Chat (IRC), ICQ, MSN messenger и Yahoo messenger. В этом случае вы можете определить обыкновенный образец выражения, который нужно искать в сообщениях (например, сохранять только те сообщения, которые содержат слово пароль).

Sshmitm

Sshmitm является одним из самых опасных инструментальных средств, которые поставляются с комплектом dsniff. Предположим, вы выполняете утилиту dnsspoof, чтобы подделать имена хоста реальной машины. Утилита sshmitm, которая расшифровывается как "SSH Monkey in the Middle", может перехватить SSH-трафик, перенаправленный на вашу машину. Sshmitm поддерживает только протокол SSH версии 1 (серьезное основание, чтобы модернизировать инструмент к версии 2).

Как это сделано? Инструмент dnsspoof позволяет нам перехватить SSH-подключение к другой машине. Все, что надо сделать - это запустить sshmitm на порте 22 (мы можем изменять порт, который использует sshmitm с помощью опции -p ) и устанавливать его так, чтобы ретранслировать SSH-подключение к нужному хосту. Если мы выполняем dnsspoof, сообщая всем, что мы являемся хостом Originix, когда в действительности Originix - это машина с адресом 192.168.1.100, то когда somehost осуществляет SSH-запрос к Originix, он сначала ищет Originix и находит его по нашему подделанному IP-адресу. Так, что если мы выполняем команду sshmitm -p 22 192.168.1.100 22, мы можем перехватить SSH-подключение от somehost перед тем, как передать его к Originix. Что это нам дает? Когда SSH договариваются о ключах, которые будут использоваться для шифрования данных, sshmitm может перехватить ключ от somehost и заменить его известным нам ключом. Это позволит нам расшифровывать всю информацию на перехваченном подключении.

Tcpkill

Этот инструмент пытается уничтожить действующее TCP-подключение, мистифицируя сброс, т.е. RST-пакет и вбрасывая его в законное подключение. Как и в других инструментах, опция -i позволяет выбрать ваш интерфейс, а для выбора типа подключений, которые вы хотите уничтожить, может использоваться выражение для пакетного фильтра, такое же, как в tcpdump. Дополнительная опция, - <num>, где num - любое число от 1 до 9, сообщает tcpkill, как сильно надо стараться, чтобы уничтожить подключение. В быстрые подключения может быть труднее ввести пакет, чем в медленные. По умолчанию значение степени "уничтожения" равно 3.

Tcpnice

Возможно так же, что вы не хотите уничтожить подключение полностью. Инструмент Tcpnice позволит вам немного замедлить его. Используете те же самые опции, которые используются в tcpkill, за исключением того, что вместо попытки вводить RST-пакеты с разным уровнем суровости, вы используете опцию -n <приращение>, чтобы определить, на сколько вы хотите замедлить подключение. Приращение 1 дает заданную по умолчанию скорость, а приращение 20 дает самую медленную скорость. Инструмент выполняет это замедление, регулируя то количество данных, которое хосты, "по их словам", могут обрабатывать.

Часть TCP-заголовка представляет собой размер окна, который позволяет хосту рекламировать максимальное количество данных, которые он может обрабатывать. Инструмент tcpnice прослушивает трафик, соответствующий вашему tcpdump -выражению пакетного фильтра и изменяет значение рекламируемого размера окна на значение меньшее, чем оно есть на самом деле. Используете флаг -n, чтобы настроить, на сколько должно быть уменьшено окно. Это даст знать хосту на другом конце сеанса связи, что требуется прекратить посылку такого большого количества данных так быстро, и подключение замедлится. Чтобы подбавить "масло в огонь", вы можете использовать опцию -I для подделки исходных подавленных ответов ICMP, чтобы заставить хост на другом конце думать, что он загружает хост с большим количеством данных, чем тот может обработать. Это может еще больше замедлить подключение.

Urlsnarf

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

Webmitm

Этот инструмент дает HTTPS (Web-трафик, защищенный протоколом SSL) то же, что sshmitm дает SSH. Он требует использования инструмента dnsspoof и работает в той же самой манере, вставляя поддельный SSL-сертификат, который позволит "monkey in the middle" расшифровывать все данные, которые мы посылаем вперед и назад. Один недостаток этого сценария состоит в том, что пользователь может быть уведомлен Web-броузером, что сертификат для определенного сайта изменился. И вы должны надеяться, что пользователь проигнорирует это сообщение и продолжит сеанс. Инструмент webmitm позволит вам перехватывать открытый текст трафика для серверов HTTPS в вашей локальной сети, так же как это делает sshmitm с SSH-серверами.

Webspy

Этот последний инструмент в пакете dsniff немного несерьезен. Определяя IP-адрес хоста в вашей локальной сети, webspy перехватывает Web-трафик, посылаемый этим хостом. Всякий раз, когда этот хост перемещается в интернете к определенному URL-адресу, webspy будет загружать тот же самый URL на вашем броузере Netscape. Все, что вам требуется сделать - это запустить свой Web-броузер Netscape, перед запуском webspy. И можно рассматривать все то, что просматривает в сети ваш друг, сидящий этажом ниже. То есть речь идет о вторжении в личную жизнь!

Опасные инструменты

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

Сергей Хлюкин
Сергей Хлюкин
Россия, Москва, Московский Государственный Открытый Университет, 2007
Игорь Касаткин
Игорь Касаткин
Россия, Москва