Обнаружение атак своими силами |
Автор: А.Лукацкий Едучи с очередной прочитанной лекции по защите информации, стал свидетелем интересной картины, когда у молодого человека в защитной форме, который попрошайничал в переходе метро, висела на шее табличка: "Денег нет, а кушать хочется". С похожей ситуацией мне постоянно приходится сталкиваться в своей работе. Сотрудники многих организаций, интересуясь предлагаемыми нашей компанией решениями по защите информации, заявляют, что "денег нет, а защищаться хочется". Наверное, эта ситуация знакома многим специалистам, которым приходится с боем выбивать финансы на приобретение различных защитных средств. Это подвигло меня на написание статьи, основная цель которой показать, что даже при отсутствии или недостаточном финансировании можно построить достаточно надежную и эффективную систему информационной безопасности. Она будет уступать по своим характеристикам коммерческой системе, но зато на ее построение практически не потребуется тратить деньги. Рамки статьи не позволяют рассмотреть все аспекты создания "бесплатной" системы защиты и поэтому я рассмотрю только один из ее аспектов - обнаружение сетевых атак. Эта тема знакома мне ближе всего. Как показывает анализ имеющихся сегодня систем обнаружения атак на уровне сети, все они используют в качестве источника данных сетевой трафик, который анализируется на наличие в нем признаков атак. Реже, но также возможно в качестве источника информации использовать журналы регистрации сетевого программно-аппаратного обеспечения (например, маршрутизатора, межсетевого экрана или анализатора протоколов), фиксирующего весь обрабатываемый им трафик. Механизм функционирования системы обнаружения атак на уровне сети состоит из 4 основных этапов:
В зависимости от того, откуда берутся данные для анализа (с сетевой карты, с компонентов сетевого оборудования или из журнала регистрации), часть, отвечающая за захват пакетов, может быть реализована по-разному, но все остальные части (фильтрация, распознавание и реагирование) остаются без изменения. Программное обеспечение системы обнаружения атак состоит из следующих частей: Ядро, которое осуществляет взаимодействие с сетевым адаптером, частью сетевого оборудования или журналом регистрации, хранящим сетевой трафик. Данное ядро отвечает за захват данных. В сложных системах обнаружения атак, использующих захват с сетевой карты, взаимодействие осуществляется при помощи драйвера самой системы обнаружения атак, подменяющего драйвер операционной системы. Помимо более эффективной работы, это позволяет реализовать и ряд дополнительных функций, например, stealth-режим, не позволяющий обнаружить и атаковать саму систему обнаружения атак. Более простые системы обнаружения, в т.ч. и созданные самостоятельно, используют и анализируют данные, получаемые от драйвера операционной системы. Это ядро по решаемым задачам практически полностью аналогично ядру анализатора протоколов. Программное обеспечение, которое осуществляет декодирование и анализ протоколов, с которыми работает сетевой адаптер, а также реализует соответствующую логику работы системы обнаружения атак и реагирование на них. Захват сетевого трафикаТ.к. областью рассмотрения данной статью является "самопальные" системы обнаружения атак, то я не буду рассматривать механизмы захвата сетевого трафика, реализованные в специальном программно-аппаратном обеспечении, например, в Cisco Catalyst 6000 IDS Module или Cisco Secure Integrated Software. Рассмотрим более приемлемый для самостоятельной реализации механизм, который заключается в обработке трафика, получаемого с сетевой карты, которая может работать в двух режимах: в обычном режиме, в котором сетевая карта обрабатывает только пакеты, предназначенные именно ей; в "смешанном" или "беспорядочном" (promiscuous) режиме, в котором сетевая карта обрабатывает все пакеты, передаваемые в сетевом сегменте. Именно последний режим и используется для создания своей системы обнаружения атак. Чтобы не усложнять себе жизнь, можно воспользоваться механизмами, предлагаемыми операционной системой. Идеальной ОС в этом случае является семейство Unix, которое позволяет без особых проблем получить доступ к сетевому трафику. Мало того... Сообщество пользователей ОС Unix разработало большое число утилит и библиотек, которые берут на себя заботу о доступе к сетевой карте и захвату трафика. Например, прослушивание и захват сетевого трафика может быть осуществлен с помощью широко известной библиотеки libpcap (library for packet capture). Данная библиотека ( http://www.tcpdump.org) разработана для множества ОС семейства Unix, которая позволяет "захватывать" (capture) и "прослушивать" (sniffing) все пакеты, передаваемые в разделяемых средах передачи данных (shared media). Многие системы обнаружения атак для Unix используют эту библиотеку в своей работе (например, SHADOW, Snort, NFR и т.д.), а многие разработчики еще и оптимизировали ее для различных платформ, в том числе существует версия и для платформы Windows, называемая Winpcap ( http://netgroup-serv.polito.it/winpcap/). Вместо libpcap можно использовать библиотеку libnet ( http://www.packetfactory.net/Projects/libnet) или ее версию для Windows ( http://www.eeye.com/html/tools/libnetnt.html), выполняющую аналогичные функции. В случае с обработкой журналов регистрации сетевого оборудования проблем меньше, т.к. сетевой трафик уже захвачен и даже записан в удобном для анализа формате. Все, что необходимо сделать в этом случае, - это обнаружить следы несанкционированной сетевой деятельности, за что и отвечает модуль фильтрации. ФильтрацияМодуль фильтрации также как и модуль захвата пакетов, не обязательно писать самостоятельно, а можно реализовать с помощью свободно распространяемых утилит. Например, ngrep (http://ngrep.sourceforge.net/) или tcpdump. Данные системы основаны на механизме захвата необработанных (raw) пакетов сетевого трафика и пропускании их через синтаксический анализатор "регулярных выражений", который ищет в трафике соответствие шаблону. Примером шаблона можно назвать: "/cgi-bin/phf", который указывает на попытку использования уязвимого CGI-скрипта PHF. Создавая такую систему, вы анализируете известные атаки, пишете для них сигнатуру, и добавляете их в базу данных системы обнаружения атак. Сразу необходимо оговориться, что можно не изобретать велосипед и использовать уже имеющиеся наработки в данной области. Например, системы SHADOW, Snort ( http://snort.sourcefire.com /) или libnids ( http://www.packetfactory.net/Projects/libnids/). Исходный код названных утилит и библиотек доступен в Internet. К ним можно "прикрутить" что-то, что решает ваши задачи, но основное ядро остается неизменным. По такому принципу идут многие независимые разработчики. Например, к системе Snort существует очень много дополнительных утилит, расширяющих ее функциональность. К их числу можно отнести:
и т.д. С полным списком всех утилит, расширяющих функциональность Snort, можно ознакомиться по адресу http://snort.sourcefire.com/downloads.html. Самые простые системы обнаружения атак просто подают на вход утилиты regexp события, получение при помощи библиотеки libcap или используют tcpdump. Эффективность такой системы обнаружения атак зависит от количества и качества регулярных выражений, которые и описывают обнаруживаемые атаки. Однако разработчики некоторых систем поступают еще проще и просто сопоставляют сетевые пакеты с сигнатурами известных атак. Системы, использующие regexp и libcap, имеют одно большое преимущество - простоту модификацию базы данных сигнатур. Изделия этого класса (например, система Snort) имеют большое число сигнатур и являются самыми часто и своевременно обновляемыми. Кроме того, простота реализации приводит к тому, что эти системы бесплатно (или почти бесплатно) доступны в сети Internet и любой желающий может использовать их в своей сети. Аналогичным образом любой желающий может самостоятельно изменять исходный код и добавлять сигнатуры атак в эти системы, тем самым, расширяя их функциональность. Распознавание атакМодуль распознавания является самым важным в любой системе обнаружения атак. От качества его реализации зависит эффективность всей системы. Этот модуль в общем случае использует три широко известных метода для распознавания атаки:
Необходимо отметить, что при создании своей собственной системы обнаружения атак с помощью описанных выше утилит и библиотек можно запрограммировать, в основном, сигнатуры первого типа. База сигнатур атакБаза сигнатур является сердцем любой системы обнаружения атак. Все атаки или иные несанкционированные действия построены на стандартных фильтрах, которые являются основой любой системы обнаружения атак. Рассмотрим два типа фильтров. Первый - на примере утилиты TCPdump, второй - на примере межсетевого экрана Check Point VPN-1&Firewall-1. Второй пример обусловлен тем, что иногда в организации деньги все же выделяются и тогда отделы защиты информации приобретают межсетевой экран (МСЭ). В большинстве случаев - это решение компании Check Point ( http://www.infosec.ru/produkt/checkpoint/firewall1.html). Немногие специалисты знают, что этот МСЭ обладает замечательным механизмом - языком описания сетевых событий 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): Первое правило обнаруживает только те пакеты, в которых совпадают только адреса получателя и отправителя, а второй обнаруживает пакеты с совпадением не только этих адресов, но и портов получателя и отправителя. Язык INSPECT является объектно-ориентированным и в правилах можно использовать различные сетевые объекты (узлы, сети, пользователи и т.д.), что существенно облегчает работу по созданию сигнатур атак. Например, нижеследующее правило: также предназначено для обнаружения атаки Land. Но данное правило срабатывает не для всего трафика, как в предыдущем случае с TCPdump, а только для сетевых пакетов, передаваемых от объекта с именем router77 на все интерфейсы межсетевого экрана. Может показаться, что с помощью TCPdump нельзя строить серьезные сигнатуры. Это не так. Например, следующее правило позволяет обнаруживать пакеты, которые приходят из Internet, в которых в качестве адреса источника указаны немаршрутизируемые адреса: где, номер после ключевого слова net и является номером немаршрутизируемой или невозможной сети. Правило обнаружения троянца BackOrifice выглядит так: Кстати BackOrifice может быть обнаружен и с помощью 8-ми байтовой последовательности "CE 63 D1 D2 16 E7 13 CF", обнаруживаемой в сетевых пакетах, передаваемых между клиентом и сервером Back Orifice: ЗаключениеОднако, несмотря на большое число сигнатур, которые можно создать своими силами, системы, построенные своими руками, не могут обнаруживать атаки, состоящие из нескольких пакетов или использующие фрагментированные пакеты (за исключением некоторых случаев). Кроме того, эти системы не могут обнаружить атаки, немного отличающиеся (даже одним битом) от тех сигнатур, которые занесены в базу данных. Например, 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) системы обнаружения атак, на которую не надо тратить много денег. Об авторе: Алексей Викторович Лукацкий, заместитель директора по маркетингу Научно-инженерного предприятия "Информзащита" (Москва). Автор книг "Обнаружение атак" и "Атака из Internet". Связаться с ним можно по тел. (095) 937-3385 или e-mail: luka@infosec.ru. |