Не хочется писать о Spectre, а надо: на прошлой неделе это однозначно самая важная новость. Новые варианты уязвимости Spectre, как и исходные, показаны представителями академического сообщества. Научный сотрудник Массачусетского технологического института Владимир Кирьянский и независимый эксперт Карл Вальдспургер показали две новые модификации Spectre, названные, без затей и логотипов, Spectre 1.1 и Spectre 1.2 (новость, оригинальная научная работа).
Важные отличия от исходной уязвимости Spectre в обоих случаях заключаются в использовании механизма спекулятивной записи. В случае Spectre 1.1 атака теоретически позволяет вызвать (тоже спекулятивное) переполнение буфера и прочитать «запрещенный» участок памяти. Spectre 1.2 обеспечивает возможность перезаписи доступной только для чтения информации и теоретически позволяет провести атаку типа sanbox escape, обойдя аппаратные системы защиты. За обнаружение уязвимости исследователи получили сто тысяч долларов в рамках программы bug bounty компании Intel, и на сегодняшний день это одна из самых крупных выплат. Уязвимости подвержены процессоры Intel, ARM и, вероятно, процессоры AMD.
По словам авторов, одной из ключевых находок исследования как раз является новая концепция «спекулятивного переполнения буфера». Переполнение вызывает операция записи — произведенная в нужное время и в нужном месте, она неизбежно отбрасывается как некорректная, но еще до того открывает возможность чтения области памяти, к которой у атакующего процесса не должно быть доступа.
Ключевая иллюстрация идеи: обходим защиту (bounds check) не с помощью операции чтения, как в оригинальном Spectre, а с помощью операции записи.
Список условий, при которых одна из новых уязвимостей может быть реализована на практике, занимает чуть ли не больше места, чем описание механизма атаки. В этом и заключается сложность аппаратных уязвимостей этого класса: слишком многое должно совпасть, чтобы атака была успешной. Но когда атака происходит, в худшем случае она позволяет украсть ценную информацию, зачастую без возможности даже пост-фактум понять, что именно произошло. Самое важное: условия для Spectre 1.x могут быть созданы даже в тех случаях, когда атака Spectre 1.0 невозможна.
Исследователи утверждают, что способов детектирования уязвимостей типа Spectre 1.1 с помощью анализа кода или инструментов компиляции не существует. При этом данная уязвимость может быть закрыта на уровне железа. Также отмечается, что ответственность за снижение рисков успешной атаки типа Spectre зачастую возлагается на разработчиков ПО. Учитывая, что за 30 лет, прошедшие с первой публичной демонстрации атаки с переполнением буфера, уязвимостей в ПО намного меньше не стало, авторы предрекают атакам на механизм спекулятивного выполнения кода «десятилетия» релевантности.
Несмотря на вышесказанное, авторы верят, что комбинация безопасного софта и железа с преимуществами защиты от механизмов speculative execution теоретически возможна. Осталось реализовать это на практике, что в случае класса уязвимостей, затрагивающих железо, может занять то ли годы, то ли десятилетия. Интересно, не станет ли история Spectre/Meltdown и их производных шагом к какому-то серьезному изменению в практиках разработки программ и аппаратного обеспечения?
Disclaimer: Мнения, изложенные в этом дайджесте, могут не всегда совпадать с официальной позицией «Лаборатории Касперского». Дорогая редакция вообще рекомендует относиться к любым мнениям со здоровым скептицизмом.
Автор: Kaspersky_Lab