Инструментарий cryptsetup-suspend используется в Debian для автоматической блокировки LUKS-разделов перед переходом в режим сна. Предполагается, что в случае кражи ноутбука, переведённого в режим сна, злоумышленник будет лишён возможности получить доступ к данным, так как при выходе из сна потребуется ввести пароль для восстановления доступа к зашифрованным данным. Из-за ошибки в ядре Linux после блокировки LUKS-раздела командой «cryptsetup luksSuspend» ключи не очищались из оперативной памяти и оставались видны через /proc/keys, что позволяло атакующему извлечь их, например, методом «холодной перезагрузки«, и использовать для доступа к данным.
Отсутствие очистки ключей было выявлено в ходе отладки состояния гонки, из-за которого возникали проблемы с переходом в ждущий режим.
Ошибка возникла после проведения в ядре 6.9 рефакторинга, в результате которого ключи привязывались к вызывающему потоку и должны были удаляться при его завершении, но на деле оставались в памяти. Для включения в ядро Linux предложен однострочный патч, устраняющий допущенную ошибку.
Данный патч не принят в ядро, так как в нём выявлена недоработка — патч действует только для физических накопителей, но не работает для виртуальных loop-устройств. Вместо исправления проблемы на стороне ядра разработчиками инструментария cryptsetup был предложен обходной путь очистки ключей. Данное изменение уже принято и войдёт в состав выпуска cryptsetup 2.8.7.
Помимо этого, для NixOS была создана собственная реализация скриптов для блокировки шифрованных дисков пред переходом в ждущий режим, в котором задействован старый патч к ядру, не принятый в 2015 году, принудительно очищающий ключи из памяти перед переходом в режим сна.
Источник: http://www.opennet.ru/opennews/art.shtml?num=65831
