Уклонение на уровне приложений

We use cookies. Read the Privacy and Cookie Policy

Уклонение на уровне приложений

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

Защита вдогонку

Деятельность разработчиков приложений определяется открывающимися перед ними перспективами и возможностью заработать. Всем известно, что в итоге успех или неудачу программного обеспечения определяет конечный пользователь. Прилагая все усилия для обеспечения наиболее удобной работы пользователя, максимальной совместимости программы и исключения ошибочных ситуаций, разработчики жертвуют строгим соответствием спецификациям протокола, отдавая предпочтение вопросам исправления ошибок. Нечасто можно встретить приложение, которое немедленно бы завершало запрос при первых признаках отклонения от определенного протокола. Напротив, предпринимаются все возможные и невозможные усилия для восстановления любых ошибок в попытке обслужить любой запрос (и таким образом увеличивается совместимость приложения и, вероятно, способность к взаимодействию). Исследователь вопросов безопасности, известный под псевдонимом Форест Паппи (Forest Puppy), или, что используется гораздо чаще, RFP, на конференции CanSecWest Security 2001 года (CanSecWest Security Conference 2001) утверждал: «Можно только удивляться тому, что передается через законный трафик по протоколу HTTP…» Подобная практика ведет к снижению безопасности приложений, поскольку она помогает атакующему, расширяя его злоумышленные возможности.

Уклонение от проверки характерных признаков сетевой деятельности на соответствие сигнатуре

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

Если еще раз посмотреть на описание сигнатур в системе обнаружения вторжения snort, то ясно можно увидеть полное имя пути файла команды chgrp, заданное в некоторых из правил. Предполагается, что подобные правила задают сигнатуру, которая предупредит о прохождении через Web-сервер выполняемых команд. Любой из злоумышленников, который сведущ в правилах написания этих правил, с помощью различных трюков может легко модифицировать свои атаки в надежде уклониться от соответствия характерных признаков своей атаки сигнатуре из базы данных сигнатур системы обнаружения вторжения.

Внутри правила задаются путь и имя команды chgrp. Явно видно, что если бы файл команды был размещен не в директории /usr/bin, а в другой, то с помощью этой сигнатуры попытка определить атаку потерпела бы неудачу. Кроме того, если бы атакующий был уверен в правильной установке переменной среды, задающей путь к команде chgrp, то он смог бы выполнить команду без указания ее полного пути. Тем самым ему бы удалось избежать обнаружения своей атаки системой обнаружения вторжения, выполняющей проверку на соответствие сигнатур. Как следует настроить систему обнаружения вторжения, чтобы она смогла предупредить обо всех только что рассмотренных видоизменениях атак злоумышленником? Сколько сигнатур должна учитывать система обнаружения вторжения, если принять во внимание эти и подобные им многочисленные изменения программ?

Дополнительное кодирование данных

Пересылаемый между Web-сервером и клиентом стандартный текст может быть закодирован таким образом, чтобы он интерпретировался как текст в кодировке Unicode, которая в значительной степени предназначена для кодирования символов, позволяющих представлять алфавиты всех существующих в мире языков. Значением строки «Yung» в кодировке Unicode является величина U+6C38. Кодировка Unicode является еще одной головной болью для разработчиков систем обнаружения вторжения, поскольку представляемые в ней величины могут быть исследованы и преобразованы в ASCII-код при помощи стандартных процедур. Эти проблемы не относятся к разряду непреодолимых. В большинстве систем реализовано то, что известно как нормализация протокола. Нормализация протокола основана на анализе входной строки и систематизации всех известных кодировок, представлений свободного места в тексте (пробелов, символов табуляции, пустых строк и т. д.) с целью построения наиболее общей стандартной формы входных данных.

К сожалению, все вообразимые способы нормализации не могут разрешить все проблемы контроля сетевого трафика программами с закрытыми исходными текстами. Без знания деталей внутренней работы системы нельзя учесть ее недокументированные возможности. У информационного сервера Интернет-компании Microsoft (IIS) была одна подобная специфическая особенность. Она заключалась в том, что допускалось представление данных, закодированных с использованием спецификации преобразования формата %u****, которая являлась альтернативой обычному кодированию Unicode %**** . Знаменитый саморазмножающийся вирус Code Red использовал этот ранее неизвестный способ для уклонения от сигнатур системы обнаружения вторжения, настроенных на соответствие сигнатуре специфичной уязвимости переполнения буфера . ida. Недостаток информации является наихудшим врагом защитника сети.

Рассмотрим следующее мнимое нападение:

Attack String:

GET /vulnerable.cgi?ATTACK=exploit-code

Signature:

alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS 80 (msg:“WEBATTACKS

vulnerable.cgi attempt”; flags:A+; content:“get /

vulnerable.cgi? ATTACK=exploit-code”;nocase; sid:1337;

rev:1; classtype:web-application-attack;)

Modified Attack String:

GET /vulnerable.cgi?ATTACK=<SPACE>exploit-code

Скорее всего, атака использует приложения общего шлюзового интерфейса CGI (Common Gateway Interface). Для оповещения об известной атаке используется простая сигнатура. С большой долей вероятности эта сигнатура гарантировала бы сравнительно небольшое число ошибочных оповещений об атаке при отсутствии самой атаки, поскольку код атаки встроен непосредственно в сигнатуру. Но можно увидеть, что если атакующий сможет послать модифицированное строковое представление кода атаки путем использования нескольких дополнительных пробелов, символов табуляции и пустых строк, то он избежит обнаружения при условии, что система обнаружения вторжения будет сопоставлять характерные признаки атаки с сигнатурой из своей базы данных. Этот пример еще раз свидетельствует о сложности подхода к обнаружению атак, основанного на сигнатурах. Если в сигнатуре не будет учтена часть кода атаки, то вполне возможен пропуск большого числа атак. В то же время, если в сигнатуру будут включены образцы программного кода атаки, шансы уклониться от ее обнаружения остаются и могут даже возрасти.

Этот рассмотренный пример атаки сильно упрощен. Данной атаке уклониться от обнаружения совсем нетрудно. При адекватной нормализации протокола лишние пробелы должны устраняться, и система обнаружения вторжения должна успешно осуществлять сопоставление сигнатур.

Способы атак в сети

Некоторые из проблем сетевых нападений были проанализированы RFP. Например, пусть читатель познакомится с его статьей «Исследование направленной против систем обнаружения вторжения тактикой сканера whisker» (A look at whisker's Anti-IDS Tactics). Статья была опубликована в декабре 1999 года (www.wiretrip.net/rfp/pages/whitepapers/whiskerids.html). Он реализовал ряд способов атак в своем сканере уязвимостей whisker. В следующих секциях будут рассмотрены некоторых из них.

Способ соответствия

Метод HTTP-запроса (GET, HEAD, POST и т. д.) информирует сервер о типе ожидаемого соединения. RFP обнаружил, что многие сигнатуры системы обнаружения вторжения полностью непригодны для обнаружения других методов. Это открытие слегка угнетает, поскольку многие разработчики систем обнаружения вторжений объявили о своей лишь частичной зависимости от соответствия сигнатур для генерации и выдачи сигнала оповещения об атаке.

Ссылки на директорию и файл

Слэш (косая черта) является символом разделения имен директорий и файла при указании пути к файлу. Он может быть представлен десятком различных способов. Самый простой из них заключается в представлении одного слэша двойными или несколькими следующими друг за другом слэшами (/some// file.html = /some////file.html). Этот способ может обмануть простейшие варианты поиска соответствий с сигнатурой из базы данных системы обнаружения вторжения при отсутствии какой-либо нормализации, чтобы противодействовать этому.

Другой формой реализации того же самого трюка (описываемый трюк работает только на Web-серверах IIS компании Microsoft) является применение символа обратного слэша (), используемого в операционной системе DOS. Если система обнаружения вторжения не знает о такой форме представления символа разграничения имен директорий и файла, то она не сможет успешно выполнить проверку на соответствие сигнатур.

Эти уловки приводят к успеху из-за существования различных способов ссылки на файл. Достаточно удивительно, что разрешение имени пути на самом деле гораздо сложнее, чем ранее об этом можно было подумать (именно это является причиной удаленной компрометации Web-серверов IIS, вспомните Unicode). Точка (.), указывающая путь к текущему каталогу, и двойная точка (..), указывающая путь к родительскому каталогу текущего каталога, может быть использована для запутывания ссылки на файл. Злоумышленнику нужно только напрячь свое воображение для построения уникальных путей. Ниже приведен пример эквивалентных запросов:

GET /some/file.cgi HTTP/1.0

GET /.././some////file.cgi HTTP/1.0

GET /./some//....///some/./file.cgi HTTP/1.0

Формат вышеприведенного представления данных, используемого для уклонения от системы обнаружения вторжения, RFP назвал сокрытием параметра (parameter hiding). Этот способ уклонения основан на предположении, что некоторые системы обнаружения вторжения оценивают запрос только до тех пор, пока они не встретят в поступивших данных символ вопроса (?), шестнадцатеричным представлением которого является величина %3f. Обычно этот символ является признаком начала аргументов для Web-приложения, которые следуют за ним. Если система обнаружения вторжения захочет просто подать сигнал тревоги при обнаружении запроса файла, то в этом случае с ее точки зрения нет необходимости в полной оценке выражения. Ниже приведены два эквивалентных запроса:

GET /real.file HTTP/1.0

GET /%3f/file/does/not/exist/../../../../../real.file HTTP/

1.0

Данный текст является ознакомительным фрагментом.