Cancellare le chiavi di crittografia (LUKS) prima di suspend-to-RAM?

6

Recentemente mi sono chiesto se c'è un modo per cancellare le mie chiavi LUKS dalla RAM prima di sospendere il mio dispositivo (di solito un laptop) in modalità S3. Sono interessato a una soluzione che possa funzionare per la mia partizione / . Nel modo in cui lo immagino, mi piacerebbe che il mio sistema mi chiedesse nuovamente la password quando lo riprendo.

Se una soluzione del genere non esiste, mi chiedo se una macchina virtuale possa funzionare. Prima della sospensione, anche la VM sarebbe sospesa (in qualche altro modo in pausa), un debugger cercherebbe la chiave privata LUKS, la salverà in qualche luogo sicuro, cancellerà tutte le sue occorrenze dalla RAM e alla ripresa dell'alimentazione, decodificherà il segreto usando la password dell'utente e ripristinarla su tutti gli offset salvati. Lo stesso potrebbe essere fatto con le chiavi GPG / SSH / Bitcoin. Questo sarebbe un approccio sicuro? In caso negativo, perché?

    
posta d33tah 21.01.2014 - 00:11
fonte

2 risposte

3

La soluzione è chiamata "Sospensione" o sospensione sul disco.

In base alla progettazione, la sospensione della RAM si attiva istantaneamente ed è più intesa come modalità di risparmio energetico rispetto a una versione di "spento".

Il software può ricevere notifiche che sta per verificarsi la sospensione su ram e cose come i programmi Password Safe dovrebbero - e in genere lo fanno - cancellare automaticamente le loro chiavi. Potresti facilmente modificare ad es. I client SSH per fare lo stesso, se non lo fanno già.

Tuttavia, i programmi di crittografia del disco non possono necessariamente farlo, poiché potrebbe essere necessario accedere ai file aperti su tali dischi come parte del processo di ripresa.

    
risposta data 21.01.2014 - 11:52
fonte
3

Partizione non di sistema

Per le partizioni altro della partizione di sistema è possibile utilizzare la seguente unità systemd:

[Unit]
Description=Wipe Keys before <target>
After=<target>

[Service]
Type=oneshot
ExecStart=/path/to/wipe

[Install]
WantedBy=<target>

<target> è il target corrispondente della modalità desiderata. Dalla manpage systemd-suspend.service : suspend.target , hibernate.target o hybrid-sleep.target

E lo script wipe :

dmsetup suspend "$name"
dmsetup message "$name" 0 key wipe

o se usi LUKS

cryptsetup luksSuspend <name>

Dopo aver riattivato il sistema, è necessario emettere:

dmsetup message "$name" 0 key set  "$key"
dmsetup resume  "$name"

o

cryptsetup luksResume <name>

Macchina virtuale

Se si mette l'intera macchina virtuale su un disco crittografato dell'host, è possibile utilizzare lo stesso approccio, ma è necessario interrompere il guest con "Salva lo stato del sistema" e assicurarsi che questo stato venga salvato anche su il disco crittografato. Anticiperai qualcosa come i seguenti comandi al tuo script wipe :

VBoxManage controlvm "$vboxname" savestate

e per riprendere

VBoxManage controlvm "$vboxname" resume

Ricorda che se non si interrompe effettivamente il guest, non espone le chiavi di crittografia. Lascia solo la RAM dell'ospite non crittografata nella RAM o nello scambio.

Crittografia completa del sistema

C'è una soluzione per lo stato di ibernazione (risparmiando RAM sull'unità) con la crittografia dell'intero sistema. Fondamentalmente devi crittografare il tuo swap. Vedi qui e here Questo non aiuta quando si sospende la RAM.

    
risposta data 03.04.2014 - 20:01
fonte

Leggi altre domande sui tag