Уязвимость безопасности Spectre
Что такое уязвимость безопасности Spectre?
Spectre — это уязвимость безопасности, которая затрагивает все современные процессоры, использующие такие механизмы, как предсказание ветвлений и спекулятивные действия.
Призрачные атаки включают в себя побуждение жертвы к умозрительному выполнению операций, которые не будут выполняться во время правильного выполнения программы и которые передают злоумышленнику конфиденциальную информацию жертвы через боковой канал. Это также предоставляет защищенное пространство памяти иным образом, позволяя вредоносному агенту получать доступ к данным или даже изменять их. Он был обнаружен одновременно с Уязвимостью Meltdown .
Что такое механизмы отраслевого прогнозирования и спекулятивного действия?
- Прогнозирование ветвлений: метод прогнозирования ветвлений позволяет процессору ускорить выполнение в конвейерном процессоре путем преобразования инструкций в логику предикатов. Следовательно, выполняются только те инструкции, предикат которых равен true. Это позволяет ЦПУ избегать проверки каждой отдельной ветви на выполнение.
- Спекулятивное выполнение: спекулятивное выполнение, наряду с предсказанием ветвлений, является компонентом внеочередного выполнения, которое используется для ускорения выполнения в микропроцессорах на основе конвейера. Из предыдущего определения мы узнали, что прогноз ветвления используется для определения того, какая инструкция будет выполняться в случае условного перехода. Спекулятивные действия идут еще дальше. Он определяет, каким будет результат выполнения следующей инструкции. Если прогноз ветвления был верным, используется результат, в противном случае он отбрасывается.
Как работает Spectre Vulnerability?
Есть два способа, которыми работает уязвимость Spectre:
1. Локальная эксплуатация.
В этом случае вредоносный агент находится в самом компьютере. Ниже приведены шаги, которые происходят:
- Он манипулирует процессом для выполнения инструкции, которая никогда бы не выполнила нормаллу
- Когда процессор оценивает выполненную инструкцию, он отбрасывает вычисления.
- Однако расширенный размер кэша не восстанавливается.
- Просто взглянув в кеш, можно вывести содержимое, которое было там, и их фактическое расположение в памяти, таким образом подвергая их воздействию вредоносной программы.
2. Удаленная эксплуатация.
В этом случае вредоносный агент работает через Javascript. Запрограммированное вредоносное ПО получает доступ ко всей памяти, отображаемой браузером. Следующие шаги предприняты:
- Кэш принудительно очищается при выполнении инкрементного чтения больших наборов данных, поскольку память массивов в javascript поддерживается с использованием политики LRU.
- В этом случае предиктор ветвления будет неправильно обрабатываться путем итерации по очень большому набору данных с использованием побитовых операций для установки индекса на значения в пределах диапазона, а затем с использованием адреса «за пределами» для конечной итерации.
- Итерируя по большому набору данных, используя побитовые операции для установки значений в пределах диапазона и используя адрес за пределами границ для последней итерации, можно предсказать предсказатель ветвления
- Чтения по времени позволяют сценарию читать местоположение
Какие меры по смягчению предпринимаются?
Обнаружение этой проблемы безопасности приводит ко многим мерам по предотвращению и смягчению последствий. Различные производители процессоров и программного обеспечения по-разному решали эту проблему следующим образом:
- В марте 2018 года Intel разработала аппаратные исправления для Spectre. Уязвимости были смягчены новой системой разделения, которая улучшает процесс и разделение на уровне привилегий.
- Microsoft действовала путем изоляции таблиц ядра и пользовательских страниц. Он также разработал новые инструкции процессора (совместимые с Windows), которые устраняют спекуляции отрасли.
- В Chrome 64 по умолчанию включена защита от атак. Пользователи Chrome 63 могут вручную смягчить атаку, включив функцию изоляции сайта (chrome: // flags # enable-site-per-process)
- Google создал новую технику, названную «Retpoline», которая включает управление непрямыми ветвями на уровне компилятора в направлении другой цели, которая не приводит к уязвимому спекулятивному выполнению вне очереди.
- Mozilla уменьшает разрешение таймеров JavaScript, чтобы помочь предотвратить атаки по времени, с дополнительной работой над методами размытости во времени, запланированными на будущие выпуски.
Однако следует отметить, что внедрение программных исправлений привело к значительным проблемам с производительностью, особенно на старых компьютерах. Также сообщалось о нежелательных перезагрузках даже для новых чипов Intel.