Опции командной строки WinDump
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
КАЗАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
ИМ. А.Н. ТУПОЛЕВА
ФАКУЛЬТЕТ ТЕХНИЧЕСКОЙ КИБЕРНЕТИКИ И ИНФОРМАТИКИ
КАФЕДРА СИСТЕМ ИНФОРМАЦИОННОЙ БЕЗОПАСНОСТИ
МЕТОДИЧЕСКИЕ УКАЗАНИЯ
К ВЫПОЛНЕНИЮ ЛАБОРАТОРНОЙ РАБОТЫ № 6
ПО ДИСЦИПЛИНЕ
«Защита информационных процессов в компьютерных системах»
на тему
«Системы обнаружения вторжений»
Составитель:
ассистент кафедры СИБ
Гильмуллин Т.М.
Казань, 2007
ЛАБОРАТОРНАЯ РАБОТА № 6
Название работы
Системы обнаружения вторжений.
Цель
Познакомиться на практике с методами и средствами обнаружения вторжений.
Программно-аппаратные средства
Компьютерная лаборатория с ЛВС, IDS Snort 2.6.1.4, сниффер WinDump 3.8.3, сканер NMap 4.20, библиотека WinPcap 4.0.
Теоретический материал
ОБЩИЕ СВЕДЕНИЯ
IDS – Intrusion Detection System – система обнаружения вторжений. IDS контролирует пакеты в сетевом окружении и обнаруживает попытки злоумышленника проникнуть внутрь защищаемой системы (или реализовать атаку типа «отказ в обслуживании» – DoS) по сигнатурам, характерным для атак.
Использование сигнатур очень похоже на работу антивирусных программ. Большинство видов атак на уровне TCP/IP имеют характерные особенности. IDS может выявлять атаки на основе IP-адресов, номеров портов, информационного наполнения и произвольного числа критериев заданных некоторым шаблоном. Типичный пример – система, которая контролирует большое число TCP-запросов на соединение (так называемых SYN-пакетов) со многими портам на выбранном компьютере. Так программа обнаруживает, что кто-то пытается осуществить сканирование TCP-портов.
Имеется и другой способ обнаружения вторжений на системном уровне, состоящий в контроле целостности ключевых файлов. Кроме того, развиваются новые методы, сочетающие концепции обнаружения вторжений и межсетевого экранирования или предпринимающие дополнительные действия помимо простого обнаружения. Существует несколько видов IDS.
Система обнаружения атак на сетевом уровне (Network IDS – NIDS) может запускаться либо на отдельном компьютере, который контролирует свой собственный трафик, или на выделенном компьютере, прозрачно просматривающем весь трафик в сети (концентратор, маршрутизатор). NIDS контролируют множество компьютеров, тогда как другие системы обнаружения атак контролируют только один (тот, на котором они установлены).
Системы контроля целостности (System Integrity Verifiers – SIV) проверяют системные файлы для того, чтобы определить, когда злоумышленник внес в них изменения. В принципе, этим мало интересуются, если систему уже вскрыли. Но, тем не менее, SIV позволяет довольно быстро определить, что подверглось изменению и, соответственно, быстро восстановить систему.
Мониторы системных журналов (Log-file Monitors – LFM) контролируют регистрационные файлы, создаваемые сетевыми сервисами. Аналогично NIDS, эти системы ищут известные признаки атаки, только в файлах регистрации, а не в сетевом трафике, которые указывают на то, что злоумышленник осуществил атаку. Типичным примером является синтаксический анализатор для log-файлов HTTP-сервера, который ищет злоумышленников, пытающихся использовать хорошо известные уязвимости, например, проводя атаку типа «phf».
Существует множество программ, реализующих функции IDS. Например, коммерческие профессиональные системы RealSecure компании Internet Security Systems (http://www.iss.net) или бесплатные программы начального уровня. LIDS (Linux Intrusion Detection System, http://www.lids.org) и Snort (http://www.snort.org). Среди бесплатных популярна также связка программ Portsentry, Hostsentry и Logsentry компании Psionic.
Сетевая IDS может защитить от атак, которые проходят через межсетевой экран во внутреннюю ЛВС. Межсетевые экраны могут быть неправильно сконфигурированы, пропуская в сеть нежелательный трафик. Даже при правильной работе межсетевые экраны обычно пропускают внутрь трафик некоторых приложений, который может быть опасным. Порты часто переправляются с межсетевого экрана внутренним серверам с трафиком, предназначенным для почтового или другого общедоступного сервера. Сетевая IDS может отслеживать этот трафик и сигнализировать о потенциально опасных пакетах. Правильно сконфигурированная IDS может перепроверять правила межсетевого экрана и предоставлять дополнительную защиту для серверов приложений.
IDS полезны при защите от внешних атак, однако одним из их главных достоинств является способность выявлять внутренние атаки и подозрительную активность пользователей. Межсетевой экран защитит от многих внешних атак, но, когда атакующий находится в локальной сети, межсетевой экран вряд ли сможет помочь. Он видит только тот трафик, что проходит через него, и обычно «слеп» по отношению к активности в локальной сети. Поэтому необходимо взаимодействие IDS и межсетевого экрана. Одно из них защищает вашу внешнюю границу, другое – внутреннюю часть сети (см. Рис. 1).
Рис. 1. Защита с помощью IDS и межсетевого экрана
Имеется веская причина, чтобы внимательно следить за трафиком внутренней сети. Как показывает статистика ФБР, более 70% компьютерных преступлений исходят из внутреннего источника. Хотя мы склонны считать, что наши коллеги не сделают ничего, чтобы нам навредить, но иногда это бывает не так. Внутренние злоумышленники – не всегда ночные хакеры. Это могут быть и обиженные системные администраторы, и неосторожные служащие. Простое действие по загрузке файла, присоединенного к электронному сообщению, может внедрить в вашу систему «троянскую» программу, которая создаст дыру в межсетевом экране. С помощью IDS вы сможете пресечь подобную активность.
Огромным плюсом в применении IDS является то, что они практически не обнаруживаются. По крайней мере, сканерами портов. Косвенным подтверждением работы IDS может служить недоступность узла, который за секунду до сканирования еще был доступен.
У IDS есть теоретический недостаток. Возможность использовать нестандартные параметры соединения с разрешенным портом. Так, возникает возможность, использовать http-туннелирование для передачи нелегального трафика.
Примечание
Более подробно о системах обнаружения вторжений, а также руководства по использованию приложенных к лабораторной работе программ, читайте в каталоге \FOR_READING\.
Об использовании IDS Snort:
Системы_обнаружения_вторжений.mht
Intrusion_Detection_Systems_with_Snort_2003.pdf
OReilly_Snort_Cookbook_2005.chm
Snort_FAQ.pdf
О методах обнаружения вторжений:
Норткатт_Новак_Обнаружение_вторжений_в_сеть_Настольная_книга_специалиста.mht
Об использовании сканера безопасности NMap:
Волков_Сетевой_сканер_NMap_Руководство_пользователя_2003.htm
Обзорная статья о снифферах (в том числе, команды WinDump):
Снифферы.mht
WINDUMP SNIFFER
Sniffer (дословно с английского его можно перевести как «нюхач» или «вынюхиватель») – в самом общем смысле некоторое подслушивающее устройство, внедренное в сеть для перехвата передаваемых по ней данных. Само слово пошло от зарегистрированной торговой марки компании Network Associates – «Sniffer (r) Network Analyzer», однако впоследствии слово «сниффер» стало нарицательным, обозначающим весь класс подобных продуктов. В некоторой литературе и документации термин sniffer (network sniffer) отождествляется с такими понятиями, как «анализатор сетевого трафика», «анализатор пакетов», «анализатор протоколов», «сетевой анализатор».
Сниффинг – это совокупность мер по перехвату трафика. В рамках же конкретного продукта (сниффера) могут быть реализованы следующие вещи:
− захват пакетов (packet capturing) – на этом этапе мы получаем некий сырой (machine readable) дамп данных, обычно разделенный на куски по границам кадров (пакетов);
− декодирование пакетов (decoding) для перевода пакетов удобочитаемую форму (human readable) или анализ протоколов;
− просмотр проходящих пакетов в режиме реального времени;
− фильтрация пакетов по заданному сценарию;
− различные статистики трафика (количество ошибок, интенсивность и прочее);
− у более мощных снифферов могут быть встроены средства сборки пакетов и анализа информации содержащейся в них на уровне приложений, например, дешифрование данных криптозащищенного сетевого ПО, перехват передаваемых по сети паролей, кодов доступа, генерирование или модификация пакетов.
Снифферы и сниффинг
По «месторасположению» снифферы могут работать:
− на маршрутизаторе (шлюзе);
− на конечном узле сети.
На маршрутизаторе сниффер может перехватывать трафик проходящий через интерфейсы этого шлюза. Например, из локальной сети в другую сеть и в обратную сторону. Соответственно, если установить сниффер на маршрутизаторе провайдера Интернет, можно отслеживать трафик его пользователей
На конечном узле сети, применительно к Ethernet, имеются два основных варианта прослушивания. Классический, некоммутируемый Ethernet предполагает, что каждый сетевой интерфейс в принципе «слышит» весть трафик своего сегмента. Однако в нормальном режиме работы сетевой карты, прочитав первые 48 бит заголовка фрейма, станция сравнивает свой MAC-адрес с адресом получателя, указанном в фрейме. Если адрес чужой, станция перестает читать чужой фрейм. Таким образом, в нормальном режиме сниффер может перехватывать и анализировать только свой трафик. Для перехвата пакетов всех станций сегмента требуется перевести сетевую карту в режим под названием promiscuous mode, чтобы она продолжала читать не предназначенные ей пакеты.
Практически все реализации снифферов позволяют переход карты в promiscuous mode, но использование коммутируемого Ethernet создает ситуацию, когда даже переход карты в этот режим делает прослушивание не предназначенного станции трафика практически невозможным. Однако существует технология организации такого прослушивания путем так называемого ARP-спуффинга. Суть в следующем: коммутатор создает так называемый «broadcast domain», и хост, с установленным сниффером, при помощи подделки ARP-сообщений может притвориться, например, пограничным маршрутизатором (рассылая постоянно АRP-сообщения, где сетевому адресу маршрутизатора соответствует MAC-адрес прослушивающей станции). Таким образом трафик соседей свернет в сторону хоста-шпиона.
В остальном же многочисленные реализации снифферов разных производителей отличаются друг от друга главным образом функциональными возможностями:
− поддерживаемые физические интерфейсы и протоколы канального уровня;
− качество декодирования и количество «узнаваемых» протоколов;
− пользовательский интерфейс и удобство отображения.
Сниффинг нашел свое легальное и нелегальное применения. Что характерно, слово «сниффер» чаще применяется в нелегальной сфере, а «сетевой анализатор» – в легальной.
Легальное применение:
− troubleshooting (обнаружение проблем и узких мест сети);
− отладка собственного ПО;
− обучение;
− протоколирование сетевого трафика.
Нелегальное применение:
− подслушивание;
− перехват имен пользователей и паролей, проходящих по сети в незашифрованном (plain text) виде (это касается паролей к telnet, POP, IMAP, NNTP, IRC, к веб-приложениям, не использующим шифрование, SNMP v1 community-strings и т.д.).
Далее рассмотрим, как можно применить WinDump () для решения задачи обнаружения вторжения в сеть.
WinDump – один из снифферов для ОС Windows, аналог сниффера под *NIX системы – TCPDump. Он выполняет те же самые функции и имеет такой же синтаксис, что и TCPDump, но имеет пару дополнительных опций командной строки.
Выходные данные WinDump
WinDump выдает огромное количество информации по проходящему в сети трафику, поэтому важно понимать используемый при этом формат. Одна из наиболее трудных задач, стоящих перед аналитиком-новичком, это овладение методом декодирования выходных данных WinDump (вообще, существует множество программ, интерпретирующих такие данные). Эти данные стандартны для разных протоколов (например, TCP, UDP, ICMP), но есть некоторые нюансы. Первым шагом является идентификация исследуемого протокола. Для объяснения общего формата WinDump воспользуемся выходными данными TCP. Это запись TCP, отображаемая с помощью WinDump:
09:32:43:910000 nmap.edu.1173 > dns.net.21: S 62697789:62697789(0) win 512
09:32:43:910000. Временная метка: две цифры для часа, две цифры для минут, две цифры для секунд и шесть цифр для дробной части секунды.
nmap.edu. Хост-имя источника. Если хост-имя по IP-адресу не определяется или если это не запрашивается (параметром -n в WinDump), появляется не хост-имя, а IP-адрес.
1173. Номер порта, или служба порта, источника (например, 21 может соответствовать FTP).
>. Указатель на направление потока от источника к приемнику.
dns.net. Хост-имя назначения.
21. Номер порта назначения.
S. Флаг TCP. S представляет флаг SYN, который указывает запрос для начала соединения TCP.
62697789:62697789(0). Это начальный порядковый номер TCP: конечный порядковый номер TCP (байты данных). Порядковые номера используются в TCP для упорядочения принимаемых данных. В этом случае при установке сеанса работы начальный порядковый номер представляет собой исходный порядковый номер(ISN – initial sequence number),выбираемый как уникальное число для пометки первого байта данных. Конечный порядковый номер – это сумма начального и числа байтов, посланных в границах этого сегмента TCP. Как видим, число байтов данных, посылаемых в виде запроса на установление соединения, равно 0. Дело в том, что начальный и конечный порядковые номера совпадают. При обычном установлении соединения данные не посылаются.
win 512. Размер принимающего буфера TCP (в байтах) на nmap.edu.
Флаги TCP
Для обычных соединений TCP устанавливается один или несколько флагов. Флаги используются для указания функции соединения. В таблице показаны флаги TCP, их представление в WinDump и назначение.
Флаг TCP | Представление флага | Назначение флага |
SYN | S | Это запрос на установление соединения, который является первой частью любого соединения TCP. |
АСК | ack | Такой флаг обычно используется для подтверждения приема данных от отправителя. Он может объединяться с другими флагами. |
FIN | F | Данный флаг указывает на намерение отправителя плавно завершить соединение посылающего хоста с принимающим. |
RESET | R | Этот флаг указывает на намерение отправителя немедленно разорвать существующее соединение с принимающим хостом. |
PUSH | P | Подобный флаг приводит к немедленному «выталкиванию» данных с посылающего хоста прикладным программным средствам принимающего хоста, без ожидания заполнения буфера. В этом случае главным является не эффективность, а скорость ответа. Для многих интерактивных приложений, например Telnet, это наиболее важный показатель, о чем и пытается сигнализировать флаг PUSH. |
URGENT | urg | Этот флаг указывает на то, что преимущество над другими должны иметь «срочные» данные. Примером является нажатие Ctrl+C, приводящее к прерыванию загрузки данных FTP. |
Заполнитель | . | Если для соединения не установлены флаги SYN, FIN, RESET или PUSH, после порта назначения указывается заполнитель (точка). |
Опции командной строки WinDump
WinDump [-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 для трассировки. Если не определен, WinDump находит активный сетевой интерфейс с наименьшим номером (исключая loopback). В Windows interface — имя сетевого адаптера или его номер (можно узнать, запустив WinDump -D).
-l использует буферизированный вывод на stdout. Полезным может оказаться конструкция вида:
«WinDump -l | tee dat»,
«WinDump -l > dat & tail -f dat».
-n не преобразовывать адреса (т.e. адрес хоста, номер порта и т.д.) в имена.
-N не печатать доменное имя в имени хоста. Т.е. если использован данный флаг, tcpdump напечатает «nic» вместо «nic.ddn.mil».
-O не запускать оптимизатор пакетов. Эта опция полезна, если вы сами анализируете пакеты.
-p не переводить сетевой интерфейс в promiscuous mode.
-q сокращенный вывод. Выводит информацию в сокращенном виде.
-r читает пакеты из файла file (которые созданы при помощи опции -w). Если вы хотите использовать в качестве ввода консоль, то file это «-».
-s выдает snap_len байт каждого пакета (в 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 выводит каждый пакет в шестнадцатеричном виде (без заголовка). На вывод будет отправлено snap_len байт.
-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.
hosthost верно, если source или destination пакета – host. Также могут употребляться префиксы: ip, arp, или rarp как: ip hosthost что эквивалентно ether proto\ipand hosthost. Если host – имя с несколькими IP-адресами, то каждый адрес проверяется на соответствие.
ether dstehost Верно, если Ethernet-адрес получателя – ehost. Ehost – любое из имен /etc/ethers или номер (см. ethers(3N).
ether srcehost верно, если Ethernet-адрес отправителя – ehost.
ether hostehost верно, если Ethernet-адреса получателя или отправителя – ehost.
gateway host верно, если host – gateway. Т.е. Ethernet-адрес отправителя или получателя – host, но ни IP отправителя, ни IP получателя не являются host. Host может быть именем, а также может находиться в /etc/hosts и /etc/ethers. (Что равносильно ether hostehost and not hosthost, который может использоваться с любым именем или номером для host / ehost.)
dst netnet верно, если IP получателя имеет адрес – net. Net – любая запись из /etc/networks или адрес сети.
src netnet верно, если IP отправителя имеет адрес – net.
netnet верно, если IP получателя или отправителя имеют адрес сети – net.
netnet maskmask Верно, если IP-адрес совпадает с net c соответствующей netmask. Может быть определен совместно с src или dst.
netnet/len верно, если IP равно net, a маска подсети – len в битовом виде (CIDR-формат). Может быть определен совместно с src или dst.
dst portport верно, если пакет 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 portport верно, если порт отправителя – port.
portport верно, если порт отправителя или получателя – port. Некоторые выражения можно комбинировать, к примеру: tcp src portport – только tcp-пакеты у которых порт – port.
lesslength верно, если длина пакета меньше или равна length, что равносильно len <=length.
greaterlength верно, если длина пакета больше или равна length, что равносильно len >=length.
ip protoprotocol верно, если пакет является IP пакетом с протоколом protocol. Protocol может иметь номер или одно из имен icmp, igrp, udp, nd, или tcp.
ether broadcast верно, если пакет – широковещательный Ethernet-пакет. Выражение ether является необязательным.
ip broadcast верно, если пакет – широковещательный IP-пакет.
ether multicast верно, если пакет – Еthernet multicast-пакет. Выражение ether является необязательным. Это сокращенная запись для «ether[0] & 1!= 0».
ip multicast верно, если пакет – IP-multicast пакет.
ether protoprotocol верно, если пакет типа Ethernet. Protocol может быть число или имя: ip, arp, или rarp.
decnet srchost верно, если DECNET-адрес получателя – host, который может быть адресом типа «10.123», или DECNET-имя хоста. (DECNET имя хоста поддерживается только в Ultrix системах).
decnet dsthost Верно, если DECNET-адрес получателя – host.
decnet hosthost Верно, если DECNET-адрес получателя или отправителя – host.
proto[expr:size]
Proto один из следующих протоколов ether, fddi, ip, arp, rarp, tcp, udp, или icmp, и показывает уровень протокола для данной операции. Смещение в байтах для данного уровня протокола берется из expr. Size – необязательное, показывает интересующее количество байт по данному смещению, может быть 1,2 или 4, по умолчанию 1.