1

Простой вопрос, но я не смог найти ответ.

Если в памяти есть страница, которая уже была выгружена ядром на диск, а затем ее владелец вызывает mlock(2) или VirtualLock на этой странице в памяти, что произойдет?

Он сразу же возвращается к физической памяти? Это стерто с диска? Если кто-то задерживает запись конфиденциальной информации на страницу до тех пор, пока не будет вызван mlock(2), будет ли это гарантировать, что она не будет записана на диск?

В качестве незначительного дополнительного вопроса, что бы вы сделали, чтобы смягчить против такой возможности?

1 ответ1

1

В текущей исходной версии ядра Linux это приведет к сбоям страниц, но, похоже, их копии останутся подкачкой.

Я полагаю, что большинство систем BSD и других систем UNIX ведут себя одинаково, хотя не уверен насчет Windows.

Задержка записи чего-либо до вызова mlock() предотвратит выгрузку данных, но не может гарантировать, что данные не будут записаны на диск, если спящий режим, опосредованный ACPI S4 и ОС, невозможен и вы не находитесь в виртуальной машине (если вы находитесь в виртуальной машине, вы можете находиться под гипервизором типа 1 и, следовательно, подчиняться ограничениям виртуальной памяти хост-системы, которые вы не можете контролировать).

В результате правильное смягчение включает в себя:

  • Обработка на уровне приложения для предотвращения хранения конфиденциальных данных в ОЗУ дольше, чем это необходимо, даже если область заблокирована.
  • Обработка на системном уровне для отключения ACPI S4 (обычно требуется только в системах OEM), предотвращения спящего режима, связанного с ОС, и обеспечения доверия к хост-системе при работе в виртуальной машине.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .