CET & Shadow Stack
Технологія Захисту Потоку Керування (CET)
CET - це функція безпеки, реалізована на рівні апаратури, яка призначена для запобігання типовим атакам на перехід потоку керування, таким як Return-Oriented Programming (ROP) та Jump-Oriented Programming (JOP). Ці типи атак маніпулюють потоком виконання програми для виконання шкідливого коду або ланцюжком з'єднувати шматки безпечного коду так, щоб виконати шкідливу дію.
CET вводить дві основні функції: Відстеження Непрямих Гілок (IBT) та Тіньовий Стек.
IBT забезпечує, що непрямі стрибки та виклики виконуються до дійсних цілей, які явно позначені як законні призначення для непрямих гілок. Це досягається за допомогою нового набору інструкцій, які позначають дійсні цілі, тим самим запобігаючи атакам відхилення потоку керування до довільних місць.
Тіньовий Стек - це механізм, який забезпечує цілісність адрес повернення. Він зберігає захищену, приховану копію адрес повернення окремо від звичайного стеку викликів. Коли функція повертається, адреса повернення перевіряється на відповідність тіньовому стеку, запобігаючи атакам на перезапис адрес повернення на стеці для захоплення потоку керування.
Тіньовий Стек
Тіньовий стек - це окремий стек, який використовується виключно для зберігання адрес повернення. Він працює разом із звичайним стеком, але захищений та прихований від звичайного виконання програми, що ускладнює втручання з боку атакувальників. Основна мета тіньового стеку - забезпечити виявлення будь-яких модифікацій адрес повернення на звичайному стеці перед їх використанням, ефективно запобігаючи атакам ROP.
Як CET та Тіньовий Стек Запобігають Атакам
Атаки ROP та JOP ґрунтуються на можливості захоплення потоку керування програми, використовуючи вразливості, які дозволяють перезаписувати вказівники або адреси повернення на стеці. Направляючи потік до послідовностей існуючих кодових гаджетів або гаджетів, орієнтованих на повернення, атакувальники можуть виконувати довільний код.
Функція IBT CET робить ці атаки значно складнішими, забезпечуючи, що непрямі гілки можуть стрибати лише на адреси, які були явно позначені як дійсні цілі. Це робить неможливим виконання атак, коли гаджети розповсюджені по всьому бінарному коді.
Тіньовий стек, з іншого боку, забезпечує, що навіть якщо атакувальник може перезаписати адресу повернення на звичайному стеці, розбіжність буде виявлена при порівнянні пошкодженої адреси з безпечною копією, збереженою в тіньовому стеці при поверненні з функції. Якщо адреси не співпадають, програма може завершитися або вжити інші заходи безпеки, запобігаючи успіху атаки.
Last updated