Format String Attacks (Атаки Форматирования Строк)

Атаки Форматирования строк (Format String Attacks) изменяют ход выполнения приложения, используя возможности библиотеки форматирования строк, чтобы получить доступ к другой области памяти. Дыра в безопасности возникает, когда данные, введенные пользователем, используются напрямую, как входная строка форматирования для определенных C/C++ функций (такие как, fprintf, printf, sprintf, setproctitle, syslog,…).

Если злоумышленник передает строку форматирования, состоящую из printf символов преобразования (такие как, “%f”, “%p”, “%n”, и т.д.), как значение параметра в веб-приложении, он может:

  • выполнить произвольный код на сервере;
  • считать значения стека;
  • стать причиной ошибки сегментации или аварийного отказа программного обеспечения.
Пример.

Предположим, что веб-приложение имеет некоторый параметр emailAddress, вносимый пользователем. Приложение выводит значение этой переменной, используя printf функцию:

printf(emailAddress);

Если значение, отправляемое в параметре emailAddress, содержит символы преобразования, то printf выполнит синтаксический анализ символов преобразования и воспользуется дополнительно передаваемыми аргументами. Если в действительности таких аргументов не существует, то будут использованы данные из стека в соответствии с порядком ожидаемым printf функцией.

Возможности использования Атаки Форматирования строк, в этом случае, могут быть следующие:

  • Прочитать данные из стека: Если выходной поток printf функции передается обратно злоумышленнику, он может прочитать значения из стека, отправляя символ преобразования “%x” (один или более раз).
  • Прочитать символьные строки из памяти процесса: Если выходной поток printf функции передается обратно злоумышленнику, он может прочитать символьные строки из произвольного места памяти, используя символ преобразования “%s” (и другие символы преобразования для того, чтобы добраться к необходимому местоположению).
  • Записать целое в определенное место памяти процесса: Используя символ преобразования “%n”, злоумышленник может записать целое значение в любое место памяти (и таким образом, переписать важные программные признаки,  управляющие привилегиями доступа, переписать адреса возврата на стеке, и т.п.).

Оставить комментарий

Можно использовать теги: <a href="" rel="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>