Comment sécuriser la suspension de RAM sur Ubuntu avec le chiffrement intégral du disque (LVM au-dessus de LUKS)?

20

Je suis sur Ubuntu 13.04 en utilisant le chiffrement intégral du disque (LVM au-dessus de LUKS).

Je souhaite intégrer luksSuspendla procédure de suspension (et d'utilisation ultérieure luksResume) afin de pouvoir suspendre en RAM sans laisser de clé sur la mémoire et la racine non verrouillée.

Cela fait 7 heures que j'essaie de porter un script pour Arch Linux , mais sans succès jusqu'à présent: je n'ai honnêtement aucune idée de ce que je fais ...

Quelqu'un peut-il m'aider à porter ceci (ou à créer quelque chose comme ça à partir de zéro)? Ou, au moins, quelqu'un peut-il m'indiquer la documentation sur la manière d'intégrer des éléments dans les procédures de suspension et de conserver les fichiers binaires et les scripts nécessaires (tels que cryptsetup) même après que tous les E / S de root aient été bloqués luksSuspend?

En ce qui concerne la façon de garder les fichiers binaires et les scripts nécessaires à la reprise, cet autre article de blog (également pour Arch) les a copiés /boot; J'aimerais cependant utiliser quelque chose de plus dans les lignes que Vianney a utilisées dans le script que j'ai mentionné précédemment, car cette approche semble être un peu plus élégante à cet égard.

Jonas Malaco
la source
Je passe encore quelques heures là-dessus ...
Jonas Malaco
J'ai édité les scripts qui composent pm-suspendet il est apparu que j'étais presque là. Cependant, j'ai découvert que je ne pouvais pas simplement suspendre le système ( echo -n "mem" > /sys/power/state) après avoir gelé la racine fs ( cryptsetup luksSuspend ...), car cela nécessite encore quelques i / o ...
Jonas Malaco
1
J'ai lu quelques discussions sur les listes Debian (et quelques autres listes liées ou liées à celles-ci) et, jusqu'à présent, il semble qu'une solution nécessiterait quelque chose comme un "deinitramfs": le noyau gérera le contrôle sur les deinitramfs. juste avant de suspendre réellement le système, afin que ce tmpfs puisse effectuer les actions de nettoyage finales (telles que l’effacement de la clé de chiffrement pour le rootfs).
Jonas Malaco
J'aimerais vraiment que cette question soit répondue aussi.
BenAlabaster

Réponses:

3

J'ai rencontré le même problème et j'ai donc essayé de porter le même script, comme vous pouvez le voir ici . Il ne touche plus aucun stockage non volatile après luksSuspend, il fonctionne donc même avec un vrai cryptage intégral du disque avec un / boot chiffré. Cependant, vous devrez faire attention - cela pourrait ne pas fonctionner comme prévu de temps en temps!

Le script porté effectue les opérations suivantes:

  • Créer un mont ramfs quelque part
  • Extrayez le contenu de initramfs à cet emplacement (y compris le script de suspension initramfs)
  • Bind monter les répertoires pertinents (par exemple /sys, /proc, /dev, /run) aux ramfs mount
  • Arrêtez tous les services susceptibles d'interférer (systemd-udevd, systemd-journald)
  • Remontez le système de fichiers racine (ext4 ou btrfs) avec nobarrier afin que Linux ne se bloque pas lorsque vous essayez d'accéder à S3, puis synchronisez
  • Chroot dans le montage initramfs, qui se synchronise à nouveau, s'exécute luksSuspendet met l'ordinateur en veille
  • Après le réveil, luksResumeremontez les systèmes de fichiers, redémarrez les services, démontez les montages de liaison dans le montage initramfs
  • Enfin, démontez le montage initramfs afin de libérer la RAM utilisée pour les fichiers initramfs.

Je n'ai pas encore fait de tests approfondis sur mon script, mais il semble fonctionner de manière fiable pour moi. Si vous utilisez un autre système de fichiers (c’est-à-dire pas ext4 ou btrfs), vous rencontrerez peut-être des problèmes avec barrier. Vous devrez donc également modifier le script.

Quoi qu'il en soit, il est bon de tester et de vérifier que les scripts fonctionnent en premier. Si vous rencontrez des problèmes lors de la tentative de passer de Linux à S3 (c’est-à-dire at echo mem > /sys/power/state), vous devriez être en mesure de récupérer:

  • Avant de suspendre, ouvrez un terminal ou un autre terminal (qui sera accessible, donc idéalement un terminal)
  • Chargez cryptsetup et les bibliothèques pertinentes dans la RAM: sudo cryptsetup luksResume anything_here
  • Suspendre en utilisant le script
  • S'il se bloque après le chroot (par exemple après starting version xxxest affiché sur le nouveau vt), passez au tty que vous avez ouvert précédemment et exécutezsudo cryptsetup luksResume your_luks_device_name_here
  • Si cela se bloque aussi, ouvrez un autre vt et chroot dans /run/initramfs:sudo chroot /run/initramfs /bin/ash
  • Essayez de courir luksResume:cryptsetup luksResume your_luks_device_name_here && exit
  • Votre ordinateur devrait alors suspendre. Vous pouvez ensuite le réactiver, tuer le (s) script (s) s’ils sont toujours en cours d’exécution, démonter les montages de liens et /run/initramfs, puis remonter votre système de fichiers racine avec barrière, s’il ya lieu.
zhongfu
la source
1

Je n'ai pas l'expérience de cette configuration, mais beaucoup de gens prétendent y réussir. En voici quelques uns.

dm-crypt avec LUKS - Encrypting la partition Swap
Howto: harddisk crypté Completly y compris la suspension à la partition de disque avec Ubuntu 6.10 Edgy Eft
ubuntu-full-disque cryptage-lvm-luks

Cependant, aucun d'entre eux n'utilise luksSuspend (ce qui pourrait expliquer pourquoi ils fonctionnent).

harrymc
la source
Merci pour les liens ... J'utilise une configuration similaire au dernier lien (généré automatiquement par l'installateur 13.04).
Jonas Malaco
Pas de lupsuspend jusqu'à présent, il faut éteindre pour effacer les clés de la mémoire ... Néanmoins, merci pour les liens! Peut-être qu'en comprenant comment configurer cela manuellement, je peux comprendre un peu comment utiliser luksSuspend pour suspendre RAM.
Jonas Malaco
1
luksSuspend semble extrêmement difficile à utiliser. Comme il bloque toutes les E / S, il faut un script de suspension très acrobatique. Je n'ai pu trouver qu'une seule réussite en allemand qui puisse être (mal) traduite en anglais . Essayez de l'utiliser comme modèle.
harrymc
2
Vous devrez peut-être également utiliser un disque virtuel et un cryptage lié de manière statique.
harrymc
1

J'ai passé un peu de temps à obtenir cela entièrement fonctionnel sur Ubuntu 15.10. Si vous essayez de faire fonctionner cela sur ext2, ext3 ou ext4, vous devrez mettre à jour / etc / fstab pour monter le volume avec l'option 'nobarrier'. Sinon, je suggère d'utiliser BTRFS.

Une fois votre système de fichiers préparé, utilisez le script ici: https://github.com/Microcentillion/ubuntu-lukssuspend

utilisateur569427
la source