Система Orphus

Атака на переполнение буфера. Причины и последствия. Детальное описание (без примера на ассемблере), программные и аппаратные способы защиты: безопасные функции, security cookies, DEP, ASLR, etc.

Пример:
void someFn (char *arg){
   char szBuf[128]
   sprintf (szBuf, "Name: %s", arg);
   //или strcpy (szBuf, arg);
}
 
void caller (char *userInput){
   someFn (userInput);
}
Не проверяется размер arg и:
  • Могут быть разрушены локальные переменные
  • Неправильно восстановятся регистры
  • Могут быть разрушены локальные переменные вызывающей функции
  • Изменится адрес возврата
  • Управление может быть передано в произвольное место кода
Способы защиты:
  • Безопасные функции - доступны безопасные аналоги функций, начиная с Visual Studio 2007 (вместо sprintf() - sprintf_s() и т.д.). Им передается максимальная длина, иначе бросается исключение.
  • Security cookies - 4 байта в стеке перед выполнением каждой операции добавляется инструкция проверки, которая выполняется для проверки типа, "а туда ли мы вернулись".
  • DEP (Data Execution Prevention) - функция безопасности, которая не позволяет приложению исполнять код из области памяти, помеченной как «только для данных».
  • ASLR (Address space layout randomization) - технология, применяемая в операционных системах, при использовании которой случайным образом изменяется расположение в адресном пространстве процесса важных структур, а именно: образа исполняемого файла, подгружаемых библиотек, кучи и стека.

Система Orphus

Комментарии