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

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

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

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

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Уклонение от работы

Из книги автора

Уклонение от работы Иногда у вас попросту «сердце не лежит» к работе. Например, порученная задача вас пугает, кажется неудобной или скучной. А может, вы думаете, что она приведет к конфликтам или неминуемо загонит в сложную ситуацию? Или вам просто не хочется ее


На высшем уровне

Из книги автора

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


Объекты на уровне понятий

Из книги автора

Объекты на уровне понятий Если вам трудно ассоциировать объекты с графическими элементами, ячейками рабочего листа или кнопками панели инструментов, представляйте себе объекты как материальные предметы. Вы же можете представить, как вырезаете ножницами из листа бумаги


Редактирование на уровне таблицы

Из книги автора

Редактирование на уровне таблицы Существуют два уровня редактирования таблицы: уровень таблицы и уровень ячейки. В обоих случаях необходимо использовать управляющие маркеры. Вы можете просто щелкнуть на любой линии таблицы, чтобы отобразились маркеры управления на


Редактирование на уровне сегментов

Из книги автора

Редактирование на уровне сегментов Редактирование сплайнов на уровне сегментов позволяет выполнить следующие операции:• Detach (Отделить) – отделяет сегменты, преобразуя их в самостоятельные формы;• Delete (Удалить) – удаляет сегменты;• Divide (Разделить) – добавляет


Редактирование на уровне сплайнов

Из книги автора

Редактирование на уровне сплайнов Чтобы отредактировать сплайн на уровне входящих в его состав сплайнов, нужно перейти на уровень подобъектов Spline (Сплайн), щелкнув в стеке модификаторов на соответствующей строке. Выделенный подобъект будет окрашен красным цветом.При


Редактирование на уровне Edge (Ребро)

Из книги автора

Редактирование на уровне Edge (Ребро) Ребра можно перемещать, поворачивать и масштабировать примерно таким же образом, как и вершины, хотя есть и некоторые отличия.Для поворота ребер можно применить инструмент Select and Rotate (Выделить и вращать), а можно использовать


Объявление переменной на внешнем уровне

Из книги автора

Объявление переменной на внешнем уровне Объявления переменной на внешнем уровне используют спецификации класса памяти static и extern или вообще опускают их. Спецификации класса памяти auto и register не допускаются на внешнем уровне.Объявления переменных на внешнем уровне—это


Блокировка на уровне таблицы

Из книги автора

Блокировка на уровне таблицы Транзакция может быть сконфигурирована для блокирования всей таблицы. Существует два приемлемых способа сделать это в DSQL: установив уровень изоляции транзакции в SNAPSHOT TABLE STABILITY (известный также как согласованный режим, поддерживаемый


Блокировка на уровне таблицы

Из книги автора

Блокировка на уровне таблицы Уровень изоляции транзакции TABLE STABILITY (или согласованная изоляция) предоставляет полную блокировку таблицы по записи, включая зависимые таблицы. Этот уровень слишком агрессивен для интерактивных приложений.Более предпочтительным является


Редактирование на уровне таблицы

Из книги автора

Редактирование на уровне таблицы Существует два уровня редактирования таблицы: уровень таблицы и уровень ячейки. В обоих случаях необходимо использовать управляющие маркеры.Вы можете просто щелкнуть на любой линии таблицы, чтобы отобразились маркеры управления на


Подход на уровне компонентов

Из книги автора

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


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

Из книги автора

Уклонение на уровне пакетов На сетевые системы обнаружения вторжения возложена малопонятная задача выявления смысла из буквально миллионов ежесекундно поступающих кусочков информации при обеспечении приемлемого времени реакции (обычно желательно обеспечить время


Уклонение при помощи морфизма кода

Из книги автора

Уклонение при помощи морфизма кода Полиморфизм – это способ существования во множественных формах, а морфизм – это процесс, используемый для достижения полиморфизма. Полиморфный код преследует цель сохранения в другой форме функциональных свойств уникального кода.