Атака распада зависит от (умозрительно) прямого доступа к целевому виртуальному адресу (изнутри атакующего процесса) 1 .
Но Spectre - нет. Вы заполняете предиктор ветвления , так что атакующий код спекулятивно обращается к своему собственному виртуальному адресному пространству, на что у него есть разрешение. Псевдоним ветвления-предиктора означает, что вы обычно / иногда заполняетепрогноз для ветви по виртуальному адресу, который вы не можете / не сопоставили.(например, в ядре.)
Обычный побочный канал, атака с чтением из кэша, основана на удалении кэша для массива в вашем собственном адресном пространстве.Но другие побочные каналы могут передавать данные Spectre от цели обратно злоумышленнику, например, заполнять кэш и затем искать, какая запись была удалена из-за пропущенного конфликта для адреса, который aliases некоторой памятив процессе под атакой.(Сложнее, потому что кэш L3 в современных процессорах x86 использует сложную функцию индексации, в отличие от более простых кешей, которые используют в качестве индекса простой диапазон битов. Но, возможно, вы могли бы использовать пропуски L2 или L1d. Промах L2 / L3 все равно должен быть измеримо длиннее, чемудар L2.)
Или с SMT (например, Hyperthreading), атака синхронизации ALU, где гаджет Spectre создает давление порта ALU, зависящее от данных.В этом случае единственным подходящим доступом к памяти являются данные, подвергаемые атаке (что разрешено аппаратными средствами, только неправильная спекуляция ветви вызывает откат, а не ошибку загрузки).
При атаке на ядро ему будут отображаться страницы физической памяти атакующего процесса где-то .(Большинство ядер отображают всю физическую память в непрерывный диапазон виртуальных адресов, обеспечивая легкий доступ к любому физическому адресу.) Кэширование основано на физических адресах, а не на виртуальных.
Гаджет Spectreэто делает горячую строку кэша с помощью другого сопоставления для той же страницы.
В контексте системного вызова ядро обычно хранит в памяти пространства пользователя те же виртуальные адреса, которые былииспользование внутри процесса , поэтому системные вызовы, такие как read
и write
, могут копировать между пользовательским пространством и кэшем страниц.И многие системные вызовы передают указатели пространства пользователя на имена файлов.Поэтому при атаке на ядро гаджет Spectre может напрямую использовать адреса пользовательского пространства в процессе атаки.
Возможно, сам гаджет Spectre может даже находиться в памяти пользовательского пространства, хотя с отдельными таблицами страниц для обхода Meltdownвы могли бы уменьшить это, установив таблицы страниц ядра так, чтобы виртуальные машины пользовательского пространства отображались без разрешения exec.
Сноска 1: Обрыв - это обход бита U / S в таблицах страниц, позволяющийпространство пользователя, чтобы потенциально прочитать любую память, которую ядро оставляет отображенной.И да, [1] является достаточным решением.См http://blog.stuffedcow.net/2018/05/meltdown-microarchitecture/.