Отгремели новогодние праздники и в мире ИБ год начался с плохих новостей, в первых числах января 2018 года ИТ-сообщество узнало о глобальных уязвимостях
Как показала практика, сами уязвимости – это еще не самое страшное, что произошло, так как вскоре оказалось, что исправить эти баги очень и очень трудно - патчи выпущенные вендорами были зачастую несовместимы с антивирусными решениями,

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


Технические подробности
Meltdown
Атака нарушает базовый механизм безопасности из-за внеочередного исполнения процессорных инструкций и упреждающей загрузки данных в кеш.
Суть атаки такова:
- Зловред запускается и очищает процессорный кеш.
- Он создает в оперативной памяти массив из 256*4096 элементов. Номера строк массива отражают все возможные значения одного байта (0 – 255). Массив точно не попадает в кеш из-за размера и потому, что к нему еще не обращались.
- Троян объявляет переменную tmp и просит записать в нее значение байта, хранящегося по закрытому для него адресу другого процесса. Так делать нельзя, но, пока MMU это выяснит, конвейер обработает инструкцию на упреждение и подтянет запрошенные данные в кеш.
- Затем троян начинает выборку из своего массива, подставляя в качестве номера строки значение переменной tmp. Так тоже делать нельзя, но проверка условия вновь отложена, а запрошенная строка кешируется.
- Две последние операции в итоге заблокируются, и вернется исключение, но прежде из-за внеочередного исполнения инструкций будут обработаны запрещенные команды трояна и кешированы запрошенные им данные.
- Процессор просто откажется затем транслировать их трояну, узнав от MMU о ссылке на защищенную область памяти, но не удалит их из кеша.
- До обработки исключения троян успеет выполнить легальную операцию — чтение из ранее созданного массива, замеряя время получения каждой строки. Только строка, чей номер соответствует кешированному значению, прочитается быстрее других. Остальные будут загружаться из оперативной памяти в разы медленнее.
Вот как выглядит одна из практических реализаций атаки:
Meltdown demo - Spying on passwords
Теперь о Spectre
Код современных программ имеет много шаблонных фрагментов, поэтому обычно у целевой программы (например, популярного менеджера паролей) можно найти какой-то стандартный кусок кода с пользовательским вводом и условным переходом.
Для первого варианта реализации Spectre пишется малварь, в которой будет участок кода, сходный с целевым. Он «тренирует» предсказатель ветвлений, заставляя его много раз проверять валидность условия, аналогичного переходу в атакуемой программе.
В своей (вредоносной) программе мы можем сделать так, что выбранное условие всегда будет истинным. Когда накопится достаточная статистика условных переходов, блок предсказания ветвления начнет считать, что это типовое условие, которое в большинстве случаев проходит проверку.
При обработке инструкций атакуемой программы поведение «натренированного» предсказателя ветвлений станет аналогичным. Если теперь в ней задать неверное условие (например, ввести неверный мастер-пароль), то она все равно начнет выполнять его как истинное. Потом, конечно, опомнится и сбросит конвейер, замолчав как партизан, но ошибочно запрошенные данные (ключ расшифровки) останутся в кеше.
Техника их получения зловредом из кеша аналогична рассмотренной в атаке Meltdown с той лишь разницей, что троян вообще не обращался к заблокированной для него области памяти. Он лишь натаскал предсказатель переходов так, что уже легитимная программа сама потащила в кеш конфиденциальные данные, не успев проверить типовое условие.
Вторая разновидность атаки Spectre выглядит очень похоже. Разница лишь в том, что вместо модуля предсказания ветвлений «тренируется» блок предсказания адреса с собственным буфером. Фактически атака идет на кеш через branch target buffer. Он подставляет виртуальные адреса, которые нужны для выполнения косвенных переходов. Они выполняются по какому-то типовому условию, которое мы имитируем в своей программе.
После серии повторений буфер забивается, а блок предсказания адреса начинает считать, что такой участок кода (gadget в терминологии авторов исследования) всегда приводит к косвенному переходу по указанному адресу… и начинает заранее считывать из него данные в кеш.
Поскольку блоки предсказания и кеш есть практически во всех процессорах, атака Spectre затрагивает еще больше разных архитектур. Пока практического подтверждения нет разве что для MIPS и «Эльбруса», но это еще не означает их неуязвимости. Просто сценарий атаки может оказаться менее явным.
Эксплоиты уже выложен в паблик
Для тех у кого уже чешутся руки на GitHub есть исходники для эксплуатации
тут
Meltdown reading process memory knowing only pid
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
Как узнать, есть ли эти уязвимости у меня?
Неполный список уязвимых процессоров можно
Защита от Meltdown есть, от Spectre нет. Производительность в норме.
Защита от Meltdown есть, от Spectre нет. Производительность может быть пониженной.
Защита от Meltdown и Spectre есть. Производительность в норме.
Проблем со Spectre в браузере нет.
Патчи для Windows конфликтуют со многими антивирусами и защитными решениями, что приводит к неполадкам в работе системы, BSOD и другим неприятным последствиям. Дело в том, что разработчики ряда антивирусов использовали для работы своих продуктов весьма спорные техники — их можно приравнять к эксплуатации проблем, с которыми и призваны бороться новые патчи. Так, антивирусы различными способами обходят Kernel Patch Protection, внедряют свои гипервизоры для перехвата системных вызовов (syscalls) и строят предположения об адресах ячеек памяти.

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

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

Следите за новостями в нашем паблике