Призрак с памятью устройства

Учитывая spectre проблемы безопасности и атаки по побочным каналам.

Как в x86, так и в ARM существует метод отключения кеширования / спекулятивного доступа на определенных страницах памяти. Так что любая побочная атака (spectre, meltdown) на этих участках памяти должно быть невозможно. Так почему же мы не используем это для предотвращения атак по побочным каналам путем хранения всей защищенной информации (пароль, ключи и т. Д.) В медленных, но безопасных (?) Областях памяти, при этом помещая незащищенные данные в быструю, но незащищенную обычную память? Время доступа к этим страницам значительно сократится (~100), но исправления в ядре тоже недешевы. Так, может быть, снижение производительности только нескольких страниц памяти происходит быстрее, чем небольшое общее снижение?

Это переложило бы ответственность за исправление проблем с ОС на разработчика приложений, что было бы огромным изменением. Но надеяться, что ядро ​​как-то исправит все ошибки, похоже, не очень хороший подход.

Так что мои вопросы

  1. Будет ли использование страниц памяти "устройства" действительно предотвращать такие атаки?
  2. Каковы его недостатки? (Помимо очевидных проблем с производительностью)
  3. Насколько практичным будет использование?

1 ответ

Решение

Потому что наши компиляторы / наборы инструментов / ОС не поддерживают использование не кэшируемой памяти для некоторых переменных и предотвращают попадание их копий в стек. (Или временные исчисления из них.)

Кроме того, AFAIK, вы даже не можете выделить страницу памяти UC в процессе пользовательского пространства в Linux, даже если бы захотели. Это, конечно, может быть изменено с новым флагом для mmap и / или mprotect, Надеемся, что он может быть спроектирован так, чтобы запуск новых двоичных файлов в старой системе давал бы регулярную память с обратной записью (и, следовательно, все еще работал, но без преимуществ безопасности).

Я не думаю, что есть какое-либо значение отказа в обслуживании, позволяющее непривилегированной пользовательской карте отображать WC или память UC; Вы уже можете использовать магазины NT и / или clflush форсировать доступ к памяти и конкурировать за большую долю времени / ресурсов системного контроллера памяти.

Другие вопросы по тегам