Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #97, ЯНВАРЬ 2007 г.

Обман IDS

Крис Касперски

Хакер, номер #097, стр. 080

Обход интеллектуальных систем защиты

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

Введение или добро пожаловать в ад

Не так страшен черт, как его малюют, тем более что попасть в его лапы не так-то просто, поскольку все подступы к аду контролирует злобный мифический трехглавый пес Цербер, по научному называемый «системой обнаружения вторжений». Она же - Intrusion Detection System, или IDS.

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

Системы обнаружения вторжений распознают и отсекают (точнее, пресекают) большинство актов вандализма, захлестнувших Сеть в последнее время, когда любой мальчик, еще даже не трахавшийся, уже качает очередной сканер безопасности или нюкер и начинает типа атаковать. Такие «типа атаки» составляют свыше 99% от всех якобы зафиксированных атак на Пентагон, Мелкософт и другой ширпотреб, нанимающих мальчиков - типа экспертов по безопасности. Такие с понтом «типа эксперты» в своей массе просто смотрят в лог IDS и бьются в экстазе, видя, сколько мегахакеров было остановлено на пути к информационной крепости. А что! Сканирование портов - это уже атака, а перебор параметров cgi-скриптов - это вообще… Какая хорошая IDS, без нее нам не жить. Мысль о том, что правильно настроенная и заштопанная ось способна справиться с SYN/PING/UDP-флудом и сама, просто не приходит им в голову, но зато создает вескую мотивацию, оправдывающую их килобаксовую зарплату. Встречаются, конечно, и нормальные администраторы, но мало, очень мало. И большинство из них не использует IDS, поскольку это ненужная вещь.

Настоящего хакера, целенаправленно атакующего сервер через только ему одному известную ошибку переполнения, IDS не только не остановит, но даже не обнаружит. Кроме того, во многих случаях IDS сама может выступать объектом атаки, поэтому ее присутствие не только не усиливает безопасность, но даже ослабляет ее! К тому же ошибочно распознанные атаки (процент которых достаточно велик) вкупе с активными действиями, предпринятыми со стороны IDS против «хакера», создают у легальных пользователей большие проблемы, что не есть хорошо. Но здесь мы не выступаем за или против IDS, поскольку воздействовать на политику безопасности атакуемого сервера хакер может только своими руками и головой, но никак не пропагандой против IDS (исключение составляют случаи, когда хакер атакует серверы своей же собственной компании и не хочет, чтобы каждый его шаг попадал в лог).

Типы IDS

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

Локальные IDS устанавливаются непосредственно на тот узел, который они охраняют, и такие IDS часто являются частью персонального брандмауэра или антивируса. Разработчики ПО любят подобные комплексные решения, стремясь запихнуть в одну коробку как можно больше софта, но администраторы (я имею ввиду нормальных администраторов) только морщатся при виде подобных «швейцарских ножей». Специализированные решения всегда имеют массу преимуществ перед универсальными, предъявляя при этом значительно меньшие требования к аппаратным ресурсам, но кого это вообще интересует?

По «следственным» методам IDS делятся на пассивные и активные. Пассивные ограничиваются мониторингом сетевой активности, записывая в лог подозрительные действия или явно выявленные атаки. Практически все IDS поддерживают гибко настраиваемую степень детализации лога. Чем детальнее лог, тем больше информации он несет о сетевой активности, но тем труднее в нем вылавливать реальные попытки атаки. К тому же большинство IDS кидают всю информацию в один лог, устроенный по принципу кольцевого списка, что позволяет атакующему уничтожить следы атаки тупыми попытками проникновения типа сканирования портов, затирающих всю остальную информацию. Также практически все IDS предусматривают возможность оповещения администратора через почту, sms или другие средства коммуникации, однако далеко не каждый администратор спешит воспользоваться ей. Вот ему радость просыпаться от звонка сотового, весело объявляющего об очередной выявленной псевдоатаке!

Активные IDS не только собирают улики, но и предпринимают ответные действия против атакующего, пока администратор пьет пиво. Какие же это действия? Ну, например, занесение хакерского IP в black-лист на некоторое время (скажем, 6 минут или целый час) или до снятия его администратором. Учитывая достаточно большое число ложных срабатываний и частоту (не)посещения работы администратором, становится ясно, что «бан до помилования» отсекает большое количество честных пользователей и даже целые подсети, сам по себе являясь нехилой DoS-атакой. Менее жесткая мера - посылка IDS'ом ответного TCP-пакета, инициирующего разрыв соединения. Она не работает с UDP и «сырыми» IP-пакетами, а также против атак на переполняющиеся буферы и реально лишь ограничивает активность флудеров.

Архитектура и принципы работы IDS

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

А вот если IDS расположена внутри сети, то единственный путь сбора информации - это перевод сетевой карты в неразборчивый режим, и такая IDS элементарно обнаруживается, поскольку превращается в обыкновенный снифер. Методики его выявления подробно рассмотрены в моей статье «Рыбная ловля в локальной сети – sniffering», публиковавшейся ранее в «Хакере». Так зачем же повторяться? Достаточно отметить, что для обнаружения снифера (которым в данном случае является IDS) хакеру необходимо находиться уже внутри локальной сети, чтобы посылать ARP-запросы и делать другие дела. Извне сети, имея один лишь TCP/IP, выявить снифер очень сложно, а еще сложнее остаться при этом незамеченным и не привлечь к себе внимание IDS.

База данных обычно не только описывает модели хакерского поведения (сканирование портов, подбор строк разной длины в попытке вызывать переполнение, перебор параметров cgi и т.д.), но также содержит сигнатуры всех известных вирусов/червей и, что самое главное, сведения обо всех дырах! То есть это что получается? Допустим, внутри локальной сети находится незалатанный Microsoft IIS с ошибкой переполнения. Хакер разрабатывает свой собственный shell-код, сигнатура которого еще никому не известна и который нельзя выявить эвристическими методами, и отправляет его серверу. Но! Между хакером и сервером находится IDS, установленная, например, на одном из промежуточных маршрутизаторов, возможно, даже и не принадлежащем компании, чей сервер хакер хочет атаковать. IDS не знает, что делает этот shell-код, но, видя, что он направляется прямо в дыру, говорит «Ага!» и разрывает соединение (ставит хакеру бан). Вот так облом! Тупой администратор может не латать дырявый сервер годами, но если он подключен к правильному провайдеру и этот провайдер имеет правильную IDS, то задача атаки резко усложняется. Самое простое, но не самое правильное, что может предпринять хакер в этом случае, - послать кому-нибудь из сотрудников атакуемой организации письмо с вложением (что находится во вложении объяснять, надеюсь, не надо?), заманить их на web-сервер со страничкой, использующей одну из дыр в IE/FireFox'е и т.д. Короче, захватить сеть изнутри.

«Мозги», обрабатывающие всю информацию, далеко не всегда берутся с запасом, и при интенсивном трафике время распознавания атаки резко возрастает! Некоторые IDS распознают атаку спустя 5 и более минут после ее начала. Для разборок с флудом этого обычно оказывается вполне достаточно, но вот против ошибок переполнения тут уже сильно не повоюешь. За эти 5 минут хакер вполне успевает овладеть сервером, установить rootkit последнего поколения и утащить массу конфиденциальных данных. Вот и лови его потом! А что? Все логично. Обработка трафика требует времени, и если пакеты сыплются как из ведра, то IDS начинает отчаянно буксовать. Хорошо, если она не выкидывает пакеты, которые не успевает анализировать, иначе атака вообще не будет обнаружена (не говоря уже о каком бы то ни было противодействии атакующему). Локальные IDS ведут себя несколько не так и задерживают пакеты вплоть до полного выяснения личности. Однако смысла в них немного. Если администратор (или пользователь рабочей станции) не устанавливает заплатки, то с какой это радости он будет обновлять базу IDS? А без базы IDS распознает только тупые акты вандализма, о которых мы уже говорили, но никак не целенаправленную атаку на переполнение. Поэтому дальше мы будет говорить исключительно про сетевые IDS, которые представляют наибольшую опасность для хакера.

Методы обхода IDS

Никаких сканирований портов! Никаких сканеров безопасности! Никакой другой дури!!! Ясно?! Наслушались тут советов на форумах! «Как это так - не сканировать? - спросишь ты. – Ведь это же главная разведывательная операция перед началом каждой атаки». Ну, во-первых, далеко не каждой. Если известно, что на узле стоит web-сервер, в котором (возможно) есть дыра, зачем сканировать остальные порты? Собственно говоря, сканирование преследует цель получить перечень установленных на сервере служб (в идеале - с определением их типа и версий). Затем среди них ищутся уязвимые, и атака переходит во вторую стадию. Распространенные утилиты по умолчанию сканируют порты достаточно агрессивно, причем с одного и того же IP-адреса. А факт сканирования распознается элементарно - по приходу пакетов, направленных на закрытые порты. При превышении определенного порога агрессивности сканирования (количество пакетов в единицу времени) IDS сигнализирует об атаке и зачастую блокирует этот IP, создавая иллюзию, что все остальные порты закрыты. Неагрессивное сканирование, к сожалению, занимает слишком много времени (в среднем - несколько суток), но и в этом случае оно с большой вероятностью обнаруживаются. Выход - менять IP с каждым посылаемым пакетом. Для этого хорошо подходит методика сканирования с использованием молчаливого хвоста, поддерживаемая продвинутыми сканерами, в том числе и nmap, либо другой способ - подогнать армию чужих компьютеров с внедренным бэкдором и сказать ей «Фас!». Здесь агрессивность сканирования уже не играет никакой роли, поскольку каждый порт сканируется с нового IP, адрес которого IDS предвидеть не может, а потому не может и заблокировать. Чисто теоретически, обнаружив атаку, администратор способен технически заблокировать все ресурсы, перерезать сетевой кабель, забаррикадировать дверь и выключить сервер, но… сканирование портов в реальности происходит так часто, что на него просто перестают обращать внимание.

Обойти сигнатурную защиту сложнее, но все-таки возможно! Прежде всего, не стоит использовать никаких готовых (и широко известных) shell-кодов, rootkit'ов и прочей фигни, особенно не полиморфной. IDS заматерится так, что админ с секретаршей превратятся в сиамских близнецов (с женщинами с перепугу это часто случается). Это уже не просто подозрение в атаке, это стопроцентная попытка атаки (неважно, успешная она или нет). Даже если атака действительно окажется успешной и IDS проснется сильно после того, как rootkit будет установлен (для этого атаку проводить лучше в часы пик, когда сервер максимально загружен и через IDS несется лавина честного трафика), админ, поднятый по тревоге, либо обнаружит rootkit, либо просто возьмет бэкап и сделает откат к заведомо «стерильной» конфигурации. Либо же переустановит всю систему с нуля. Шансы на выживание у хакера минимальны, так что не стоит действовать по принципу: кинул бэкдор и, если все тихо, через неделю решил его заюзать. Опытный хакер использует сервер сразу и набирает буковки не руками, а запускает заранее разработанные программы, хакающие данные на форсаже - так быстро, как это только возможно.

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

Но мы, похоже, отклонились от темы статьи, которая называется «Обман IDS», а «Как зачморить админа». Так, методы воздействия на саму IDS мы откинем, поскольку они практически не изменились со времен атак на первые, еще доисторические брандмауэры (практически всякая IDS поддерживает функции удаленного управления и конфигурирования, но далеко не всякий админ спешит тут же изменить дефолтовый пароль).

Еще несколько лет назад большинство IDS распознавало только две формы запроса к HTTP-серверам: UTF и HEX. Обе стандартные. При этом сами серверы (и в частности MS IIS) поддерживают нестандартный Unicode/Wide-формат (типа %u), что позволяло хакерам и червям (среди которых числится и нашумевший CodeRed) легко обходить IDS, стоящие на магистральных каналах со всеми вытекающими отсюда последствиями. Миллионы непатченных серверов захачились по всему миру, вызвав переполох и слухи о близком конце интернета. Конец же, как выяснилось, находился в другом кармане и в очередной раз был перенесен на неопределенный срок. Тем временем разработчики IDS поняли свою ошибку и поддержали Unicode/Wide-формат по полной программе. Однако куча аппаратных IDS так и осталась не обновленной и не осведомленной ни о каких %u.

А Windows Vista - это вообще прелесть! Настоящий подарок для хакеров! Прозрачная поддержка протокола IPv6 в сетях, разделенных между собой IPv4, осуществляется за счет инкапсуляции IPv6 в IPv4/UDP, о котором существующие IDS не в курсе. То есть если у жертвы стоит Windows Vista или Server Longho, подключенный к интернет-каналу по IPv4 (а IPv6 в народ еще не пришел), хакер может свободно посылать Pv6-пакеты, инкапсулированные в UDP (для этого ему также придется установить у себя Висту). Относительно IDS все будет ОК, никакой известной ей сигнатуры она не увидит, пока не догадается распотрошить инкапсулированный UDP и посмотреть, что там у него внутри. А с учетом того, что Виста допускает вложенную инкапсуляцию, распознать атаку сможет только слишком умная и притом обновленная IDS. Понятное дело, что разработчики IDS не сидят сложа руки, а так как Висту себе ставят, в основном, геймеры, но никак не серьезные предприятия, то неизвестно, что произойдет раньше - массовая миграция на Висту или обновление IDS. Тем не менее, у хакеров есть отличный шанс показать всему миру, на что они способны.

Заключение

И все-таки что же такое IDS? Чучело филина или зубастый Цербер? Смотря для кого. Для слона, например, что моська, что цербер - все едино, а для мыши и филин - угроза. Правильно настроенная IDS хорошо справляется с пионерскими атаками, отсекая всяких там флудеров и куль-хацкеров с exploit'ом вместо головы. Хакеры, ведущие поиск дыр самостоятельно, присутствие IDS просто не замечают, как IDS не замечает неизвестную атаку. Короче, задача обхода IDS в общем случае сводится к тому, чтобы их не обходить, а двигаться своим путем сквозь тернии по заранее намеченному маршруту, избегая дорог и магистралей.

Самые популярные IDS

Среди множества IDS, имеющихся на рынке, наибольшей популярностью пользуются следующие продукты: Cisco Secure IDS, ISS RealSecure, Enterasys IDS Dragon, CA eTrust Intrusion Detection Engine и Intrusion.com SecureNet PDS. Некоммерческих IDS просто море, но в большинстве своем они годятся лишь для решения ограниченного круга задач и за пределы локальных сеток не выходят. На магистральных каналах они просто загнутся (особенно это касается IDS, написанных на скриптовых языках), и тут без аппаратных решений уже не обойтись!

WWW

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

- «Cisco Security Professional's Guide to Secure Intrusion Detection Systems» (www.bookpool.com/sm/1932266690);

- «Inside Network Perimeter Security: The Definitive Guide to Firewalls, Virtual Private Networks (VPNs), Routers, and Intrusion Detection Systems» (www.amazon.com/gp/product/customer-reviews/0735712328);

- «Cisco Secure Intrusion Detection System» (www.amazon.ca/gp/product/158705034X/ref=olp_product_details/701-5759191-0599541?ie=UTF8&seller=).

Содержание
ttfb: 8.4049701690674 ms