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