понедельник, марта 31, 2008

IT-Безопасность: Что такое Сниффер (Sniffer)

Сниффер – это программа, которая позволяет перехватывать сетевой трафик. Когда говорят о снифферах, то обычно проводят аналогию с прослушиванием телефонных разговоров. Подключившись к телефонной сети, можно перехватить беседу людей. Примерно также в компьютерных сетях можно перехватывать информацию, которой обмениваются компьютеры. Прослушивание возможно благодаря особенности архитектуры сети Ethernet (IEEE 802.3). Архитектура большинства локальных сетей основана на технологии Ethernet (ether – эфир, network – сеть), в которой все устройства подключены к одной среде передачи данных и совместно её используют. Топология сети Ethernet – линейная или звездообразная, а скорость передачи данных 10, 100 и 1000 Мбит/сек. Ethernet – это широковещательная сеть, в которой все узлы могут принимать все сообщения через единую магистраль. Используя эту особенность Ethernet, отпадает необходимость несанкционированного подключения к сегменту сети, т.е. не требуется резать кабели. Компьютер, с которого предполагается прослушивать, уже подключен к некоторому сегменту сети.ПРИМЕЧАНИЕ

Sniff (англ.) – нюхать, фыркать, втягивать носом.

Слово sniffer предприимчивые американцы из фирмы Network Associates зарегистрировали. Оно является торговой маркой, под которой распространяется программа-анализатор работы компьютерной сети.

Сниффер может анализировать только то, что проходит через его сетевую карту. Внутри одного сегмента сети Ethernet все пакеты рассылаются всем машинам, из-за этого возможно перехватывать чужую информацию. Использование коммутаторов (switch, switch-hub) и их грамотная конфигурация уже является защитой от прослушивания. Между сегментами информация передаётся через коммутаторы. Коммутация пакетов – форма передачи, при которой данные, разбитые на отдельные пакеты, могут пересылаться из исходного пункта в пункт назначения разными маршрутами. Так что если кто-то в другом сегменте посылает внутри его какие-либо пакеты, то в ваш сегмент коммутатор эти данные не отправит.

Прослушивающие программы или пакетные анализаторы скачать которые можно на сайте, относятся к классу утилит двойного назначения. С одной стороны снифферы – мощное оружие, с помощью которого можно осуществить пассивную сетевую атаку. Эти программы могут представлять собой серьезную угрозу, поскольку могут перехватывать и расшифровывать имена и пароли пользователей, конфиденциальную информацию, нарушать работу отдельных компьютеров и сети в целом. Известно, что в большинстве протоколов передачи данных (FTP, POP, HTTP, telnet) секретная информация между клиентом и сервером передаётся открытым текстом. Поэтому злоумышленнику не составляет большого труда получить доступ к чужой информации. Достаточно раздобыть программу-сниффер, настроить её фильтры и ждать, когда жертва будет подключаться к серверу. С другой стороны снифферы помогают системным администраторам осуществлять диагностику сети и отслеживать атаки компьютерных хулиганов. Кроме того, они служат для проверки и детального анализа правильности конфигурации сетевого программного обеспечения. Иными словами – щит и меч.

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

Информация передаётся по сети, и получает её каждое устройство этой сети. По умолчанию сетевая плата компьютера видит только то, что предназначено именно для неё. Однако прослушивающие программы устанавливают её в режим приёма всех пакетов – promiscuous mode(Promiscuous,англ. – неразборчивый, смешанный), прослушивают сеть и заставляют сетевую плату принимать все кадры, вне зависимости от того, кому они адресованы в сети.

В основе многих снифферов были и есть сетевые драйверы и библиотеки (libpcap, libnet), которые осуществляют большую часть работы. Дело в том, что для переключения сетевой платы в promiscuous mode требуется низкоуровневое программирование её портов. В многозадачной ОС такую работу могут выполнить только драйверы уровня ядра системы (kernel-mode drivers). Первые программы такого типа были созданы для операционных систем Unix. Для установки вручную сетевого интерфейса в "неразборчивый" режим необходимо включить флаг PROMISC:$ifconfig eth0 promisc; для отключения promiscuous mode:$ifconfig eth0 –promisc.

Вскоре снифферы перебрались в популярную ОС Windows, но их работа в этой системе также требовала сетевого драйвера, который переключал сетевую плату (NIC – network interface card) в специальный режим. До недавнего времени создание программ-снифферов было уделом квалифицированных специалистов. С появлением Windows2000 создать программу для прослушивания сегмента сети стало совсем просто.

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

Основы передачи данных в сети Ethernet.



Каждому устройству в сети Ethernet соответствует уникальный шестибайтовый MAC-адрес (Media Access Control). Единицей передачи данных в такой сети является кадр (frame), который имеет определённую структуру и несёт в себе информацию о получателе, отправителе и сами данные.
struct ETHERNET_FRAME
{
unsigned char dest[6];// MAC-адрес получателя
unsigned char src[6]; // MAC-адрес отправителя
unsigned short type; // версия: IPv4 0x0800, IPv6 0x86DD, ARP 0x0806
unsigned char data[]; // данные
};

Кадр может иметь размер от 60 до 1514 байт, из которых первые 14 байт являются служебными. Когда требуется передать большее количество данных, они разбиваются на фрагменты и последовательно направляются в сеть. Кадр передаётся по сети, и получает его каждое устройство этой сети. Значение поля структуры с именем type определяет тип и версию "полезного груза" в кадре. Завершающая секция кадра служит для проверки целостности передаваемых данных и использует код циклического контроля (CRC32 – cyclic redundancy check). Значение этого кода вычисляется с помощью специальной хэш-функции для выявления искажённости числовых данных. Обычно она аппаратно реализована в сетевой плате.

Теперь обратим внимание на полезный груз, который несёт кадр, а именно поле структуры data[]. Чаще всего в качестве данных может быть IP-пакет или ARP-пакет. ARP (address resolution protocol) – это служебный вспомогательный протокол, который осуществляет динамическую трансляцию физических MAC-адресов в логические IP-адреса на основе широковещательной рассылки запросов. struct ETHERNET_ARP
{
unsigned short hrd; // Тип аппаратуры (Ethernet), 0x0001.
unsigned short pro; // Протокол (IP), 0x0800.
unsigned char hln; // Длина аппаратного адреса (MAC), 6 байт.
unsigned char pln; // Длина адреса протокола IP, 4 байта.
unsigned short op; // Вид операции {Запрос, Ответ} = {1, 2}.
unsigned char sha[6];// Аппаратный адрес (MAC) отправителя.
unsigned char spa[4];// IP-адрес отправителя.
unsigned char tha[6];// Аппаратный адрес (MAC) получателя.
unsigned char tpa[4];// IP-адрес получателя.
};


Для доставки пакетов в сети нужно определить физический адрес узла назначения. Именно для этого существует ARP – протокол автоматического определения физических адресов (IP <=> MAC). Когда одному компьютеру нужно начать обмен данными с другим, он ищет MAC-адрес получателя соответствующий запрашиваемому IP-адресу в своей ARP-таблице. Если для нужного IP-адреса не найден соответствующий MAC-адрес, то посылается широковещательный запрос ARP, содержащий искомый IP-адрес назначения, а MAC-адрес для широковещательной рассылки заполнен единицами FF:FF:FF:FF:FF:FF. Целевой хост узнает свой IP-адрес, обрабатывает запрос и посылает ответ. Система готова к пересылке данных по локальной сети.

Для нас особый интерес представляют IP-пакеты, предназначенные для передачи информации. Это более высокий уровень сетевой OSI-модели данных. Сейчас повсеместно распространена четвертая версия IP. Однако постепенно начинает делать первые шаги шестая версия этого протокола передачи данных. Новая версия интернет-протокола значительно расширит диапазон адресов, упростит автоматическое конфигурирование IP-сетей. Немаловажно, что следующая версия IP располагает исключительными средствами обеспечения безопасности и шифрации трафика.struct IP6Header
{
unsigned long ver:4; // Версия IP-протокола
unsigned long tclass:8;// Класс трафика
unsigned long label:20;// Метка потока
unsigned short length; // Длина пакета
unsigned char next; // Next header (опции)
unsigned char hop; // Hop-limit.
unsigned char src[16]; // 128-битный адрес отправителя
unsigned char dst[16]; // 128-битный адрес получателя
};

Далее в статье будут рассматриваться только IP-пакеты самой распространённой четвёртой версии. Пакет состоит из заголовка, служебной информации (options) и данных. На языке С этот заголовок выглядит в виде вот такой структуры:typedef struct _IPHeader
{
unsigned char verlen; // версия и длина заголовка
unsigned char tos; // тип сервиса
unsigned short length; // длина всего пакета
unsigned short id; // Id
unsigned short offset; // флаги и смещения
unsigned char ttl; // время жизни
unsigned char protocol; // протокол
unsigned short xsum; // контрольная сумма
unsigned long src; // IP-адрес отправителя
unsigned long dest; // IP-адрес назначения
}IPHeader;

Подробно IP протокол описан в RFC за номером 791. Для нас особый интерес представляют поля заголовка protocol, src и dest. Два последних поля – это IP-адреса отправителя и получателя пакета. Например, шестнадцатеричное значение адреса 0x0000140A соответствует 10.20.0.0.

Поскольку в сети постоянно циркулирует огромное количество пакетов, то их лучше отфильтровывать. Критериями фильтрации могут быть IP-адреса, тип вышестоящего протокола (TCP, UDP, ICMP, PUP), а также содержимое пакета. Функции фильтрации весьма полезны, так как не только ограничивают собираемую программой информацию действительно нужной, но и просто обеспечивают её нормальную работу. Вполне возможно, что при интенсивной загрузке локальной сети компьютер и программа-сниффер будут не способны обработать всю поступающую информацию.

Посчитаем, сколько потребуется времени для заполнения жёсткого диска объёмом 80 Гбайт при перехвате всего трафика с сети 100 Мбит/сек. В секунду будет передано примерно 10 Мбайт. 80 Гбайт / 10 Мбайт/сек = 2,5 часа. Немного…

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

Драйвер сетевой платы (NIC) занимается приёмом и передачей кадров в сеть Ethernet. Максимальный размер IP-пакета, включая служебные данные, составляет 64 килобайта, а максимальный размер данных в кадре, как вы уже знаете, 1500 байт. При необходимости драйвер осуществляет фрагментацию и сборку IP-пакетов. Сетевая подсистема в ОС Windows основана на многоуровневой архитектуре, которую в 1978 году одобрила международная организация стандартов. Таким образом, NIC-драйвер взаимодействует с драйверами вышестоящих протоколов.

Программа для прослушивания сегмента сети работает именно с IP-пакетами. Она использует библиотеку Windows Sockets версии 2.2 и функционирует под управлением Windows 2000 и более поздних систем. Программирование "сырых" сокетов (raw sockets) в системе Windows предыдущих версий было почти невозможно. Неудивительно, что долгое время программы такого типа создавались только под системы Unix и DOS.

Современная архитектура сетевого программного обеспечения основана на семиуровневой модели OSI (Open Systems Interconnection). В основе модели лежит принцип абстракции, когда каждый компонент выполняет свои функции и предоставляет некоторый сервис вышестоящему уровню.

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



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

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

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

• на оконечном узле сети
Применительно к 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 и т.п.

Методы защиты от прослушивания сети.



Многих волнует проблема безопасности передачи данных в сети. Проблема может быть решена различными способами. Первый и самый дорогостоящий – аппаратный метод, когда вместо дешёвых концентраторов (hub) устанавливаются коммутаторы (switch). Второй и более надёжный – шифрование сетевого трафика. Информацию можно будет перехватить сниффером, но прочитать её будет невозможно. Шифровать можно с помощью технологии SSL (secure sockets layer), которая встроена почти во все браузеры. Она почти всегда используется в электронной коммерции и вполне надёжна. При работе с электронной почтой сообщения следует шифровать средствами PGP (pretty good privacy) или Secure MIME. В локальных сетях можно включить шифрацию IP-трафика. В Windows 2000 эту работу выполняет встроенный протокол IP Secure. Следуя этим простым советам можно гарантировать конфиденциальность передаваемой информации.


Windows-реализации снифферов



CommView
www.tamos.com
Этот сниффер сам использую для административных задач.
Довольно продвинутый сниффер производства TamoSoft, скачать можно на сайте. Можно установить свои правила на сниффинг (например, игнорировать ICMP, а TCP сниффать, также кроме интернет-протоколов имеется поддержка ethernet-протоколов, таких как ARP, SNMP, NOVELL и т.д.). Можно, например, сниффать только входящие пакеты, а остальные игнорировать, можно указать лог-файл для всех пакетов с лимитов размера в мегабайтах. Имеет две утилиты - Packet Generator и NIC Vendor Indentifier. Можно посмотреть все подробности посланных/полученных пакетов (например, в TCP-пакете можно просмотреть Source Port, Destination Port, Data length, Checksum, Sequence, Window, Ack, Flags, Urgent). Радует еще то, что она автоматически устанавливает capture-драйвер. В общем утилита очень полезная для снифа, рекомендую всем.


IRIS
www.eeye.com
IRIS продукт известной фирмы eEye скачать можно на сайте. Представляет обширные возможности по фильтрации. Меня в нем сильно порадовало три фишки:
1.Protocol Distribution
2.Top hosts
3.Size Distribution
Также имеется Packet Decoder, скачать который можно на сайте. Он поддерживает развитую систему логов. А доступные возможности фильтрации превосходят все снифферы обзора. Это Hardware Filter, который может ловить либо все пакеты (Promiscious), либо с различными ограничениями (например, захватывать только multicast пакеты или broadcast пакеты, либо только Mac-фреймы). Можно фильтровать по определенным MAC/IP адресам, по портам, по пакетам, содержащим определенные символы. В общем, неплохой сниффер. Требует 50comupd.dll.

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

Analyzer
http://netgroup-serv.polito.it/analyzer/
Бесплатный анализатор протоколов.

Комментариев нет: