LINUX.ORG.RU

Meltdown и Spectre — названия двух атак на процессоры Intel/AMD/ARM64/Power

 , , , ,


10

9

Разработчики из Google Project Zero опубликовали детали уязвимостей, которые затрагивают не только процессоры Intel и ARM64, но и AMD тоже (есть сообщения, что только при включении BPF JIT в ядре, что по умолчанию выключено). Названия им дали: Meltdown и Spectre (расплавление ядерного реактора и призрак).

Meltdown позволяет приложению читать любую память компьютера, включая память ядра и других пользователей. Этой атаке подвержены процессоры Intel. Точных сведений об уязвимых процессорах нет, но скорее всего минимум начиная с Core Duo.

Spectre создаёт брешь в изоляции различных приложений и позволяет атакующему обманным способом получить данные чужого приложения. Этой атаке подвержены процессоры Intel, AMD, ARM64, Power8 и 9. По неподтвержденным данным узявимы практически все процессоры, умеющие спекулятивное исполнение кода. Для Intel это процессоры, начиная с Pentium Pro (1995 год), кроме Itanium и Atom. Есть сообщения о том, что уязвимость проверена на Pentium-M 1.5 ГГц (2004 год).

Эксплоит, эксплуатирующий Meltdown позволяет читать память ядра со скоростью 2000 байт в секунду на процессоре Intel Xeon архитектуры Haswell.

Уязвимостям назначены следующие CVE: CVE-2017-5753, CVE-2017-5715 и CVE-2017-5754.

Напомню, что пользователи ежедневно запускают чужой код на своих компьютерах, посещая веб сайты с JavaScript (>99%), поэтому применение патча (здесь и здесь) обязательно, если вы дорожите своими данными. Есть PoC (п.4.3) , демонстрирующий атаку с этой уязвимостью через JavaScript.

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

Технические подробности про spectre (есть пример кода в конце файла)
Код из spectre.pdf выложенный отдельно.
Технические подробности про meltdown
Еще про meltdown
Видео, демонстрирующее утечку памяти meltdown
Технические детали для ARM-процессоров
Отчёт от Red Hat, упоминающий процессоры IBM Power как уязвимые.

UPD: Хорошая статья на русском языке про meltdown
UPD2: Продолжение про два вида Spectre

>>> Подробности

★★★★★

Проверено: anonymous_incognito ()
Последнее исправление: hobbit (всего исправлений: 24)
Ответ на: комментарий от I-Love-Microsoft

Только как ты такую закладку эксплуатировать собрался? Если она срабатывает в каждое третье 29е февраля после проведения ритуала шаманом племени Чибуньк с принесением в жертву 17 девственниц, то это осложняет дело. Условному АНБ нафиг такие закладки не сдались.

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

чтение памяти того же процесса - не думаю что это тянет на уязвимость

Чтение памяти за пределами адресов, по которым команды обращаются, вполне тянет на уязвимость. Это может быть уязвимость by design, но всё же.

tailgunner ★★★★★
()

Так я и не понял, прочитав половину треда: для 32-битного ядра Meltdown не страшен? Пытаюсь скомпилировать последнее ядро гентушное для старого ноута, но не вижу CONFIG_PAGE_TABLE_ISOLATION. И почему кстати так, если да, из-за принципиально другой схемы работы с памятью? Процессор-то поддерживает 64 битный режим, просто памяти на ноуте мало и распаяна.

Spectre да, прекрасно работает в 32-битном режиме.

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

Так я и не понял, прочитав половину треда: для 32-битного ядра Meltdown не страшен?

страшен. вроде експлоит мельдония добили, можешь проверить.

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

Чточто? Кажется ты не уловил суть подобной элементарной закладки. Мне кажется добавление таковой настолько элементарно, что не понимаю почему этого не должно было быть сделано до сих пор. Я выше написал, но кажется мое сообщение не заметили - я готов на спор написать пример подобной закладки в некий простой модуль на языке Verilog. И хрен будет способ, имея лишь интерфейс, подобный тот, что имеют программисты тех же процессоров интел, можно будет выяснить что там что-то есть.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Всё я уловил. Я тоже могу такое написать. Только пойми уже разницу между Чайником Рассела и аналогичным чайником на парковке крупного супермаркета, даже если чайник будет невидимым и будет спонтанно перемещаться, его всё равно рано или позно найдут.

WitcherGeralt ★★
()
Ответ на: Вся суть драмы для Ъ от h578b1bde

Перевод - ужасный. Слишком много отсебятины.

Оригинал - http://www.commitstrip.com/en/2018/01/04/reactions-to-meltdown-and-spectre-ex...

Собственно, оригинал я уже в этом треде публиковал, шесть страниц назад
>>> Meltdown и Spectre — названия двух атак на процессоры Intel/AMD/ARM64/Power (комментарий)

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

Собственно, оригинал я уже в этом треде публиковал, шесть страниц назад

Я осилил предыдущий тред где-то до десятой страницы и этот только лишь до пятой.

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

Чтение любого памяти по любому виртуальному адресу, доступному для чтения, на уровне изоляции ring3 это легально и для нативного кода норма. Неудачная попытка обмануть аппаратуру и запереть управляемый код в песочницу без введения ring4 - это проблема. Браузерописцы и виртуалмашинисты подумают что с этим делать. А остальные это вообще никак не заметят.

Т.е. это неприятно, но с точки зрения программиста - это non-observable behaviour. При этом, очевидно, почти ничего действительно non-observable не бывает. Out-of-order execution никто выбрасывать не будет и правильно сделают. А meltdown нужно фиксить в обязательном порядке процессороделам.

dzidzitop ★★
()
Последнее исправление: dzidzitop (всего исправлений: 1)
Ответ на: Pale Moon isn't vulnerable от h578b1bde

Ожидайте релиз Pale Moon 27.7

Бред же. Мейнтейнер Pale Moon заявил что патчи будут в ближайшем релизе Pale Moon 27.7, мой issue до сих пор не закрыт!

https://github.com/MoonchildProductions/Pale-Moon/issues/1568

В треде на форуме сам автор говорит «погодите, ещё немного шлифонём»

https://forum.palemoon.org/viewtopic.php?p=131437#p131437

Even so, we will be adding some additional defense-in-depth changes to the upcoming version 27.7 to be absolutely sure there is no further room for any of these sorts of hardware-timing based attacks in the future.

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

Не на память процесса, очевидно же. А на всю память.

А всю память spectre читать и не может, это meltdown может.

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

А всю память spectre читать и не может, это meltdown может.

Spectre создаёт брешь в изоляции различных приложений и позволяет атакующему обманным способом получить данные чужого приложения

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

Чтение любого памяти по любому виртуальному адресу, доступному для чтения, на уровне изоляции ring3 это легально и для нативного кода норма

Только для абстрактного нативного кода в вакууме.

Неудачная попытка обмануть аппаратуру и запереть управляемый код в песочницу без введения ring4 - это проблема

Нет. На x86 это стало проблемой только начиная с P6.

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

Похоже тут речь только о том, что раличные приложения - это браузер и песочница spectre.

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

Но где же? Все примеры которые я нахожу используют ассемблерные вставки с 64-битным инструкциями.

octy ★★
()
Ответ на: Ожидайте релиз Pale Moon 27.7 от atsym

Бред же. Мейнтейнер Pale Moon заявил что патчи будут в ближайшем релизе Pale Moon 27.7, мой issue до сих пор не закрыт!

НЯП закроют когда запилят further in-depth changes.

h578b1bde ★☆
()
Putting 'The Magic Words are Squeamish Ossifrage.' in memory
Reading 40 bytes:
Reading at malicious_x = 0xffffffffffdfed68... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed69... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed6a... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed6b... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed6c... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed6d... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed6e... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed6f... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed70... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed71... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed72... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed73... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed74... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed75... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed76... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed77... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed78... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed79... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed7a... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed7b... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed7c... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed7d... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed7e... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed7f... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed80... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed81... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed82... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed83... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed84... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed85... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed86... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed87... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed88... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed89... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed8a... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed8b... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed8c... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed8d... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed8e... Success: 0xFF='?' score=0 
Reading at malicious_x = 0xffffffffffdfed8f... Success: 0xFF='?' score=0 

Что это значит? Я неуязвим?

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

Это то, как работает speculative out-of-order execution. Т.е., если он работать будет не так, то эффекта от него не будет или он будет на уровне intel atom. Я, в принципе, не против. Но точно окажусь в меньшинстве.

Песочницам нужно было выполняться в ring 2 с защищёнными страницами памяти и очисткой кэша при переключении контекста, а managed code выполнять в ring 3 - вот это защита от spectre. Конечно же, с дикими накладными расходами.

Может, сочинят на уровне набора команд процессоров какие-нибудь неспекулятивные джампы и ретурны, чтобы подпереть ими критические места. Но это вряд ли, ибо потом всё это должно будет перетечь в языки программирования, а программисты это не осилят всё равно.

Т.е. решение одно - выполнять весь код одинаково медленно. Способов много на выбор. И тогда несферический нативный код не сможет заниматься таймингом для анализа матрицы.

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

для 32-битного ядра Meltdown не страшен?

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id...

конкретно на линупс изоляция таблиц именно 64-битного режима, если понимать эту часть патча, как antiMeltdown.

гадскийБилл патчи не представил - двойка за домашку гаденышу :)

sloan ★★
()
Ответ на: Ожидайте релиз Pale Moon 27.7 от atsym

В треде на форуме сам автор говорит «погодите, ещё немного шлифонём»

we will be adding some additional defense-in-depth changes to the upcoming version 27.7 to be absolutely sure
to be absolutely sure

Насколько я понял сейчас палемун неуязвим конкретно для Meltdown и Spectre, но в 27.7 они хотят закрыть весь вектор подобных атак. В любом случае это лучше амудешного патча if (c->x86_vendor != X86_VENDOR_AMD).

h578b1bde ★☆
()

кстати, все дружно читаем Joel Spolsky про его незабвенные leaking abstractions.

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

ась? я буду 23 страниц читать?

Я изменил до максимума сообщений на странице - 500(жаль больше нельзя), так легче искать информацию. Несколько ключевых слов для поиска «CACHE_HIT_THRESHOLD», "-march". Можно ещё первые строки вывода поискать и почитать соседние комментарии.

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

Насколько я понял сейчас палемун неуязвим конкретно для Meltdown и Spectre

Ну зачем же так толсто, а?

Если следовать твоей логике: «Pale Moon неуязвим для Meldown и Spectre, потому-что нет же ещё демонстрации подобных атак в Pale Moon».

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

на веранде своего рачно.
рачно

Бедный Билл

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

Если следовать твоей логике: «Pale Moon неуязвим для Meldown и Spectre, потому-что нет же ещё демонстрации подобных атак в Pale Moon».

У тебя перепутаны причина и следствие:

Pale Moon also, by design, doesn't allow buffer memory to be shared between threads in JavaScript, so the «SharedArrayBuffer» attack is not possible.

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

«Pale Moon неуязвим для Meldown и Spectre, потому-что нет же ещё демонстрации подобных атак в Pale Moon».

+ \ "..мы все так говорим, значит это правда .." (с)

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

Вот когда испытаеш Pale Moon всемя наявными PoC для Meltdown и Spectre — тогда можно будет с вероятностью максимум 99.9% заявлять о неуязвимости.

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

Pale Moon also, by design, doesn't allow buffer memory to be shared between threads in JavaScript

%s/PaleMoon/Ff ESR 52.*

пс: idi0t detected

sloan ★★
()
Ответ на: Ожидайте релиз Pale Moon 27.7 от atsym

Even so, we will be adding some additional defense-in-depth changes to the upcoming version 27.7 to be absolutely sure there is no further room for any of these sorts of hardware-timing based attacks in the future.

https://blog.mozilla.org/security/2018/01/03/mitigations-landing-new-class-ti...

Firefox 52 ESR does not support SharedArrayBuffer and is less at risk; the performance.now() mitigations will be included in the regularly scheduled Firefox 52.6 ESR release on January 23, 2018.

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

Я изменил до максимума сообщений на странице - 500(жаль больше нельзя),

Я всегда при заходе в треды лор делаю

Ctrl+End

Клик «показать удалённые»

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

Chrome and Firefox are removing SharedArrayBuffer and limiting the precision of performance.now() to reduce the effect of Meltdown/Spectre

As far as I understand, SharedArrayBuffer implementation in Pale Moon is incomplete, so it is not enabled at all. As for performance.now(), currently it has 10µs resolution, but this can be easily reduced, like it's going to do in other browsers.

Ок.

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