BugTraq.Ru
Русский BugTraq
https://bugtraq.ru/library/security/luka/autodetect.html

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

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

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

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

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

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

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

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

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

Именно последний режим и используется для создания своей системы обнаружения атак. Чтобы не усложнять себе жизнь, можно воспользоваться механизмами, предлагаемыми операционной системой. Идеальной ОС в этом случае является семейство 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 существует очень много дополнительных утилит, расширяющих ее функциональность. К их числу можно отнести:

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

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

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

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

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

База сигнатур является сердцем любой системы обнаружения атак. Все атаки или иные несанкционированные действия построены на стандартных фильтрах, которые являются основой любой системы обнаружения атак. Рассмотрим два типа фильтров. Первый - на примере утилиты 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)

[36341; 18; 7.16]




  Copyright © 2001-2024 Dmitry Leonov Design: Vadim Derkach