LINUX.ORG.RU

Защищаемся от Meltdown и Spectre

 , ,


14

6

Привет

Предлагаю собирать инфу о Meltdown и Spectre.

Пока у меня получилось найти пару тестов своей системы, но мало информации о том, как защититься. И никакой конкретной информации о том как увидеть влияние на performance - все ограничиваются цифрами, но не тем как провести реальные тесты.

О чем говорим:

Spectre     - Variant 1 - 2017-5753 - Bounds Check Bypass
Spectre     - Variant 2 - 2017-5715 - Branch Target Injection
Meltdown    - Variant 3 - 2017-5754 - Rogue Data Cache Load
BranchScope -           -           - Attack on Directional Branch Predictor
(еще восемь - см. ниже)
LazyFP                  - 2018-3665 - Exploiting lazy FPU state switching
Wiki
8 новых уязвимостей

SpectrePrime, MeltdownPrime:
То, же что и Spectre, Meltdown, но использующие альтернативный способ восстановления данных из кеша, который увеличивает точность восстановления.
Считается что программные методы защиты от Spectre и Meltdown также защищают и от SpectrePrime и MeltdownPrime. А вот аппаратная защита должна отельно учитывать учитывать SpectrePrime и MeltdownPrime.
Источник: Opennet

BranchScope:
Напоминает второй вариант атаки Spectre но отличается способом создания условий для влияния на состояние блока предсказания переходов.
Метод был протестирован на процессорах Intel Sandy Bridge, Haswell и Skylake, и продемонстрировал уровень ошибок менее 1%.
Утверждается, что предложенный для Spectre V2 метод защиты (Retpoline) не эффективен против BranchScope, но для блокирования атаки предложен иной метод защиты, который может быть реализован как программно, так и на аппаратном уровне. По мнению компании Intel предложенная в обновлении микрокода техника защиты от первого варианта Spectre (на основе инструкции LFENCE) будет эффективна и для защиты от атаки BranchScope. Для защиты важных данных также могут применяться типовые криптографические методы защиты от утечки по сторонним каналам.
Больше деталей - на OpenNet.

LazyFP:
Через проведение атаки по сторонним каналам атакующий может определить значения регистров FPU, MMX, SSE, AVX и AVX-512, используемых другим процессом. Например, в данных регистрах могут содержаться параметры для криптографических вычислений и имеющий доступ к локальной системе злоумышленник может попытаться использовать их для определения ключа шифрования. При использовании систем виртуализации проблема может применяться для определения состояния регистров другой гостевой системы или другого процесса в текущей гостевой системе.
Больше деталей - на OpenNet, Intel, blog.cyberus-technology.de.

Уязвимые архитектуры:
- Meltdown - только Intel, притом практически все начиная с выпуска 1995 года (источник).
- Spectre - все процессоры с фичей speculative execution, то есть почти все современные процессоры, в т. ч. Intel, AMD, ARM, IBM Power, IBM System Z (источник).
- Еще 8 - подтверждено на Intel на AMD и ARM не тестировалось (источник).
- LazyFP - только процессоры линейки Intel Core. Не проявляется на чипах Intel Atom/Knights и CPU AMD.

Тесты на наличие уязвимостей:
- https://github.com/IAIK/meltdown/ - реальный эксплоит.
- https://github.com/speed47/spectre-meltdown-checker - это скорее проверяет наличие фиксо/mitigations в системе.
- https://github.com/tesla707/Spectreprime-attack - SpectrePrime реальный эксплоит - https://blog.cyberus-technology.de/posts/2018-06-06-intel-lazyfp-vulnerabilit... - здесь только куски эксплоита в разделе «The Attack», рабочие версии пока не опубликованы. Если знаете лучше или более полные - говорите.

Защита:
Meltdown
Для защиты активируется Kernel page-table isolation (KPTI, старое название - KEISER)
1. Обновление ядра до версий 4.14.12, 4.9.75, and 4.4.110 или выше (Gentoo Wiki)
2. Активировать Kernel/User page tables isolation в ядре - опция ядра CONFIG_PAGE_TABLE_ISOLATION (askubuntu.com) - доступно только для 64-битного ядра.
- Отключать, если не в ядре - с помощью параметра ядра nopti (источник) или echo 0 > /sys/kernel/debug/x86/pti_enabled (источник - Redhat). Нужно владельцам процессоров не-Intel (например, AMD), так как KPTI дает проседание по performance'у, а для AMD это не актуально, так как уязвимость затрагивает только Intel.
Патчинг компиляторов и гипервизоры не требуется.
Как я понял, это полностью устраняет проблему Meltdown.
Фичи процессоров process-context identifiers (PCID) и invalidate process-context identifiers (INVPCID) позволяет снизить проседание перформанса из-за включения KPTI (источник, источник, источник). Доступна только на процессорах Intel: PCID - некоторые Westmere family, Sandy Bridge, INVPCID - Haswell и выше (источник). Также требуется ядро 4.14.12 или выше (источник). Проверить наличие фич в процессоре можно в /proc/cpuinfo (источник)

Spectre
1. Подгрузка микрокода процессора - Intel Microcode update 01/08/2018
- Мануал для Gentoo
- Если я правильно понял, то критерий успеха подгрузки микрокода процессора с фиксом можно узнать так: grep -q "cpu_insecure\|cpu_meltdown\|kaiser" /proc/cpuinfo (askubuntu.com)
Но как я понял, микрокод есть не для всех процессоров, в частности нет для Core 2 Duo . Подозреваю что здесь полный перечень Интеловских процессоров, для которых есть обновление.
2. Поддержка на уровне ядра начиная с какой верии - непонятно):
- Indirect Branch Restricted Speculation (IBRS) (Как выставлять). Притом у него 2 режима, подробней здесь. как проверять/выставлять - Redhat. Но - создана новая атака
- Indirect Branch Prediction Barrier (IBPB) (SGX - Software Guard Extensions) - тоже описан здесь и здесь, как проверять/выставлять - Redhat. Но новая атака SgxPectre показывает что данный механизм не эффективен.
- STIBP - иногда упоминают (раз, два), но детальной информации вообще не нашел.
3. Патчинг компиляторов
- Для GCC:
- - Добавление опции -mindirect-branch, -mindirect-branch-loop, -mfunction-return, -mindirect-branch-register с которыми нужно перекомпилить... всё? Где скачать - непонятно. Насколько полно решают проблему - непонятно.
- - retpoline - добавление опции -mindirect-branch=thunk-extern. С ней нужно перекомпилить ядро с наложенным патчем (где скачать?). Пока есть для gcc 8 (mailing list) и gcc 7.3 (OpenNet, Phoronix); в планах портировать фикс gcc 6/5/4. Похоже, что для процессоров архитектуры Skylake и более поздних проблему решает не полностью (источник).
- LLVM - TBD
4. Патчинг гипервизоров - https://github.com/hannob/meltdownspectre-patches , раздел Virtualization Не ясно закрывает ли это проблему полностью.
- VirtualBox 5.2.6 и 5.1.32 (источник).
5. Патчинг браузеров (потому как уязвимость можно эксплуатировать даже через JavaScript):
- Chrome 63 - нужно включить опцию chrome://flags#enable-site-per-process ; в Chrome 64 включено по дефолту.
- Firefox 57.0.4 (источник)

LazyFP
- В ядре Linux защита была реализована ещё в феврале 2016 года, путём применения по умолчанию режима Eager FP (eagerfpu=on) и удаления возможности активации Lazy FP. Уязвимость затрагивает ядра Linux до версии 4.6 или системы с процессорами без поддержки инструкции XSAVE (до Sandy Bridge), в которых по умолчанию применялся режим Lazy FP. В старых ядрах Linux для защиты можно использовать опцию «eagerfpu=on», которая присутствует начиная с ядра 3.7.
Влияние на performance:
- Хороший отчет Redhat о том, какое проседание performance'а на каких операциях
- Бенчмарки Phoronix: разные режимы IBRS/IBPB, Spectre, Meltdown
. Как сказано выше, наличие PCID и INVPCID в процессорах делает проседание по performance'у меньше.
Методология (как проверить у себя) - TBD
- Конкретный софт: bind

В каких процессорах Intel какая защита релизована
Habr: Больше кофе, меньше кофеина: Intel 9th Gen (часть 1), искать глава «Исправления безопасности оборудования и программного обеспечения»

Открытые вопросы:
1. Ваш набор тестов на наличие уязвимостей Meltdown и Spectre
2. Ваш рецепт по фиксу
3. Как включать/выключать IBPB и STIBP?
4. Ссылки на патчи для компиляторов
5. Приведите тест (не результаты, а методику), который бы показал влияние на performance
6. Если покупать железо, как знать что оно не подвержено Meltdown и Spectre?

Пожалуйста, дополняйте информацию, особенно там, где написано TBD, где видите неточности или пробелы. Давайте вместе расставим точки над i и победим этот недуг.

★★★★★

Последнее исправление: Kroz (всего исправлений: 32)

Ответ на: комментарий от Kroz

комбинации опции ядра с другими выключателями
опции ядра

Вот это я и пытаюсь выяснить как раз.

Gonzo ★★★★★
()
Ответ на: комментарий от Kroz

Так понял, что сабжевая проблема не столько в проце, сколько в технологии. И если проц использует speculative execution, и при этом там нет механизма нормального инвалидирования кеша, то он подвержен уязвимости.

Ага. И именно поэтому на среднем intel cpu в вакууме остается только закрывать все дыры установкой микрокода, патченного gcc и пересборкой им всего мира. Вон как выше anonymous написал:

Пропатчить gcc патчем retpoline. И пересобрать весь софт в системе c gcc -mindirect-branch=thunk-extern ?

Так что на счет Байкал и Эльбрус я бы не был столь уверен.

Ну по крайней мере Байкал-Т1 не должен быть подвержен сабжу, ибо он на MIPS P5600, на котором проблемы нет. Остальные наши в принципе могут даже выскочить на этом, если успеют вовремя пофиксить и если там воообще есть сабжевая проблема.

Дальше то понятно, что аппаратно исправят. А потом скорее всего либо вообще откажутся от speculative execution либо логику поправят. Но это потом… А пока-что это просто победа.

init_6 ★★★★★
()
Ответ на: комментарий от Novell-ch

А в федорином ядре разве нет патчей ibrs и обновлённого микрокода. А то даже в RHEL 6 для её древнющих ядер запилили, ещё в первых числах января

TheAnonymous ★★★★★
()
Ответ на: комментарий от TheAnonymous

обновлённого микрокода

Там для каждого процессора свой микрокод. Универсально сделать нельзя, разве нет?

Kroz ★★★★★
() автор топика
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от TheAnonymous

есть, только 24 федору забросили давно, вот и пересобираю

Novell-ch ★★★★★
()
Ответ на: комментарий от Kroz

Подгружается при загрузке то свой, но пакет обычно общий, ну или 2, для интела и амд

TheAnonymous ★★★★★
()

Итак насколько я понял должен выйти (когда?) корректирующий релиз gcc-7.3 с патчами retpoline закрывающими CVE-2017-5715 со стороны компилятора.

Несколько раз встречал заметки о том, что дескать retpoline бэкпортиовали в gcc-7.2.

Внимание вопрос: Где найти конкретно эти бекпортированные заплатки retpoline в gcc-7.2? Там (?) смотрел но выкачать git я не в состоянии. Кто может поделится заплатками в более удобоваримом виде?

init_6 ★★★★★
()
Ответ на: комментарий от TheAnonymous

Линус же рявкнул - может теперь и вообще не будет

Здесь, пожалуйста, поподробней...

Kroz ★★★★★
() автор топика
Ответ на: комментарий от init_6

Ждём ебилды!

Уже прилетели.
Но мне как-то стрёмно вот таким компилить мир:

$ eix -e gcc
[?] sys-devel/gcc
...
     (7.3.0) [m]**7.3.0^s
...
Если решишься и будут истории успеха - дай знать.
А до тех пор, я, пожалуй, подожду шестёрку...

Kroz ★★★★★
() автор топика
Ответ на: комментарий от TheAnonymous

В моем понимании - да, в CFLAGS нужно добавить -mindirect-branch=thunk-extern.

Kroz ★★★★★
() автор топика

sys-devel/gcc-7.2.0-r1

Spectre and Meltdown mitigation detection tool v0.33

Checking for vulnerabilities on current system
Kernel is Linux 4.14.15-bentoo #10 SMP Fri Jan 26 01:46:25 MSK 2018 x86_64
CPU is Intel(R) Core(TM) i5-2540M CPU @ 2.60GHz

Hardware check
* Hardware support (CPU microcode) for mitigation techniques
  * Indirect Branch Restricted Speculation (IBRS)
    * SPEC_CTRL MSR is available: NO
    * CPU indicates IBRS capability: NO
  * Indirect Branch Prediction Barrier (IBPB)
    * PRED_CMD MSR is available: NO
    * CPU indicates IBPB capability: NO
  * Single Thread Indirect Branch Predictors (STIBP)
    * SPEC_CTRL MSR is available: NO
    * CPU indicates STIBP capability: NO
  * Enhanced IBRS (IBRS_ALL)
    * CPU indicates ARCH_CAPABILITIES MSR availability: NO
    * ARCH_CAPABILITIES MSR advertises IBRS_ALL capability: NO
  * CPU explicitly indicates not being vulnerable to Meltdown (RDCL_NO): NO
  * CPU microcode is known to cause stability problems: NO
* CPU vulnerability to the three speculative execution attacks variants
  * Vulnerable to Variant 1: YES
  * Vulnerable to Variant 2: YES
  * Vulnerable to Variant 3: YES

CVE-2017-5753 [bounds check bypass] aka 'Spectre Variant 1'
* Mitigated according to the /sys interface: NO (kernel confirms your system is vulnerable)
> STATUS: VULNERABLE (Vulnerable)

CVE-2017-5715 [branch target injection] aka 'Spectre Variant 2'


* Mitigated according to the /sys interface: NO (kernel confirms your system is vulnerable)
* Mitigation 1
  * Kernel is compiled with IBRS/IBPB support: NO
  * Currently enabled features
    * IBRS enabled for Kernel space: NO
    * IBRS enabled for User space: NO
    * IBPB enabled: NO
* Mitigation 2
  * Kernel compiled with retpoline option: YES
  * Kernel compiled with a retpoline-aware compiler: NO (kernel reports minimal retpoline compilation)
  * Retpoline enabled: YES
> STATUS: VULNERABLE (Vulnerable: Minimal generic ASM retpoline)

CVE-2017-5754 [rogue data cache load] aka 'Meltdown' aka 'Variant 3'
* Mitigated according to the /sys interface: YES (kernel confirms that the mitigation is active)
* Kernel supports Page Table Isolation (PTI): YES
* PTI enabled and active: YES
* Running as a Xen PV DomU: NO
> STATUS: NOT VULNERABLE (Mitigation: PTI)

A false sense of security is worse than no security at all, see --disclaimer

sys-devel/gcc-7.3.0

> diff -Naur gcc-7.2-kernel-4.14.15 gcc-7.3-kernel-4.14.15
--- gcc-7.2-kernel-4.14.15	2018-01-27 11:23:06.157015468 +0300
+++ gcc-7.3-kernel-4.14.15	2018-01-27 11:18:17.916008600 +0300
@@ -1,7 +1,7 @@
 Spectre and Meltdown mitigation detection tool v0.33
 
 Checking for vulnerabilities on current system
-Kernel is Linux 4.14.15-bentoo #10 SMP Fri Jan 26 01:46:25 MSK 2018 x86_64
+Kernel is Linux 4.14.15-bentoo #11 SMP Sat Jan 27 09:58:25 MSK 2018 x86_64
 CPU is Intel(R) Core(TM) i5-2540M CPU @ 2.60GHz
 
 Hardware check
@@ -30,7 +30,7 @@
 > STATUS: VULNERABLE (Vulnerable)
 
 CVE-2017-5715 [branch target injection] aka 'Spectre Variant 2'
-* Mitigated according to the /sys interface: NO (kernel confirms your system is vulnerable)
+* Mitigated according to the /sys interface: YES (kernel confirms that the mitigation is active)
 * Mitigation 1
   * Kernel is compiled with IBRS/IBPB support: NO
   * Currently enabled features
@@ -39,9 +39,9 @@
     * IBPB enabled: NO
 * Mitigation 2
   * Kernel compiled with retpoline option: YES
-  * Kernel compiled with a retpoline-aware compiler: NO (kernel reports minimal retpoline compilation)
+  * Kernel compiled with a retpoline-aware compiler: YES (kernel reports full retpoline compilation)
   * Retpoline enabled: YES
-> STATUS: VULNERABLE (Vulnerable: Minimal generic ASM retpoline)
+> STATUS: NOT VULNERABLE (Mitigation: Full generic retpoline)
 
 CVE-2017-5754 [rogue data cache load] aka 'Meltdown' aka 'Variant 3'
 * Mitigated according to the /sys interface: YES (kernel confirms that the mitigation is active)
ls -1 /sys/devices/system/cpu/vulnerabilities/
meltdown
spectre_v1
spectre_v2

cat /sys/devices/system/cpu/vulnerabilities/*
Mitigation: PTI
Vulnerable
Mitigation: Full generic retpoline

Абсолютно нетронутым остался spectre_v1

init_6 ★★★★★
()

старое название - KEISER

KAISER fixed

anonymous
()

А чё там с новым интеловским микрокодом ibrs/ibpb?
Тот старый, глючный, от 8 января то отозвали, дистры в основном откотились, даже в генте вот слоупоки замаскировали.

А новый собираются пилить? Когда старый отзывали, вроде говорили, вот скоро будет, у ОЕМщиков вот уже!
Есть про это новости?

TheAnonymous ★★★★★
()

MeltDown

Надо понимать, так пишут те же самые люди, которые пишут «SystemD»? Оно «Meltdown». Одно слово.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от ckotinko

Spectre о том, что можно читать память внутри процесса.

intelfx ★★★★★
()

MeltdownPrime и SpectrePrime: http://www.opennet.ru/opennews/art.shtml?num=48091
TL;DR - скорее головная боль производителей железа. С софтварной защитой - существующие методы достаточно эффективны.

Kroz ★★★★★
() автор топика

Может кто вкурсе, че нужно сделать.

Kernel compiled with retpoline option: YES
чтобы вот это стало yes
Kernel compiled with a retpoline-aware compiler:NO
собрал ядро компилятором gcc - 7.3.0 в дебиане (sid)

anonymous
()

А как сейчас регулировать включение ibrs/ibpb в современных ядрах?
На примере последнего ядра в opensuse 42.3

# cat /proc/sys/kernel/ibrs_enabled
cat: /proc/sys/kernel/ibrs_enabled: Нет такого файла или каталога
# cat /sys/devices/system/cpu/vulnerabilities/spectre_v2 
Mitigation: Full generic retpoline + IBPB
# uname -r
4.4.114-42-default

в /proc/cpuinfo есть spec_ctrl, в vulnerabilities вроде значится IBPB, но где посмотреть, какой режим используется?
Раньше точно были в sysctl - /proc/sys/kernel/ibrs_enabled и ibpb_enabled, сейчас что взамен?
Как включить его работу в userspace (типа как echo 2 > ibrs_enabled)? Ретполины ретполинами, но это же работает только на ядре и на специально пересобранном софте, а хочется включить на всю систему

TheAnonymous ★★★★★
()
Ответ на: комментарий от anonymous
* Mitigation 2
  * Kernel compiled with retpoline option:  YES 
  * Kernel compiled with a retpoline-aware compiler:  YES  (kernel reports full retpoline compilation)
> STATUS:  NOT VULNERABLE  (Mitigation: Full generic retpoline)
Linux localhost 4.15.0-1-amd64 #1 SMP Debian 4.15.4-1 (2018-02-18) x86_64 GNU/Linux

ХЗ, зачем ты что-то сам собираешь.

anonymous
()
Ответ на: комментарий от anonymous

Это я вкурсе, что они уже сами там все собрали. Но мне нужно самому собрать.

anonymous
()

Не знаю, указывали на это или нет, но с новыми фиксам (не в ядре, а в браузерах) перестали работать половина низкоуровневых функций web assembly.

PPP328 ★★★★★
()
16 июня 2018 г.
25 июля 2018 г.
Ответ на: комментарий от icefreeze

Это массовый психоз. Вера в то что это можно исправить кодом.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.