Соответствующее CET спуфинг стека вызовов через пул потоков и трамплининг обратных вызовов Enum (PoC на Rust)
Я написал это после того, как потратил неоправданно много времени на то, чтобы заставить спуфинг стека вызовов, соответствующий CET, работать от начала до конца на оборудовании с включенным Intel CET.
Техника сочетает в себе три примитива: выполнение пула потоков для чистой базы стека, трамплининг обратных вызовов перечисления для реального подписанного кадра стека среднего уровня и косвенные системные вызовы.
Фактический вклад — это механизм соответствия CET: переключение контекста на основе jmp в сочетании с прямой сверкой указателя теневого стека через RDSSPQ/INCSSPQ, без изменения метаданных размотки. Отличный от BYOUD подход.
Реализовано на Rust с использованием встраиваемого ассемблера. Отправлено пользователем /u/_MrTiz