|
| ||||||||||||
| ||||||||||||
|
2003 г
Поиск уязвимостей в современных системах IDSЕвгений Жульков07.08.2003 Открытые системы, #07-08/2003 Еще совсем недавно считалось, что сетевые системы обнаружения атак, построенные по классической архитектуре, позволяют остановить множество сетевых атак. Но оказалось, что они могут быть легко скомпрометированы и имеется вероятность сокрытия факта проведения некоторых типов атак — особенно, если злоумышленнику известны определенные нюансы работы атакуемой системы.
Сетевые системы обнаружения атак (IDS — Intrusion Detection System), построенные по классической архитектуре, могут быть легко скомпрометированы, хотя ранее считалось, что их использование позволяет остановить многие сетевые атаки [1]. Среди множества сетевых атак можно выделить класс сигнатурных атак, в процессе которых передается неизменяемый блок данных заданного уровня сетевого взаимодействия. Большинство современных инструментов IDS используют сигнатурный метод поиска вторжений; он прост в использовании и при корректной реализации механизмов поиска сигнатур позволяет достичь высоких результатов обнаружения. Следует подчеркнуть: методы сокрытия атак, предложенные Томасом Птачеком и Тимоти Ньюшемом [1], позволяют скрыть от IDS факт проведения только сигнатурных атак. Успешное использование методов сокрытия основано на предположении о том, что стеки протоколов, реализованные в IDS и в атакуемой (целевой) системе, различаются. Подобные различия могут быть вызваны несколькими причинами:
Передаваемая по сети информация может быть по-разному обработана IDS и целевой системой, а из-за различий в стеках протоколов появляется возможность создать последовательность пакетов, которая будет принята IDS, но отвергнута целевой системой. В таком случае IDS не знает, что целевая система не приняла пакет, и атакующий может воспользоваться этим для сокрытия факта проведения атаки, посылая специально созданные пакеты. Создавая ситуацию, когда целевая система отбрасывает пакеты, а система обнаружения атак их принимает, нарушитель как бы «вставляет» данные в анализатор событий IDS (рис. 1).
В общем случае можно сказать, что метод вставки применим, когда стек протоколов в IDS реализован менее строго, чем в целевой системе. Естественное решение данной проблемы — создать стек протоколов настолько строгим, насколько возможно. Однако в этом случае появляется возможность использовать другой метод сокрытия — метод уклонения, при котором целевая система примет, а сетевая система обнаружения вторжений отбросит пакеты (рис. 2).
Метод поиска различийИтак, для успешного использования методов сокрытия необходимо найти различия в реализации стеков TCP/IP. Для этого используются специально подготовленные тестирующие сетевые пакеты, позволяющие анализировать реакцию IDS и целевых систем. Чтобы понять, каким образом необходимо подготавливать тестирующую последовательность сетевых пакетов, следует более подробно рассмотреть использование методов сокрытия атак. Так, для проведения метода вставки надо подобрать такую последовательность тестирующих пакетов, чтобы целевая система ее не восприняла. Причины, по которым целевая система не обработает последовательность, могут быть различными — либо стек протоколов целевой системы решит, что последовательность не корректна, либо произойдет перезапись передаваемого блока данных, например, после обработки перекрывающихся IP- или TCP-фрагментов [2, 3]. После обнаружения последовательностей сетевых пакетов, которые не воспринимает целевая система, переходят ко второй фазе тестирования — исследование реакции IDS на прием этих последовательностей. Какие последовательности сетевых пакетов будут восприняты как правильные и обработаны? В случае, если найдена одна или несколько таких последовательностей, можно считать, что данная комбинация целевой системы и IDS имеет уязвимость, позволяющую использовать метод вставки. С методом уклонения все наоборот: требуется найти последовательности пакетов, которые целевая система воспримет, а IDS не станет обрабатывать. Для метода поиска различий, прежде всего, были выделены уровни сетевого взаимодействия, на которых проводится поиск. При проведении исследований рассматривались средства IDS, работающие в сетях TCP/IP. Для данного стека протоколов принята четырехуровневая модель: канальный, сетевой, транспортный и прикладной. Для создания полной картины существующих различий методика поиска затрагивала все 4 уровня. Кроме того, необходимо выявить признаки сетевых пакетов, по которым система принимает решение, что пришедший пакет некорректный и его следует отбросить. TCP-фрагментом будем называть TCP-сегмент, являющийся частью одного сеанса. (Спецификация протокола TCP не оперирует этим понятием; нам же оно необходимо для описания нашей методики.) Пример TCP-фрагмента: в процессе работы через telnet-соединение в рамках одного сеанса передается множество TCP-сегментов, содержащих всего один символ, введенный пользователем. В нашей методике поиска уязвимостей возможные различия искались в следующих аспектах реализации стека протоколов;
Перечисленные аспекты реализации могут существенно различаться в разных системах. Особенный интерес представляют вопросы, связанные с обработкой фрагментированного трафика: в стандартах вообще нет рекомендаций, которых должны придерживаться разработчики при обработке аномального фрагментированного трафика (частично или полностью перекрывающиеся фрагменты), поэтому именно на этой детали реализации стеков необходимо акцентировать внимание. Для поиска различий были разработаны специальные последовательности тестирующих пакетов.
Проведение тестированияТестирование реализации стеков операционной системы и IDS проводилось на макете, состоящем из двух компьютеров, объединенных сетью Ethernet. Хост, с которого проводилось тестирование, назывался «атакующей системой», а тестируемый хост — «целевой системой» (рис. 3). На хосте имелся файл с названием PHF. Доступ к данному файлу моделировал доступ к уязвимому сценарию phf (www.infosecurity.com/archive/1). В случае HTTP-запроса с атакующей системы к этому файлу Web-сервер передавал его содержимое атакующему, что говорило об успехе атаки. Совсем необязательно выполнять сам сценарий на Web-сервере: если Web-сервер выдал содержимое файла, можно считать, что атака состоялась. Атакующий мог видеть результат атаки на экране с помощью запущенного сетевого анализатора Snort. В случае успеха Snort перехватывал содержимое файла PHF. Обращение к файлу PHF выбрано не случайно. Во-первых, в [1] рассматривали также обращение к PHF. Во-вторых, данная уязвимость была обнаружена в 1996 году и все рассмотренные IDS имели правила для поиска такой сигнатуры.
Создание тестирующей последовательности пакетов проводилось при помощи специально разработанной программы NetStuff, которая является расширенным генератором пакетов, позволяющим выполнять следующие действия.
Для посылки данных в виде фрагментов можно выбрать протокол, в рамках которого проводится фрагментация и количество фрагментов. При необходимости можно сделать так, что сигнатура атаки будет разбита и передана в нескольких фрагментах. Разбив данные на фрагменты, можно настроить каждый фрагмент, изменяя при этом поля заголовков. Также можно модифицировать полезные данные, которые несут фрагменты. Особое внимание уделялось выбору систем для тестирования: необходимо было рассмотреть как коммерческие, так и свободно распространяемые средства IDS. В качестве исследуемых систем IDS были выбраны Snort 1.8.4. beta for Linux [4], Snort 1.8. for Win32 [4], eTrust Intrusion Detection 1.0 от Computer Associates [5], Dragon 5.0 от Enterasys Networks [6], RealSecure 6.0 от Internet Security Systems. Первые две системы распространяются свободно, для работы остальных понадобился демо-ключ, не ограничивающий функциональные возможности. Операционные системы, защищенные IDS: Windows 98 SE v4.10.2222; Windows 2000 SP2 v5.00.2195; Windows NT 4.0 SP3; Linux Red Hat 7.2 на ядре 2.4.7-10. Поиск уязвимостей проходил по следующему сценарию.
РезультатыДействительно существуют различия в реализации стеков протоколов целевых систем и IDS. Эти различия, прежде всего, основаны на неполном описании межсетевого взаимодействия и ошибках проектирования. Большинство таких различий основывается на разном порядке обработки фрагментированного трафика. Также встречались явные недоработки в IDS, например, IDS Snort и Dragon принимают IP-пакеты с неправильной контрольной суммой, а IDS RealSecure 6.0 и eTrust 1.0 — с неправильной версией протокола IP. Очень много различий основано на некорректной реализации стеков. Это приводит к тому, что одни и те же ситуации обрабатываются по-разному различными системами. В качестве примера можно привести недостатки в работе IDS Dragon при анализе трафика, направленного ОС Linux RedHat.
Также интересны результаты работы IDS RealSecure 6.0, анализирующей трафик для Windows 2000.
Много различий в обработке было связано с решением о том, какие данные оставить. Это достаточно интересный факт, так как при разработке IDS, необходимо по максимуму приблизить реализацию стека к стеку той операционной системы, на которой будет работать IDS. Если использование различий в обработке заголовков для проведения атаки не всегда очевидно для разработчиков, то различия в обработке фрагментов должны быть учтены в первую очередь. В противном случае проведение скрытой атаки существенно упрощается. Это же относится и к обработке потока TCP-фрагментов, например Dragon 5.0 и RealSecure 6.0 были не в состоянии обработать некоторые случаи: Dragon 5.0 просто выходил из строя после получения повторяющихся TCP-фрагментов и не обрабатывал поток TCP-фрагментов, пришедших в обратном порядке; RealSecure 6.0 не смог обработать TCP-фрагменты, пришедшие в произвольном порядке. Получается, что для нарушения работы IDS можно просто послать сигнатуру атаки в различной последовательности TCP-фрагментов. Dragon 5.0 не рассматривал TCP-сегменты с установленным флагом FIN, даже если они несли полезную информацию. Особо следует отметить тот факт, что IDS Snort (как для Win32, так и для Linux), не смогла обработать HTTP-запрос, начинающийся с двух символов возврата строки. Целевая система смогла это сделать после правильного подбора номеров очереди (она просто «отрезала» эти символы в начале запроса), что делает Snort также уязвимым к проведению сокрытой атаки методом уклонения. Помимо этого, Snort еще имел восемь несоответствий при работе с Linux и Windows 2000, три из которых связаны с обработкой некорректных заголовков и пять — с различными комбинациями IP- и TCP-фрагментов. Итак, тестирование выявило следующее количество различий в работе стеков.
Как показали дальнейшие исследования, все обнаруженные различия можно использовать при проведении сокрытых сигнатурных атак при помощи методов вставки и уклонения. Поиск уязвимостейПоиск уязвимостей IDS был проведен посредством посылки запросов целевой системе с работающей IDS. Запрос формировался с учетом обнаруженных ранее различий. Успешное сокрытие атаки позволяло говорить о том, что найдена уязвимость. Описание некоторых методов сокрытия сигнатурных атак, использующих найденные уязвимости в зависимости от операционной системы целевой системы, типа атаки и используемой системы обнаружения, представлены в таблицах 1-5. Методы, которые можно использовать для сокрытия атак через Internet, отнесены к классу межсегментных. Если же метод подходит только для атак внутри одной сети, он отнесен к внутрисегментному классу. Как выяснилось, существуют уязвимости IDS, которые можно использовать для проведения скрытой сигнатурной атаки, даже если нарушитель не знает, какая ОС установлена на целевой системе. Скажем, можно использовать тот факт, что Dragon 5.0 не воспринимает данные в TCP-сегменте с установленным флагом FIN или не в состоянии обработать некоторый фрагментированный трафик. Практически все исследованные IDS имеют такие уязвимости. Если для проведения атак используются различия в работе IDS и операционной системы, то в зависимости от того, какую операционную систему защищает IDS, могут появляться новые уязвимости. Например, мы рассмотрели только связку RealSecure 6.0/Windows 2000. А что, если RealSecure 6.0 защищает Web-сервер на платформе Linux Red Hat? Понятно, что некоторые ранее найденные уязвимости будут неактуальны. Однако, используя особенности реализации стека Linux Red Hat, полученного на первом этапе тестирования, можно обнаружить новые уязвимости. Используя результаты, полученные после поиска различий, нарушитель может разработать методы сокрытия для любых комбинаций IDS и ОС. Для этого ему необходимо выяснить, какая IDS защищает конкретный сегмент сети. Это основная проблема — особенно, если нарушитель находится вне сегмента. Если же нарушитель находится в том же сегменте сети, то появляется возможность определить тип IDS по служебной информации, которой IDS обменивается со своими агентами и сенсорами (если имеется распределенная архитектура IDS). После этого, используя генератор пакетов и проведя несколько тестирующих легальных запросов на целевую систему, нарушитель определяет особенности ее работы. Скажем, он может проанализировать, как обрабатывается фрагментированный трафик. Далее, используя базу данных с особенностями работы конкретной IDS и результатами тестирования, нарушитель сможет найти различия и сгенерировать такую последовательность пакетов, которая позволит незаметно провести сигнатурную атаку. ВыводыВ качестве исследуемых IDS выбирались наиболее популярные системы. Факт наличия в них уязвимостей позволяет говорить о том, что и в остальных доступных инструментах ситуация будет не лучше. С точки зрения возможности применения методов вставки и уклонения, самыми уязвимыми оказались Dragon 5.0 и eTrust 1.0. Поэтому, если нарушитель знает, что сегмент сети защищен системой обнаружения вторжений Dragon 5.0, то он имеет возможность провести сигнатурную атаку, скрыв ее, например, при помощи модификации потока TCP-фрагментов. eTrust 1.0 оказалась лучше Dragon 5.0 с точки зрения уязвимостей, позволяющих скрыть атаку, но и здесь имеется семь различных способов скрыть факт проведения сигнатурной атаки (таблица 4). В том случае, если нарушитель не знает, как работает целевая система, он может провести межсегментную атаку, скрыв ее при помощи посылки частично перекрывающихся IP-фрагментов. Среди коммерческих систем RealSecure 6.0 оказалась наиболее стойкой к методу сокрытия, однако у нарушителя все же имеется пять различных способов скрыть атаку, один из которых позволяет провести межсегментную атаку (таблица 5). Несмотря на то, что система Snort является бесплатной, она показала достойные результаты. Нет недоработок, связанных, например, с обработкой фрагментированного трафика. Осталось непонятным, зачем разработчики изменили порядок обработки одинаковых TCP-фрагментов при переходе на платформу Win32. Операционные системы этого класса обрабатывают перекрывающиеся пакеты не так, как Linux, однако, в новой версии Snort, работающей и на платформе Win32, и для Linux имеется уязвимость, связанная с обработкой таких фрагментов. Надеюсь, разработчики IDS впредь будут уделять больше внимания не только удобству работы с системой, но попытаются по максимуму приблизить логику работы IDS к защищаемым операционным системам. Литература
Евгений Жульков (ezhulkov@openwaygroup.com) — магистр кафедры «Информационная безопасность компьютерных систем» Санкт-Петербургского государственного политехнического университета. Таблица 1. Методы сокрытия. Snort 1.8.3 for Linux
Таблица 2. Методы сокрытия. Snort 1.8 for Win32
Таблица 3. Методы сокрытия. Dragon 5.0
Таблица 4. Методы сокрытия. eTrust ID 1.0
Таблица 5. Методы сокрытия. RealSecure 6.0 |
|
CITForum © 1997–2025