Возвратно-ориентированное программирование
Возвратно-ориентированное программирование ( ROP ) — это метод использования компьютерной безопасности , который позволяет злоумышленнику выполнять код при наличии средств защиты. [ 1 ] [ 2 ] такие как защита исполняемого пространства и подписание кода . [ 3 ]
В этом методе злоумышленник получает контроль над стеком вызовов , чтобы перехватить поток управления программой , а затем выполняет тщательно выбранные последовательности машинных инструкций , которые уже присутствуют в памяти машины, называемые «гаджетами». [ 4 ] [ номер 1 ] Каждый гаджет обычно заканчивается инструкцией возврата и находится в подпрограмме существующей программы и/или кода общей библиотеки. [ номер 1 ] Объединенные вместе, эти гаджеты позволяют злоумышленнику выполнять произвольные операции на машине, используя защиту, предотвращающую более простые атаки.
Фон
[ редактировать ]
DrawLine
был вызван DrawSquare
. Обратите внимание, что на этой диаграмме стек растет вверх. Программирование, ориентированное на возврат, — это расширенная версия атаки на разрушение стека . Как правило, эти типы атак возникают, когда злоумышленник манипулирует стеком вызовов , воспользовавшись ошибкой в программе, часто переполнением буфера . При переполнении буфера функция, которая не выполняет правильную проверку границ перед сохранением предоставленных пользователем данных в памяти, примет больше входных данных, чем может сохранить должным образом. Если данные записываются в стек, лишние данные могут переполнить пространство, выделенное для переменных функции (например, «локальные значения» на диаграмме стека справа) и перезаписать адрес возврата. Этот адрес позже будет использоваться функцией для перенаправления потока управления обратно вызывающему объекту . Если он был перезаписан, поток управления будет перенаправлен в место, указанное новым адресом возврата.
При стандартной атаке переполнения буфера злоумышленник просто записывает код атаки («полезную нагрузку») в стек, а затем перезаписывает обратный адрес местоположением этих вновь написанных инструкций. До конца 1990-х годов основные операционные системы не предлагали никакой защиты от этих атак; Microsoft Windows не обеспечивала защиту от переполнения буфера до 2004 года. [ 5 ] В конце концов, операционные системы начали бороться с эксплуатацией ошибок переполнения буфера, помечая память, в которую записываются данные, как неисполняемую — метод, известный как защита исполняемого пространства . Если эта функция включена, машина будет отказываться выполнять любой код, расположенный в областях памяти, доступных для записи пользователем, не позволяя злоумышленнику поместить полезную нагрузку в стек и перейти к нему посредством перезаписи адреса возврата. Позже стала доступна аппаратная поддержка для усиления этой защиты.
При предотвращении выполнения данных злоумышленник не может напрямую выполнять инструкции, записанные в буфер, поскольку раздел памяти буфера помечен как неисполняемый. Чтобы обойти эту защиту, программная атака, ориентированная на возврат, не внедряет вредоносные инструкции, а скорее использует последовательности инструкций, уже присутствующие в исполняемой памяти, называемые «гаджетами», путем манипулирования адресами возврата. Типичная реализация предотвращения выполнения данных не может защитить от этой атаки, поскольку злоумышленник не выполнил напрямую вредоносный код, а скорее объединил последовательности «хороших» инструкций, изменив сохраненные адреса возврата; поэтому используемый код будет помечен как исполняемый.
Техника возврата в библиотеку
[ редактировать ]Широкое распространение предотвращения выполнения данных сделало традиционные уязвимости переполнения буфера трудными или невозможными для использования описанным выше способом. Вместо этого злоумышленник был ограничен кодом, уже находящимся в памяти, помеченным как исполняемый, например, самим программным кодом и любыми связанными общими библиотеками . Поскольку разделяемые библиотеки, такие как libc , часто содержат подпрограммы для выполнения системных вызовов и другие функции, потенциально полезные для злоумышленника, они являются наиболее вероятными кандидатами на поиск кода для организации атаки.
При атаке с возвратом в библиотеку злоумышленник перехватывает поток управления программой, используя уязвимость переполнения буфера, как описано выше. Вместо того, чтобы пытаться записать полезную нагрузку атаки в стек, злоумышленник выбирает доступную библиотечную функцию и перезаписывает адрес возврата местом ее записи. Дальнейшие местоположения стека затем перезаписываются в соответствии с применимыми соглашениями о вызовах , чтобы тщательно передать правильные параметры функции, чтобы она выполняла функции, полезные для злоумышленника. Эта техника была впервые представлена компанией Solar Designer в 1997 году. [ 6 ] и позже был расширен до неограниченной цепочки вызовов функций. [ 7 ]
Заимствованные фрагменты кода
[ редактировать ]Появление 64-битных процессоров x86 повлекло за собой изменение соглашения о вызове подпрограмм, которое требовало, чтобы первые несколько аргументов функции передавались в регистрах, а не в стеке. Это означало, что злоумышленник больше не мог настроить вызов библиотечной функции с нужными аргументами, просто манипулируя стеком вызовов с помощью эксплойта переполнения буфера. Разработчики общих библиотек также начали удалять или ограничивать библиотечные функции, которые выполняли действия, особенно полезные для злоумышленника, например оболочки системных вызовов . В результате успешно провести атаку с возвратом в библиотеку стало гораздо труднее.
Следующей эволюцией стала атака, в которой использовались фрагменты библиотечных функций, а не целые функции, для использования уязвимостей переполнения буфера на машинах с защитой от более простых атак. [ 8 ] Этот метод ищет функции, содержащие последовательности инструкций, которые извлекают значения из стека в регистры. Тщательный выбор этих кодовых последовательностей позволяет злоумышленнику поместить подходящие значения в соответствующие регистры для выполнения вызова функции в соответствии с новым соглашением о вызовах. Остальная часть атаки продолжается как атака с возвратом в библиотеку.
Атаки
[ редактировать ]Программирование, ориентированное на возврат, основано на подходе заимствованных фрагментов кода и расширяет его, предоставляя полную по Тьюрингу злоумышленнику функциональность, включая циклы и условные переходы . [ 9 ] [ 10 ] Другими словами, возвратно-ориентированное программирование предоставляет полнофункциональный «язык», который злоумышленник может использовать, чтобы заставить скомпрометированную машину выполнить любую желаемую операцию. Ховав Шахам опубликовал эту технику в 2007 году. [ 11 ] и продемонстрировал, как все важные программные конструкции могут быть смоделированы с использованием возвратно-ориентированного программирования для целевого приложения, связанного со стандартной библиотекой C и содержащего уязвимость переполнения буфера.
Программная атака, ориентированная на возврат, превосходит другие обсуждаемые типы атак как по выразительной силе, так и по устойчивости к защитным мерам. Ни один из упомянутых выше методов противодействия эксплуатации, включая полное удаление потенциально опасных функций из общих библиотек, не эффективен против атаки программирования, ориентированной на возврат.
На x86-архитектуре
[ редактировать ]Хотя атаки с возвратно-ориентированным программированием могут выполняться на различных архитектурах, [ 11 ] Статья Шачама и большая часть последующих работ посвящены архитектуре Intel x86 . Архитектура x86 представляет собой набор инструкций CISC переменной длины . В возвратно-ориентированном программировании на x86 используется тот факт, что набор инструкций очень «плотный», то есть любая случайная последовательность байтов может быть интерпретирована как некоторый допустимый набор инструкций x86.
Таким образом, можно найти код операции , который изменяет поток управления, в первую очередь инструкцию возврата (0xC3), а затем просмотреть двоичный файл в поисках предыдущих байтов, которые образуют потенциально полезные инструкции. Эти наборы «гаджетов» инструкций затем можно объединить в цепочку, перезаписав адрес возврата с помощью эксплойта переполнения буфера адресом первой инструкции первого гаджета. Затем первый адрес последующих гаджетов последовательно записывается в стек. По завершении первого гаджета будет выполнена инструкция возврата, которая вытащит адрес следующего гаджета из стека и перейдет к нему. По завершении этого гаджета цепочка продолжается третьим и так далее. Объединяя небольшие последовательности инструкций, злоумышленник может создавать произвольное поведение программы на основе уже существующего библиотечного кода. Шачем утверждает, что при наличии любого достаточно большого количества кода (включая, помимо прочего, стандартную библиотеку C), будет существовать достаточно гаджетов для полной по Тьюрингу функциональности. [ 11 ]
Разработан автоматизированный инструмент, помогающий автоматизировать процесс обнаружения гаджетов и построения атаки на бинарный файл. [ 12 ] Этот инструмент, известный как ROPgadget, просматривает двоичный файл в поисках потенциально полезных гаджетов и пытается собрать их в полезную нагрузку для атаки, которая создает оболочку для приема произвольных команд от злоумышленника.
О рандомизации структуры адресного пространства
[ редактировать ]также Рандомизация структуры адресного пространства имеет уязвимости. Согласно статье Шахама и др., [ 13 ] ASLR в 32-битных архитектурах ограничен количеством бит, доступных для рандомизации адреса. Только 16 из 32 битов адреса доступны для рандомизации, а 16 бит рандомизации адреса можно преодолеть с помощью грубой атаки за считанные минуты. 64-битные архитектуры более надежны: 40 из 64 бит доступны для рандомизации. Атака методом перебора для 40-битной рандомизации возможна, но вряд ли останется незамеченной. [ нужна ссылка ] Помимо атак методом перебора, существуют методы устранения рандомизации .
Даже при идеальной рандомизации, если произойдет какая-либо утечка информации о содержимом памяти, это поможет вычислить базовый адрес, например, общей библиотеки во время выполнения. [ 14 ]
Без использования инструкции возврата
[ редактировать ]Согласно статье Чековея и др., [ 15 ] на архитектурах x86 и ARM можно выполнять возвратно-ориентированное программирование без использования инструкции возврата (0xC3 на x86). Вместо этого они использовали тщательно созданные последовательности инструкций, которые уже существуют в памяти машины и ведут себя как инструкция возврата. Инструкция возврата имеет два эффекта: во-первых, она считывает четырехбайтовое значение в верхней части стека и устанавливает указатель инструкции на это значение, а во-вторых, она увеличивает значение указателя стека на четыре (эквивалент операции извлечения). . В архитектуре x86 последовательности инструкций jmp и pop могут действовать как инструкция возврата. В ARM последовательности инструкций загрузки и перехода могут действовать как инструкция возврата.
Поскольку этот новый подход не использует инструкцию возврата, он имеет негативные последствия для защиты. Когда защитная программа проверяет не только несколько возвратов, но и несколько инструкций перехода, эта атака может быть обнаружена.
Защита
[ редактировать ]G-Free
[ редактировать ]Технику G-Free разработали Каан Онарлиоглу, Лейла Бильге, Андреа Ланци, Давиде Бальзаротти и Энгин Кирда. Это практическое решение против любой возможной формы возвратно-ориентированного программирования. Решение устраняет все невыровненные инструкции свободного перехода (инструкции типа RET или CALL, которые злоумышленники могут использовать для изменения потока управления) внутри двоичного исполняемого файла и защищает инструкции свободного перехода от использования злоумышленником. Способ, которым G-Free защищает обратный адрес, аналогичен канарейке XOR , реализованной StackGuard. Кроме того, он проверяет подлинность вызовов функций, добавляя блок проверки. Если ожидаемый результат не найден, G-Free вызывает сбой приложения. [ 16 ]
Рандомизация макета адресного пространства
[ редактировать ]Был предложен ряд методов предотвращения атак, основанных на возвратно-ориентированном программировании. [ 17 ] Большинство из них полагаются на рандомизацию местоположения программного и библиотечного кода, поэтому злоумышленник не может точно предсказать расположение инструкций, которые могут быть полезны в гаджетах, и, следовательно, не может организовать успешную цепочку атак с возвратно-ориентированным программированием. Одна из довольно распространенных реализаций этого метода — рандомизация расположения адресного пространства (ASLR) — загружает разделяемые библиотеки в разные области памяти при каждой загрузке программы. Несмотря на то, что ASLR широко используется в современных операционных системах, он уязвим для атак с утечкой информации и других подходов к определению адреса любой известной библиотечной функции в памяти. Если злоумышленник сможет успешно определить местоположение одной известной инструкции, можно будет определить положение всех остальных и можно будет построить атаку с обратным программированием.
Этот подход рандомизации можно развивать дальше, перемещая все инструкции и/или другое состояние программы (регистры и объекты стека) программы отдельно, а не только местоположения библиотеки. [ 18 ] [ 19 ] [ 20 ] Это требует обширной поддержки во время выполнения, такой как программный динамический транслятор, чтобы собрать воедино рандомизированные инструкции во время выполнения. Этот метод успешно затрудняет поиск и использование гаджетов, но сопряжен со значительными накладными расходами.
Другой подход, использованный kBouncer, модифицирует операционную систему, чтобы убедиться, что инструкции возврата действительно перенаправляют поток управления обратно в место, следующее сразу за инструкцией вызова. Это предотвращает объединение гаджетов в цепочку, но приводит к значительному снижению производительности. [ нужны разъяснения ] и неэффективен против атак программирования, ориентированных на переходы, которые изменяют переходы и другие инструкции, изменяющие поток управления, вместо возврата. [ 21 ]
Рандомизация двоичного кода
[ редактировать ]Некоторые современные системы, такие как Cloud Lambda (FaaS) и удаленные обновления IoT, используют облачную инфраструктуру для оперативной компиляции перед развертыванием программного обеспечения. Техника, которая вносит изменения в каждый экземпляр исполняемого программного обеспечения, может значительно повысить устойчивость программного обеспечения к атакам ROP. Брутфорс Cloud Lambda может привести к атаке нескольких экземпляров рандомизированного программного обеспечения, что снижает эффективность атаки. Асаф Шелли опубликовал эту технику в 2017 году. [ 22 ] и продемонстрировал использование двоичной рандомизации в системе обновления программного обеспечения. Для каждого обновленного устройства облачная служба вносила изменения в код, выполняла онлайн-компиляцию и отправляла двоичный файл. Этот метод очень эффективен, поскольку атаки ROP основаны на знании внутренней структуры программного обеспечения. Недостаток этого метода заключается в том, что программное обеспечение никогда не тестируется полностью перед его развертыванием, поскольку невозможно протестировать все варианты рандомизированного программного обеспечения. Это означает, что многие методы двоичной рандомизации применимы для сетевых интерфейсов и системного программирования и менее рекомендуются для сложных алгоритмов.
СЕХОП
[ редактировать ]Защита от перезаписи структурированного обработчика исключений — это функция Windows, которая защищает от наиболее распространенных атак переполнения стека, особенно от атак на структурированный обработчик исключений.
Против атак на поток управления
[ редактировать ]По мере распространения небольших встроенных систем в связи с распространением Интернета вещей , потребность в защите таких встроенных систем также возрастает. Используя управление доступом к памяти на основе инструкций (IB-MAC), реализованное аппаратно, можно защитить недорогие встроенные системы от вредоносных атак на поток управления и переполнения стека. Защита может быть обеспечена путем разделения стека данных и стека возврата. Однако из-за отсутствия блока управления памятью в некоторых встраиваемых системах аппаратное решение невозможно применить ко всем встраиваемым системам. [ 23 ]
Против возвратно-ориентированных руткитов
[ редактировать ]В 2010 году Джинку Ли и др. предложенный [ 24 ] что соответствующим образом модифицированный компилятор может устранить «гаджеты», ориентированные на возврат, заменив каждый call f
с последовательностью инструкций
и каждый pushl $index
; jmp f
ret
с последовательностью инструкций
, где popl %reg
; jmp table(%reg)
table
представляет собой неизменяемую таблицу всех «законных» обратных адресов в программе и index
представляет определенный индекс в этой таблице. [ 24 ] : 5–6 Это предотвращает создание гаджета, ориентированного на возврат, который возвращает прямо из конца функции на произвольный адрес в середине другой функции; вместо этого гаджеты могут возвращаться только на «законные» адреса возврата, что резко увеличивает сложность создания полезных гаджетов. Ли и др. утверждал, что «наша техника косвенного возврата по существу де-обобщает возвратно-ориентированное программирование обратно к старому стилю возврата в-libc». [ 24 ] Их компилятор для проверки концепции включал в себя этап оптимизации «глазка» для работы с «определенными машинными инструкциями, которые содержат код операции возврата в своих кодах операций или непосредственных операндах». [ 24 ] такой как movl $0xC3, %eax
.
Коды аутентификации указателя (PAC)
[ редактировать ]Архитектура ARMv8.3-A представляет новую функцию на аппаратном уровне, которая использует неиспользуемые биты в адресном пространстве указателя для криптографической подписи адресов указателей с использованием специально разработанного настраиваемого блочного шифра. [ 25 ] [ 26 ] который подписывает желаемое значение (обычно адрес возврата) в сочетании со значением «локального контекста» (например, указателем стека).
Перед выполнением конфиденциальной операции (т. е. возвратом к сохраненному указателю) подпись можно проверить на предмет обнаружения подделки или использования в неправильном контексте (например, используя сохраненный обратный адрес из контекста батута эксплойта).
Примечательно, что чипы Apple A12 , используемые в iPhone, обновлены до ARMv8.3 и используют PAC. Linux получил поддержку аутентификации указателей в ядре в версии 5.7, выпущенной в 2020 году; поддержка приложений пользовательского пространства была добавлена в 2018 году. [ 27 ]
В 2022 году исследователи из Массачусетского технологического института опубликовали информацию об атаке на PAC по побочному каналу, получившую название PACMAN. [ 28 ]
Идентификация целевой ветви (BTI)
[ редактировать ]Архитектура ARMv8.5-A представляет еще одну новую функцию на аппаратном уровне, которая явно определяет допустимые цели инструкций перехода. Компилятор вставляет специальную инструкцию с кодом операции с именем «BTI» в каждую ожидаемую точку выполнения инструкций косвенного ветвления. Эти идентифицированные адресаты ветвей обычно включают точки входа в функцию и блоки кода переключения/регистра.
Инструкции BTI используются на страницах памяти кода, которые помечены компилятором и компоновщиком как «защищенные». Любая инструкция косвенного ветвления на защищенной странице по любой инструкции, кроме BTI, генерирует ошибку.
Идентифицированные места назначения, куда вставляется инструкция BTI, составляют примерно 1% всех инструкций в среднем коде приложения. Следовательно, использование BTI увеличивает размер кода на ту же величину. [ 29 ]
Гаджеты, используемые при ROP-атаке, расположены в любом месте кода приложения. Поэтому в среднем 99% гаджетов запускаются с инструкцией, не являющейся БТИ. В результате переход к этим устройствам приводит к сбою. Учитывая, что ROP-атака осуществляется с использованием цепочки из нескольких гаджетов, вероятность того, что все гаджеты в цепочке входят в 1%, начинающийся с BTI, очень мала.
PAC и BTI являются взаимодополняющими механизмами для предотвращения несанкционированного внедрения кода с использованием программных атак, ориентированных на возврат и переход. В то время как PAC фокусируется на источнике операции ветвления (подписанный указатель), BTI фокусируется на месте назначения ветки. [ 30 ]
См. также
[ редактировать ]- Программирование, ориентированное на слепой возврат
- Целочисленное переполнение
- JIT-распыление
- Sigreturn-ориентированное программирование (SROP)
- Многопоточный код . Возвратно-ориентированное программирование — это новое открытие многопоточного кода.
Примечания
[ редактировать ]- ^ Перейти обратно: а б Некоторые авторы используют термин «гаджет» несколько по-другому и называют его простыми фрагментами программной логики или короткими последовательностями кодов операций, созданными для выполнения некоторого желаемого действия. [ 31 ]
Ссылки
[ редактировать ]- ^ Васкес, Уго (01 октября 2007 г.). «Взлом безопасной платформы Check Point» (PDF) . Пентест . Барселона, Испания: Консультанты по пентесту. п. 219.
- ^ «Тема: Множественные переполнения буфера CheckPoint Secure Platform» . Группа пользователей Check Point .
- ^ Шахам, Ховав; Бьюкенен, Эрик; Ремер, Райан; Сэвидж, Стефан. «Возвратно-ориентированное программирование: эксплойты без внедрения кода» . Проверено 12 августа 2009 г.
- ^ Бьюкенен, Э.; Ремер, Р.; Шахам, Х.; Сэвидж, С. (октябрь 2008 г.). «Когда хорошие инструкции становятся плохими: обобщение возвратно-ориентированного программирования на RISC» (PDF) . Материалы 15-й конференции ACM «Компьютерная и коммуникационная безопасность – CCS '08» . стр. 27–38. дои : 10.1145/1455770.1455776 . ISBN 978-1-59593-810-7 . S2CID 11176570 .
- ^ Предотвращение выполнения данных Microsoft Windows XP SP2
- ^ Solar Designer, Эксплойты Return-into-lib(c) , Bugtraq
- ^ Нергал, Phrack 58 Статья 4, эксплойты возврата в lib (c)
- ^ Себастьян Крамер, Эксплойты переполнения буфера x86-64 и техника использования заимствованных фрагментов кода , 28 сентября 2005 г.
- ^ Абади, Миннесота; Будиу, М.; Эрлингссон, У.; Лигатти, Дж. (ноябрь 2005 г.). «Целостность потока управления: принципы, реализации и приложения». Материалы 12-й конференции ACM «Компьютерная и коммуникационная безопасность – CCS '05» . стр. 340–353. дои : 10.1145/1102120.1102165 . ISBN 1-59593-226-7 . S2CID 3339874 .
- ^ Абади, Миннесота; Будиу, М.; Эрлингссон, У.; Лигатти, Дж. (октябрь 2009 г.). «Принципы, реализации и приложения целостности потока управления». Транзакции ACM по информационной и системной безопасности . 13 :1–40. дои : 10.1145/1609956.1609960 . S2CID 207175177 .
- ^ Перейти обратно: а б с Шахам, Х. (октябрь 2007 г.). «Геометрия невинной плоти на кости: возврат в libc без вызовов функций (на x86)». Материалы 14-й конференции ACM «Компьютерная и коммуникационная безопасность – CCS '07» . стр. 552–561. дои : 10.1145/1315245.1315313 . ISBN 978-1-59593-703-2 . S2CID 11639591 .
- ^ Джонатан Салван и Аллан Вирт, ROPgadget - Поиск гаджетов и автор-ропер
- ^ [Шачам и др., 2004] Ховав Шачам, Мэтью Пейдж, Бен Пфафф, Ю-Джин Го, Нагендра Модадугу и Дэн Бонех. Об эффективности рандомизации адресного пространства. В материалах 11-й конференции ACM по компьютерной и коммуникационной безопасности (CCS), 2004 г.
- ^ [Беннетт и др., 2013] Джеймс Беннетт, Ичонг Линь и Туфик Хак. Число зверя, 2013. https://www.fireeye.com/blog/threat-research/2013/02/the-number-of-the-beast.html .
- ^ Чековей, С., Дави, Л., Дмитриенко, А., Садеги, А.-Р., Шачам, Х., Винэнди, М. 2010. Возвратно-ориентированное программирование без возвратов. В материалах CCS 2010, А. Керомитис и В. Шматиков, ред. АСМ Пресс , 559–572.
- ^ Онарлиоглу, К., Бильге, Л., Ланци, А., Бальзаротти, Д., Кирда, Э. 2010. G-Free: победа над возвратно-ориентированным программированием с помощью двоичных файлов без гаджетов. В материалах ACSAC 2010, М. Франц и Дж. МакДермотт, ред. ACM Press , 49–58.
- ^ Сковира, Р.; Кастил, К.; Охрави, Х.; Зельдович, Н.; Стрейлейн, В. (октябрь 2013 г.). «Систематический анализ защиты от возвратно-ориентированного программирования» (PDF) . Исследования в области атак, вторжений и защиты . Конспекты лекций по информатике. Том. 8145. стр. 82–102. дои : 10.1007/978-3-642-41284-4_5 . ISBN 978-3-642-41283-7 . Архивировано из оригинала (PDF) 22 февраля 2014 г.
- ^ Венкат, Ашиш; Шамасундер, Шрисканда; Шахам, Ховав; Таллсен, Дин М. (01 января 2016 г.). «ХИПСтР». Материалы двадцать первой международной конференции по архитектурной поддержке языков программирования и операционных систем . АСПЛОС '16. Нью-Йорк, штат Нью-Йорк, США: ACM. стр. 727–741. дои : 10.1145/2872362.2872408 . ISBN 9781450340915 . S2CID 7853786 .
- ^ Хизер, Дж.; Нгуен-Туонг, А.; Ко, М.; Холл, М.; Дэвидсон, JW (май 2012 г.). «ILR: Куда делись мои гаджеты?». Симпозиум IEEE 2012 по безопасности и конфиденциальности . стр. 571–585. дои : 10.1109/СП.2012.39 . ISBN 978-1-4673-1244-8 . S2CID 15696223 .
- ^ США 9135435 , Венкат, Ашиш; Кришнасвами, Арвинд и Ямада, Коичи и др., «Перемещение состояния программы, управляемое двоичным транслятором», опубликовано 15 сентября 2015 г., передано корпорации Intel.
- ^ Василис Паппас. kBouncer: эффективное и прозрачное смягчение последствий ROP . Апрель 2012.
- ^ Заявка США 2019347385 , Шелли, Асаф, «Методы и системы безопасности путем мутации кода», опубликованная 14 ноября 2019 г. , отклонена.
- ^ Франсильон, А., Перито, Д., Кастеллучча, К. 2009. Защита встроенных систем от атак на поток управления. В Proceedings of SecuCode 2009, С. Лахмунд и К. Шефер, ред. ACM Press , 19–26.
- ^ Перейти обратно: а б с д Ли, Джинку; Ван, Чжи; Цзян, Сюсянь; Грейс, Майк; Бахрам, Сина. Победа над возвратно-ориентированными руткитами с помощью «безвозвратных» ядер. В Proceedings of EuroSys 2010 под редакцией Г. Мюллера. ACM Press , 195–208.
- ^ Аванци, Роберто (2016). Семейство блочных шифров QARMA (PDF) . Транзакции IACR по симметричной криптологии (ToSC) . Том. 17 (опубликовано 8 марта 2017 г.). стр. 4–44. doi : 10.13154/tosc.v2017.i1.4-44 . Архивировано из оригинала (PDF) 13 мая 2020 г.
- ^ Безопасность продуктов Qualcomm. «Аутентификация указателя на ARMv8.3» (PDF) . Qualcomm Technologies Inc. Архивировано (PDF) из оригинала 6 июня 2020 г. Проверено 16 июня 2020 г.
Поэтому мы разработали QARMA, новое семейство облегченных настраиваемых блочных шифров.
- ^ «Linux 5.7 для 64-битной версии ARM обеспечивает проверку подлинности указателя ядра и мониторы активности — Phoronix» . www.phoronix.com . Проверено 31 марта 2020 г.
- ^ Равичандран, Джозеф; На, Вон Тэк; Лэнг, Джей; Ян, Мэнцзя (июнь 2022 г.). «PACMAN: атака на аутентификацию указателя ARM с помощью спекулятивного выполнения». Материалы 49-го ежегодного международного симпозиума по компьютерной архитектуре . Ассоциация вычислительной техники. дои : 10.1145/3470496.3527429 . hdl : 1721.1/146470 .
- ^ «Применение методов PAC и BTI к реальному коду» . Developer.arm.com . Проверено 4 февраля 2024 г.
- ^ «Целостность потока управления, активная защита от вредоносного ПО в системах Arm64» (PDF) . sipearl.com . Проверено 4 февраля 2024 г.
- ^ Ча, Санг Киль; Пак, Брайан; Брамли, Дэвид ; Липтон, Ричард Джей (8 октября 2010 г.) [04 октября 2010 г.]. Платформонезависимые программы (PDF) . Материалы 17-й конференции ACM по компьютерной и коммуникационной безопасности (CCS'10). Чикаго, Иллинойс, США: Университет Карнеги-Меллона , Питтсбург, Пенсильвания, США / Технологический институт Джорджии , Атланта, Джорджия, США. стр. 547–558. дои : 10.1145/1866307.1866369 . ISBN 978-1-4503-0244-9 . Архивировано (PDF) из оригинала 26 мая 2022 г. Проверено 26 мая 2022 г. [1] (12 страниц) (См. также: [2] ) (Примечание. Термин «гаджет» используется для обозначения фрагментов программной логики, в данном случае разделенных на заголовок и тело гаджета .)
Внешние ссылки
[ редактировать ]- «Учёные-компьютерщики захватывают электронную машину для голосования с помощью новой техники программирования» . Наука Дейли. 11 августа 2009 г.
- «Демо-видео атаки на возвратно-ориентированное программирование» . Ютуб . [ мертвая ссылка на YouTube ]
- AntiJOP: программа, удаляющая уязвимости JOP/ROP из кода ассемблера.