информационная безопасность
без паники и всерьез
 подробно о проекте
Rambler's Top100Сетевые кракеры и правда о деле ЛевинаГде водятся OGRыВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft обещает радикально усилить... 
 Ядро Linux избавляется от российских... 
 20 лет Ubuntu 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / библиотека / безопасность
БИБЛИОТЕКА
вход в библиотеку
книги
безопасность
программирование
криптография
internals
www
телефония
underground
беллетристика
разное
обзор: избранное
конкурс
рейтинг статей
обсуждение




Подписка:
BuqTraq: Обзор
RSN
БСК
Закон есть закон




Обнаружение атак своими силами
А.В.Лукацкий
Опубликовано: dl, 15.03.03 14:36

Едучи с очередной прочитанной лекции по защите информации, стал свидетелем интересной картины, когда у молодого человека в защитной форме, который попрошайничал в переходе метро, висела на шее табличка: "Денег нет, а кушать хочется". С похожей ситуацией мне постоянно приходится сталкиваться в своей работе. Сотрудники многих организаций, интересуясь предлагаемыми нашей компанией решениями по защите информации, заявляют, что "денег нет, а защищаться хочется". Наверное, эта ситуация знакома многим специалистам, которым приходится с боем выбивать финансы на приобретение различных защитных средств.

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

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

Механизм функционирования системы обнаружения атак на уровне сети состоит из 4 основных этапов:

  • захват пакетов;
  • фильтрация и сборка фрагментов;
  • распознавание атак;
  • реагирование на них.

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

Программное обеспечение системы обнаружения атак состоит из следующих частей:

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

Захват сетевого трафика

Т.к. областью рассмотрения данной статью является "самопальные" системы обнаружения атак, то я не буду рассматривать механизмы захвата сетевого трафика, реализованные в специальном программно-аппаратном обеспечении, например, в Cisco Catalyst 6000 IDS Module или Cisco Secure Integrated Software. Рассмотрим более приемлемый для самостоятельной реализации механизм, который заключается в обработке трафика, получаемого с сетевой карты, которая может работать в двух режимах:

  • в обычном режиме, в котором сетевая карта обрабатывает только пакеты, предназначенные именно ей;
  • в "смешанном" или "беспорядочном" (promiscuous) режиме, в котором сетевая карта обрабатывает все пакеты, передаваемые в сетевом сегменте.

Именно последний режим и используется для создания своей системы обнаружения атак. Чтобы не усложнять себе жизнь, можно воспользоваться механизмами, предлагаемыми операционной системой. Идеальной ОС в этом случае является семейство Unix, которое позволяет без особых проблем получить доступ к сетевому трафику. Мало того… Сообщество пользователей ОС Unix разработало большое число утилит и библиотек, которые берут на себя заботу о доступе к сетевой карте и захвату трафика. Например, прослушивание и захват сетевого трафика может быть осуществлен с помощью широко известной библиотеки libpcap (library for packet capture). Данная библиотека разработана для множества ОС семейства Unix, которая позволяет "захватывать" (capture) и "прослушивать" (sniffing) все пакеты, передаваемые в разделяемых средах передачи данных (shared media). Многие системы обнаружения атак для Unix используют эту библиотеку в своей работе (например, SHADOW, Snort, NFR и т.д.), а многие разработчики еще и оптимизировали ее для различных платформ, в том числе существует версия и для платформы Windows, называемая Winpcap. Вместо libpcap можно использовать библиотеку libnet или ее версию для Windows, выполняющую аналогичные функции.

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

Фрагмент журнала регистрации маршрутизатора Cisco (для IOS 12.0T)
Feb 25 21:14:38 134.161.1.101 21043: %SEC-6-IPACCESSLOGP: list ingress denied udp 38.29.63.57(4419) -> 134.161.67.71(34555), 1 packet

Фрагмент журнала регистрации межсетевого экрана Check Point Firewall-1
"421316" "29Dec2000" " 9:32:16" "daemon" "localhost" "alert" "accept" "" "x.x.x.x" "x.x.x.x" "ip" "" "" "" "" "" "" "" "" "" "" "" "MAD" " additionals: attack=blocked_connection_port_scanning"

Все, что необходимо сделать в этом случае, - это обнаружить следы несанкционированной сетевой деятельности, за что и отвечает модуль фильтрации.

Фильтрация

Модуль фильтрации также как и модуль захвата пакетов, не обязательно писать самостоятельно, а можно реализовать с помощью свободно распространяемых утилит. Например, ngrep или tcpdump. Данные системы основаны на механизме захвата необработанных (raw) пакетов сетевого трафика и пропускании их через синтаксический анализатор "регулярных выражений", который ищет в трафике соответствие шаблону. Примером шаблона можно назвать: "/cgi-bin/phf", который указывает на попытку использования уязвимого CGI-скрипта PHF. Создавая такую систему, вы анализируете известные атаки, пишете для них сигнатуру, и добавляете их в базу данных системы обнаружения атак.

Сразу необходимо оговориться, что можно не изобретать велосипед и использовать уже имеющиеся наработки в данной области. Например, системы SHADOW, Snort или libnids. Исходный код названных утилит и библиотек доступен в Internet. К ним можно "прикрутить" что-то, что решает ваши задачи, но основное ядро остается неизменным. По такому принципу идут многие независимые разработчики. Например, к системе Snort существует очень много дополнительных утилит, расширяющих ее функциональность. К их числу можно отнести:

  • Snort-panel и IDScenter - графический интерфейс к системе Snort;
  • Guardian и SnortSam - скрипты для реконфигурации межсетевых экранов IPCHAINS и VPN-1&Firewall-1 в случае обнаружения атаки;
  • Snort_stat - скрипт для статистического анализа журнала регистрации Snort;
  • Snort2html, SnortSnarf и SnortReport - скрипты для генерации HTML-отчета на основе журнала регистрации Snort;
  • RotateLogs и snort_log_rotate - резервирование и очистка журналов регистрации Snort;
  • и т.д. С полным списком всех утилит, расширяющих функциональность Snort, можно ознакомиться по адресу http://snort.sourcefire.com/downloads.html.

Самые простые системы обнаружения атак просто подают на вход утилиты regexp события, получение при помощи библиотеки libcap или используют tcpdump. Эффективность такой системы обнаружения атак зависит от количества и качества регулярных выражений, которые и описывают обнаруживаемые атаки. Однако разработчики некоторых систем поступают еще проще и просто сопоставляют сетевые пакеты с сигнатурами известных атак. Системы, использующие regexp и libcap, имеют одно большое преимущество - простоту модификацию базы данных сигнатур. Изделия этого класса (например, система Snort) имеют большое число сигнатур и являются самыми часто и своевременно обновляемыми. Кроме того, простота реализации приводит к тому, что эти системы бесплатно (или почти бесплатно) доступны в сети Internet и любой желающий может использовать их в своей сети. Аналогичным образом любой желающий может самостоятельно изменять исходный код и добавлять сигнатуры атак в эти системы, тем самым, расширяя их функциональность.

Распознавание атак

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

  • Сигнатуры, основанные на шаблоне (pattern-based signatures), выражении или строке, характеризующих атаку или иную подозрительную деятельность. Эти сигнатуры содержат некоторые ключевые слова или выражения, обнаружение которых и свидетельствует об атаке. Например, фрагмент "cwd ~root" в FTP-сеансе однозначно определяет факт обхода механизма аутентификации на FTP-сервере и попытке перейти в корневой каталог FTP-сервера. Другим примером является обнаружение апплетов Java в сетевом трафике на основе шестнадцатиричного фрагмента "CA FE BA BE". Эти же сигнатуры позволяют обнаруживать многих троянских коней, если последние используют стандартные значения портов. Например, троянец NetBus, как это уже описывалось в третьем номере BYTE за этот год, определяется по использованию 12345-го и 12346-го портов, а троянец BackOrifice - по 31337-му порту.
  • Сигнатуры, основанные на контроле частоты событий или превышении пороговой величины. Эти сигнатуры описывают ситуации, когда в течение некоторого интервала времени происходят события, число которых превышает заданные заранее показатели. Примером такой сигнатуры является обнаружение сканирования портов или обнаружение атаки SYN Flood. В первом случае пороговым значением является число портов, просканированных в единицу времени. Во втором случае - число попыток установления виртуального соединения с узлом за единицу времени.
  • Обнаружение аномалий. Данный тип сигнатур позволяет обнаруживать события, отличающиеся от предварительно заданных. Например, если система обнаружения атак фиксирует вход сотрудника компании в сеть в субботу в 2.30, то это может свидетельствовать о том, что пароль этого пользователя украден или подобран и его использует злоумышленник для несанкционированного проникновения.

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

База сигнатур атак

База сигнатур является сердцем любой системы обнаружения атак. Все атаки или иные несанкционированные действия построены на стандартных фильтрах, которые являются основой любой системы обнаружения атак. Рассмотрим два типа фильтров. Первый - на примере утилиты TCPdump, второй - на примере межсетевого экрана Check Point VPN-1&Firewall-1. Второй пример обусловлен тем, что иногда в организации деньги все же выделяются и тогда отделы защиты информации приобретают межсетевой экран (МСЭ). В большинстве случаев - это решение компании Check Point. Немногие специалисты знают, что этот МСЭ обладает замечательным механизмом - языком описания сетевых событий INSPECT, который позволяет оперировать любыми полями (включая поле данных) сетевых пакетов. Используя этот язык можно построить достаточно эффективную систему обнаружения сетевых атак, встроенную в так полюбившийся российским пользователям межсетевой экран. Достоинство этого решения в том, что на единую консоль администратора "сыпятся" сообщения и от межсетевого экрана и от системы обнаружения атак.

В данной статье я не ставил целью описать все возможные сигнатуры атак (да и размер статьи не позволяет это). Я бы хотел, чтобы читатель сам разобрался в этом, попутно повышая свою квалификацию в области обнаружения атак и понимания сетевых протоколов. Те же, кто торопится защитить себя от хакерских напастей, могу отослать к своей книге "Обнаружение атак" [1], в которой достаточно подробно рассматриваются вопросы создания своих сигнатур на примере утилиты TCPdump. Продемонстрирую несколько примеров, которые показывают, как просто можно описать сигнатуры различных сетевых событий и атак, которые должны контролироваться и обнаруживаться. Например, работа по протоколу TCP определяется правилом ip[9:1] = 6 (для TCPdump) или accept [9:1]=6 (для Check Point Firewall-1). Девятый байт в IP-заголовке характеризует идентификатор протокола (для TCP это значение равно 6). Оператор accept в языке INSPECT [2] дает команду межсетевому экрану пропустить пакет, соответствующий данному условию (могут быть и другие операторы - drop, reject, hold и т.д.). Атака Land может быть определена следующим образом (для TCPdump):

ip[12:4] = ip[16:4] или tcp and (ip[12:4] = ip[16:4]) and (tcp[0:2] = tcp[2:2])

Первое правило обнаруживает только те пакеты, в которых совпадают только адреса получателя и отправителя, а второй обнаруживает пакеты с совпадением не только этих адресов, но и портов получателя и отправителя. Язык INSPECT является объектно-ориентированным и в правилах можно использовать различные сетевые объекты (узлы, сети, пользователи и т.д.), что существенно облегчает работу по созданию сигнатур атак. Например, нижеследующее правило:

inbound all@router77 	// Правило применяется к входящему трафику от сетевого объекта router77
drop 			// Запретить пакеты, соответствующие правилу
(ip_src = ip_dst)	// Адрес источника совпадает с адресом назначения
LOG(long,LOG_NOALERT,1)	// Зарегистрировать атаку в журнале регистрации

также предназначен для обнаружения атаки Land. Но данное правило срабатывает не для всего трафика, как в предыдущем случае с TCPdump, а только для сетевых пакетов, передаваемых от объекта с именем router77 на все интерфейсы межсетевого экрана.

Может показаться, что с помощью TCPdump нельзя строить серьезные сигнатуры. Это не так. Например, следующее правило позволяет обнаруживать пакеты, которые приходят из Internet, в которых в качестве адреса источника указаны немаршрутизируемые адреса:

net 10 or net 192.168 or
(net 172 and
( ((ip[13] > 15) and (ip[13] < 32)) or
((ip[17] > 15) and (ip[17] < 32)) ))
or dst net 0 or (src net 0 and not src host 0.0.0.0) or
net 1 or net 2 or net 5 or net 23 or net 27 or net 31 or
net 37 or net 39 or net 41 or net 42 or net 58 or net 59 or
net 60 or
((ip[12] >= 67) and (ip[12] <= 127)) or
((ip[16] >= 67) and (ip[12] <= 127)) or
net 191.255 or net 128.0 or net 197 or net 201 or
net 223.255.255 or (ip[12] > 239) or net 255
где, номер после ключевого слова net и является номером немаршрутизируемой или невозможной сети. Правило обнаружения троянца BackOrifice выглядит так:

udp and ((dst port 31337) or (src port 31337))

Кстати BackOrifice может быть обнаружен и с помощью 8-мибайтовой последовательности" CE 63 D1 D2 16 E7 13 CF", обнаруживаемой в сетевых пакетах, передаваемых между клиентом и сервером Back Orifice:

udp[8:8] = 0xce63d1d216e713cf

Заключение

Однако, несмотря на большое число сигнатур, которые можно создать своими силами, системы, построенные своими руками, не могут обнаруживать атаки, состоящие из нескольких пакетов или использующие фрагментированные пакеты (за исключением некоторых случаев). Кроме того, эти системы не могут обнаружить атаки, немного отличающиеся (даже одним битом) от тех сигнатур, которые занесены в базу данных. Например, 8 байтов "CE 63 D1 D2 16 E7 13 CF" в потоке данных, передаваемых по протоколу UDP, с высокой вероятностью характеризуют использование троянца Back Orifice с паролем, заданным по умолчанию. И даже притом, что 80% всех злоумышленников оставляют пароль, заданный по умолчанию, остальные 20% (наиболее квалифицированных) изменяют его. Такая модифицированная атака не будет обнаружена системой, построенной на применении регулярных выражений. Многие из этих систем не обрабатывают также фрагментированные пакеты. И злоумышленник мог бы обойти систему обнаружения атак, просто изменяя значение MTU на своем компьютере. Справедливости ради необходимо отметить, что и более сложные и дорогостоящие коммерческие системы обнаружения атак не всегда не контролируют фрагментированные сообщения.

Для собственноручно созданных систем очень велик процент ложных срабатываний (false positives), при котором анализируемый трафик определяется как атака, несмотря на то, что реальной атаки в этом трафике нет. Например, указанные 8 байт для троянца Back Orifice не настолько необычны, чтобы их нельзя было встретить в обычном трафике. Рассматриваемые системы в этом случае просигнализируют об обнаружении использования Back Orifice там, где его на самом деле нет. Или другой пример. Вы пишите письмо другу, в котором предупреждаете его, что скрипт "/cgi-bin/phf" является уязвимым. Большинство коммерческих систем, анализирующих не просто отдельные сетевые пакеты, а целиком трафик конкретного протокола, "увидит", что текстовый фрагмент "/cgi-bin/phf", характеризующий атаку передается не по 80 (HTTP), а по 25 (SMTP) порту и не будут сигнализировать об атаке. В отличие от пакетно-ориентированных систем, построенных на базе TCPdump или INSPECT.

Однако такие системы имеют право на существование, и технологии, описанные в данной статье, используются при создании своей (пусть не столь мощной, как RealSecure Network Sensor) системы обнаружения атак, на которую не надо тратить много денег.

Список литературы

[1] Лукацкий А.В. Обнаружение атак. СПб., "БХВ-Петербург", 2001
[2] Check Point VPN-1/Firewall-1 Reference Guide. Check Point 2000 Service Pack 2. August 2000

Об авторе:

Алексей Викторович Лукацкий, заместитель директора по маркетингу Научно-инженерного предприятия "Информзащита" (Москва). Автор книг "Обнаружение атак" и "Атака из Internet". Связаться с ним можно по тел. (095) 937-3385 или e-mail: luka@infosec.ru.

20 ноября 2001 г.

обсудить  |  все отзывы (0)

[36746; 18; 7.16]






Rambler's Top100
Рейтинг@Mail.ru





  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach