Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Таким образом, DEP очень конфликтная вещь, создающая множество проблем и ни от чего не защищающая. Microsoft допустила множество серьезных просчетов, позволяющих проникать сквозь DEP даже на максимальном уровне защищенности.
Все дальнейшие рассуждения применимы как к 32-, так и к 64-битным редакциям NT и не зависят от настройки системы. Будем для определенности считать, что ключ /noexecute установлен в положение AlwaysOn.
Атака на DEP
Microsoft подтвердила возможность обхода DEP еще в январе 2005, когда
на maxpatrol появилась статья Александра Анисимова «Defeating Microsoft Windows
XP SP2 Heap protection and DEP bypass», однако не придала этому большего
значения, заявив, что реализовать удаленную атаку все равно не удастся: «An attacker
cannot use this method by itself to attempt to run malicious code on a user’s system.
There is no attack that utilizes this, and customers are not at risk from the situation»
(Атакующий не может использовать этот метод для запуска зловредного кода
на целевой системе. До сих пор не было продемонстрировано ни одной атаки,
использующей этот трюк, и потребители находятся вне риска –
Это наглая ложь! Механизм DEP легко пробивается с любого расстояния, хоть из Антарктики. Результатом атаки становится переданный и успешно выполненный shell-код, выполняющий команды, заранее подготовленные злоумышленником. Чтобы понять, как это делается, сначала необходимо разобраться с классическими методами переполнения, подробно разобранными в статье «Ошибки переполнения буфера извне и изнутри как обобщенный опыт реальных атак».
Напомним читателю ее основные положения: отсутствие контроля границ локальных буферов позволяет затирать адрес возврата из функции, помещая сюда указатель на shell-код, который находится здесь же, в стеке. Другой тип переполнения связан с кучей. С его помощью хакер может модифицировать любую writable ячейку в адресном пространстве уязвимого процесса (например, подменить указатель на виртуальную функцию или подделать адрес возврата). Имеются и другие возможности (в частности, атакующий может изменить обычный порядок выделения блоков памяти из кучи, разместив следующий выделяемый блок поверх ключевых структур данных), но для простоты изложения мы ограничимся модификацией адреса возврата.
Рисунок 10. Классическая удаленная атака — засылка shell-кода в стек с последующей передачей на него управления
путем модификации адреса возврата
Существует множество защитных механизмов, контролирующих целость кучи и адреса возврата, но… со своей задачей они не справляются. Это отдельная большая тема, никак не связанная ни с NX/XD-битами, ни с технологией DEP. В следующих статьях мы подробно рассмотрим ее, но… это будет потом. Сейчас же ограничимся тем, что DEP никак не препятствует модификации адреса возврата и существует множество программ, действительно позволяющих это делать (Internet Explorer, FireFox и др.).