Перейти до вмісту

Control-flow Enforcement (CET)

Архітектурний довідникFeex

Також називається CET

CET, Control-flow Enforcement Technology, додає апаратні механізми для захисту потоку керування, переважно тіньові стеки (shadow stacks) та відстеження непрямих переходів (indirect branch tracking). Апаратна підтримка та активний захист у конкретному процесі - це різні стани.

Що потрібно знати

CET, Control-flow Enforcement Technology, додає апаратні механізми для захисту потоку керування, переважно тіньові стеки (shadow stacks) та відстеження непрямих переходів (indirect branch tracking). Апаратна підтримка та активний захист у конкретному процесі - це різні стани.

Як це працює

Тіньові стеки підтримують захищений стан адрес повернення, тоді як відстеження непрямих переходів обмежує точки призначення відстежуваних непрямих переходів. Вони стосуються різних передач потоку керування та мають окреме перерахування й увімкнення. ОС, завантажувач, виконуваний бінарний файл програми та бібліотеки беруть участь у забезпеченні роботи захищеного середовища виконання.

Де це корисно

Належним чином зібраний застосунок може працювати з тіньовим стеком, керованим ОС, завдяки чому невідповідна адреса повернення викликає визначений виняток замість непомітного перенаправлення виконання. Політика сумісності може відрізнятися для застарілих модулів і захисту в режимі користувача порівняно з режимом супервізора.

Як перевірити підтримку та активацію

Перевірте біт 7 CPUID.07H.00H:ECX для можливості тіньового стека та біт 20 EDX для відстеження непрямих переходів, а потім перевірте задокументований статус захисту процесу в ОС. Самого лише наявного біта процесора недостатньо для підтвердження застосування захисту для запущеної програми.

Можливості, активацію та примусове застосування слід перевіряти окремо. Процесор може підтримувати захист, тоді як ОС, програма або політика віртуальної машини не активують його. Поле підтримки в базі даних не є свідченням атестації працюючої системи.

Чого ця функція не гарантує

Поле CET не доводить, що обидві підфункції присутні або ввімкнені. CET не робить бінарний файл надійним, не запобігає кожній помилці пошкодження пам'яті та не замінює оновлення. Глобальне вимкнення захисту не є стандартним вирішенням проблеми аварійного завершення програми.

Сумісність і продуктивність на практиці

Підтримуйте ОС, прошивку та відповідне середовище виконання в актуальному стані. Якщо захист виявляє проблему сумісності, спочатку скористайтеся засобами діагностики постачальника та підтримуваними оновленнями. Загальне перемикання захисту може вплинути на непов'язані програми та має відповідати чіткій політиці розгортання та відновлення.

Практичний контрольний список для верифікації

  1. Зафіксуйте точну модель процесора або платформи, а також версії використовуваної програми, ОС і середовища виконання. Збережіть точне формулювання фактичної помилки або вимоги.
  2. Звіртеся з документацією виробника для цієї точної моделі, потім перевірте фактичні можливості та стан активації в середовищі, де виконується програма.
  3. Порівняйте кожну вимогу вибраного двійкового файлу або бекенда. Схожої назви функції, псевдоніма чи загального позначення технології недостатньо.
  4. Переконайтеся, що програма вибрала призначену реалізацію. Використовуйте її задокументовані засоби діагностики та підтримуваний резервний варіант, якщо вимоги не виконуються.
  5. Вносьте по одній підтримуваній зміні за раз і повторюйте те саме робоче навантаження. Зберігайте оригінальну конфігурацію та можливість відновлення.

Якщо функція вказана, але програмне забезпечення не може її використати

Почніть із компонента, у якому саме стався збій. База даних обладнання описує зафіксовані можливості; операційна система або гіпервізор можуть надавати інше фактичне середовище. Помилка неприпустимої інструкції також потребує дослідження фактичної інструкції, що викликала збій, і двійкової збірки, оскільки пошкодження даних або непов'язана непідтримувана інструкція можуть викликати схожий симптом.

Встановіть версію програми, драйвера або середовища виконання, яка підтримується для цієї конкретної платформи, і за потреби використовуйте задокументовану постачальником базову або резервну збірку. Оновлення програмного забезпечення не може створити інструкцію, якої немає в процесорі. Зміни у прошивці та політиках безпеки повинні відповідати процедурі виробника системи та плану відновлення, а не загальним рецептам оптимізації.

Джерела та межі застосування цього пояснення

Intel 64 and IA-32 Architectures Software Developer's Manual · Ядро Linux: тіньовий стек Control-flow Enforcement Technology

Ці довідкові матеріали визначають архітектурну поведінку та вимоги до програмного забезпечення. Вони не перевіряють незалежно кожне значення функції на сторінці пов'язаної моделі обладнання. Щодо підтримки моделі використовуйте дані виробника на цій сторінці та перевіряйте фактичну конфігурацію системи. Ця стаття не містить бенчмарків, сертифікації чи дат незалежного огляду.

Джерела та верифікація

Власник авторських прав: Feex. Дата незалежної перевірки не зафіксована. Як ми проводимо дослідження.

  • Intel 64 and IA-32 Architectures Software Developer's Manual · Томи 1 і 2 описують зазначені сімейства інструкцій і CPUID; Том 3 описує стан, сторінкову організацію пам'яті, VMX і засоби захисту. Документація з архітектури не підтверджує підтримку для конкретної моделі.
  • Ядро Linux: тіньовий стек Control-flow Enforcement Technology · Розрізняє апаратну підтримку, бінарні маркери, увімкнення завантажувачем та активний захист на рівні потоків. Описує IBT та тіньові стеки як окремі засоби.

Чи була ця стаття корисною?

Достатньо відповісти "так" або "ні". За бажанням виберіть причину або додайте коротку примітку.

Чи була ця стаття корисною?