Призрак с памятью устройства
Учитывая spectre
проблемы безопасности и атаки по побочным каналам.
Как в x86, так и в ARM существует метод отключения кеширования / спекулятивного доступа на определенных страницах памяти. Так что любая побочная атака (spectre
, meltdown
) на этих участках памяти должно быть невозможно. Так почему же мы не используем это для предотвращения атак по побочным каналам путем хранения всей защищенной информации (пароль, ключи и т. Д.) В медленных, но безопасных (?) Областях памяти, при этом помещая незащищенные данные в быструю, но незащищенную обычную память? Время доступа к этим страницам значительно сократится (~100), но исправления в ядре тоже недешевы. Так, может быть, снижение производительности только нескольких страниц памяти происходит быстрее, чем небольшое общее снижение?
Это переложило бы ответственность за исправление проблем с ОС на разработчика приложений, что было бы огромным изменением. Но надеяться, что ядро как-то исправит все ошибки, похоже, не очень хороший подход.
Так что мои вопросы
- Будет ли использование страниц памяти "устройства" действительно предотвращать такие атаки?
- Каковы его недостатки? (Помимо очевидных проблем с производительностью)
- Насколько практичным будет использование?
1 ответ
Потому что наши компиляторы / наборы инструментов / ОС не поддерживают использование не кэшируемой памяти для некоторых переменных и предотвращают попадание их копий в стек. (Или временные исчисления из них.)
Кроме того, AFAIK, вы даже не можете выделить страницу памяти UC в процессе пользовательского пространства в Linux, даже если бы захотели. Это, конечно, может быть изменено с новым флагом для mmap
и / или mprotect
, Надеемся, что он может быть спроектирован так, чтобы запуск новых двоичных файлов в старой системе давал бы регулярную память с обратной записью (и, следовательно, все еще работал, но без преимуществ безопасности).
Я не думаю, что есть какое-либо значение отказа в обслуживании, позволяющее непривилегированной пользовательской карте отображать WC или память UC; Вы уже можете использовать магазины NT и / или clflush
форсировать доступ к памяти и конкурировать за большую долю времени / ресурсов системного контроллера памяти.