Вопрос:Какой язык программирования самый безопасный? Ответ:На этот вопрос нельзя ответить однозначно. В языках Perl and PHP реализована прекрасная возможность автоматического распределения памяти, которая позволяет разместить в памяти любое количество входных данных. Но написанные на этих языках программы плохо масштабируются из-за того, что они выполняются в режиме интерпретации. Языки программирования C/C ++ требуют от разработчика принятия дополнительных мер по обеспечению безопасности. Но написанные на языках C/C ++ программы компилируются в выполнимый код, который работает быстрее и лучше масштабируется. Окончательный выбор языка должен быть основан на предъявляемых к приложению требованиях и навыках программиста работы со средствами разработки.
Вопрос:Где можно найти дополнительные сведения об аудите исходного текста программ? Ответ:В книге «Hack Proofing Your Web Applications» издательства Syngress читатель найдет много намеков, подсказок, хитроумных приемов и указаний по аудиту исходных текстов программ для выявления в них уязвимостей.
Глава 8 Переполнение буфера
В этой главе обсуждаются следующие темы:
• Стек
• Стековый фрейм функции
• Основы переполнения буфера
• Пример программы, уязвимой к переполнению буфера
• Современные способы переполнения буфера
• Новаторские принципы построения программного кода полезной нагрузки
· Резюме
· Конспект
· Часто задаваемые вопросы
Большинство известных на сегодняшний день уязвимостей основаны на переполнении буфера. Благодаря нему возможна значительная часть удаленного использования программ в злонамеренных целях. Если в результате атаки буфер переполнится, то квалифицированный злоумышленник сможет запустить любую программу с правами атакованного процесса. Атаки на буфер часто используются для внедрения злонамеренной программы с функциями командного процессора.
Переполнение буфера – непредсказуемая ситуация, которая возникает в программах, написанных на разных языках программирования. В этой главе будут подробно рассмотрены причины возникновения переполнения буфера, способы выявления основанных на нем уязвимостей и принципы написания программ, извлекающих из него пользу.
Эта глава разделена на две части: для новичка и для квалифицированного читателя. Если читатель знаком с переполнением буфера и понимает, как им можно воспользоваться, то он может пропустить раздел для новичка. Но в любом случае рекомендуется просмотреть материал, предназначенный для квалифицированного читателя. Некоторые из вошедших в него способов входили в арсенал средств злоумышленников, например использовались при создании червя Code Red.
Стек – абстрактная структура данных, устроенная по принципу LIFO «последний вошел – первый вышел» (last in, first out – LIFO). Наглядно стек может быть представлен стопкой подносов в кафетерии. Например, если кто-то кладет поднос на вершину стопки, то этот поднос будет первым, который другой возьмет. В поддержке стека важная роль отводится внутренним компонентам процессора, прежде всего регистрам процессора ESP и EBP, которые облегчают его использование.
Стек играет важную роль при взаимодействии программ. При вызове функции программа временно сохраняет в нем адрес возврата, параметры вызываемой функции и ее локальные переменные. Стек позволяет программистам упростить передачу параметров вызываемой функции и доступ к ее локальным переменным. В основном стек подобен буферу, в котором хранится вся необходимая для работы функции информация. Стек создается при вызове функции и разрушается при ее завершении. Стек статичен в том смысле, что после его создания назначение и тип выделенной стеку памяти не меняются, хотя хранящиеся в стеке данные могут изменяться.
...
Примечание
Все приведенные в главе примеры откомпилированы в операционной системе Windows 2000 компилятором VC++ 6 SP5 (Msdn.microsoft.com), если об этом ничего не сказано. Для большей ясности и простоты при компиляции примеров использовалась возможность построения выполнимой версии программы с отключенными опциями оптимизации программного кода. Примеры дизассемблирования подготовлены с использованием дизассемблера IDA pro 4.18 (www.datarescue.com). Все примеры предполагают использование стандартного чипсета x86.
Читать дальше
Конец ознакомительного отрывка
Купить книгу