Предсказание ветвей и спекулятивное смягчение последствий - PullRequest
0 голосов
/ 21 ноября 2018

Почему разделение виртуального адреса (VA) не достаточно для устранения различных недостатков, связанных с призраками и распадами?Я имею в виду общие, за исключением того, который атакует взлом Intel p-cache == v-cache;это была такая явно плохая идея, я не могу найти сочувствия.

В качестве базовой строки:

  1. Мое адресное пространство (AS) ядра использует только один тексти страница данных с пользователем AS.Эти страницы содержат достаточно кода и данных для сохранения и хранения регистров;загрузить новый контекст памяти и перейти к соответствующему месту.Таким образом, здесь нет интересных адресов, которые можно было бы раскрыть.

  2. Ни у одного AS процесса из exec нет общих виртуальных машин.То есть, каждое выделение виртуальной машины берется из общего пула, так что даже общие объекты, такие как libc, имеют разные адреса в каждом процессе.Большинство создателей Unix сочли бы это странным, но это, безусловно, выполнимо;Я сделал это однажды по ошибке ^ H * 10 / для тестирования.

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

Я понимаю, что [1]является основным средством смягчения последствий проблем, связанных с расплавлением;[2] - это расширение [1], поэтому оно применимо к спектру.[3] может вызвать проблемы с производительностью, но, опять же, ограничивается только этими случаями.

1 Ответ

0 голосов
/ 21 ноября 2018

Атака распада зависит от (умозрительно) прямого доступа к целевому виртуальному адресу (изнутри атакующего процесса) 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/.

...