Jump to content

Sigreturn-ориентированное программирование

Sigreturn-ориентированное программирование ( SROP ) — это метод использования компьютерной безопасности , который позволяет злоумышленнику выполнять код при наличии таких мер безопасности, как неисполняемая память и подпись кода. [1] Впервые он был представлен на 35-м симпозиуме IEEE по безопасности и конфиденциальности в 2014 году, где получил награду за лучшую студенческую работу . [2] В этом методе используются те же основные предположения, что и в методе возвратно-ориентированного программирования (ROP): злоумышленник, управляющий стеком вызовов , например, посредством переполнения буфера стека , может влиять на поток управления программой посредством простых последовательностей инструкций, называемых гаджетами . Атака работает путем внедрения поддельной sigcontext. структуры [3] в стеке вызовов, перезаписывая исходный обратный адрес местоположением гаджета, позволяющего злоумышленнику вызвать сигретурн [4] системный вызов . [5] Часто для успешной реализации этой атаки требуется всего один гаджет. Этот гаджет может находиться в фиксированном месте, что делает эту атаку простой и эффективной, а его настройка обычно проще и портативнее, чем та, которая необходима для простой техники возвратно-ориентированного программирования . [1]

Программирование, ориентированное на Sigreturn, можно считать странной машиной , поскольку оно позволяет выполнять код за пределами исходной спецификации программы. [1]

Sigreturn-ориентированное программирование (SROP) — это метод, аналогичный возвратно-ориентированному программированию (ROP), поскольку он использует повторное использование кода для выполнения кода за пределами исходного потока управления. В этом смысле злоумышленнику необходимо иметь возможность провести атаку разрушения стека , обычно через переполнение буфера стека , чтобы перезаписать адрес возврата, содержащийся внутри стека вызовов .

Эксплойты с переключением стека

[ редактировать ]

Если используются такие механизмы, как предотвращение выполнения данных , злоумышленник не сможет просто поместить шелл-код в стек и заставить машину выполнить его, перезаписав обратный адрес. При наличии такой защиты машина не будет выполнять какой-либо код, присутствующий в областях памяти, помеченных как доступные для записи и неисполняемые. Следовательно, злоумышленнику придется повторно использовать код, уже присутствующий в памяти.

Большинство программ не содержат функций, которые позволят злоумышленнику напрямую выполнить нужное действие (например, получить доступ к оболочке ) , но необходимые инструкции часто разбросаны по памяти. [6]

Программирование, ориентированное на возврат, требует, чтобы эти последовательности инструкций, называемые гаджетами, заканчивались RET инструкция. Таким образом, злоумышленник может записать в стек последовательность адресов этих гаджетов, и как только RET инструкция в одном гаджете выполнена, поток управления перейдет к следующему гаджету в списке.

Механизм обработки сигнала

[ редактировать ]
Содержимое стека при обработке сигнала (Linux x86/64), включая структуру sigcontext

Эта атака стала возможной благодаря тому, как сигналы обрабатываются в большинстве POSIX -подобных систем. Всякий раз при доставке сигнала ядру необходимо переключить контекст на установленный обработчик сигнала. Для этого ядро ​​сохраняет текущий контекст выполнения в кадре стека. [5] [6] Структура, помещаемая в стек, представляет собой специфичный для архитектуры вариант структуры sigcontext , который содержит различные данные, составляющие содержимое регистров в момент переключения контекста. Когда выполнение обработчика сигнала завершено, sigreturn() вызывается системный вызов.

Вызов системного вызова sigreturn означает возможность легко устанавливать содержимое регистров с помощью одного гаджета, который можно легко найти в большинстве систем. [1]

Отличия от РОП

[ редактировать ]

Есть несколько факторов, которые характеризуют эксплойт SROP и отличают его от классического эксплойта возвратно-ориентированного программирования. [7]

Во-первых, ROP зависит от доступных гаджетов, которые могут сильно различаться в разных двоичных файлах , что делает цепочки гаджетов непереносимыми. Рандомизация расположения адресного пространства (ASLR) затрудняет использование гаджетов без утечки информации для получения их точного положения в памяти.

Хотя полные по Тьюрингу , существуют ROP-компиляторы, [8] обычно создать цепочку ROP нетривиально. [7]

Эксплойты SROP обычно переносятся между различными двоичными файлами с минимальными усилиями или вообще без них и позволяют легко настраивать содержимое регистров, что может быть нетривиальным или невозможным для эксплойтов ROP, если необходимые гаджеты отсутствуют. [6] Более того, SROP требует минимального количества гаджетов и позволяет создавать эффективные шеллкоды путем объединения системных вызовов. Эти гаджеты всегда присутствуют в памяти, а в некоторых случаях всегда находятся в фиксированных местах: [7]

список гаджетов для разных систем
ТЫ АСЛР Гаджет Карта памяти Фиксированное расположение памяти
Линукс i386 Да Сигретерн [вдсо]
Linux <3.11 ARM Нет Сигретерн [векторы] 0xffff0000
Linux < 3.3 x86-64 Нет системный вызов и возврат [vsycall] 0xffffffffff600000
Linux ≥ 3,3 x86-64 Да системный вызов и возврат Либк
Линукс х86-64 Да Сигретерн Либк
FreeBSD 9.2 x86-64 Нет Сигретерн 0x7ffffffff000
Mac OSX x86-64 Да Сигретерн Либк
iOS ARM Да Сигретерн Либсистема
iOS ARM Да системный вызов и возврат Либсистема

Пример гаджета, необходимого для эксплойтов SROP, всегда можно найти в области памяти VDSO в системах x86- Linux :

__kernel_sigreturn proc near:
pop     eax
mov     eax, 77h
int     80h  ; LINUX - sys_sigreturn
nop
lea     esi, [esi+0]
__kernel_sigreturn endp

В некоторых версиях ядра Linux ASLR можно отключить, установив неограниченный размер стека. [9] эффективно обходя ASLR и обеспечивая легкий доступ к гаджету, присутствующему в VDSO.

Для ядер Linux до версии 3.3 также можно найти подходящий гаджет на странице vsyscall, который представляет собой механизм для ускорения доступа к определенным системным вызовам, часто используемым устаревшими программами, и всегда находится в фиксированном месте.

Тьюринг-полнота

[ редактировать ]

Можно использовать гаджеты для записи в содержимое кадров стека, создавая тем самым самомодифицирующуюся программу . Используя этот метод, можно разработать простую виртуальную машину , которую можно использовать в качестве цели компиляции для полного по Тьюрингу языка. Пример такого подхода можно найти в статье Босмана, в которой демонстрируется построение интерпретатора языка, похожего на язык программирования Brainfuck . В языке предусмотрен счетчик программ PC, указатель памяти Pи временный регистр, используемый для 8-битного сложения. A. Это означает, что также сложные бэкдоры или запутанные атаки. могут быть разработаны [1]

Защита и смягчение последствий

[ редактировать ]

Существует ряд методов для смягчения атак SROP, основанных на рандомизации структуры адресного пространства , канареечных файлах и файлах cookie или теневых стеках .

Рандомизация макета адресного пространства

[ редактировать ]

Рандомизация расположения адресного пространства усложняет использование подходящих гаджетов, делая их местоположение непредсказуемым.

Сигнальные файлы cookie

[ редактировать ]

средство смягчения последствий SROP, называемое сигнальными файлами cookie Было предложено . Он состоит из способа проверки того, что структура sigcontext не была изменена с помощью случайного файла cookie, соединенного с помощью XOR с адресом местоположения стека, в котором он должен храниться. Таким образом, системному вызову sigreturn достаточно просто проверить наличие файла cookie в ожидаемом месте, что эффективно снижает SROP с минимальным влиянием на производительность. [1] [10]

Эмуляция Vsyscall

[ редактировать ]

В версиях ядра Linux выше 3.3 интерфейс vsyscall эмулируется, и любая попытка напрямую выполнить гаджеты на странице приведет к исключению. [11] [12]

Grsecurity — это набор патчей для ядра Linux , призванный усилить и улучшить безопасность системы. [13] Он включает в себя так называемую защиту обратного адреса (RAP), которая помогает защититься от атак с повторным использованием кода. [14]

Начиная с 2016 года, Intel разрабатывает технологию обеспечения контроля потока управления ( CET ), которая поможет смягчить и предотвратить эксплойты с переключением стека. ЦП CET работает путем реализации теневого стека в оперативной памяти, который будет содержать только адреса возврата, защищенные блоком управления памятью . [15] [16]

См. также

[ редактировать ]
  1. ^ Перейти обратно: а б с д и ж Босман, Эрик; Бос, Герберт (2014). «Формирование сигналов — возвращение к переносимому шеллкоду» (PDF) . Симпозиум IEEE 2014 по безопасности и конфиденциальности . стр. 243–358. дои : 10.1109/СП.2014.23 . ISBN  978-1-4799-4686-0 . S2CID   6153855 . Проверено 16 июня 2016 г.
  2. ^ «Наградные материалы симпозиума IEEE по безопасности и конфиденциальности 2014 г.» . IEEE-безопасность . Технический комитет по безопасности и конфиденциальности IEEE Computer Society . Проверено 17 июня 2016 г.
  3. ^ «Перекрестная ссылка Linux — sigcontext.h» .
  4. ^ «SIGRETURN(2) — страница руководства Linux» .
  5. ^ Перейти обратно: а б «Игра с сигналами: обзор Sigreturn-ориентированного программирования» . Проверено 21 июня 2016 г.
  6. ^ Перейти обратно: а б с «Программирование, ориентированное на Sigreturn, и его смягчение» . Проверено 20 июня 2016 г.
  7. ^ Перейти обратно: а б с Босман, Эрик; Бос, Герберт. «Обрамление сигналов: возвращение к переносимому шеллкоду» (PDF) .
  8. ^ «ROPC — Полный компилятор ROP по Тьюрингу (часть 1)» . 12 декабря 2013 г.
  9. ^ «CVE-2016-3672 — Ограничение стека больше не отключает ASLR» . Проверено 20 июня 2016 г.
  10. ^ «Программирование, ориентированное на Sigreturn, и его смягчение» . Проверено 20 июня 2016 г.
  11. ^ «О vsyscalls и vDSO» . Проверено 20 июня 2016 г.
  12. ^ «Hack.lu 2015 — Stackstuff 150: Почему и как работает эмуляция vsyscall» . Проверено 20 июня 2016 г.
  13. ^ «Безопасность ядра Linux (SELinux против AppArmor против Grsecurity)» .
  14. ^ «РЭП: РИП РОП» (PDF) . Проверено 20 июня 2016 г.
  15. ^ «RIP ROP: хитрый заговор Intel по устранению эксплойтов с переключением стека на уровне процессора» . Регистр . Проверено 20 июня 2016 г.
  16. ^ «Предварительный просмотр технологии Control-Flow-Enforcement» (PDF) .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 842d6e2ab19556898a2e6c0c4d3dad41__1720991340
URL1:https://arc.ask3.ru/arc/aa/84/41/842d6e2ab19556898a2e6c0c4d3dad41.html
Заголовок, (Title) документа по адресу, URL1:
Sigreturn-oriented programming - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)