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

Обычные 32-бит армы то не подвержены.

У вас устаревшие, вчерашние данные. Бегом в первый пост за новыми и актуальными.

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

Ну так ведоргелистов было много, последователей еще больше.
Теперь што делать, ждать новый Самсунг S99.99 с пофикшеным проциком, за много денег. MWC еще далеко, только в марте...

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

Обычные 32-бит армы то не подвержены.

Они подвержены.

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

На этом основывались все внутрипроцессные песочницы

ну в таком виде становится яснее. что просто ещё одна новая тайминг атака. для софта, который к ним и так не был устойчив нового ничего.

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

Ты тестируешь exploit для Spectre, от которого защиты пока нет.

// b.

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

Ёк! mwc с 26 февраля.
так что не так и долго. А там новые лопатки, со старыми вёдрами %-) ДБ(!)

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

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

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

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

Их уже продают в обычных магазинах электроники? Нет? Тогда действительно не нужны

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

Писал почти утром: вторую ночь из-за этой дыры не сплю - иди на ***, мелкое анонимное ублюжество.

Мне вообще пох*ру на рускей езык - кто хоть на 0.5% имеет отношение к #infosec, обязан знать английский.

// b.

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

Ну да, ну да. Просто еще одна атака, nothing to see here, move on.

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

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

В ОП написано, что подвержены лишь некоторые. А по ссылке со списком лор-эффект. Так что мне почитать.

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

будет ли в природе утиль из разряда - нажал кнопку, проверил и всё понятно.

Для Spectre вот (скопировать в файл spectre.c): https://gist.github.com/ErikAugust/724d4a969fb2c6ae1bbd7b2a9e3d4bb6

sed 's/CACHE_HIT_THRESHOLD(80)/CACHE_HIT_THRESHOLD 80/' -i spectre.c
gcc -march=native spectre.c -o spectre
./spectre

Для Meltdown не нашел еще спролита.

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

Ожидаемо в приложениях с минимальным числом системных вызовов падения не наблюдается.

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

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

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

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

Это не так уж давно стали появляться разные биты для запрета (в основном писать) вне своих секций (кода, данных, стека). А вообще-то присвоить указателю адрес из адресного пространства процесса вроде никто не запрещал, я сейчас даже не очень пойму как запрет мог бы вообще работать, аппаратно-то защищается область из списка селекторов. Или я наламерил что-то сейчас?

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

У меня суся 42.3 амд фх 8350, после сегодняшнего патча работает если #define CACHE_HIT_THRESHOLD (150) выставить. До накатывания патча не тестил.

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

Я обновил арч, kpti enabled, а spectre приведенный выше у меня скорее не работает (левые символы вроде %, @, не те буквы, бОльшая часть - ?). Описание проца кидал тоже выше.

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

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

Среднестатистический человек просто не успеет просмотреть код всех его приложений. Кроме того есть те кто проводят обратную разработку вирусов. Так что всё очень плохо.

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

Но интересно, как будут бэкпортить kpti на какой-нибудь RHEL 6.

Будут и на 5, и на 4 - деньги-то за что им платят, как не за закрытие таких дыр?

mv ★★★★★
()

AMD FX-8350 эксплойт со spectre срабатывает, правда пришлось увеличить число попыток tries с 999 до 99999.

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

Я обновил арч, kpti enabled, а spectre приведенный выше у меня скорее не работает (левые символы вроде %, @, не те буквы, бОльшая часть - ?). Описание проца кидал тоже выше.

попробуй увеличить 999 на 62 строке:

for (tries = 999; tries > 0; tries--) {

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

ты наводишь истерику

Какое счастье, что хладнокровный истинный ариец wieker ей не поддается.

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

Напомнило классику:

«Вместо „малого дождика“ - душ из напалма и раз в неделю прыжки с Ниагарского водопада.»

Фигня вопрос.

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

Что ты такой злой, я писал корректору, а не тебе, дорогой ;-)

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

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

Самое главное: «замедляющий на 5%-30% патч» необходим только для процессоров Intel !

В особой фазе луны это и амд касается.

но и AMD тоже (есть сообщения, что только при включении BPF JIT в ядре, что по умолчанию выключено)

NextGenenration ★★
()

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

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

Так себе. #define CACHE_HIT_THRESHOLD (20) (больше - больше ?)

./spectre 
Reading 40 bytes:
Reading at malicious_x = 0xffffffffffdfed68... Success: 0x54=’T’ score=17 (second best: 0x0D score=6)
Reading at malicious_x = 0xffffffffffdfed69... Unclear: 0x45=’E’ score=874 (second best: 0x52 score=866)
Reading at malicious_x = 0xffffffffffdfed6a... Unclear: 0x01=’?’ score=742 (second best: 0x45 score=721)
Reading at malicious_x = 0xffffffffffdfed6b... Unclear: 0x45=’E’ score=965 (second best: 0x15 score=950)
Reading at malicious_x = 0xffffffffffdfed6c... Unclear: 0x86=’?’ score=1186 (second best: 0xFA score=1184)
Reading at malicious_x = 0xffffffffffdfed6d... Unclear: 0x61=’a’ score=1187 (second best: 0x45 score=1174)
Reading at malicious_x = 0xffffffffffdfed6e... Unclear: 0x45=’E’ score=1011 (second best: 0x51 score=964)
Reading at malicious_x = 0xffffffffffdfed6f... Unclear: 0x69=’i’ score=1160 (second best: 0x5E score=1087)
Reading at malicious_x = 0xffffffffffdfed70... Unclear: 0x48=’H’ score=1180 (second best: 0xEF score=1167)
Reading at malicious_x = 0xffffffffffdfed71... Unclear: 0xBC=’?’ score=846 (second best: 0x15 score=845)
Reading at malicious_x = 0xffffffffffdfed72... Unclear: 0xE2=’?’ score=888 (second best: 0x28 score=883)
Reading at malicious_x = 0xffffffffffdfed73... Unclear: 0x45=’E’ score=1104 (second best: 0x86 score=1092)
Reading at malicious_x = 0xffffffffffdfed74... Unclear: 0xE3=’?’ score=1199 (second best: 0x45 score=1198)
Reading at malicious_x = 0xffffffffffdfed75... Unclear: 0x48=’H’ score=1107 (second best: 0xE2 score=1104)
Reading at malicious_x = 0xffffffffffdfed76... Unclear: 0x45=’E’ score=873 (second best: 0x48 score=841)
Reading at malicious_x = 0xffffffffffdfed77... Unclear: 0x15=’?’ score=585 (second best: 0x02 score=583)
Reading at malicious_x = 0xffffffffffdfed78... Unclear: 0x45=’E’ score=910 (second best: 0x56 score=839)
Reading at malicious_x = 0xffffffffffdfed79... Unclear: 0x02=’?’ score=503 (second best: 0x45 score=443)
Reading at malicious_x = 0xffffffffffdfed7a... Unclear: 0x45=’E’ score=655 (second best: 0x01 score=626)
Reading at malicious_x = 0xffffffffffdfed7b... Unclear: 0x45=’E’ score=650 (second best: 0x0D score=614)
Reading at malicious_x = 0xffffffffffdfed7c... Success: 0x53=’S’ score=2 
Reading at malicious_x = 0xffffffffffdfed7d... Unclear: 0x45=’E’ score=833 (second best: 0x88 score=773)
Reading at malicious_x = 0xffffffffffdfed7e... Unclear: 0x45=’E’ score=859 (second best: 0x60 score=821)
Reading at malicious_x = 0xffffffffffdfed7f... Success: 0x02=’?’ score=2 
Reading at malicious_x = 0xffffffffffdfed80... Unclear: 0x45=’E’ score=972 (second best: 0x56 score=850)
Reading at malicious_x = 0xffffffffffdfed81... Unclear: 0x62=’b’ score=1046 (second best: 0xA5 score=969)
Reading at malicious_x = 0xffffffffffdfed82... Unclear: 0x45=’E’ score=1142 (second best: 0x5E score=1118)
Reading at malicious_x = 0xffffffffffdfed83... Unclear: 0x45=’E’ score=1052 (second best: 0x93 score=952)
Reading at malicious_x = 0xffffffffffdfed84... Unclear: 0x45=’E’ score=1067 (second best: 0x52 score=980)
Reading at malicious_x = 0xffffffffffdfed85... Unclear: 0x45=’E’ score=1072 (second best: 0x15 score=965)
Reading at malicious_x = 0xffffffffffdfed86... Unclear: 0x45=’E’ score=1031 (second best: 0x88 score=931)
Reading at malicious_x = 0xffffffffffdfed87... Unclear: 0x45=’E’ score=1040 (second best: 0x88 score=987)
Reading at malicious_x = 0xffffffffffdfed88... Unclear: 0x45=’E’ score=1182 (second best: 0x11 score=1039)
Reading at malicious_x = 0xffffffffffdfed89... Success: 0x69=’i’ score=2 
Reading at malicious_x = 0xffffffffffdfed8a... Unclear: 0x45=’E’ score=1107 (second best: 0x93 score=1012)
Reading at malicious_x = 0xffffffffffdfed8b... Unclear: 0x45=’E’ score=1054 (second best: 0x67 score=992)
Reading at malicious_x = 0xffffffffffdfed8c... Unclear: 0x45=’E’ score=1178 (second best: 0x56 score=1092)
Reading at malicious_x = 0xffffffffffdfed8d... Unclear: 0x45=’E’ score=1161 (second best: 0x51 score=1091)
Reading at malicious_x = 0xffffffffffdfed8e... Unclear: 0x45=’E’ score=943 (second best: 0x93 score=835)
Reading at malicious_x = 0xffffffffffdfed8f... Unclear: 0x23=’#’ score=1078 (second best: 0xCA score=1047)
JAkutenshi ★★
()

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

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

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

>> Самое главное: «замедляющий на 5%-30% патч» необходим только для процессоров Intel !

> В особой фазе луны это и амд касается.

Не совсем. Meltdown на AMD нет вообще. Не просто так Kpиc пользовался Duron 1600 MHz.

Процитированный тобой кусочек - это про Spectre.

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

Или я наламерил что-то сейчас?

Почти всё. Ты приписал песочницам то, что относится к нативным приложениям.

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

> т.е. если полностью отключить в браузере javascript, то данными уязвимостями воспользоваться не получится?

Это значительно обезопасит сёрфинг. Можно также взломать TCP/IP пакетом. Например роутер на ARM-е.

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

Есть же на AMD, просто там вроде надо что-то включить, что выключено по-дефолту. Знатоки суммонятся в тред.

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

онип просто не смогли всё у штеуда скопировать! лузири!

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

Да и пора браузерам существенно ограничить JS в потенциально опасных возможностях (ведь на что-то типа Lua они явно не заходят спрыгивать).

Какая им выгода менять js на lua?

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

RHEL 7 @ Intel(R) Xeon(R) CPU X5550 @ 2.67GHz

Ядро 3.10.0-693.5.2.el7.x86_64:

$ dd if=/dev/zero of=/tmp/testfile bs=512 count=5000000                        
5000000+0 records in                                                                                
5000000+0 records out                                                                               
2560000000 bytes (2.6 GB) copied, 6.99513 s, 366 MB/s                                               
$ ./Spectre | head -4                                                          
Reading 40 bytes:                                                                                   
Reading at malicious_x = 0xffffffffffdffb10... Success: 0x54=’T’ score=2                            
Reading at malicious_x = 0xffffffffffdffb11... Success: 0x68=’h’ score=2                            
Reading at malicious_x = 0xffffffffffdffb12... Success: 0x65=’e’ score=2 

Ядро 3.10.0-693.11.6.el7.x86_64:

$ dd if=/dev/zero of=/tmp/testfile bs=512 count=5000000                        
5000000+0 records in                                                                                
5000000+0 records out                                                                               
2560000000 bytes (2.6 GB) copied, 22.719 s, 113 MB/s                                                
$ ./Spectre | head -4                                                          
Reading 40 bytes:                                                                                   
Reading at malicious_x = 0xffffffffffdffb10... Success: 0x54=’T’ score=2                            
Reading at malicious_x = 0xffffffffffdffb11... Success: 0x68=’h’ score=2                            
Reading at malicious_x = 0xffffffffffdffb12... Success: 0x65=’e’ score=2

Вот такие пирожки. Интересно, как будут этот Spectre зашивать и будут ли вообще.

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

Фигня вопрос.

Не понимаю, что заставляет тебя ерничать.

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

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

Почти всё. Ты приписал песочницам то, что относится к нативным приложениям.

Вопрос принципиальный. Если spectre угрожает только JIT песочницам и интерпретаторам, то это конечно довольно неприятно, но в принципе жить можно, а если нативное приложение сможет читать данные из другого адресного пространства (хотя бы и только ring 3), на которые нет debug-привилегий, вот это уже задница.

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

Не понимаю, что заставляет тебя ерничать.

То, что ты считаешь, что глубоко в теме, но говоришь почему-то банальности, и при этом обвиняешь меня в истерике.

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