Защита от хакеров корпоративных сетей
Шрифт:
Внутри правила задаются путь и имя команды chgrp. Явно видно, что если бы файл команды был размещен не в директории /usr/bin, а в другой, то с помощью этой сигнатуры попытка определить атаку потерпела бы неудачу. Кроме того, если бы атакующий был уверен в правильной установке переменной среды, задающей путь к команде chgrp, то он смог бы выполнить команду без указания ее полного пути. Тем самым ему бы удалось избежать обнаружения своей атаки системой обнаружения вторжения, выполняющей проверку на соответствие сигнатур. Как следует настроить систему обнаружения вторжения, чтобы она смогла предупредить обо всех только что рассмотренных видоизменениях атак злоумышленником? Сколько сигнатур должна учитывать система обнаружения вторжения, если принять во внимание эти и подобные им многочисленные изменения программ?
Дополнительное кодирование данных
Пересылаемый между Web-сервером и клиентом стандартный текст может быть закодирован таким образом, чтобы он интерпретировался как текст в кодировке Unicode, которая в значительной степени предназначена
К сожалению, все вообразимые способы нормализации не могут разрешить все проблемы контроля сетевого трафика программами с закрытыми исходными текстами. Без знания деталей внутренней работы системы нельзя учесть ее недокументированные возможности. У информационного сервера Интернет-компании 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. Если система обнаружения
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Контрмеры
Ранее уже говорилось, что основанные на сигнатурах системы обнаружения вторжения способны нормализовать передающиеся по сети данные. То есть после того, как входные данные достигнут сервера HTTP, следует каким-то образом логически их обработать, уменьшив их размерность и приведя принятые данные к наименьшему общему знаменателю (например, оставив в последовательности слэшей только один слэш или разрешив ссылку на директорию). Может оказаться полезным частичное совпадение сигнатур. Если для срабатывания системы обнаружения вторжения не обязательно стопроцентного совпадения сигнатур, то она распознает некоторые видоизменения большинства типов атак.
Уклонение при помощи морфизма кода
Полиморфизм – это способ существования во множественных формах, а морфизм – это процесс, используемый для достижения полиморфизма. Полиморфный код преследует цель сохранения в другой форме функциональных свойств уникального кода. Сетевая система обнаружения вторжения может только анализировать сетевую информацию, поступающую из канала связи. Только так она сможет выявить код атаки. Благодаря этому вирусы смогут оставаться необнаруженными в течение некоторого времени. Единственное различие состоит в том, что сканеры вирусов проверяют файлы на дисках, а не поток сетевых данных. Способ, с помощью которого большинство сканеров вирусов взялись бы разрешить описанную проблему, заключается в использовании эвристических способов сканирования. Это похоже на то, что делала бы размещенная на хосте система обнаружения вторжения (идентификация подозрительных событий, несоответствующий доступ к файлу и т. д.).
Полиморфизм достигается использованием полезного для осуществления атаки оригинального кода и кодирования его с помощью обратимого алгоритма. Все команды типа NOP и их последовательности заменяются подходящими двоичными данными. Закодированный таким образом двоичный код пересылается через сеть вместе с небольшой функцией декодирования, обычно размещаемой в начале пересылаемых данных (для того чтобы избежать соответствия сигнатур, функция декодирования может генерироваться динамически). По достижении атакуемой цели декодирующая функция декодирует первоначальный код атаки и выполняет его. Таким способом поддерживается оригинальная функциональность кода атаки.
В статье автора (www.ktwo.ca/c/ADMmutate-README) был тщательно рассмотрен полиморфный управляющий код. Статья была опубликована в начале 2001 года. В коде предусмотрено использование известных на сегодняшний день уязвимостей и уязвимостей, которые могут появиться в будущем. Основой для получения полиморфного кода является постоянно присутствующая возможность вычисления одной и той же величины различными способами. Например, если при атаке нужно вычислить величину, равную четырем, то ее можно вычислить любым из следующих способов: 2 + 2, 3 + 1, 6 – 2 и т. д. Есть буквально бесконечное число способов вычисления заданной величины. Именно этим занимается код атаки, использующий некоторые машинные команды. У исследуемой сетевой трафик системы обнаружения вторжения нет возможности отождествить выражение, вычисляющее искомую величину как 2 + 2, с выражением, вычисляющим эту же величину как 3 + 1. Она получает только низкоуровневые машинные команды и сравнивает их с известным образцом. Сетевая система обнаружения вторжения не интерпретирует машинные команды, как это делает целевой хост-адресат.
Этим способом можно замаскировать от обнаружения любой код атаки. При этом не поможет никакое правило, вне зависимости от того, является ли оно специализированным или общим. Для основанной на сравнении сигнатур сетевой системы обнаружения вторжения единственная возможность обнаружить код атаки появится только в том случае, если будет определена сигнатура декодирующей функции. До настоящего времени автору не были известны никакие сигнатуры или методы, развитые для этого класса полиморфного управляющего кода. В таблице 16.1 параллельно показаны две разновидности одного и того же выполняемого полиморфного управляющего кода.