Как обеспечить безопасность приостановки к ОЗУ в Ubuntu с помощью полного шифрования диска (LVM поверх LUKS)?

20

Я на Ubuntu 13.04 с использованием полного шифрования диска (LVM поверх LUKS).

Я хотел бы включить luksSuspendв процедуру приостановки (и последующего использования luksResume), чтобы я мог приостановить к ОЗУ, не оставляя ключевой материал в памяти и рут разблокирован.

Последние 7 часов я пытался перенести скрипт для Arch Linux , но пока безуспешно: честно говоря, понятия не имею, что я делаю ...

Может кто-нибудь помочь мне портировать это (или создать что-то подобное с нуля)? Или, по крайней мере, может кто-нибудь указать мне на документацию о том, как подключить вещи к процедурам приостановки и как сохранить необходимые двоичные файлы и сценарии (такие как cryptsetup) доступными даже после того, как все операции ввода-вывода в root были заблокированы (пользователем luksSuspend)?

Относительно того, как сохранить необходимые двоичные файлы и сценарии, доступные для резюме, этот другой пост в блоге (также для Arch) скопировал их /boot; Однако я хотел бы использовать в строках то, что использовал Вианни в сценарии, о котором я упоминал ранее, потому что этот подход выглядит немного более элегантным в этом аспекте.

Джонас Малако
источник
Я провожу еще несколько часов на этом ...
Йонас Малако
Я отредактировал сценарии, которые составляют, pm-suspendи оказалось, что я почти там. Тем не менее, я обнаружил, что не могу просто приостановить system ( echo -n "mem" > /sys/power/state) после замораживания root fs ( cryptsetup luksSuspend ...), потому что для этого требуется еще какой- то ввод / вывод ...
Jonas Malaco
1
Я прочитал несколько обсуждений списков Debian (и некоторых других списков, которые связаны или были связаны с этими списками), и до сих пор кажется, что для решения потребуется что-то вроде "deinitramfs": ядро ​​будет обрабатывать контроль над deinitramfs непосредственно перед фактическим приостановлением работы системы, чтобы эти tmpfs могли выполнить окончательные действия по очистке (например, очистка ключа шифрования для rootfs).
Джонас Малако
Мне бы очень хотелось, чтобы на этот вопрос тоже отвечали.
BenAlabaster

Ответы:

3

Я столкнулся с той же проблемой, поэтому я сделал еще один шаг при переносе того же сценария, который вы можете увидеть здесь . После этого он не затрагивает какое-либо энергонезависимое хранилище luksSuspend, поэтому он работает даже с реальным полным дисковым шифрованием с зашифрованным / загрузочным. Тем не менее, вам нужно быть осторожным - иногда это может работать не так, как ожидалось!

Портированный скрипт выполняет следующие действия:

  • Создайте рамф-маунт где-нибудь
  • Извлеките там содержимое initramfs (включая скрипт initramfs suspend)
  • BIND монтировать соответствующие каталоги (например /sys, /proc, /dev, /run) к Ramfs крепления
  • Остановите все службы, которые могут помешать (systemd-udevd, systemd-journald)
  • Перемонтируйте корневую файловую систему (ext4 или btrfs) с помощью nobarrier, чтобы Linux не зависал при попытке войти в S3, а затем синхронизируйте
  • Загрузитесь в монтирование initramfs, которое снова синхронизируется, запускается luksSuspendи переводит компьютер в спящий режим
  • После пробуждения luksResumeперемонтируйте файловые системы, перезапустите службы, размонтируйте bind mounts в монтировании initramfs
  • Наконец, отключите монтирование initramfs, чтобы освободить оперативную память, используемую для файлов initramfs.

Я еще не провел обширное тестирование своего сценария, но, похоже, он работает надежно для меня. Если вы используете другую файловую систему (например, не ext4 или btrfs), то у вас могут возникнуть проблемы с барьером, поэтому вам также придется изменить скрипт.

В любом случае, хорошо проверить и убедиться, что сценарии работают первыми. Если вы испытываете зависания при попытке установить Linux на S3 (то есть на echo mem > /sys/power/state), то вы сможете восстановить:

  • Перед приостановкой откройте tty или другой терминал (который будет доступен, так что в идеале tty)
  • Загрузите cryptsetup и соответствующие библиотеки в RAM: sudo cryptsetup luksResume anything_here
  • Приостановить использование скрипта
  • Если он зависает после chroot (например, after starting version xxxотображается на новом vt), переключитесь на tty, который вы открыли ранее, и запуститеsudo cryptsetup luksResume your_luks_device_name_here
  • Если это тоже зависает, откройте другой vt и выполните chroot в /run/initramfs:sudo chroot /run/initramfs /bin/ash
  • Попробуйте запустить luksResume:cryptsetup luksResume your_luks_device_name_here && exit
  • Ваш компьютер должен затем приостановить работу. Затем вы можете разбудить его, уничтожить сценарии (и), если они все еще работают, размонтировать bind mounts and /run/initramfsи перемонтировать корневую файловую систему с барьером, если это применимо.
Zhongfu
источник
1

У меня нет опыта в этой настройке, но многие люди утверждают, что успех в этом. Вот пара из них.

dm-crypt с LUKS - шифрование раздела подкачки
. Практическое руководство. Полностью зашифрованный жесткий диск, включая раздел приостановки на диск, с помощью Ubuntu 6.10. Edgy Eft
ubuntu-full-disk-encryption-lvm-luks

Однако ни один из них не использует luksSuspend (возможно, именно поэтому они работают).

harrymc
источник
Спасибо за ссылки ... Я использую настройку, аналогичную последней ссылке (автоматически генерируется установщиком 13.04).
Йонас Малако
Пока luksSuspend, должен отключиться, чтобы очистить ключи от памяти ... Тем не менее, спасибо за ссылки! Может быть, понимая, как настроить это вручную, я могу получить некоторое представление о том, как использовать luksSuspend для приостановки в оперативную память.
Йонас Малако
1
luksSuspend кажется чрезвычайно сложным в использовании. Поскольку он замораживает все операции ввода-вывода, нужен очень акробатический скрипт приостановки. Я мог найти только одну историю успеха на немецком языке, которую можно (плохо) перевести на английский . Попробуйте использовать его как шаблон.
Harrymc
2
Вам также может понадобиться ram-диск и статически связанная криптографическая установка.
Harrymc
1

Я потратил некоторое время на то, чтобы сделать это полностью функциональным в Ubuntu 15.10. Если вы пытаетесь заставить это работать на ext2, ext3 или ext4, вам нужно обновить / etc / fstab, чтобы смонтировать том с опцией «nobarrier». В противном случае я предлагаю использовать BTRFS.

Как только ваша файловая система подготовлена, используйте скрипт здесь: https://github.com/Microcentillion/ubuntu-lukssuspend

user569427
источник