Атака с возвратом в libc
Эта статья нуждается в дополнительных цитатах для проверки . ( апрель 2009 г. ) |
Атака «возврата в libc» — это атака на компьютерную безопасность , обычно начинающаяся с переполнения буфера подпрограммы , при котором адрес возврата в стеке вызовов заменяется адресом подпрограммы, которая уже присутствует в исполняемой памяти процесса , минуя функция no-execute bit (если имеется) и избавляет злоумышленника от необходимости внедрять собственный код. Первый пример этой атаки в реальной жизни был предоставлен Александром Песляком в списке рассылки Bugtraq в 1997 году. [1]
В POSIX -совместимых операционных системах стандартная библиотека C (" libc
") обычно используется для обеспечения стандартной среды выполнения программ, написанных на языке программирования C. Хотя злоумышленник может заставить код вернуться куда угодно, libc
является наиболее вероятной целью, поскольку она почти всегда связана с программой и предоставляет злоумышленнику полезные вызовы (например, system
функция, используемая для выполнения команд оболочки).
Защита от атак возврата в libc
[ редактировать ]Неисполняемый стек может предотвратить некоторую эксплуатацию переполнения буфера, однако он не может предотвратить атаку return-to-libc , поскольку при атаке return-to-libc используется только существующий исполняемый код. С другой стороны, эти атаки могут вызывать только уже существующие функции. Защита от разрушения стека может предотвратить или затруднить эксплуатацию, поскольку она может обнаружить повреждение стека и, возможно, очистить скомпрометированный сегмент.
« Защита ASCII » — это метод, который можно использовать для предотвращения такого рода атак. При бронировании ASCII адреса всех системных библиотек (например, libc) содержат нулевой байт ( 0x00
). Обычно это делается путем размещения их в первых 0x01010101
байт памяти (несколько страниц размером более 16 МБ, получивших название «область брони ASCII»), поскольку каждый адрес до (но не включая) этого значения содержит хотя бы один NULL-байт. Это делает невозможным размещение кода, содержащего эти адреса, с помощью функций манипулирования строками, таких как strcpy()
. Однако этот метод не работает, если у злоумышленника есть способ переполнить стек NULL-байтами. Если программа слишком велика и не помещается в первые 16 МБ , защита может быть неполной. [2] Этот метод аналогичен другой атаке, известной как return-to-plt , где вместо возврата в libc злоумышленник использует функции таблицы связей процедур (PLT), загруженные в позиционно-независимый код (например, system@plt, execve@plt, sprintf@plt, strcpy@plt
). [3]
Рандомизация расположения адресного пространства (ASLR) делает этот тип атаки крайне маловероятным для успеха на 64-битных машинах, поскольку расположение функций в памяти случайно. Однако для 32-битных систем ASLR дает мало пользы, поскольку для рандомизации доступны только 16 бит, и их можно победить перебором за считанные минуты. [4]
См. также
[ редактировать ]- Переполнение буфера
- Переполнение буфера стека
- Защита от взлома стека
- Нет бита eXecute (NX)
- Рандомизация макета адресного пространства
- Возвратно-ориентированное программирование
- Гаджет (последовательность машинных инструкций)
- Непреднамеренные инструкции
Ссылки
[ редактировать ]- ^ Солнечный дизайнер (10 августа 1997 г.). «Bugtraq: обход неисполняемого стека (и исправление)» .
- ^ Дэвид А. Уиллер (27 января 2004 г.). «Безопасный программист: Противодействие переполнению буфера» . IBM DeveloperWorks. Архивировано из оригинала 18 октября 2013 г.
- ^ Болезнь (13 мая 2011 г.). «Разработка эксплойта Linux, часть 4 — обход брони ASCII + возврат к plt» (PDF) .
- ^ Шахам, Х.; Пейдж, М.; Пфафф, Б.; Гох, Э.Дж.; Модадугу, Н.; Боне, Д. (октябрь 2004 г.). «Об эффективности рандомизации адресного пространства». Материалы 11-й конференции ACM по компьютерной и коммуникационной безопасности (PDF) . стр. 298–307. дои : 10.1145/1030083.1030124 . ISBN 1-58113-961-6 . S2CID 5864467 .
Внешние ссылки
[ редактировать ]- Обход неисполняемого стека во время эксплуатации с использованием возврата в libc от c0ntex по адресу css.csail.mit.edu