Атака с возвратом к libc - Return-to-libc attack

А атака "return-to-libc" это компьютерная безопасность атака обычно начинается с переполнение буфера в котором подпрограмма обратный адрес на стек вызовов заменяется адресом подпрограммы, которая уже присутствует в процесс Исполняемая память, минуя бит без выполнения функция (если есть) и избавляет злоумышленника от необходимости вводить собственный код. Первый пример этой атаки в дикой природе был внесен Александр Песляк на Bugtraq список рассылки в 1997 году.[1]

На POSIX -соответствующий операционные системы в Стандартная библиотека C ("libc") обычно используется для обеспечения стандарта среда выполнения для программ, написанных на Язык программирования C. Хотя злоумышленник может вернуть код где угодно, libc является наиболее вероятной целью, поскольку он почти всегда связан с программой и предоставляет злоумышленнику полезные вызовы (например, система функция, используемая для выполнения команд оболочки).

Защита от атак return-to-libc

А неисполняемый stack может предотвратить некоторую эксплуатацию с переполнением буфера, однако он не может предотвратить атаку возврата в libc, потому что в атаке возврата в libc используется только существующий исполняемый код. С другой стороны, эти атаки могут вызывать только уже существующие функции. Защита от разрушения стека может предотвратить или воспрепятствовать эксплуатации, так как он может обнаружить повреждение стека и, возможно, очистить скомпрометированный сегмент.

"Защита ASCII "- это метод, который можно использовать для предотвращения атак такого типа. С защитой ASCII адреса всех системных библиотек (например, libc) содержат NULL байт (0x00). Обычно это делается путем помещения их в первую 0x01010101 байтов памяти (несколько страниц размером более 16 МБ, получившие название «область защиты ASCII»), поскольку каждый адрес до (но не включая) этого значения содержит по крайней мере один NULL-байт. Это делает невозможным внедрение кода, содержащего эти адреса, с помощью функций обработки строк, таких как strcpy (). Однако этот метод не работает, если злоумышленник имеет способ переполнить NULL байтами в стеке. Если программа слишком велика для первых 16 МиБ, защита может быть неполной.[2] Этот метод похож на другую атаку, известную как возврат к плате где вместо возврата в libc злоумышленник использует Таблица связи процедур (PLT) функции, загруженные в двоичный файл (например, система @ plt, execve @ plt, sprintf @ plt, strcpy @ plt).[3]

Рандомизация разметки адресного пространства (ASLR) делает этот тип атаки крайне маловероятным на 64-битные машины поскольку ячейки памяти функций случайны. За 32-битные системы, однако, ASLR дает небольшую пользу, поскольку для рандомизации доступно только 16 бит, и они могут быть побеждены грубая сила за считанные минуты.[4]

Смотрите также

Рекомендации

  1. ^ Solar Designer (10 августа 1997 г.). «Ошибка: обход неисполняемого стека (и исправление)».
  2. ^ Дэвид А. Уиллер (27 января 2004 г.). «Безопасный программист: противодействие переполнению буфера». IBM DeveloperWorks. Архивировано из оригинал на 2013-10-18.
  3. ^ Болезнь (13 мая 2011 г.). "Разработка эксплойта для Linux, часть 4 - обход защиты ASCII + возврат к plt" (PDF).
  4. ^ Shacham, H .; Пейдж, М .; Pfaff, B .; Goh, E.J .; Modadugu, N .; Бонех Д. (октябрь 2004 г.). «Об эффективности рандомизации адресного пространства». Материалы 11-й конференции ACM по компьютерной и коммуникационной безопасности (PDF). С. 298–307. Дои:10.1145/1030083.1030124. ISBN  1-58113-961-6.

внешняя ссылка