Поскольку атаки переполнения буфера настолько популярны и дают поразительные результаты, атакующие хотят применять их, но оставаться незамеченными. Совсем недавно в компьютерном андеграунде велась активная разработка методов изменения вида программы взлома, чтобы IDS не смогла найти соответствие сигнатур и атаки переполнения буфера.
Разработчик программного обеспечения под именем К2 создал очень мощный инструмент вебмастера ADMutate, в котором были реализованы несколько отличных способов трансформации атаки переполнения буфера с целью обмана IDS.
Входными данными для ADMutate является код взлома. Затем этот инструмент изменяет код при помощи метода, заимствованного из мира компьютерных вирусов и называемого полиморфизмом (polymorphism). ADMutate модифицирует код взлома так, что новая сигнатура не соответствует сигнатуре старого кода, однако функциональность кода не нарушается. Как же создается новый код? Вспомните, код взлома по переполнению буфера состоит из трех частей: команд NOP, машинного кода с командами атакующего и указателя возврата.
ADMutate изменяет каждую часть и создает новый набор команд, которые преследуют те же цели. Команды NOP ADMutate заменяет функционально идентичными выражениями. Например, вместо непосредственного использования команды NOP для данного процессора включается команда, которая возвращает регистр в то же состояние. По существу, ничего не происходит, но команда не соответствует команде NOP, которую ищет IDS. Он содержит несколько заменителей NOP, которые выбираются случайным образом, чтобы данная атака не соответствовала ни одной сигнатуре.
Для модификации кода ADMutate применяет простую функцию - XOR (Исключающее ИЛИ), комбинируя код с произвольным ключом. В итоге образуется некая тарабарщина как для IDS, который выискивает атаки, так и для процессора. Получившаяся информация полностью зависит от того, какой ключ выбран. Конечно, для того чтобы в системе был выполнен код атакующего, необходимо убрать кодирование трафика XOR. С этой целью он включает в дополнительные команды, раскодирующие команды атакующего.
Вы, вероятно, скажете: «Так IDS может просто искать команды дешифратора, чтобы определить атаку». Однако программист К2 подумал и об этом. Дешифратор сам по себе полиморфичен. Он создается случайным образом: выбираются функциональные эквиваленты команд. Следовательно, дешифратор всегда разный, поэтому он способен обмануть IDS.
И наконец, он модифицирует указатель возврата, просто изменив последние биты адреса. Если указатель станет адресовать область памяти, где содержатся команды NOP, атака все-таки будет эффективна, поэтому ADMutate изменяет последний значащий байт адреса возврата, присваивая ему произвольное значение.
Итак, ADMutate соединяет все четыре полиморфических элемента: функциональный эквивалент NOP, созданный случайным образом ключ к XOR-дешифратору, XOR-код взлома и измененный указатель возврата. Теперь для того, чтобы все это работало, он должен убедиться, что не включил какую-либо последовательность битов, которая может остановить выполнение кода. В частности, нулевой байт будет рассматриваться как нуль-символ, и работа функции приостановится. Поэтому создает действительный машинный код, который не содержит нуль-символов или любых других символов, мешающих эффективной атаке.
Таким образом, атакующий может написать программу взлома и пропустить ее через ADMutate. Он способен создать сотни и тысячи функционально-эквивалентных решений, у каждой из которых будет своя сигнатура, позволяющая обмануть систему обнаружения вторжений.
Автор: pimka21
Еще советуем: