Захист від вразливостей процесора
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/ROOTzfs 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 можна примусово ввімкнути під час завантаження для всіх програм. Це додасть накладних витрат, оскільки спекулятивне виконання непрямих переходів буде обмежено для всіх програм.
Ідентифікатор lscpu |
Spectre v2 |
| Назва налаштування | Enforce Spectre Variant 2 Mitigation |
| Застосований параметр | spectre_v2=on |
L1 Terminal Fault (L1TF)
Розділ «L1 Terminal Fault (L1TF)»Стосується процесорів Intel і дає змогу отримати несанкціонований доступ до даних у кеші L1. Ditana примусово застосовує повний захист з агресивним очищенням кешу.
Ядро типово не вимикає SMT примусово, через що системи з SMT залишаються вразливими, коли в них працюють недовірені гостьові системи з увімкненим EPT.
Ідентифікатор lscpu |
L1tf |
| Назва налаштування | Enforce L1 Terminal Fault Mitigation |
| Застосований параметр | l1tf=full,force |
Microarchitectural Data Sampling (MDS)
Розділ «Microarchitectural Data Sampling (MDS)»Дає змогу зловмисникам вибірково зчитувати дані з буферів процесора. Повний захист за потреби може вимкнути SMT.
Ядро типово не вимикає SMT примусово, через що системи з SMT залишаються вразливими під час виконання недовіреного коду.
Ідентифікатор lscpu |
Mds |
| Назва налаштування | Enforce MDS Mitigation |
| Застосований параметр | mds=full,nosmt |
TSX Asynchronous Abort (TAA)
Розділ «TSX Asynchronous Abort (TAA)»Стосується процесорів із підтримкою Transactional Synchronization Extensions. Повний захист за потреби може вимкнути SMT.
TSX може бути вимкнено, якщо мікрокод надає MSR для керування TSX. У такому разі система не вразлива.
Ідентифікатор lscpu |
Tsx async abort |
| Назва налаштування | Enforce TSX Async Abort Mitigation |
| Застосований параметр | tsx_async_abort=full,nosmt |
Meltdown (очищення L1D)
Розділ «Meltdown (очищення L1D)»Експлойт спекулятивного виконання, що дає змогу читати пам’ять ядра з простору користувача. Ditana примусово вмикає очищення кешу даних L1.
Командний рядок ядра дає змогу під час завантаження керувати засобами захисту з очищенням L1D за допомогою параметра
l1d_flush=. Типово цей механізм вимкнено.
Ідентифікатор lscpu |
Meltdown |
| Назва налаштування | Enforce Meltdown Mitigation |
| Застосований параметр | l1d_flush=on |
MMIO Stale Data
Розділ «MMIO Stale Data»Витік даних через відображене в пам’ять введення-виведення (memory-mapped I/O). Повний захист може вимкнути SMT.
full,nosmt— те саме, щоfull, але з вимкненим SMT на вразливих процесорах. Це повний захист.
Ідентифікатор 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, якщо це потрібно для повного захисту.
Ідентифікатор 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 під час переходу між доменами привілеїв (користувач → ядро, гість → хост).
Ідентифікатор lscpu |
Spec rstack overflow |
| Назва налаштування | Enforce SRSO Mitigation |
| Застосований параметр | spec_rstack_overflow=ibpb spectre_v2_user=on |
Gather Data Sampling (GDS)
Розділ «Gather Data Sampling (GDS)»Стосується інструкцій AVX. Примусово вмикає захист через мікрокод або вимикає AVX, якщо відповідного мікрокоду немає.
Параметр
gather_data_sampling=forceзастосовує захист через мікрокод, якщо він доступний, або вимикає AVX на вразливих системах, де мікрокод не оновлено до версії із цим захистом.
Ідентифікатор 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.
Ідентифікатор 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.
Ідентифікатор lscpu: Spectre v1
iTLB multihit
Розділ «iTLB multihit»Ідентифікатор lscpu: Itlb multihit. Див. kernel.org: iTLB multihit.
SRBDS — Special Register Buffer Data Sampling
Розділ «SRBDS — Special Register Buffer Data Sampling»Ідентифікатор lscpu: Srbds. Див. kernel.org: SRBDS.
Speculative Store Bypass (SSB)
Розділ «Speculative Store Bypass (SSB)»Ядро надає захист від таких вразливостей у різних формах.
Ідентифікатор 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.