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)
Ответ на: комментарий от Deleted

А всё началось куда заранее.

С июня 2017г. Google’s Project Zero.

Кстати там русские фамилии есть

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

Сейчас есть патчи от спектра или это все-таки принципиально архитектурная лажа и не латается?

Это принципиальная архитектурная. Можно ли ее залатать - никто пока точно не сказал, хотя лично мне кажется, что можно.

tailgunner ★★★★★
()

+ добавь ссылку на PoC Spectre

Там тот же код, что и в spectre.pdf думаешь всё-равно надо добавить, чтобы не выковыривали его?

Разработчики LLVM выкатили патчи для CVE-2017-5715

Чего-то это похоже не на патч, а на «подложили немного соломки».

Думаю, что будет минимум ещё одна новость с обзором патчей, переспектив на будущее, новых ядер и cpu и т.п. Там это уместнее. Сейчас не вижу большого смысла упоминать об этом патче в данной новости, так как минимум требуется перекомпиляция софта этим llvm.

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

Собственно, вот с таким выводом беспокоиться или вероятность что меня прочтут низка (значение 30, если больше, то почти все ?):

$>> ./spectre 
Reading 40 bytes:
Reading at malicious_x = 0xffffffffffdfed68... Unclear: 0xDD=’?’ score=919 (second best: 0x9A score=919)
Reading at malicious_x = 0xffffffffffdfed69... Unclear: 0xA2=’?’ score=955 (second best: 0x49 score=943)
Reading at malicious_x = 0xffffffffffdfed6a... Unclear: 0xA2=’?’ score=936 (second best: 0x88 score=935)
Reading at malicious_x = 0xffffffffffdfed6b... Unclear: 0xFF=’?’ score=976 (second best: 0xE6 score=976)
Reading at malicious_x = 0xffffffffffdfed6c... Unclear: 0xA2=’?’ score=965 (second best: 0x6B score=965)
Reading at malicious_x = 0xffffffffffdfed6d... Unclear: 0x88=’?’ score=963 (second best: 0x3A score=960)
Reading at malicious_x = 0xffffffffffdfed6e... Unclear: 0x6B=’k’ score=968 (second best: 0xE1 score=966)
Reading at malicious_x = 0xffffffffffdfed6f... Unclear: 0xA2=’?’ score=982 (second best: 0xF5 score=979)
Reading at malicious_x = 0xffffffffffdfed70... Unclear: 0xA2=’?’ score=952 (second best: 0xF5 score=944)
Reading at malicious_x = 0xffffffffffdfed71... Unclear: 0xC4=’?’ score=973 (second best: 0x9B score=970)
Reading at malicious_x = 0xffffffffffdfed72... Unclear: 0xA5=’?’ score=982 (second best: 0xBE score=979)
Reading at malicious_x = 0xffffffffffdfed73... Unclear: 0x8C=’?’ score=992 (second best: 0x12 score=992)
Reading at malicious_x = 0xffffffffffdfed74... Unclear: 0x88=’?’ score=978 (second best: 0xC0 score=977)
Reading at malicious_x = 0xffffffffffdfed75... Unclear: 0xA2=’?’ score=961 (second best: 0x88 score=952)
Reading at malicious_x = 0xffffffffffdfed76... Unclear: 0xC8=’?’ score=988 (second best: 0xC9 score=987)
Reading at malicious_x = 0xffffffffffdfed77... Unclear: 0x9B=’?’ score=964 (second best: 0x4D score=955)
Reading at malicious_x = 0xffffffffffdfed78... Unclear: 0xFF=’?’ score=999 (second best: 0xFE score=999)
Reading at malicious_x = 0xffffffffffdfed79... Unclear: 0xC4=’?’ score=981 (second best: 0x6B score=979)
Reading at malicious_x = 0xffffffffffdfed7a... Unclear: 0x65=’e’ score=967 (second best: 0xBE score=965)
Reading at malicious_x = 0xffffffffffdfed7b... Unclear: 0xF4=’?’ score=990 (second best: 0x9C score=989)
Reading at malicious_x = 0xffffffffffdfed7c... Unclear: 0x76=’v’ score=980 (second best: 0x60 score=975)
Reading at malicious_x = 0xffffffffffdfed7d... Unclear: 0x88=’?’ score=982 (second best: 0xE1 score=980)
Reading at malicious_x = 0xffffffffffdfed7e... Unclear: 0x88=’?’ score=972 (second best: 0x3A score=971)
Reading at malicious_x = 0xffffffffffdfed7f... Unclear: 0xC4=’?’ score=963 (second best: 0x6B score=963)
Reading at malicious_x = 0xffffffffffdfed80... Unclear: 0xA2=’?’ score=951 (second best: 0xC4 score=950)
Reading at malicious_x = 0xffffffffffdfed81... Unclear: 0xF5=’?’ score=983 (second best: 0x88 score=983)
Reading at malicious_x = 0xffffffffffdfed82... Unclear: 0x88=’?’ score=971 (second best: 0x3A score=967)
Reading at malicious_x = 0xffffffffffdfed83... Unclear: 0xC4=’?’ score=971 (second best: 0xE5 score=970)
Reading at malicious_x = 0xffffffffffdfed84... Unclear: 0xA2=’?’ score=960 (second best: 0xC4 score=959)
Reading at malicious_x = 0xffffffffffdfed85... Unclear: 0x41=’A’ score=988 (second best: 0xFF score=986)
Reading at malicious_x = 0xffffffffffdfed86... Unclear: 0x2E=’.’ score=971 (second best: 0xEB score=970)
Reading at malicious_x = 0xffffffffffdfed87... Unclear: 0xA2=’?’ score=964 (second best: 0xC4 score=959)
Reading at malicious_x = 0xffffffffffdfed88... Unclear: 0xC4=’?’ score=957 (second best: 0xC9 score=956)
Reading at malicious_x = 0xffffffffffdfed89... Unclear: 0x8E=’?’ score=995 (second best: 0x8D score=995)
Reading at malicious_x = 0xffffffffffdfed8a... Unclear: 0x76=’v’ score=966 (second best: 0xC4 score=961)
Reading at malicious_x = 0xffffffffffdfed8b... Unclear: 0xF5=’?’ score=963 (second best: 0xA2 score=963)
Reading at malicious_x = 0xffffffffffdfed8c... Unclear: 0xBE=’?’ score=961 (second best: 0x1A score=954)
Reading at malicious_x = 0xffffffffffdfed8d... Unclear: 0x88=’?’ score=947 (second best: 0x3A score=946)
Reading at malicious_x = 0xffffffffffdfed8e... Unclear: 0x6B=’k’ score=984 (second best: 0xC4 score=982)
Reading at malicious_x = 0xffffffffffdfed8f... Unclear: 0xFE=’?’ score=999 (second best: 0xFD score=999)
JAkutenshi ★★
()

кстати Касперскому парашют не интел подарила?

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

Сейчас есть патчи от спектра или это все-таки принципиально архитектурная лажа и не латается?

патч по защите страниц ядра уже а «общий патч» наверное серьёзный пересмотр работы с кешем, проталкивание в компиляторы всяких проверок для всего всего ну и как результат просадка производительности т.к. в погоне за баблом и рынками кое-кто умолчал или забил на возможные проблемы в будущем а возможно предвидя придумал как на этом нагрется. возможно сейчас выйдут новые интЭл с проверками при спекулятивном исполнении в новой упаковке

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

Это принципиальная архитектурная. Можно ли ее залатать - никто пока точно не сказал, хотя лично мне кажется, что можно.

Мне пришло в голову, что если spectre может читать память из user-space процессов, но всё-таки не может из ядра (ring 0), то очень костыльная заплата будет заключаться в переносе в ядро важных, чувствительных процессов, бывших до сих пор пользовательскими. Ну и видимо распихивание процессов по разным VM с полной (а не паравиртуализацией) тоже должно помочь. Правда такое распихивание - это не 30% будет потеря, тут IO раз в пять просядет.

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

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

Браузер в ядро будут переносить?

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

Собственно, вот с таким выводом беспокоиться или вероятность что меня прочтут низка

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

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

Мне пришло в голову, что если spectre может читать память из user-space процессов

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

tailgunner ★★★★★
()

а теперь про windows 10 x64

Только что было установлено обновления, после перезагрузки антивирус symantec endpoint protection сказал что приложение требует внимания. При открытии симантек показал что функция ливапдейт не доступна, горела серым. Через несколько минут сама по себе загорелась опять черным, типо стала доступной. Как бы это не оказалось в том числе фундаментальной функцией винды которая годами работала, а теперь из-за такого глобального изменения ядра некоторый софт начнет немножко не работать. Апдейт кстати 602 мегабайта, и только на это исправление как сказано.

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

Не везде. Еще раз - описываются 2 уязвимости, которые проявляются на процессорах разных временных отрезков.

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

Пожалуй. Уйду-ко я оффлайн, качать аниме буду только торрентами с трекерами без js...

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

Собственно, вот с таким выводом беспокоиться или вероятность что меня прочтут низка

Ну, если тебя устраивает низкая вероятность на PoC-коде - тебе волноваться не о чем.

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

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

Не хотелось бы нагнетать паники, но spectre пока что именно так фундаментально и выглядит.

Если нет - можно что-то обсуждать, но решения должны быть на уровне процессора, а не ОС.

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

anonymous_incognito ★★★★★
()
Последнее исправление: anonymous_incognito (всего исправлений: 2)

Power'ы говорят тоже? Кто-то уже начал писать софтверный хак для иксбокса?

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

Интересно, побьёт ли убытки от FDIV бага.

Проблема со FDIV была во времена, когда большая часть программ умела работать без сопроцессора. С другой стороны, тогда было легче сменить процессор — были конкуренты под тот же сокет. А сейчас бежать некуда.

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

А тех из них, кто, быть может, и готов отдать родине немножечко интеллекта, почти обязательно будут пытаться держать на коротком поводке, обкладывая по периметру дружбанов-в-законе, которые с чувством выполненного долга будут выкусывать нервы по миллиметру.

Можно перевод с эзопова на русский?

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

линус в процах не понимает

Он какое-то время работал в Transmeta в команде разработчиков процессора над ядром, исполняющим микрокод.

Он сам тогда утверждал, что только админил сервера и с новыми процессорами дела не имел.

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

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

там же косвенная адресация эксплойтится. втягивается в кеш строка по адресу interesting_array[cookie], а отложенное исполнение позволяет проверку cookie обойти.

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

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

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

Спасибо за замечание.

В первом случае (чтение данных внутри одного адресного пространства и кольца) не удивительно, что Intel не считает это уязвимостью. Ну потому что на уровне машинного кода инструкции не делают различий между указателями в недоверенных данных JS и данных самого VM. Но без второй уязвимости это не фатальная проблема - можно весь недоверенный код вынести в отдельный процесс с минимальным IPC. Это, скорее, плохой дизайн песочницы.

А вот второй случай (meltdown) - это очень плохо. Ядерный код (даже через eBPF) может читать всю память именно из-за этого. Ну, то есть, ты можешь спекулятивно исполнить код из ядра, потому что ядро замаплено. Но если оригинальная инструкция, которая начала спекуляцию, исполнялась в непривилегированном режиме, данные не должны (ну, как предполагалось писателями ОС) попадать в кэш без проверки прав доступа.

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

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

Не хотелось бы нагнетать паники, но spectre пока что именно так фундаментально и выглядит.

Пока что не сказано прямо, что чтение памяти других процессов возможно.

Если нет - можно что-то обсуждать, но решения должны быть на уровне процессора, а не ОС.

Поскольку микрокодом это похоже не лечится,

Я имел в виду относительно небольшие архитектурные доработки. Или даже флаг процессора «не вытеснять кэш при спекуляции».

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

А вот второй случай (meltdown) - это очень плохо

Meltdown (насколько я понимаю) - подмножество Spectre, примененное к ядру, отображенному в пространство процесса + какая-то ошибка, связанная с недостаточным security check (ведь AMD, подверженный Spectre, не подвержен Meltdown).

Ну, то есть, ты можешь спекулятивно исполнить код из ядра, потому что ядро замаплено

Не поэтому, Эксплойт Spectre через eBPF сработает независимо от того, отображено ли ядро в юзерспейс.

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

описываются 2 уязвимости, которые проявляются на процессорах разных временных отрезков.

Ясно. Спасибо.

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

На этом выхлопе уязвимости в твоём Atom'е нету. Но сей эксплоит написан кем-то быстро на коленке. Поэтому утверждать что ты защищён от Spectre вряд ли будет правильным.

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

Проблема со FDIV была во времена, когда большая часть программ умела работать без сопроцессора.

Кроме того FDIV баг вылезал только на некоторых сочетаниях делимого и делителя, причём потеря точности была только в 4-м знаке после запятой. То есть, для большого количества софта, даже с вычислениями с плавающей точкой баг был не сильно критичен.

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

На этом выхлопе уязвимости в твоём Atom'е нету.

На старых Атомах (без OoO) его и не должно быть. На новых - таки должен.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)

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

После этой дыры все остальные уязвимости можно считать микротрещинами.

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

Пока что не сказано прямо, что чтение памяти других процессов возможно.

А разве для чтения памяти своего процесса какие-то защиты вообще существовали, то есть, в чём тогда баг, что нашли способ это сделать через одно место? Хотя если против песочницы Javascript и прочих, то таки да, баг. Я не вникал в эту область, но мне казалось, что песочницы всё же отдельным процессом запускали, если нет, то кхм, вопрос тогда кто ещё тут дурак :)

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

Разумеется многое зависит от контекста, но в общем смысле meltdown - расплавление (разрушение в результате плавления). А расплавиться может много чего: кусок металла, ледяная статуя, кремовая розочка на торте и т. д.

Leupold_cat ★★★★★
()

Димка Бачило, помнится, 31 декабря 2017 года кудахтал об умирающих десктопах... Теперь вот померли все планшеты на необновленном Ведроиде. Бу-га-га-га!!!

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

Да, я уже прочитал все подробно.

Согласен.

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

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

«Защиты»? Всегда считалось, что код читает/пишет только те адреса, которые есть в коде (или вычисляются в коде). На этом основывались все внутрипроцессные песочницы. На данный момент эти песочницы бесполезны.

Это не говоря о том, что attack surface ядра ВНЕЗАПНО выросла.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.