Passa la password a GPG tramite script

2

Ok, forse prima un piccolo contesto:

Uso un file crittografato PGP (GPG) per conservare le mie password. Uso uno script (trattino), associato a una combinazione di tasti, per inserire nomi utente e password tra applicazioni e siti Web. Ho anche una coppia di chiavi PGP per email.

Non mi piace dover rinunciare alla mia complessa password per decodificare ogni e-mail ogni volta. Fortunatamente gpg2 risolve questo nascondendo la password con gpg-agent. Tuttavia, non mi piace questo comportamento quando si tratta del mio file di password. Non voglio che venga decodificato per la stessa quantità di tempo delle mie e-mail ...

Per quanto ne so, non puoi impostare diversi timeout per chiavi diverse, quindi ho trovato la seguente soluzione:

Per decrittografare il mio file di password userei questa riga nel mio script "auto-type":

store="$(gpg -q --batch --passphrase 'dmenu -P' -d /path/to/file)"

(L'opzione -P per dmenu viene aggiunta con una patch .Non mostra ciò che scrivi. Il mio file password sarebbe simmetricamente crittografato.)

In questo modo, gpg-agent viene aggirato e la password deve essere fornita ogni volta.

La mia domanda è: questo metterebbe a repentaglio la mia password? è in qualche modo meno sicura che dare gpg la password a gpg-agent?

Inoltre, come puoi vedere, memorizzo il testo decrittografato in una variabile locale. Quanto è insicuro questo? Lo script termina dopo aver digitato (o non aver digitato) le informazioni richieste e ho questa trappola all'inizio dello script:

finish () {
    unset store
    unset passw
}

trap finish EXIT
    
posta voyager 18.01.2018 - 23:20
fonte

2 risposte

0

Il modo migliore per farlo è usare un descrittore di file. Dalla pagina di manuale:

--passphrase-fd n
Read the passphrase from file descriptor n. If you use 0 for n, the passphrase 
will be read from stdin. This can only be used if only one passphrase is 
supplied. Don't use this option if you can avoid it.

In questo modo puoi essere certo che non sia visibile sulla riga di comando o sull'ambiente (che può essere letto anche tramite / proc da altri processi).

    
risposta data 19.01.2018 - 15:21
fonte
2

Dipende dal tuo modello di minaccia. Se un utente malintenzionato può ottenere una lista di processi ( ps ) sulla tua macchina al momento giusto, vedrà la password sostituita passata a GPG. Questo è disponibile per un utente normale, quindi disponibile anche per qualsiasi malware sul tuo sistema, anche in esecuzione come utente diverso.

Potresti vedere questo creando un FIFO per l'input (quindi bloccherà) e eseguendo ps aux dopo aver avviato GPG. Ad esempio:

% mkfifo io
% gpg -q --batch --passphrase 'echo supersecret' -d io &
% ps -ef | grep gpg
david    23136 22440  0 19:11 pts/4    00:00:00 gpg -q --batch --passphrase supersecret -d ./io

Puoi vedere che supersecret viene visualizzato in ps output, proprio come sarebbe il tuo output di dmenu -P .

Dovresti prendere in considerazione l'utilizzo di --passphrase-file con il reindirizzamento attraverso una named pipe, come ad esempio:

gpg --passphrase-file <(dmenu -P)

Questo trasferirà la passphrase attraverso una pipe, piuttosto che un argomento della riga di comando, nascondendolo da qualsiasi attacker in grado di leggere la lista dei processi.

Inoltre, i dati memorizzati verranno lasciati nella memoria (fisica) quando lo script del trattino termina, a prescindere dal fatto che si disinserisca o meno la variabile. (Unset rimuove solo il riferimento alla variabile.) C'è un'alta probabilità che se qualcuno prendesse fisicamente la tua macchina e fosse in grado di scaricare la memoria, quella memoria forensica porterebbe ad essere in grado di estrarre alcune / tutte le tue password. Non sono a conoscenza di alcuna shell o strumento per mitigare questo rischio. (Esiste anche il rischio che venga memorizzato in swap, se si utilizza lo swap. Considerare lo swap crittografato temporaneo per mitigare questa preoccupazione.)

    
risposta data 19.01.2018 - 01:21
fonte

Leggi altre domande sui tag