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)

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

Spectre не позволяет читать ядро

Spectre позволяет читать ядро.

так что пофиг

А в браузере у тебя ничего важного нет? Ладно.

tailgunner ★★★★★
()

мой внутренний конспиролог ликует

баг ли это или же обнаруженная закладка? не может же быть чтоб вот так вот фундаментально что-то можено было не заметить. с одной стороны.

с другой же почему было позволено раскрыть закладку?

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

не может же быть чтоб вот так вот фундаментально что-то можено было не заметить. с одной стороны.

Говорят, что Spectre есть на x86, ARM, Power, System Z. Так что это именно фундаментально.

ckotinko - псих, но, возможно, он правильно указал на статью Томасуло. Вероятно, на это: https://www.cs.virginia.edu/~evans/greatworks/tomasulo.pdf

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 3)
Ответ на: комментарий от anonymous_incognito

i7-4870HQ, правда на предпоследней макоси (10.12.6), работает.

Reading 40 bytes:
Reading at malicious_x = 0xfffffffffffffeb6... Unclear: 0x54=’T’ score=997 (second best: 0x02 score=833)
Reading at malicious_x = 0xfffffffffffffeb7... Success: 0x68=’h’ score=2
Reading at malicious_x = 0xfffffffffffffeb8... Unclear: 0x65=’e’ score=998 (second best: 0x02 score=737)
Reading at malicious_x = 0xfffffffffffffeb9... Unclear: 0x20=’ ’ score=997 (second best: 0x02 score=902)
Reading at malicious_x = 0xfffffffffffffeba... Unclear: 0x4D=’M’ score=998 (second best: 0x02 score=637)
Reading at malicious_x = 0xfffffffffffffebb... Unclear: 0x61=’a’ score=996 (second best: 0x02 score=857)
Reading at malicious_x = 0xfffffffffffffebc... Unclear: 0x67=’g’ score=997 (second best: 0x02 score=825)
Reading at malicious_x = 0xfffffffffffffebd... Unclear: 0x69=’i’ score=999 (second best: 0x02 score=910)
Reading at malicious_x = 0xfffffffffffffebe... Unclear: 0x63=’c’ score=996 (second best: 0x02 score=868)
Reading at malicious_x = 0xfffffffffffffebf... Unclear: 0x20=’ ’ score=998 (second best: 0x02 score=849)
Reading at malicious_x = 0xfffffffffffffec0... Success: 0x57=’W’ score=273 (second best: 0x02 score=134)
Reading at malicious_x = 0xfffffffffffffec1... Unclear: 0x6F=’o’ score=999 (second best: 0x02 score=885)
Reading at malicious_x = 0xfffffffffffffec2... Unclear: 0x72=’r’ score=999 (second best: 0x02 score=844)
Reading at malicious_x = 0xfffffffffffffec3... Success: 0x64=’d’ score=25 (second best: 0x02 score=10)
Reading at malicious_x = 0xfffffffffffffec4... Unclear: 0x73=’s’ score=999 (second best: 0x02 score=879)
Reading at malicious_x = 0xfffffffffffffec5... Unclear: 0x20=’ ’ score=999 (second best: 0x02 score=799)
Reading at malicious_x = 0xfffffffffffffec6... Unclear: 0x61=’a’ score=997 (second best: 0x02 score=831)
Reading at malicious_x = 0xfffffffffffffec7... Unclear: 0x72=’r’ score=997 (second best: 0x02 score=816)
Reading at malicious_x = 0xfffffffffffffec8... Unclear: 0x65=’e’ score=998 (second best: 0x02 score=836)
Reading at malicious_x = 0xfffffffffffffec9... Unclear: 0x20=’ ’ score=998 (second best: 0x02 score=802)
Reading at malicious_x = 0xfffffffffffffeca... Unclear: 0x53=’S’ score=998 (second best: 0x02 score=871)
Reading at malicious_x = 0xfffffffffffffecb... Success: 0x71=’q’ score=2
Reading at malicious_x = 0xfffffffffffffecc... Unclear: 0x75=’u’ score=998 (second best: 0x02 score=781)
Reading at malicious_x = 0xfffffffffffffecd... Success: 0x65=’e’ score=157 (second best: 0x02 score=76)
Reading at malicious_x = 0xfffffffffffffece... Unclear: 0x61=’a’ score=995 (second best: 0x02 score=851)
Reading at malicious_x = 0xfffffffffffffecf... Unclear: 0x6D=’m’ score=995 (second best: 0x02 score=774)
Reading at malicious_x = 0xfffffffffffffed0... Unclear: 0x69=’i’ score=998 (second best: 0x02 score=900)
Reading at malicious_x = 0xfffffffffffffed1... Unclear: 0x73=’s’ score=997 (second best: 0x02 score=866)
Reading at malicious_x = 0xfffffffffffffed2... Unclear: 0x68=’h’ score=995 (second best: 0x02 score=883)
Reading at malicious_x = 0xfffffffffffffed3... Unclear: 0x20=’ ’ score=997 (second best: 0x02 score=813)
Reading at malicious_x = 0xfffffffffffffed4... Unclear: 0x4F=’O’ score=999 (second best: 0x02 score=880)
Reading at malicious_x = 0xfffffffffffffed5... Unclear: 0x73=’s’ score=997 (second best: 0x02 score=856)
Reading at malicious_x = 0xfffffffffffffed6... Success: 0x73=’s’ score=2
Reading at malicious_x = 0xfffffffffffffed7... Success: 0x69=’i’ score=2
Reading at malicious_x = 0xfffffffffffffed8... Unclear: 0x66=’f’ score=998 (second best: 0x02 score=887)
Reading at malicious_x = 0xfffffffffffffed9... Success: 0x72=’r’ score=2
Reading at malicious_x = 0xfffffffffffffeda... Unclear: 0x61=’a’ score=998 (second best: 0x02 score=767)
Reading at malicious_x = 0xfffffffffffffedb... Success: 0x67=’g’ score=281 (second best: 0x02 score=138)
Reading at malicious_x = 0xfffffffffffffedc... Unclear: 0x65=’e’ score=998 (second best: 0x02 score=894)
Reading at malicious_x = 0xfffffffffffffedd... Success: 0x2E=’.’ score=2
mono ★★★★★
()

Есть PoC (п.4.3) , демонстрирующий атаку с этой уязвимостью через JavaScript

NoScript для параноиков, говорили они, посетители без JS должны страдать говорили они…
Хотя не удивлюсь если эти наши веб-гении станут заявлять что, вместо того чтобы делать защищать память компа от [веб-]приложений, нужно убирать чувствительные данные из памяти (в облака, в которых всё безопасно. Вон видите зелёный замочек? Значит всё безопасно)

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

Уверенность в защищённость макоси – это один из базовых догматов, его никакими уязвимостями не перебить.

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

на ксеонах(спектр точно) оно не работает

Оно точно работает на «Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz (called „Intel Haswell Xeon CPU“ in the rest of this document)»

tailgunner ★★★★★
()

Чет я не догоняю про работу этих уязвимостей. Для обращения к запрещенным участкам памяти у процесса должны быть TLB дескрипторы для «чужих» страниц памяти иначе процессор не поймет к какой физической странице обращаться. А зачем ОС создает такие дескрипторы для пользовательского процесса? Для нулевой страницы (nullptr) еще понятно (но там ничего интересного, да и физической страницы под ней может не быть совсем), а вот как читать страницы памяти соседнего процесса, которые раскиданы по страницам физической памяти там, где нет страниц текущего процесса, вот это не понятно.

P.S. Вообще, хорошее начало года. Бодрит и дисциплинирует.

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

Да, ладно. MacOS уже залатана.

Главное верить. И главное забыть про Spectre.

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

Для обращения к запрещенным участкам памяти у процесса должны быть TLB дескрипторы для «чужих» страниц памяти иначе процессор не поймет к какой физической странице обращаться. А зачем ОС создает такие дескрипторы для пользовательского процесса?

Не знаю, что такое «TLB дескриптор», но он точно создается не ОС, а самим процессором. До KPTI ОС была отмаплена в адресное пространство каждого процессора, так что в TLB ее страницы были.

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

Это пример, он может много где не работать. Ну и JFYI: Xeon от Core отличается в основном тем, что в нём не отключена поддержка ECC.

anonymous
()

А Эльбрус эмулирует x86 со всеми фичами Intel?

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

unix-way - уязвимость и ту затрахаешься пока соберешь

на коре2квад - фигню показывает, а не «меджик ворлд...». причем иногда некоторые буквы тестовой фразы проскакивают, одна-две в произвольном месте. типа

$ ./spectre
Reading 40 bytes:
Reading at malicious_x = 0xffffffffffdfeb68... Success: 0x54=’T’ score=9 (second best: 0x0E score=2)
Reading at malicious_x = 0xffffffffffdfeb69... Success: 0x68=’h’ score=2 
Reading at malicious_x = 0xffffffffffdfeb6a... Unclear: 0x06=’?’ score=62 (second best: 0x0A score=60)
Reading at malicious_x = 0xffffffffffdfeb6b... Unclear: 0x00=’?’ score=61 (second best: 0x0E score=59)
Reading at malicious_x = 0xffffffffffdfeb6c... Unclear: 0x02=’?’ score=62 (second best: 0x09 score=61)
Reading at malicious_x = 0xffffffffffdfeb6d... Unclear: 0x07=’?’ score=61 (second best: 0x06 score=61)
- и дальше одни "?"

anonymous
()

Итого фикс разделяет адресные пространства в user-space и syscall, тем самым замедляя переключение контекста при системных вызовах, т.о. основные пострадавшие это ПО которое делает много системных вызовов, навроде СУБД. Числодробилки и игоря особо не затронуло (кроме сетевого стека).

Расходимся?

Любопытный момент, AMD не затронут, после фиксов просадка в Intel сравняла их CPU с AMD?

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

Ок, покажи как прочитать ядро используя Spectre

А если я не покажу, то это и невозможно? Не стану тебя разубеждать.

P.S. в хедпосте есть все необходимы ссылки.

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

Итого фикс разделяет адресные пространства в user-space и syscall

Это фикс Meltdown, но не Spectre.

tailgunner ★★★★★
()

Вся эта универсальщина, вкупе с неймановской архитектурой, должна быть серьёзно пересмотрена и разбита на подзадачи. Даже на нынешнем этапе можно разделять интернет и работу, и не варить их в одном котле. Ухудшать быстродействие, закрывая дыры — это бред. Я против. Я хочу уязвимый дырявый быстрый процессор и самый уязвимый, совершенно незащищённый софт. Но чтоб программы запускались как 15 лет назад и не требовали гектаров памяти.

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

Вот как после такой паранойи утверждать что Эльбрусы ненужны...

Эльбрусы - это тормозные закрытые процы ВСЯ информация о которых доступна только из рекламных агиток производителя (документация по процу не доступна). Они нужны оборонке и тем, кто работает с гос секретами. Бизнесу и физикам Эльбрусы не нужны. Нет никаких гарантий, что подобных багов в них нет (конкретно этого, скорее всего, нет), а из-за отсутствия документации по ISA их сложнее найти.

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

Похоже это пример грамотной работы АНБ или кто там заказывает дыры в чипах

Или раздолбайства разработчиков Intel. Слабо верится, что такую уязвимость могли не заметить при нормальном подходе к разработке чипа.

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

Или раздолбайства разработчиков Intel.

Самое забавное, что когда RMS говорит о открытой архитектуре сразу высирается, корпоративный шмат лояльности(раб), который начинает расказывать, что это сказки и никто из этих сверх-обученных убер-специалистов получающих кучу бабла за работу и NDA, не будет в этом участвовать и ваш удел радио в гараже собирать.

anonymous
()

Так все-таки, что с AMD? Объясните что значит «только при включении BPF JIT в ядре». Дырявый мой А10 7800 или нет?

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

Спасибо за ответ. Кстати на opennet (они молодцы как всегда) уже попытались все разъяснить - http://www.opennet.ru/opennews/art.shtml?num=47856

Процессоры Intel и ARM64 подвержены обеим проблемам, AMD затрагивает только вторая уязвимость.

AMD (только при включенном eBPF в ядре)

И еще вопрос - что это за eBPF и включена ли оно у меня в kubuntu.

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

Страдать. На федору прилетело новое ядро, я затестил: падение есть, но при записи на ssd где-то с 180 до 130.

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

Спасибо, все ОК. И еще один вопрос знатокам - после включения этого патча с KPTI в ядро замедление (каким бы оно ни было) коснется процессоров AMD точно также хотя они и не подвержены этой уязвимости?

mbivanyuk ★★★★★
()
Последнее исправление: mbivanyuk (всего исправлений: 1)
Ответ на: решето от anonymous

У меня работает то как раз.

не можешь просто скомпилировать

вот щас обидно было :(

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

Хочу сейчас видеть лица поняш

А ты злопамятный. vargvikernes.jpg

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