Обнаружены два новых серьезных недостатка в безопасности: Spectre и Meltdown .
Является ли Raspberry Pi уязвимым для Spectre и / или Meltdown?
Обнаружены два новых серьезных недостатка в безопасности: Spectre и Meltdown .
Является ли Raspberry Pi уязвимым для Spectre и / или Meltdown?
Ответы:
По словам самих ARM , ядра процессоров, используемые во всех моделях до Pi 4, не уязвимы .
Большинство процессоров Arm не подвержены влиянию каких-либо изменений этого механизма спекуляции в боковых каналах. Окончательный список небольшого подмножества процессоров, разработанных Arm, которые могут быть восприимчивы, можно найти ниже. [см. ссылку для таблицы]
Ядра процессора, используемые старым Pis:
Pi 1 и ноль (W) : ARM11
Pi 2 V1 : ARM Cortex-A7
Pi 2 V1.2 и Pi 3 : ARM Cortex-A53
Ни одно из вышеперечисленных ядер не указано в качестве уязвимых для какой-либо версии атаки (на самом деле они вообще не перечислены, поскольку не существует известной уязвимости для этих атак).
В 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.
Пи (все версии) не уязвим.
«Призрак» и «Обвал» требуют исполнения вне очереди. Cortex-A7 используется в начале Pi 2 и Cortex A53 , используемой в последующем Pi 2 и Pi 3 представляет собой архитектуру строго в заказе. ARM11 , используемый в Pi 1 частично вне порядка, но не таким способом , который позволяет Спектра или Расплавление к работе.
ARM подтверждает это : только очень ограниченное подмножество процессоров ARM имеет аппаратное обеспечение, которое делает их уязвимыми для Spectre, еще более ограниченное подмножество уязвимо для Meltdown, и считается, что все они позволяют уменьшить угрозу.
Я хотел бы предложить мой другой взгляд на это.
Что касается 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. Это решило бы большинство проблем Призрака на практике, но теоретически, не все из них.