✍️ Статья Meltodown и Spectre

The 146X Project Dublikat Web Studio Avram Lincoln AL Service Navigator Knyaz

Tartuga

💰 Проверенный продавец
Регистрация
19.12.2019
Сообщения
93
Meltodown и Spectre - это уязвимости процессоров, позволяющие получать содержимое защищенных областей памяти ядра уязвимых чипов. Используя ядро процессора, Meltdown и Spectre могут позволить злоумышленникам получить доступ к данным, которые ранее считались полностью защищенными.

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

Как это работает?!
Процессорное ядро использует многоуровневый конвейер с нелинейными путями. Все входящие инструкции в нем кэшируются и декодируются по нескольку штук за такт. Они дробятся на микрооперации, которые переупорядочиваются в собственном буфере ROB(Re-Order Buffer). Блок управления памятью транслирует виртуальные адреса и определяет параметры доступа к ним. После ROB микрооперации отправляются в резервацию, где обрабатываются параллельно на разных исполнительных блоках. При этом современные процессоры используют разные типы кэшей для ускорения обработки данных.

Данная архитектура создавалась для уменьшения времени простоя отдельных исполнительных блоков процессора. Пока один блок ожидает загрузки данных из оперативной памяти для своей инструкции, другой параллельно обрабатывает следующие. В этом ему помогает MMU(Memory Management Unit) и общая архитектура конвейера, который постоянно подгружает наиболее востребованные данные в кэш.

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



Meltdown (CVE-2017-5754)

e2db89c23187a1028b1b5.png

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



Spectre (CVE-2017-5753, CVE-2017-5715 и CVE-2018-3640)

fb3cf25b466d2fc9e6895.png

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

Например, если программа, выполняемая пользователем выполнена по типу «if A, then B», то, если пользователь хочет сделать сначала команду A, а чип должен затем работать над выполнением B. Чип, выполняющий спекулятивное исполнение, начнет выполнять B до того, как пользователь решит выполнить A. Данный процесс и приводит к уязвимости.

Также еще одно отличие Spectre от Meltdown заключается в том, что он затрагивает почти все современные процессоры, вне зависимости от платформы и семейства.



Пример атаки Spectre варианта CVE-2018-3640

Создается буфер размером в несколько страниц. Затем спекулятивно исполняется инструкция rdtsc и результат ее исполнения используется для доступа к определенной части выделенного ранее буфера. При спекулятивном исполнении выполняется доступ только к определенной части выделенного буфера, что позволяет отличить случаи спекулятивного доступа от случайных ошибок. После завершения выполнения функции, содержащей спекулятивное исполнение кода, номер страницы памяти с самым низким временем доступа добавляется в статистику. Затем во всем буфере сбрасывается кэш. Ниже приведены функции, которые используются для срабатывания спекулятивного исполнения и доступа к памяти в 32-битных версиях Windows:

//Далее функция для спекулятивного срабатыания
_declspec(naked) void herring() {
__asm {
xorps xmm0, xmm0
sqrtpd xmm0, xmm0
sqrtpd xmm0, xmm0
sqrtpd xmm0, xmm0
sqrtpd xmm0, xmm0
sqrtpd xmm0, xmm0
sqrtpd xmm0, xmm0
sqrtpd xmm0, xmm0
sqrtpd xmm0, xmm0
movd eax, xmm0
lea esp, [esp+eax+4]
ret
}
}

/*Далее функция спекулятивно исполняет rdtsc и обращается к странице, соответствующей возвращенному rdtsc значению*\
_declspec(naked) void __fastcall speculate(const char* detector) {
__asm {
mfence.
mov esi, ecx.
rdtsc.
and eax, 7.
or eax, 32.
shl eax, 12.
movzx eax, byte ptr [esi+eax]
}
}

Для успешной реализации атаки эти действия нужно повторять, чтобы найти распределение кэшируемых страниц. Затем рассчитывается количество промахов мимо выбранного региона памяти. В виртуализованных средах, где включен перехват rdtsc, доля таких промахов составляет от 50 до 99 процентов. На невиртуализованных системах она меньше одного процента.

17abecb01df3d22282655.png

Распределение кэшированных страниц в различных средах




Что в итоге?!
Впервые с данной уязвимостью пользователи столкнулись еще в 1995 году с выходом intel Pentium Pro. И уже на протяжении более 20 лет производились процессоры, безопасностью которых пренебрегали в угоду производительности. Но после большой огласки в прессе зимой этого года it-гиганты стали заявлять, что уже начинали менять архитектуру своих новых процессоров.

А в NVIDIA не признали наличие уязвимости Spectre в своих продуктах серий GeForce, Quadro, NVS, Tesla и GRID. Но даже если действительно видеоядро и содержит данные уязвимости, то вычислительные блоки видеокарт обычно хранят графику и шейдеры, а они ни кому не сдались...

Но так как сложность исполнения хакерской атаки Meltdown и Spectreявляются не очень привлекательными для обычного злоумышленника в силу того, что сложность(а еще и цена) ее исполнения не будет оправдана взломом пользовательского устройства. Поэтому данный тип уязвимостей может рассматриваться по больше части для взлома больших корпораций.

Так что для безопасности стоит периодически не забывать обновляться :)

И вот вам еще небольшая утилита, которая выполняет быстрое сканирование и выявляет, является ли ваш процессор уязвимым к Meltodown и Spectre.

Ashampoo Spectre Meltdown CPU Checker
 

📌 Золотая реклама

AnonPaste

Верх