
2 января 2018 года (CVE-2017-5753 и CVE-2017-5715) «Призрак» Spectre эксплуатация уязвимости
2 января 2018 г. (CVE-2017-5753 и CVE-2017-5715) Пример эксплуатации уязвимости "Spectre"
Мы помещаем текст "The Magic Words are Squeamish Ossifrage." в память, а затем пытаемся прочитать его с помощью эксплойта. Если система уязвима, вы увидите тот же текст в стандартном выводе.
В этом коде, если инструкции компиляции в victim_function() выполняются строго последовательно, функция читает только из array1[0..15], потому что array1 size = 16. Однако возможно выполнение чтения за пределами этого диапазона. Функция read_memory_byte() многократно тренирует victim_function(), чтобы предсказатель переходов ожидал допустимое значение x, а затем вызывает x за пределами границ. Условный переход не предсказывается, и последующее спекулятивное выполнение читает тайный байт с помощью x вне границ. Затем спекулятивный код читает из array2[array1[x] * 512], тем самым выдавая значение array1[x] в кэш. Для завершения атаки используется простой flush+reload, чтобы определить, в какой строке кэша находится array2, раскрывая содержимое памяти. Атака повторяется несколько раз, так что даже если целевой байт изначально не кэширован, первая итерация заносит его в кэш. На i7 Surface Pro 3 оптимизированный код читает со скоростью около 10 КБ/с.