C ++ Coroutines, подверженные атаке с повторным использованием кода, несмотря на целостность потока управления

CFOP: угон C ++ Coroutines. Кредит: Cispa

Атака с использованием кода, называемая программированием, ориентированным на кадр, способна использовать C ++ Coroutines в трех основных компиляторах, а именно Clang/LLVM, GCC и MSVC. CFOP даже преуспевает в средах, которые защищены целостностью потока управления (CFI), выявляя соответствующие пробелы в 15 из этих схем защиты.

Вместо того, чтобы вводить новый код, цепочки CFOP вместе существующие функции, достигая произвольного выполнения кода после повреждения структур межполучительной памяти. Эта новая методика эксплуатации была обнаружена исследователями в Центре информационной безопасности Cispa Helmholtz, которые были первыми, кто изучал C ++ Coroutines с точки зрения безопасности.

Разработав новую атаку, повторную атаку кода, исследователи Cispa Marcos Sanchez Bajo и профессор доктор Кристиан Россоу продемонстрировали, что все существующие реализации C ++ Coroutines могут быть использованы, чтобы обходить современные защиты CFI как в Linux, так и в Windows. Называется программирование, ориентированное на кадр (CFOP), атака приводит к повреждению памяти кучи, позволяя злоумышленникам манипулировать данными и предполагать полный контроль над приложениями.

Относительно недавнее дополнение к C ++, Coroutines уже присутствует в более чем 130 уникальных репозиториях GitHub. «Они используются для паузы и возобновления функций, – объясняет Баджо, – что очень полезно для асинхронного программирования, например, на серверах, базах данных и веб -браузерах».

Соединение функций C ++ Coroutine к повреждению памяти кучи

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

В CFOP целые coroutines C ++ и другие существующие функции используются для создания атаки с повторным кодом, как объясняет Баджо: «С атаками с кодом в целом, злоумышленники принимают фрагменты кода, которые в любом случае принадлежат к приложению, так что не вводится новое код. Затем они формируют цепочки этих кода, чтобы управлять по потоку программы, но не подходит для проходов, а не соблюдает, а не в одновременном потоке, а не в обходах, а не в обходах. И создавая цепи, вы должны выполнять полные функции Coroutine и подключить их умными способами ».

После того, как защита CFI обходится путем захвата функции CORUTINE таким образом, любая другая существующая функция может быть представлена в атаку с использованием кода.

Схемы CFI не могут защитить C ++ Coroutines

Представленные для защиты от атак с кодом, схемы CFI гарантируют, что наблюдается правильный поток выполнения программы. Языки программирования, однако, динамически развиваются, в то время как схемы CFI защищают только парадигмы программирования, которые присутствовали во время их создания, как отмечает Баджо. «Основная проблема с CFI заключается в том, что эта защита является статичной во времени, а это означает, что она охватывает только возможности языка программирования, как есть. Если новые функции введены в язык программирования позже, CFI не распознает их и не может иметь дело с ними, потому что он был создан на основе более старой версии языка программирования».

В их изучатьБаджо и Россоу обнаружили, что только 7 из 15 схем CFI, которые они рассмотрели изначально, были совместимы с Coroutines. Из этих семи только два (IBT и контрольный охрану потока) обеспечили частичную защиту от эксплуатации кораток, в то время как оставшиеся пять не предоставили ни одного. «В конце концов, – говорит Баджо, – мы смогли обойти их всех. С CFOP вы все равно можете делать все возможное, что было возможным до CFI».

Исправление CFOP – это структурная проблема

Тот факт, что C ++ Coroutins наслаждаются увеличением популярности, усугубляет потенциальный охват CFOP. Баджо говорит: «Коратики были введены в C ++ в 2020 году, и с тех пор разработчики используют их все больше и больше. К сожалению, мы обнаружили, что у кораток есть определенные структуры в памяти, которые могут быть нацелены на злоумышленники. Насколько нам известно, это еще не использовалось в реальной жизни».

По сути, CFOP возможен, потому что три основных компилятора внедряют C ++ Coroutines таким образом, чтобы сделать их структурно уязвимыми. Баджо говорит: «Смягчение этой методики эксплуатации не так просто, как исправление кода – это структурная проблема, и вам нужно переосмыслить, как работает приложение внутренне».

Bajo и Rossow разработали успешные альтернативы реализации для C ++ Coroutines и сообщили об этих смягчениях Clang/LLVM, GCC и MSVC в ноябре 2024 года. Исследование CISPA по CFOP будет представлено в Black Hat USA 2025 в Лас -Вегасе 7 августа.

Больше информации:
Маркос Санчес Баджо и др., Wait () второй: уклонение от целостности потока управления путем захвата C ++ Coroutines, Клопа (2025). Doi: 10.6082/carb.28718642.v1

Предоставлено Центром Cispa Helmholtz для информационной безопасности

Цитирование: C ++ Coroutines, подверженные атаке с повторным кодом, несмотря на целостность потока контроля (2025, 4 августа). Получено 4 августа 2025 года с https://techxplore.com/news/2025-08-coroutines-prone-code-reuse.html

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

2025-08-04 16:38:00


1754353258
#Coroutines #подверженные #атаке #повторным #использованием #кода #несмотря #на #целостность #потока #управления

Продолжение темы

Read more:  Alphabet соглашается купить Intersect Power за 4,75 миллиарда долларов

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.