Журнал LinuxFormat - перейти на главную

LXF94:Следим за сетью

Материал из Linuxformat
Версия от 18:54, 11 марта 2008; Lodger (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Содержание

Wireshark: Ловите данные в сети

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

Не нужно быть специалистом по сетям, чтобы интересоваться их мониторингом. Столь же необязательно родиться крутым хакером. Ясное представление о процессах, происходящих в вашей сети, способствует её максимальной защищенности. Оно даже может подвигнуть вас на полезные действия.

Но для понимания этих процессов, вы должны достаточно близко познакомиться с пакетами, пересылаемыми в вашей сети, чтобы видеть их в упор. Для этой работы есть только один инструмент, и он известен как «сниффер» [«обнюхиватель», ищейка, англ.] пакетов или сетевой анализатор. Такие приложения захватывают необработанные биты и байты потока данных, пока они передаются по вашей сети, и анализируют их для определения используемого сетевого протокола. Затем вы можете «пройти по следу» сетевого соединения и отследить пути взаимодействия между клиентом и сервером.

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

Самый популярный анализатор для Linux – инструмент под названием Wireshark, но более вероятно, что вы слышали об инструменте под названием Ethereal. На самом деле Wireshark – это и есть Ethereal, а имя поменялось после того, как главный разработчик, Джеральд Комбс [Gerald Combs], сменил работодателя. Его бывшая компания имела права на имя Ethereal, но не на код приложения, выпущенный под лицензией GPL. Поэтому все, что Комбс должен был сделать после ухода – это настроить новый репозиторий Subversion для своей собственной версии исходного кода и придумать новое имя. В июне 2006 г. Ethereal превратился в Wireshark.

Для перехвата пакетов вашей сети Wireshark использует системную библиотеку под названием libpcap. Если вы используете какой-то экзотический сетевой протокол, не поддерживаемый libpcap, то Wireshark также не сможет ничего выяснить. Но тем, кто использует пециализированные сетевые протоколы, которые даже libpcap не понимает, вряд ли понадобится наш урок. Теперь, когда вы знаете всю подоплеку, давайте начнем.

Часть 1: Перехват данных

Важнейшее решение при сетевом анализе – где запускать сниффер. Для личных экспериментов лучше всего сделать это на вашей собственной машине. Если же вы хотите анализировать реальный мир данных вашей сети, запустите Wireshark на сервере. Это означает, что любой клиент (не только ваша машина), использующий сервер для передачи данных «в» и «из» Интернет(а), будет виден приложению захвата пакетов. Но ввиду неэтичности этого занятия, нужны веские основания для подобных действий.

После выбора машины для работы настает момент установки Wireshark посредством менеджера пакетов. Сниффер включен во множество дистрибутивов по умолчанию и является самодостаточным приложением, использующим GUI для выполнения всех задач – в отличие от многих других инструментов системного администрирования. Хотя вам, может быть, стоит поискать ‘Ethereal’: системы вроде Ubuntu используют это старое имя для обеспечения совместимости пакетов.

Wireshark требует запуска с привилегиями системного администратора – что обычно означает запуск приложения от имени root. Если вы беспокоитесь о проблемах безопасности, связанных с запуском такого низкоуровневого инструмента на критичном для системы сервере (чего вы не должны делать в любом случае), хорошим компромиссом может быть запустить Wireshark на краткое время, для захвата достаточного количества сетевых данных, и использовать приложение на пользовательском уровне для их анализа.

Надзор за устройствами

Вы можете запустить Wireshark из командной строки, набрав wireshark. Через пару мгновений появится его GTK 2-интерфейс. На данный момент он больше похож на шестнадцатеричный/двоичный редактор, чем на инструмент анализа сети, просто потому, что пока не содержит данных. Получение данных для приложения – следующий шаг.

Щелкните на первой иконке панели инструментов или выберите Интерфейсы [Interfaces] в меню Захват [Capture]. В открывшемся окне будет приведен список всех имеющихся сетевых устройств. В нем также начнется вывод числа пакетов, проходящих через каждое устройство. Этот список полностью зависит от конфигурации вашей системы. Если ваша машина использует беспроводное подключение к сети, вы, вероятно, увидите устройства wifi0 или ath0; если проводное, то скорее всего они будут озаглавлены eth0 или, для второй карты, eth1. Другие стандартные устройства – slip0 и ppp0 для соединений по последовательной линии, используемой в dialup-сетях (помните такие?) [помним, помним. ppp0 – частый гость на компьютерах современных домашних пользователей, использующих для доступа к провайдеру протоколы PPTP или PPPoE, а также услуги сотовых сетей GPRS/CDMA, – прим. ред.]

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

Захват без разбора

Щелчок на кнопке Подготовка [Prepare] рядом с интересующим вас устройством позволит вам произвести тонкую настройку процесса сбора данных. Большинство опций можно оставить как есть, но пару из них вы, вероятно, захотите изменить. Наиболее важный параметр обозначен как Захват пакетов без разбора [Capture Packets In Promiscuous Mode]. Во включенном состоянии он позволяет Wireshark перехватывать и сохранять каждый отдельный байт сетевого пакета на самом нижнем уровне. Вне этого режима важная информация о пересылке может быть упущена. Но может ли ваша система работать в нем или нет, зависит от имеющегося драйвера Ethernet, хотя большинство устройств этот режим поддерживают. Другой важный параметр на этой странице назван Обновлять список пакетов в реальном времени [Update List Of Packets In Real Time]. Вероятно, вам не следует пользоваться им при первых попытках применения Wireshark, но он очень полезен при быстром анализе. По своей сути он позволяет вам пощупать и просеять сетевые данные без предварительного их захвата – ценно, если вы хотите заметить некоторую специфическую активность в сети.

Внимание, эксперимент!

Удовлетворившись настройками для выбранных вами устройств, нажмите или кнопку Старт [Start] на странице настройки, или кнопку Захват [Capture] в списке интерфейсов. После этого Wireshark запишет каждый байт данных, прошедший через ваше сетевое устройство. Чтобы повысить ценность этого упражнения, не мешает сделать через ваше сетевое соединение что-нибудь интересное. Лично я запустил клиента мгновенных сообщений Gaim и начал разговор с одним из моих контактов. Есть и другие вещи, которые стоит попробовать, от просмотра нескольких защищенных и не защищенных сайтов (попробуйте купить что-либо в сети!) до передачи/приема электронной почты. Но помните: все, что вы делаете, будет захвачено Wireshark. Когда вы сочтете, что накопили достаточно данных для анализа, просто остановите ведение журнала. После этого Wireshark загрузит данные в главное окно.

Часть 2: Анализ данных

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

Главное окно данных в Wireshark (см. ниже) показывает разборку содержимого каждого пакета сетевых данных, которые Wireshark умеет распознавать. Первый левый столбец – порядковый номер пакета, в соответствии с его получением. Рядом находится время получения пакета. Справа от времени расположены IP-адреса отправителя и получателя, найденные в пакете – откуда пакет послан и куда направляется. Столбец Протокол [Protocol] отображает аббревиатуру найденного протокола для пакета, а в последнем столбце выводится ценная информация, извлеченная благодаря тому, что Wireshark распознал протокол, и какие данные в пакете наиболее полезны.

Фильтр свирепствует

Вся эта информация весьма объемна. Для работы с ней Wireshark имеет отличный фильтр, основанный на простом синтаксисе, для уменьшения путаницы на экране; он действительно выделяет пакеты, достойные интереса. Вы можете ввести фильтр напрямую в область поиска над списком пакетов, но для начала проще нажать кнопку Фильтр [Filter] слева от этого поля: здесь имеется несколько стандартных примеров фильтров, наряду с полезным мастером создания и сохранения собственных. Поэкспериментируйте с примерами. Набрав, допустим, ip.addr = = 192.168.0.1, вы получите список только тех пакетов, отправителем или получателем которых является адрес 192.168.0.1 (полезно, если вы хотите проверить отдельного клиента в вашей сети). ip.addr – это поле фильтра, и вы увидите полный список 44 185 возможных вариантов, поддерживаемых Wireshark, нажав Справка > Поддерживаемые протоколы [Help > Supported Protocols] и выбрав вкладку Отобразить поля фильтра [Display Filter Fields].

Но пока мы ограничимся одним протоколом, а именно, используемым MSN Messenger для связи с клиентами. Обычно Wireshark определяет используемые протоколы путем поиска по номеру порта в информации пакета, и вы можете увидеть список 820 распознаваемых протоколов, открыв Справка > Поддерживаемые протоколы [Help > Supported Protocols]. Тот, который нас интересует, обозначен как MSNMS – MSN Messenger Service. Можно отфильтровать список пакетов по этому протоколу, набрав в фильтре msnms. Вы заметите, что поле фильтра окрашивается красным, когда невозможно выполнить фильтр, и зеленым, когда основные ключевые слова распознаны.

Введите msnms и нажмите Применить [Apply]; список пакетов обновится, чтобы показать саму MSN-сессию, записанную в пакетах (для обзора выполняемого процесса, см. врезку «Шаг за шагом»). Щелчок на заголовке поля Номер пакета [Packet Number] отсортирует пакеты в порядке их получения, облегчив рассмотрение потока соединения. Первым делом в глаза бросается то, что сама передача представляет собой обмен данных между вашим локальным клиентом и различными MSN-серверами. Вы можете заметить это по перепрыгиванию вашего IP-адреса из поля Отправитель [Source] в поле Получатель [Destination], поскольку пакеты пересылаются и принимаются между двумя машинами.

Вы также можете увидеть ход транзакции. Сперва пакеты содержат очень мало информации: первые два просто проверяют версию MSN-протокола, используемую обеими машинами. Первый важный пакет в наших захваченных данных – это третий. Он высылается нашим клиентом и содержит передачу инициализации для MSN-соединения. В него включено имя пользователя, а для большинства MSN-записей это просто адрес на Hotmail. Хорошо уже и то, что не показывается пароль. Это потому, что большинство соединений для аутентификации MSN Messenger по умолчанию используют протокол с шифрованием – HTTPS, и эти данные не прочесть как обычный текст. Если же вы используете обычную HTTP-аутентификацию, то ваш пароль будет как на ладони.

Послание в бутылке

Успешное соединение сопровождается сообщением сервера USR OK, это примерно 15-й пакет в нашей подопытной сессии. Вот где начинаются интересные вещи. Список контактов, появляющийся в нашем клиенте сообщений, хранится на MSN-сервере. Это означает, что для отображения в Gaim его нужно переслать вашему клиенту с сервера. Вполне очевидно, что пакеты, посылаемые сервером за сообщением USR OK, будут почти целиком набиты электронными адресами – невероятно ценный ресурс для любого злоумышленника. Все, что ему следует сделать, это часок позаписывать данные в интернет-кафе, и он получит тысячи электронных адресов для своих целей. Мало того: он также сможет кое-что сообразить о связи между адресами, что значительно облегчит успех методов социальной инженерии.

После заполнения списка контактов, следующее действие, которое вы увидите в журнале, это открытие разговора с одним из них. Дамп данных Wireshark ясно покажет, что оно произошло, поскольку MSN сервер посылает сообщение RINGING, почти как телефон. Двумя пакетами позднее контакт ответит сообщением JOI. Это говорит о том, что удаленный клиент сообщений присоединился к нашему локальному клиенту для беседы. Сразу после этого мы получаем пакет, содержащий строку X-MMS-IM-Format. Это часть протокола MSN Messenger, помещаемая в начале каждого сообщения, пересылаемого между двумя клиентами. Согласно спецификации протокола MSN Messenger, тело сообщения следует далее в простом текстовом формате – да так оно и есть. Сразу же после заголовка идет частное содержание сообщения. Просмотр ваших интимных разговоров вне контекста и в доступном виде, естественно, заставит вас задуматься о последствиях использования общественных сетей для обмена мгновенными сообщениями. Таким способом вы можете захватить целые беседы, и если вы воспользуетесь захватом пакетов вместе со взломанной точкой беспроводного доступа, то сможете незаметно войти в курс дел всех своих соседей.

Надеюсь, весь этот процесс напугал вас достаточно, чтобы включить наконец для своей точки доступа WPA-шифрование (вы же знаете, что WEP небезопасен, так ведь?) и, может быть, даже использовать зашифрованные каналы связи при необходимости пользования открытой сетью. Однако анализ пакетов – штука захватывающая, а иногда и необходимая для проверки совместимости версий в таких протоколах, как Samba.


Тактика защиты от вторжений

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

По этой причине и возникло множество шифрованных интернет-протоколов. Наиболее общим примером является HTTPS, безопасная версия протокола передачи гипертекста (HTTP), он используется везде: от интернет-банков до сетевых магазинов. То же делает VPN, обеспечивая туннель для удаленной сети через незащищенный уровень (Интернет) к локальному компьютеру – подробности см. на стр. 101 или в LXF93. Любой взломавший соединение увидит разве что зашифрованные пакеты VPN, и не сможет узнать что-либо без взлома ключа шифрования. А это уже совсем другая тема.

Советы по поддержанию безопасности

  • Всегда используйте HTTPS для передачи важной информации через Web.
  • Используйте SSH для удаленных соединений, желательно с авторизацией по ключу.
  • Туннелируйте незащищенные протоколы, вроде VNC, через ваше SSH-соединение.
  • Переключитесь на протокол с шифрованием для отсылки и приема почты.
Персональные инструменты
купить
подписаться
Яндекс.Метрика