Защити свои приложения Илья Рабинович Спецвыпуск: Хакер, номер #058, стр. 058-034-5 здесь какой-то код, который не будет мешать нам получить результат ret. <-а здесь в стеке должен оказаться наш реальный адрес возврата! StackDefender в своей обычной модификации (есть еще Server Edition) также базируется на защите на основе неисполняемых стека и кучи для базовых сервисов операционной системы и на перехвате вызовов функций для всех приложений (в том числе для сервисов). Кроме того, программа изменяет базовый адрес для модуля kernel32.dll, но не рандомизирует эту базу при каждой перезагрузке, то есть при каждой перезагрузке она хоть и смещена относительно стандартной, но не меняется при этом. Все эти программы, в случае обнаружения атаки завершают весь процесс целиком, и для защиты, например, web- и ftp-серверов они непригодны. DefencePlus базируется также на технологии неисполняемости стека и кучи, но эта технология уникальна тем, что практически не приводит к падению производительности защищаемой системы, поэтому защищаются все процессы в системе. Для совместимости с программами, выполняющими свой код в куче или стеке (а их немало), у программы есть четыре уровня защиты, которые позволяют добиться максимальной совместимости с уже написанным ПО. По умолчанию все процессы защищаются так, что стек неисполняем, а куча исполняема. В этом случае защита кучи базируется на контроле точек перевода управления на эксплойт в куче. Дело в том, что этих точек немного: ячейка памяти с адресом UnhandledExceptionFilter, ячейки памяти в TEB (системная база данных потока) с адресами функций RtlAcquirePebLock/RtlReleasePebLock и SEH. Если контролировать целостность критически важных ячеек памяти и SEH, то можно добиться хорошего уровня защиты кучи, сохранив ее исполняемость. Кроме неисполняемости, контроля целостности SEH и точек перевода управления, программа случайным образом перемешивает данные в куче и стеке для предотвращения угадывания адресов, где лежат шелл-коды, случайным образом перемещает базовые библиотеки при каждой перезагрузке, чем чрезвычайно затрудняет "return-into-libc"-атаку (попробуй догадайся, куда программа забросила базу kernel32.ddl в этот раз!). В случае атаки завершается не все приложение, а только атакованный поток, что делает ее пригодной для защиты web- и ftp-серверов. Единственная проблемы программы - это совместимость с KAV под Windows 2000. Что делать, если меня успешно атаковали? Прежде всего - не впадать в панику. Команда "format c:"- это крайняя мера. Во-первых, нужно установить все последние заплатки от производителя ОС. Во-вторых, желательно помнить, что шелл-код, если он небольшой, не способен серьезно повредить систему. Ему необходимо выкачать из Сети дополнительные компоненты. Сделать это он может или с помощью tftp (простой ftp-модуль, входящий стандарт поставки операционной системы), или с помощью Internet Explorer. И тут мы можем перехватить и заблокировать эти действия с помощью файрвола. Вообще хороший файрвол как утилита защиты после взлома незаменим, и именно поэтому грамотно спроектированный шелл-код будет любыми способами противодействовать файрволу - от попыток обмануть его и выкачать свои компоненты тихо и незаметно до попыток выгрузить файрвол и отключить защиту. |