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

Захист від вразливостей процесора

Ditana типово вмикає засоби захисту (mitigations) від вразливостей процесора в режимі високої безпеки. Інсталятор визначає, які засоби захисту потрібні саме вашому процесору, зчитуючи /sys/devices/system/cpu/vulnerabilities/, а потім пропонує кожен із них окремим прапорцем, який можна позначати незалежно від інших, у діалоговому вікні Expert Settings → CPU Vulnerability Mitigation Options. На цій сторінці докладно описано кожен параметр.

Типові налаштування ядра чи засоби захисту Ditana

Розділ «Типові налаштування ядра чи засоби захисту Ditana»

Типові налаштування оригінального ядра Linux шукають баланс між безпекою та продуктивністю й залишають деякі вразливості без захисту, якщо його явно не ввімкнути. Ditana вмикає його типово — для більшості навантажень ціна мізерна, а виграш у безпеці суттєвий. Ви можете скасувати будь-який окремий засіб захисту в інсталяторі, якщо у вас є навантаження, для якого користь від цього доведена.

Логіка захисту залежить від обладнання. Налаштовуються лише ті вразливості, які справді має ваш процесор; усе інше залишається з типовими налаштуваннями ядра.

Після встановлення

Розділ «Після встановлення»

Кілька засобів захисту як резервний варіант передбачають вимкнення технології Simultaneous Multi-Threading (SMT, також відомої як Hyper-Threading). Власний заголовок термінала Ditana показує, які засоби захисту активні, а також увімкнено чи вимкнено SMT.

Перевірити можна також за допомогою команди:

Вікно термінала
lscpu

Щоб порівняти продуктивність з певним засобом захисту й без нього, відредагуйте командний рядок ядра для одного завантаження та вилучіть параметр, пов’язаний із засобом захисту, який ви хочете перевірити. У системі, встановленій на ZFS (саме таку створює профіль Standard), це робиться в редакторі середовища завантаження ZFSBootMenu; у системі, що завантажується через GRUB, натисніть e у меню. Параметри для кожного запису наведено нижче в рядку «Застосований параметр». Перезавантажте систему й запустіть своє реальне навантаження — синтетичні тести продуктивності рідко відображають реальний вплив.

Щоб зробити зміну постійною в системі, встановленій на ZFS, задайте командний рядок у середовищі завантаження:

Вікно термінала
sudo zfs set org.zfsbootmenu:commandline="rw <options>" ditana-root/ROOT
zfs get org.zfsbootmenu:commandline ditana-root/ROOT

Щоб зробити її постійною в системі, яка завантажується через GRUB, відредагуйте /etc/default/grub: знайдіть рядок GRUB_CMDLINE_LINUX_DEFAULT (спершу збережіть резервну копію), вилучіть параметр, а потім виконайте:

Вікно термінала
sudo grub-mkconfig -o /boot/grub/grub.cfg

Якщо після зміни система не завантажується, відредагуйте командний рядок ядра в меню GRUB, щоб відновити роботу, а потім повторіть редагування та grub-mkconfig.

Засоби захисту, які Ditana вмикає типово

Розділ «Засоби захисту, які Ditana вмикає типово»

Spectre variant 2 — Branch Target Injection

Розділ «Spectre variant 2 — Branch Target Injection»

Експлойт спекулятивного виконання, що дає змогу зловмисникам читати конфіденційні дані через хибно натреновані механізми передбачення непрямих переходів. Ditana застосовує повний захист (Indirect Branch Prediction Barrier увімкнено завжди, а не за умовою).

Усі засоби захисту від Spectre variant 2 можна примусово ввімкнути під час завантаження для всіх програм. Це додасть накладних витрат, оскільки спекулятивне виконання непрямих переходів буде обмежено для всіх програм.

kernel.org: Spectre

Ідентифікатор lscpu Spectre v2
Назва налаштування Enforce Spectre Variant 2 Mitigation
Застосований параметр spectre_v2=on

Стосується процесорів Intel і дає змогу отримати несанкціонований доступ до даних у кеші L1. Ditana примусово застосовує повний захист з агресивним очищенням кешу.

Ядро типово не вимикає SMT примусово, через що системи з SMT залишаються вразливими, коли в них працюють недовірені гостьові системи з увімкненим EPT.

kernel.org: L1TF

Ідентифікатор lscpu L1tf
Назва налаштування Enforce L1 Terminal Fault Mitigation
Застосований параметр l1tf=full,force

Microarchitectural Data Sampling (MDS)

Розділ «Microarchitectural Data Sampling (MDS)»

Дає змогу зловмисникам вибірково зчитувати дані з буферів процесора. Повний захист за потреби може вимкнути SMT.

Ядро типово не вимикає SMT примусово, через що системи з SMT залишаються вразливими під час виконання недовіреного коду.

kernel.org: MDS

Ідентифікатор lscpu Mds
Назва налаштування Enforce MDS Mitigation
Застосований параметр mds=full,nosmt

Стосується процесорів із підтримкою Transactional Synchronization Extensions. Повний захист за потреби може вимкнути SMT.

TSX може бути вимкнено, якщо мікрокод надає MSR для керування TSX. У такому разі система не вразлива.

kernel.org: TAA

Ідентифікатор lscpu Tsx async abort
Назва налаштування Enforce TSX Async Abort Mitigation
Застосований параметр tsx_async_abort=full,nosmt

Експлойт спекулятивного виконання, що дає змогу читати пам’ять ядра з простору користувача. Ditana примусово вмикає очищення кешу даних L1.

Командний рядок ядра дає змогу під час завантаження керувати засобами захисту з очищенням L1D за допомогою параметра l1d_flush=. Типово цей механізм вимкнено.

kernel.org: L1D flush

Ідентифікатор lscpu Meltdown
Назва налаштування Enforce Meltdown Mitigation
Застосований параметр l1d_flush=on

Витік даних через відображене в пам’ять введення-виведення (memory-mapped I/O). Повний захист може вимкнути SMT.

full,nosmt — те саме, що full, але з вимкненим SMT на вразливих процесорах. Це повний захист.

kernel.org: MMIO stale data

Ідентифікатор lscpu Mmio stale data
Назва налаштування Enforce MMIO Stale Data Mitigation
Застосований параметр mmio_stale_data=full,nosmt

Retbleed — Cross-Thread Return Address Predictions

Розділ «Retbleed — Cross-Thread Return Address Predictions»

Атака на спекулятивне виконання, що спричиняє витік адрес повернення. Автоматично вибраний засіб захисту може вимкнути SMT.

auto,nosmt — автоматично вибрати засіб захисту, вимкнувши SMT, якщо це потрібно для повного захисту.

kernel.org: kernel parameters

Ідентифікатор lscpu Retbleed
Назва налаштування Enforce Retbleed Mitigation
Застосований параметр retbleed=auto,nosmt

Див. також kernel.org: Cross-Thread Return Address Predictions.

Speculative Return Stack Overflow (SRSO)

Розділ «Speculative Return Stack Overflow (SRSO)»

Спекулятивні атаки через буфер стека повернень. Поєднує бар’єри IBPB із суворим режимом spectre_v2-user.

Mitigation: IBPB: захист, подібний до «safe RET», але з бар’єром IBPB під час переходу між доменами привілеїв (користувач → ядро, гість → хост).

kernel.org: SRSO

Ідентифікатор lscpu Spec rstack overflow
Назва налаштування Enforce SRSO Mitigation
Застосований параметр spec_rstack_overflow=ibpb spectre_v2_user=on

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

Параметр gather_data_sampling=force застосовує захист через мікрокод, якщо він доступний, або вимикає AVX на вразливих системах, де мікрокод не оновлено до версії із цим захистом.

kernel.org: Gather Data Sampling

Ідентифікатор lscpu Gather data sampling
Назва налаштування Enforce Gather Data Sampling Mitigation
Застосований параметр gather_data_sampling=force

Register File Data Sampling (RFDS)

Розділ «Register File Data Sampling (RFDS)»

Дає змогу вибірково зчитувати дані з регістрів процесора.

Цей параметр перевизначає типове значення, задане під час компіляції через CONFIG_MITIGATION_RFDS.

kernel.org: kernel parameters

Ідентифікатор lscpu Reg file data sampling
Назва налаштування Enforce RFDS Mitigation
Застосований параметр reg_file_data_sampling=on

Див. також kernel.org: RFDS.

Вразливості, яких немає в інсталяторі

Розділ «Вразливості, яких немає в інсталяторі»

Для цих вразливостей ядро типово застосовує максимальний захист — Ditana нічого додавати не потрібно.

Ще про п’ять вразливостей повідомляє ядро, але вище вони ніде не згадані, бо до них Ditana теж нічого не додає: Ghostwrite, Indirect Target Selection, застарілий мікрокод (old microcode), TSA і VMSCAPE. Ядро саме вирішує, що потрібно кожній із них, залежно від виявленого процесора, і залишає результат там, де його показують lscpu і /sys/devices/system/cpu/vulnerabilities/.

Spectre variant 1 — Bounds Check Bypass

Розділ «Spectre variant 1 — Bounds Check Bypass»

Немає гарантії, що охоплено всі можливі вектори атак для Spectre variant 1.

kernel.org: Spectre

Ідентифікатор lscpu: Spectre v1

Ідентифікатор lscpu: Itlb multihit. Див. kernel.org: iTLB multihit.

SRBDS — Special Register Buffer Data Sampling

Розділ «SRBDS — Special Register Buffer Data Sampling»

Ідентифікатор lscpu: Srbds. Див. kernel.org: SRBDS.

Ядро надає захист від таких вразливостей у різних формах.

kernel.org: spec_ctrl

Ідентифікатор lscpu: Spec store bypass.

Послаблення захисту — на ваш власний ризик

Розділ «Послаблення захисту — на ваш власний ризик»

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

Вимкнення Intel Indirect Branch Tracking — ibt=off

Розділ «Вимкнення Intel Indirect Branch Tracking — ibt=off»

Вимикає Indirect Branch Tracking ядра. IBT — це половина технології Control-flow Enforcement Technology, що відповідає за переходи вперед (forward edge): обладнання перевіряє, що кожен непрямий перехід або виклик потрапляє на інструкцію endbr, і саме це ускладнює програмування, орієнтоване на переходи й виклики (jump-oriented і call-oriented programming). Це механізм цілісності потоку керування, а не засіб захисту від вразливостей спекулятивного виконання: Branch Target Injection — це Spectre v2, яку докладно описано вище в розділі про spectre_v2=on. Цей параметр ядра не задокументовано в офіційному довіднику параметрів ядра, хоча в деяких дистрибутивах його часто вмикають типово без жодного явного повідомлення.

Другу половину CET — тіньовий стек у просторі користувача — ядро документує на сторінці shstk; для самого IBT окремої сторінки там немає.

Вимкнення всіх засобів захисту — mitigations=off

Розділ «Вимкнення всіх засобів захисту — mitigations=off»

Це сильніше, ніж зняти позначки з усіх окремих засобів захисту в діалоговому вікні. З mitigations=off ядро пропускає всі відомі йому засоби захисту — зокрема й ті, яких Ditana не показує, бо вони ввімкнені типово. Стеля продуктивності підіймається; нижня межа безпеки різко падає.

Корисно лише для тестів продуктивності, ізольованих систем без мережевого підключення (air-gapped) із повним фізичним контролем або для середовищ, де у вас є принципово інші механізми захисту.

Див. kernel.org: kernel parameters.

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

Якщо у вас є навантаження, якому краще підходить інше типове значення, або ви знайшли модель процесора, для якої виявлення в Ditana неповне чи неправильне, будь ласка, створіть звернення на GitHub або напишіть на [email protected]. Логіка виявлення — це дані, а не код, тому покращення зазвичай займають кілька рядків KDL.

Це машинний переклад. Читачі вдосконалюють його на Weblate.