Spectre meltdown что это
Как в реальности патч от уязвимостей Meltdown и Spectre влияет на производительность
С момента обнародовании информации об уязвимостях Meltdown страсти успели уже поутихнуть. Microsoft успела выпустить патч, огрести с ним проблем, отозвать его и выпустить снова.
Так получилось, что у меня под рукой оказались две близких по характеристикам системы:
i5 7600K + Z270 и i7 3770K + Z77. На обеих системах установлена Windows 10 Pro с последним набором обновлений. Операционная система установлена на SSD, для тестов использовался отдельный NVME SSD, один и тот же в обоих случаях. Графические тесты проводились по принципу «гулять так гулять», на GTX 1080Ti, но, вместе с тем, в реалистичных для такой видеокарты сценариях. То есть никакого понижения настроек графики для выявления чистой незамутнённой процессорозависимости не делалось. На этом железе было решено проверить правдивость заявлений Microsoft о влиянии патчей на производительность современного и старого, но ещё не особо и устаревшего, железа.
Исполнительный вице-президент Microsoft по Windows Терри Маерсон (Terry Myerson) в официальном блоге написал:
Резюмируя текущие результаты исследований, можно сказать следующее:
На компьютерах под управлением Windows 10 на современных процессорах (относящихся к поколениям 2016 года или более новым, то есть Skylake, Kabylake и более новые), тесты продемонстрируют замедление от силы на единицы процентов, которое подавляющее большинство пользователей не сможет заметить, так как в абсолютных величинах разница будет измеряться миллисекундами.
Компьютеры с Windows 10 на относительно старых процессорах (относящихся к поколениям до 2015 года включительно, Haswell и более старые) в некоторых тестах могут показать более значительное падение производительности, возможно некоторые пользователи смогут его заметить.
Производительность систем под управлением Windows Server на любых процессорах заметно пострадает, особенно на приложениях интенсивно использующих ввод-вывод, при активации изоляции недоверенного кода.
Для тестирования различных аспектов производительности систем использовались:
Ожидаемый результат: в соответствии с официальными заявлениями Microsoft, деградация производительности на старом CPU должна быть в разы больше. Исходя из анализа публикаций и заявлений представителей Microsoft, больше всего должен пострадать ввод-вывод.
Поехали!
(небольшая ремарка перед скриншотами с результатами)
Полностью равноценные конфигурации с первого раза протестировать не удалось из-за отсутствия M.2 слота на старой материнской памяти и отсутствием в наличии PCI-E->M.2 рэйзера. Он был заказан на одной всем известной китайской торговой площадке, а я тем временем прогнал тесты на NVME SSD (A-Data XPG SX8000 512GB) на Kaby Lake и на SATA (Silicon Power S55 240GB (Phison) на Ivy Bridge. Результаты получились напрямую несопоставимые, но любопытные.
Хм… результаты получились даже более чем интересные. Производительность самих CPU в сложных расчётах менялась в пределах погрешности. Пострадал больше всего, как и опасались в Microsoft, именно ввод-вывод. А дальше начинаются расхождения с тем, что ожидалось.
Падение производительности ввода-вывода на новом процессоре (Kaby Lake, i5 7600K) после активации патча в худшем случае, в сценарии CrystalMark Write 4K, составило более 70%. Семьдесят два процента! Если так себя введёт IO на новом процессоре, то что будет с откровенно старым?! А на старом i7 3770K 2011 года выпуска падение производительности составило в худшем случае около 6%. Да и абсолютные цифры для таких разных накопителей при активированном патче разнятся не сказать чтобы в разы. Неужели Microsoft и Intel кривят душой? Или мы чего-то не заметили?
Вот результаты прогона тестов:
Сводная таблица результатов:
Плохие новости
Быстрые накопители даже на современных CPU после установки патча теряют до 70% производительности в ряде сценариев.
Технические подробности. Уязвимость Meltdown — CVE-2017-5754
Важно! Уязвимость на самом деле это 3 уязвимости — Meltdown, Spectre 1, Spectre 2
Здравствуй хабр! Сегодня у нас перевод заметки про уязвимость Meltdown (CVE-2017-5754). Переведена только первая страница и основная часть заметки для понимания данной уязвимости.
Общее
Безопасность современной компьютерной системы (прим. автора. Смартфоны, компьютеры, практически любые носимые устройства с возможностью запуска кода не от производителя) основывается на изоляции адресного пространства, для примера память ядра помечена недоступной и защищена от доступа со стороны пользователя. В этой заметке мы представляем вам Meltdown. Meltdown эксплуатирует побочный эффект исполнения-вне-очереди (out-of-order execution) в современных процессорах, чтобы прочитать данные из ядра, в том числе личную информацию и пароли. Исполнение-вне-очереди сильно влияет на производительность и включено в большинство современных процессоров. Атака не зависима от операционной системы и не эксплуатирует программные уязвимости. Meltdown ломает всю безопасность системы основанную на изоляции адресного пространства в том числе паравиртуализованного.
Meltdown позволяет читать часть памяти других процессов и виртуальных машин. Мы покажем, что система KAISER имеет важный побочный эффект в виде в блокировке Meltdown (но является костылем). Мы настаиваем на включении KAISER незамедлительно для исключения утечки информации.
Введение
Безопасность современной компьютерной системы основываясь на изоляции адресного пространства. Операционные системы гарантируют изоляцию отдельных процессов. В современных процессорах разделение состояния между процессами ядра (kernel process) и процессами пользователя (user process) обеспечивается благодаря биту гипервизора. Вся концепция заключаться в том, что этот бит сброшен в пользовательском процессе и установлен в процессе ядра. Смена процессов происходит по прерыванию (interrupt) и системным вызовам (system call / syscall). В настоящий момент адресации памяти не меняться во время системных вызовов и прерываний. Meltdown работает на процессорах Intel 2010-х годов, а также потенциально может затрагивать процессоры других производителей (прим. автора: AMD, VIA). Meltdown эксплуатирует побочный эффект исполнения-вне-очереди (out-of-order execution) в современных процессорах, чтобы прочитать данные из ядра, в том числе личной информации и паролей.
Процессор вместо того, чтобы ждать данных из внешних шин с большой задержкой и простаивать начинают исполнение инструкций и заполняют части ядра, которые простаивают. Но данные действия имеют побочный эффект — разницу в времени исполнения инструкций.
Уязвимые процессоры позволяют непривилегированному процессу исполнять код вне очереди и загружать данные из памяти ядра в временный регистр. Даже больше — процессор производит вычисления на основе значения этого регистра, например загрузить данные из массива данных в зависимости от значения регистра. Процессор гарантируют корректное исполнение кода сбрасывая результат исполнения, например записанный регистр, если результат предсказания неверный. Таким образом никаких проблем на архитектурном уровне не возникает. Но, как было замечено, исполнение вне очереди имеет побочный эффект — заполнение кэша в зависимости от кода исполняемого вне очереди. Таким образом атакующий может прочитать все данные адресное пространство ядра используя особенность микроархитектуры.
Meltdown работает на современных персональных компьютерах и лэптопах, как и на серверах в облаках. Также в песочницах основанных на разделении ядра — паравиртуализация и песочница внутри процесса.
Контрмера KAISER предотвращает атаки нацеленные на KASLR и случайно защищает от атаки Meltdown.
Абстрактный пример
Второя строка никогда не будет исполнена.
Чем бы не была вызвана ошибка, она переводит состояние исполнения-вне очереди в контексте ошибки — чаще всего ядра.
Не смотря на то, что вторая строка кода не была исполнена на архитектурном уровне, но она изменила состояние кэша на миркоархитекурном уровне.
.
Как вы можете заметить время доступа к разным областям массива разное, так как кэш загрузил часть памяти, к которой имел доступ во время исполнения вне очереди.
Таким образом мы можем передать данных из состояния исполнения вне очереди, которой исполняет инструкции в привилегированном режиме, в пользовательский процесс атакующего.
Далее основываясь на том, что доступ к данным уже находящемуся в кэше меньше, чем время за которое процессор откатит действие исполненное вне очереди, атакующий читает значение части памяти ядра находящегося в кэше процессора. Иногда попытка чтения заканчиваеться провалом т.к. процессор успевает сбросить конвейер исполнения-вне-очереди перед тем, как тот прочитает данные (0.003%) и позволяет читать данные на скорости 503KB/s на i7 6700K.
Поток, который воспользуется данной уязвимостью упадет с ошибкой, таким образом для эксплуатации уязвимости процесс должен суметь создать дочерний поток, с доступом к памяти дочернего потока.
Подверженность уязвимости
Linux
Мы удачно воспользовались данной уязвимостью в версиях ядра от 2.6.32 до 4.13.0.
Патч KAISER исключает данную уязвимость.
Windows
Мы удачно воспроизвели данную уязвимость в Windows 10 (прим. перев. версия не указана)
Контейнеры
Атаку можно воспроизвести в контейнерах таких как OpenVZ, Docker, LXC.
Ограничения в AMD и ARM.
Нам не удалось воспроизвести данную уязвимость на ARM и AMD, но возможно наша реализация слишком медленная.
НО! Нам удалось воспроизвести уязвимость связанную с исполнением вне очереди на обоих процессорах
Важно! Патчи для операционных систем предотвращают Meltdown, но не Spectre
Важно! Данная уязвимость может присутствовать в других процессорах!
Извините за короткую заметку! Я так больше не буду :).
Spectre и Meltdown
Все как всегда, слышим звон, но не знаем где он
В сети произошел очередной слив информации об двух уязвимостях в аппаратуре современных процессоров. Собственно уязвимость была открыта для публичного обсуждения одна, но методов ее эксплуатации было раскрыто два, под именами Spectre и Meltdown.
Для специалистов эта проблема оборудования известна давно, она «втихую» эксплуатировалась и все были довольны…
По какой то неизвестной причине о ней было решено раздуть шумиху, причем дилетантским способом, те кто выпускал официальные пресс-релизы (spectre.pdf и meltdown.pdf) явно плохо представляли как все это работает и где проблема.
А поставщики исходной информации не удосужились подробно объяснить проблему, видимо передали работающий эксплоит и краткое описание для дилетантов…
Доморощенные комментаторы и знатоки ассемблера начали с умным видом обьяснять как все это работает.
Вот например статья, с кучей комментариев. Особенно умиляет это:
«Наивный чукотский парень» не понимает для чего сдвиг на 1000h, да и вообще как все это работает, просто переводит своими словами такой же безграмотный текст оригинального пресс-релиза.
Реальное место расположения уязвимости в аппаратуре
Уязвимость расположена здесь, она выделена красным кружком:
Проблема в блоке TLB, который используется в пейджинговой адресации оперативной памяти. Он является ассоциативным буфером хранящим пары значений виртуальный-физический адрес используемой приложением в оперативной памяти. Это не Кеш данных….
Вот как его описывает в документации фирма Интел:
Блок TLB нужен для того чтобы сократить время обращения к ОП за счет исключения процедуры трансляции адресов памяти. Такая трансляция производится единственный раз для всей страницы (размером как раз 4К в случае современных ОС). Все остальные обращения программы к памяти в этой странице уже происходят форсированно, с использованием сохраненного значения в этом буфере. Эти блоки есть во всех современных процессорах, собственно из-за этого все они и подвержены уязвимостям называемым теперь Spectre и Meltdown.
И кстати, спекулятивное выполнение команд не единственная возможность эксплуатации этих уязвимостей, можно задействовать механизм форвардной загрузки данных из ОП.
Блок TLB не имеет программного (микропрограммного) управления, как обычный кеш. Из него невозможно удалить запись, либо принудительно внести/модифицировать какую-либо запись.
В этом и заключается аппаратная уязвимость, все произведенные трансляции адресов сохраняются в этом ассоциативном буфере.
Соответственно произведенная спекулятивно операция тоже оставит в блоке TLB cлед в виде записи, нужно только эту запись обнаружить и идентифицировать. А это уже «дело техники», технология давно известна и применяется, она называется «Исследование состояния аппаратуры методом временного прозвона». Не ищите этого названия в Интернете, метод был известен в очень узких кругах совершенно не публичных специалистов.
А вот теперь с ним будут знакомы все…
Единственная возможность программного воздействия на блок TLB, — это полный сброс всех его значений (ну тут я немного лукавлю исключительно для простоты понимания). Все патчи уязвимостей Spectre и Meltdown предложенные производителями ПО это и делают, перезагружая в обработчике исключения GP регистр CR3.
После сброса TLB процессору приходится заново выполнять трансляции всех используемых страниц виртуальной памяти, это и снижает производительность системы.
Как все это эксплуатируется в реальности
Первым делом нужно в программе создать буфер размером 2 мегабайта, причем в этот буфер нельзя писать/читать до проведения атаки и он должен располагаться на границе 4К блока. Этот размер принципиален, в буфере должны разместиться ровно 256 страниц по 4К (специфика пейджинговой адресации).
Затем выполняются команды типа:
В программе после команды Mov al, [адрес ядра ОС]; произойдет прерывание и значение регистра al не изменится (останется нулевым).
А вот в буфере TLB из-за форвардного запроса выполнения операции произойдет запоминание вычисленного соответствия виртуального адреса и физического адреса [ebx+eax].
Сбросить эту конкретную запись, как это делается в обычном Кеше, в блоке TLB невозможно и она останется…
Соответственно если мы узнаем адрес страницы размером 4К в буфере размером 2М, запомненный в блоке TLB, то мы узнаем и значение прочитанное из ядра ОС в регистр al.
Это уже дело техники, «прозвоним» блок TLB. Для этого нужно по одному разу прочитать все его страницы по 4К, их ровно 256, выполним 256 операций чтения (одну на каждый 4К блок). При этом будем измерять время выполнения операции чтения. Та страница, которая будет читаться быстрее остальных, и будет иметь номер в буфере размером 2М соответствующий прочитанному значению байта из ядра ОС.
Это произойдет потому, что в буфере TLB для этой страницы уже вычислено соответствие между виртуальным и физическим адресом, а для всех остальных страниц этой операции выполнено еще не было.
В «прозвоне» конечно не все так просто, там много нюансов, но это вполне возможно.
Делали, знаем…
Как уязвимости Meltdown и Spectre влияют на ваш смартфон
«Чипокалипсис» 2018 года затронул не только Windows и Linux, как кое-где говорилось вначале. Устройства с iOS и Android тоже под угрозой. И если сисадмины и грамотные пользователи ПК хоть как-то готовятся к атаке, пусть даже морально, владельцы смартфонов, кажется, не задумываются, что к их паролям и другой информации может быть получен доступ. Как Apple и Google реагируют на самую серьезную уязвимость процессоров за все десятилетия их существования, и что мы можем сделать?
О чем речь
Если кто-то только вышел из спячки и пропустил главную IT-новость 2018 года, отличные обзоры для Meltdown и для Spectre на ГТ сделал Олег Артамонов. Если вкратце, это уязвимости, касающиеся почти всех процессоров, выпущенных за последние двадцать лет (все чипы с ядрами Intel, AMD, ARM). Во время спекулятивного выполнения операций, необходимого для повышения производительности, чип потенциально открывает доступ к данным для тех процессов, которые не должны были их получать.
The Verge проводит аналогию Meltdown c банком:
В центре банка стоит сейф с паролем. Рядом с ним сидит охранник с пистолетом. Если вы входите и открываете сейф, вас убивают. В параллельном измерении вы заходите в банк, и вас убивают, но вы успеваете заглянуть в сейф и выкрикнуть пароль. А в этом измерении вы слышите крик с этим паролем, и получаете доступ к данным. Даже несмотря на то, что этот вы в банк никогда не входили.
Уязвимости Meltdown и Spectre касаются ядер процессора, то есть это проблема железа. Но когда (или если) под них сделают зловреда, доступ к этой уязвимости – а также к вашим паролям и зашифрованной информации – он будет получать через софт. Нового «неуязвимого» железа купить вы не можете, его не существует (исключая совсем старинные телефоны, выпущенные на рубеже веков), поэтому единственный способ обезопасить себя – следить за разработчиками операционных систем и их рекомендациями.
На iOS
Apple выпустила свой ответ в четверг, на следующий же день после того, как журналисты обнародовали информацию о наличии аппаратных уязвимостей в микропроцессорах. Она подтвердила, что все Mac и iOS-устройства затронуты этой проблемой. Пока что работающих эксплойтов нет, но пользователям еще раз рекомендуется скачивать приложения только из доверенных источников (App Store) и не заходить на потенциально опасные сайты – атаки возможны через JavaScript.
Команда исследователей, обнаружившая Meltdown и Spectre, проинформировала всех крупных производителей софта и железа еще в июле, и для Windows 10 в ноябре даже вышел патч, пытающийся уменьшить угрозу. Apple такой патч тоже выпустила – iOS 11.2.1, в декабре. Заплатка призвана бороться с Meltdown, и если вы уже обновили девайс до этой версии (она доступна с декабря), атак с этой стороны можно пока не бояться. Судя по тестам GeekBench 4, JetStream и Speedometer, производительность системы при установке патча не снижается.
Против Spectre защиты пока нет. Но хорошая новость в том, что разработать скрипты для нее злоумышленникам будет на порядок сложнее, даже для приложений, локально работающих на iPhone или iPad. Потенциальный эксплойт может засесть только в браузере с JavaScript (и то только теоретически). Чтобы этому противодействовать, Apple работает над апдейтом для Safari к iOS и macOS. Компания обещает, что замедление скорости работы будет меньше 2,5%.
Apple Watch использует процессор другого типа, и уязвимостям Meltdown и Spectre изначально не подвержен.
На Android
Пользователи Android в большей опасности. Google была одной из тех, кто нашла уязвимость в чипах, и первой стала работать над её устранением. Она успела разработать несколько патчей, в особенности – для Android-девайсов с процессорами ARM. И выпустила их для своих партнеров еще в декабре. Но каждый индивидуальный разработчик смартфонов не сможет быстро разработать и выпустить обновление для своей прошивки. К тому же, заплатки касаются далеко не всех чипов, и для большинства девайсов решения пока нет.
Процессоры Intel подвержены все, ядра ARM подвержены почти все (от Cortex-A53 и выше). Подтверждено наличие уязвимостей в Cortex-A15, Cortex A-17, Cortex A-72, Cortex-A75, а это процессоры Exynos 5, Exynos 7, Qualcomm Snapdragon 650, 652, 653, 808 и 810, Mediatek Helio X20. Samsung, LG, HTC, Xiaomi, Meizu и другие – для атак через Meltdown и Spectre их девайсы пока что открыты.
Самое обидное – по данным ARM, в категории «уязвимых» оказались процессоры с архитектурой Cortex-A73. А это Snapdragon 835, вставленный в большинство смартфонов-флагманов 2017 года: Galaxy S8, S8+, Note 8, Google Pixel 2, OnePlus 5 и так далее. То же касается и флагманов 2015 года с процессором Snapdragon 810, в котором стоят ядра Cortex-A57. То есть, чем дороже у вас смартфон, тем выше шанс, что он подвержен атаке.
Хорошая новость в том, что если у вас смартфон или планшет с ядрами ARM, о которых не говорится выше, и разработчик вашего девайса на короткой ноге с Google, и вы поставили последние обновления, вы должны быть в безопасности. Можно без страха заходить в интернет-банкинг и вводить пароли от платежных систем. Плюс, Google заявляет, что она разработала новую заплатку Retpoline от Spectre, которая почти не замедляет систему. Она уже работает в продуктах компании, и должна помочь другим производителям.
Что можно сделать
Пока что даже крупные IT-корпорации в замешательстве. Элегантного решения нет ни у кого – возможно, для полной гарантии придется ждать выпуска процессоров с новой архитектурой. А это больше года: текущие процессоры уже находятся в разработке, и снимать их с конвейера ARM и Intel пока не собираются. Пока что наша безопасность находится в наших собственных руках. Есть несколько (довольно очевидных) правил, которым нужно следовать:
1. Поставьте все обновления от вашего производителя.
Нам могут и не говорить, что конкретно содержится в апдейте. Так, например, сделала Microsoft для Windows 10, чтобы не вызывать панику, и так же «втихую» пытались обновить Linux. Для смартфонов и планшетов это еще важнее. Разработчик вашего девайса должен выпустить патч буквально на этой неделе (если он еще этого не сделал). И, скорее всего, будет выпускать еще не один защитный патч после этого – по мере того, как будут находиться новые решения проблемы. Производительность системы может снизиться на 5-30%, но на деле вы этого не заметите. Самые мощные приложения и игры мало используют системные вызовы, и падение скорости в них не должно превысить 3%.
Для смартфонов Apple апдейты безопасности вышли в декабре, для Samsung их пока не было (обновления касались других аспектов), но их ждут в январе. Устройства Google, включая Nexus 5X, Nexus 6P, Pixel C, Pixel, Pixel 2, апдейты получили.
Обязательно обновите свой браузер.
2. Осторожнее с установкой новых приложений
Наличие заплатки [пока] ничего не гарантирует. Патч, даже если он годится для вашего процессора, только усложняет использование Spectre и Meltdown для взлома девайса. И тут надо понимать, что если эксплойт, ломающий смартфон, всё-таки создадут, он почти наверняка выйдет в виде приложения. Любое запущенное приложение во время работы имеет доступ к процессору, и это всё, что нужно, чтобы воспользоваться уязвимостью. JavaScript в браузере – тоже локально выполняющийся код, но новые Chrome, Firefox и Safari уже сделали предельно усложнили его использование при атаке. Если вы не скачиваете непроверенные приложения, особенно APK с третьих сайтов, шансы «подхватить» эксплойт серьезно снижаются.
Поставьте антивирус, особенно если у вас Android. Всегда проверяйте, кто загрузил приложение в App Store или на Google Play. Не скачивайте лишних утилит. Практическая реализация зловреда крайне сложна, и, скорее всего, атаковать будут банки и корпорации, а не наши пароли от ГТ и Телеграмма в смартфонах. Но вероятность остается, а зловредов в смартфонах и планшетах на нашу голову и без того хватает. В 2017-м в мире нашли 90 млн вирусов, и, судя по новостям этой недели, этот год грозится стать еще хуже. Особенно в связи с последними прогнозами, что хакерские атаки в 2018-м возглавит ИИ. Так считает 62% топ-специалистов по информационной безопасности, опрошенных Cylance.
Для Intel, кстати, нынешняя ситуация вполне может обернуться профитом: чипы, не содержащие этих уязвимостей, которые выйдут через пару лет, будут востребованы, как никогда. Сложнее всего из тех. компаний приходится Microsoft и Amazon – их гигантские облачные сервисы (AWS, Azure) и виртуальные машины под большой угрозой, и если какие-то хакеры и попытаются «оседлать» Spectre и Meltdown, одну из первых атак логично будет направить на них.