| Ошибки программирования
Ошибки программирования (programming flaw) заключаются в неспособности приложения,
операционной системы или логической микросхемы обрабатывать исключительные ситуации.
Обычно эти ситуации возникают при передаче уязвимому элементу несанкционированных
данных. Взломщики будут много раз передавать пакеты, в которых не учитываются
рекомендации документов RFC, чтобы определить, способен ли сетевой стек справиться
с этими исключениями или это приведет к панике ядра (kernel panic) или краху всей
системы. Для определенных приложений, которым требуются пользовательские входные
данные, взломщики будут передавать строковые данные длиной в тысячи строк. Если
программой используется буфер фиксированной длины, скажем, 128 байт, то злоумышленники
попробуют сгенерировать условие переполнения буфера и вызвать крах приложения.
Что еще хуже, взломщики могут также выполнить привилегированные команды, как описывалось
в главах 5 и 7. Ошибки программирования часто встречаются и в логических микросхемах.
Печально известная атака под названием Pentium f00f основывается на том, что пользовательский
процесс, выполнив некорректную инструкцию 0xf 00f c7c8, приведет к краху любой
операционной системы. Не трудно догадаться, что программы, операционной системы
или даже центрального процессора, в которых отсутствуют любые дефекты, не существует.
Взломщикам прекрасно известна эта аксиома. Будьте уверены, что они полностью воспользуются
преимуществами краха важных приложений. К сожалению, в большинстве случаев все
атаки происходят в совершенно неподходящее время. |