Является ли Raspberry Pi уязвимым для эксплойтов Spectre или Meltdown?


58

Обнаружены два новых серьезных недостатка в безопасности: Spectre и Meltdown .

Является ли Raspberry Pi уязвимым для Spectre и / или Meltdown?


1
По словам исследователей: на данный момент неясно, затронуты ли процессоры ARM и AMD Meltdown.
Janghou

1
Есть пример, что вы можете украсть пароль с помощью Javascript в браузере (Chrome / Firefox).
Janghou

4
@ alex2003super: Не волнуйтесь. Хотя масштаб уязвимых устройств ошеломляет, вероятность того, что эта проблема будет затронута вами на самом деле, довольно мала. И даже если бы они не были, волнение не помогло бы. :)
Легкость гонок с Моникой

1
Кажется, что они не уязвимы, вот недавняя статья на эту тему raspberrypi.org/blog/…
Омар Элабд

5
Вам может показаться интересным этот пост: raspberrypi.org/blog/…
pfm

Ответы:


61

По словам самих ARM , ядра процессоров, используемые во всех моделях до Pi 4, не уязвимы .

Большинство процессоров Arm не подвержены влиянию каких-либо изменений этого механизма спекуляции в боковых каналах. Окончательный список небольшого подмножества процессоров, разработанных Arm, которые могут быть восприимчивы, можно найти ниже. [см. ссылку для таблицы]

Ядра процессора, используемые старым Pis:

Ни одно из вышеперечисленных ядер не указано в качестве уязвимых для какой-либо версии атаки (на самом деле они вообще не перечислены, поскольку не существует известной уязвимости для этих атак).

В Raspberry Pi 4 использует Cortex-A72 , который занесен в список уязвимых для вариантов 1, 2, 3а и 4. Как указано в Является ли Raspberry Pi 4 уязвимы для Specter эксплуатирует? Raspbian содержит программное обеспечение для смягчения этих уязвимостей, поэтому риск эксплуатации должен быть низким. Другие операционные системы могут не содержать соответствующих мер по смягчению, и, хотя ARM сообщает, что для Cortex-A72 выпущено аппаратное смягчение, неясно, было ли это применено к Pi 4.

Обратите внимание, что варианты 1 и 2 (CVE-2017-5753 и CVE-2017-5715) известны как Spectre , а варианты 3 (CVE-2017-5754) и 3a (связанная атака, расследуемая ARM) называются Meltdown . Следовательно, ни одно из устройств Raspberry Pi до Pi 4 не считается уязвимым ни для Spectre, ни для Meltdown.


Интересно, будут ли внесены изменения в ядро ​​Linux, которые требуются на других архитектурах, в версии Linux, работающие на Raspberry Pi? Предположительно, эти изменения замедляют работу системы, поэтому, возможно, это повлияет на RP, даже если патчи не нужны.
Бобби Дарретт

4
Патч ядра определяет, на каком процессоре он работает, и автоматически отключается, если это не уязвимая модель. Кроме того, ядра для Raspberry Pi (и большинства других одноплатных компьютеров) созданы специально для имеющегося оборудования, и у сопровождающих нет причин включать или включать данный патч.
Перкинс

1
@BobbyDurrett, изменения ядра в Meltdown находятся в разделе кода, посвященном x86. Связанные с Spectre изменения повсюду, но большинство из них находятся в специфичных для процессора разделах кода или обрабатываются компилятором. Некоторые биты, такие как структурные изменения в сетевом коде, могут просочиться в Pi, но большинство из них - нет.
Mark

Спасибо за комментарии. Интересно подумать, какие части кода ядра Linux зависят от процессора. Я предполагаю, что с операционной системой, которая работает на множестве разных типов процессоров, вы должны хорошо разделить код, специфичный для каждого процессора.
Бобби Дарретт

22

Пи (все версии) не уязвим.

«Призрак» и «Обвал» требуют исполнения вне очереди. Cortex-A7 используется в начале Pi 2 и Cortex A53 , используемой в последующем Pi 2 и Pi 3 представляет собой архитектуру строго в заказе. ARM11 , используемый в Pi 1 частично вне порядка, но не таким способом , который позволяет Спектра или Расплавление к работе.

ARM подтверждает это : только очень ограниченное подмножество процессоров ARM имеет аппаратное обеспечение, которое делает их уязвимыми для Spectre, еще более ограниченное подмножество уязвимо для Meltdown, и считается, что все они позволяют уменьшить угрозу.


10

Я хотел бы предложить мой другой взгляд на это.

Что касается Meltdown, то это очень специфическая уязвимость в некоторых процессорах, поэтому, если ARM говорит, что процессор в Raspberry Pi не уязвим, то ему, вероятно, можно доверять.

Тем не менее, Spectre является более общей уязвимостью. Пока что были продемонстрированы только два варианта, но я уверен, что есть и другие варианты. Ошибка в CPU состоит в том, что состояние предиктора ветвления не сбрасывается при выполнении переключения контекста, и это состояние предиктора ветвления индексируется младшими битами адреса инструкции ветвления и не помечается вообще. Таким образом, у вас может быть две ветви, разделяющие одно и то же состояние предсказателя ветви, даже через границы процесса.

Я очень уверен, что ЦП во всех моделях Raspberry Pi похож на практически все другие ЦП в том, что предиктор ветвления - это просто большой массив 2-битных насыщающих счетчиков (сильно взятый, слабо взятый, слабо не взятый, сильно не принято). Индексом этого массива являются младшие биты адреса инструкции ветвления, и тега нет, и это состояние предиктора никогда не сбрасывается.

Теперь, если две ветви имеют одно и то же состояние предиктора, вы можете измерить, какой путь выбрал конкретный филиал в недавнем прошлом. Таким образом, утечка информации о Spectre! Если вы можете надежно запустить браузер для выполнения некоторого ветвления кода на вашем пароле из JavaScript и измерить, каким образом пошли ветки, вы действительно можете извлечь пароль. Теперь это крайний пример: никто в здравом уме не будет переходить на каждый бит вашего пароля способом, который может быть вызван из JavaScript, но это демонстрирует проблему.

Не верьте всему, что говорит ARM. ARM, вероятно, означает, что разработанные Google эксплойты не работают на этих процессорах ARM. Это не значит, что они будут неуязвимы для Призрака. Может работать какой-то другой вид эксплойта.

См. Этот вопрос: https://security.stackexchange.com/questions/176678/is-branch-predictor-flush-instruction-a-complete-spectre-fix и поймите последствия его ответа. Мошеннический код JavaScript, работающий в вашем браузере, может из-за того, что Spectre может определить, каким образом прошли другие ветви процесса. Даже инструкция сброса предиктора ветвления не решит эту мошенническую проблему JavaScript, если браузер активно не сбрасывает предиктор ветвления перед запуском ненадежного кода.

Призрак будет с нами очень и очень долго, так как предиктор ветвления, использующий 14 бит в качестве индекса, не помечается оставшимися 18 битами 32-битного адресного пространства, потому что тогда потребуется 20 бит (счетчик насыщения 2 бита). , Тег 18 бит) вместо 2 бит. Это умножит размер предиктора ветвления на десять! Я ожидаю, что производители ЦП добавят инструкцию сброса предиктора ветвления, которая работает даже в пользовательском пространстве без особых привилегий, и ядро ​​будет использовать ее при переключении контекста, а пользовательское пространство - при выполнении ненадежного кода JITed. Это решило бы большинство проблем Призрака на практике, но теоретически, не все из них.


« Теперь, если две ветви имеют одно и то же состояние предиктора, вы можете измерить, какой путь выбрала конкретная ветвь в недавнем прошлом. » Как вы делаете это без спекулятивного выполнения?
Питер Тейлор

@PeterTaylor у этих процессоров ARM есть предиктор ветвления, и поэтому они имеют спекулятивное выполнение. Чего им не хватает, так это исполнения не по порядку.
юхист

Они задокументированы, чтобы иметь умозрительную выборку инструкций, но это не умозрительное выполнение. Это справедливо, что все еще возможно использовать его как оракула.
Питер Тейлор

Даже спекулятивной выборки может быть достаточно, поскольку будет небольшая, но измеримая разница в задержке.
юхист

Linux уже добавляет рандомизацию адресов ядра; Вы не можете предсказать адрес филиала.
MSalters
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.