Дырявые CPU: все что есть сегодня об Meltdown и Spectre

Дырявые CPU: все что есть сегодня об Meltdown и Spectre
Как все началось в январе 2018

Отгремели новогодние праздники и в мире ИБ год начался с плохих новостей, в первых числах января 2018 года ИТ-сообщество узнало о глобальных уязвимостях Meltdown и Spectre, которым подвержены практически все современные процессоры и, следовательно, устройства (телефоны, планшеты, встраиваемая техника и т.д.).
Как показала практика, сами уязвимости – это еще не самое страшное, что произошло, так как вскоре оказалось, что исправить эти баги очень и очень трудно - патчи выпущенные вендорами были зачастую несовместимы с антивирусными решениями, вызывают отказ в работе некоторых систем, провоцируют BSOD и частые перезагрузки , а также снижают производительность как отдельных машин таки целых ЦОД.



Greetz!:)

Отельное спасибо журналу ][акер, Хабру и экспертам ИБ любезно поделившимися своим мнением и материалами для публикации.

Что за аппаратные проблемы были найдены?

Meltdown — аппаратная уязвимость, обнаруженная в ряде микропроцессоров, в частности, производства Intel и архитектуры ARM. Meltdown использует ошибку реализации спекулятивного выполнения команд  в процессорах Intel и ARM, из-за которой при спекулятивном выполнении инструкций чтения из памяти процессор игнорирует права доступа к страницам.
Уязвимость позволяет локальному атакующему (при запуске специальной программы) получить несанкционированный доступ на чтение к привилегированной памяти (памяти, используемой ядром операционной системы). Атаке был выделен CVE-идентификатор уязвимости CVE-2017-5754 (подробный обзор на Хабре).



Spectre — еще одна аппаратная уязвимость, ошибка в большинстве современных процессоров, имеющих спекулятивное выполнение команд  и развитое предсказание ветвлений, позволяющая проводить чтение данных через сторонний канал в виде общей иерархии кэш-памяти. Затрагивает большинство современных микропроцессоров, в частности, архитектур х86/x86_64 (Intel и AMD) и некоторые процессорные ядра ARM. Уязвимость потенциально позволяет локальным приложениям (локальному атакующему, при запуске специальной программы) получить доступ к содержимому виртуальной памяти текущего приложения или других программ. Угрозе присвоены два CVE-идентификатора: CVE-2017-5753 и CVE-2017-5715 .



Доп инфо для "тех кто разбирается" в статье на Хабре
Технические подробности
Meltdown уязвимость независимо друг от друга описали специалисты из Google Project Zero, Cyberus Technology и Грацского технического университета (Австрия), а также упомянутый выше криптограф Пол Кёхер. Вместе они обнаружили универсальный способ, позволяющий обойти разграничение адресов пользовательских и системных процессов в памяти.
Атака нарушает базовый механизм безопасности из-за внеочередного исполнения процессорных инструкций и упреждающей загрузки данных в кеш.

Суть атаки такова:
  1. Зловред запускается и очищает процессорный кеш.
  2. Он создает в оперативной памяти массив из 256*4096 элементов. Номера строк массива отражают все возможные значения одного байта (0 – 255). Массив точно не попадает в кеш из-за размера и потому, что к нему еще не обращались.
  3. Троян объявляет переменную tmp и просит записать в нее значение байта, хранящегося по закрытому для него адресу другого процесса. Так делать нельзя, но, пока MMU это выяснит, конвейер обработает инструкцию на упреждение и подтянет запрошенные данные в кеш.
  4. Затем троян начинает выборку из своего массива, подставляя в качестве номера строки значение переменной tmp. Так тоже делать нельзя, но проверка условия вновь отложена, а запрошенная строка кешируется.
  5. Две последние операции в итоге заблокируются, и вернется исключение, но прежде из-за внеочередного исполнения инструкций будут обработаны запрещенные команды трояна и кешированы запрошенные им данные.
  6. Процессор просто откажется затем транслировать их трояну, узнав от MMU о ссылке на защищенную область памяти, но не удалит их из кеша.
  7. До обработки исключения троян успеет выполнить легальную операцию — чтение из ранее созданного массива, замеряя время получения каждой строки. Только строка, чей номер соответствует кешированному значению, прочитается быстрее других. Остальные будут загружаться из оперативной памяти в разы медленнее.
Последовательно выполняя атаку для других адресов, можно воссоздать в адресном пространстве трояна полную копию пароля, ключа или других данных в памяти, доступ к которым заблокирован.
Вот как выглядит одна из практических реализаций атаки:






Meltdown demo - Spying on passwords
Формально никаких нарушений безопасности при этом не происходит. Троян выполняет чтение только из своего адресного пространства, получая отказ при попытке доступа к памяти других процессов. Просто обработка исключения происходит не сразу, а запрошенные данные кешируются. Разница во времени чтения собственных данных позволяет трояну узнать, какое значение процессор кешировал, но не дал прочитать напрямую.

Теперь о Spectre
Код современных программ имеет много шаблонных фрагментов, поэтому обычно у целевой программы (например, популярного менеджера паролей) можно найти какой-то стандартный кусок кода с пользовательским вводом и условным переходом.

Для первого варианта реализации Spectre пишется малварь, в которой будет участок кода, сходный с целевым. Он «тренирует» предсказатель ветвлений, заставляя его много раз проверять валидность условия, аналогичного переходу в атакуемой программе.

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

При обработке инструкций атакуемой программы поведение «натренированного» предсказателя ветвлений станет аналогичным. Если теперь в ней задать неверное условие (например, ввести неверный мастер-пароль), то она все равно начнет выполнять его как истинное. Потом, конечно, опомнится и сбросит конвейер, замолчав как партизан, но ошибочно запрошенные данные (ключ расшифровки) останутся в кеше.

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

Вторая разновидность атаки Spectre выглядит очень похоже. Разница лишь в том, что вместо модуля предсказания ветвлений «тренируется» блок предсказания адреса с собственным буфером. Фактически атака идет на кеш через branch target buffer. Он подставляет виртуальные адреса, которые нужны для выполнения косвенных переходов. Они выполняются по какому-то типовому условию, которое мы имитируем в своей программе.

После серии повторений буфер забивается, а блок предсказания адреса начинает считать, что такой участок кода (gadget в терминологии авторов исследования) всегда приводит к косвенному переходу по указанному адресу… и начинает заранее считывать из него данные в кеш.

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

Для тех у кого уже чешутся руки на GitHub есть исходники для эксплуатации
тут MetlDown ,






Meltdown reading process memory knowing only pid
а тут Spectre
Execute the exploit
taskset -c 1 ./exploit [+] Testing for Spectre[+] Dumping memory from 0xffffffffffdfeea8 to 0xffffffffffdfeec2[+] Dumped bytes match the expected value[+] System vulnerable to spectre

Как узнать, есть ли эти уязвимости у меня?

Неполный список уязвимых процессоров можно посмотреть здесь ( листинг аж на 7 страниц, приятного чтения:). Для определения процессора на устройстве можно использовать утилиту CPU-Z (для Windows и Android). Если же у вас Windows, то можно поступить проще: скачать и запустить утилиту InSpectre . Она почти мгновенно протестирует систему и скажет, есть ли уязвимости, а также сообщит о возможном снижении производительности (об этом позже). YES означает, что проблем нет. NO! означает, что проблема есть.


Защита от Meltdown есть, от Spectre нет. Производительность в норме.


Защита от Meltdown есть, от Spectre нет. Производительность может быть пониженной.


Защита от Meltdown и Spectre есть. Производительность в норме.
Но нужно проверить ещё один важный компонент — веб-браузер. Для этого надо зайти на специальный веб-сайт и нажать кнопку Click to Check. Если ниже появится надпись "Your browser is NOT VULNERABLE to Spectre" , то, скорее всего, ваш браузер защищён от Spectre. А вот если результат значится как  "is VULNERABLE" , то уязвимость совершенно точно есть.


Проблем со Spectre в браузере нет.
Проблемы с антивирусами?

Патчи для Windows конфликтуют со многими антивирусами и защитными решениями, что приводит к неполадкам в работе системы, BSOD и другим неприятным последствиям. Дело в том, что разработчики ряда антивирусов использовали для работы своих продуктов весьма спорные техники — их можно приравнять к эксплуатации проблем, с которыми и призваны бороться новые патчи. Так, антивирусы различными способами обходят Kernel Patch Protection, внедряют свои гипервизоры для перехвата системных вызовов (syscalls) и строят предположения об адресах ячеек памяти.



Что можно предпринять самостоятельно для защиты от уязвимостей на своем компе?

Для материнских плат и ноутбуков всех вендоров, версий и голов выпуска можно начать поиск отсюда . Что точно не стоит делать, так это самостоятельно пытаться собрать прошивку или BIOS/UEFI, потому что можно попросту загубить оборудование.

Кроме того, вне зависимости от устройства и ОС крайне желательно установить и/или обновить антивирус. Все остальные программы, а в особенности браузеры, так же стоит обновить до самой последней версии. Желательно сделать это до установки обновлений самой ОС — чтобы избежать проблем с совместимостью.
В Google Chrome также есть экспериментальная функция, помогающая в защите от Spectre. Для её включения нужно перейти в раздел настроек (адрес chrome://flags/), включить (Enable) опцию Strict site isolation и перезапустить браузер.



Intel обещает впредь больше думать о безопасности

Компания Intel, в свою очередь, рассказала о том, что новые модели процессоров будут защищены от проблем, подобных Meltdown и Spectre, на аппаратном уровне.
В частности, глава Intel Брайан Кржанич (Brian Krzanich) сообщил, что встроенной защитой от side-channel атак оснастят серверные процессоры Intel Xeon Scalable (кодовое название Cascade Lake), а также 8 поколение Intel Core. Релиз данных моделей CPU запланирован на вторую половину 2018 года.
Кржанич опубликовал в блоге компании видео, которое можно увидеть ниже. Ролик рассказывает о том, как именно будет реализован эта защита. Так, компания планирует использовать специальные «разделы» и «защитные стены» для физического удержания вредоносного кода в других областях CPU, тем самым не давая малвари осуществить «спекулятивную» атаку в принципе.



Всем удачи, тепла и хорошего настроения!
Следите за новостями в нашем паблике w2hack
Meltdown Spectre Intel CPU bug piskunov Chrome BIOS UEFI BSOD ЦОД уязвимость ошибка процессор w2hack
Alt text

Большой брат следит за вами, но мы знаем, как остановить его

Подпишитесь на наш канал!

Иван Пискунов

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