Impedire che le password in chiaro siano generate da uno script per essere accessibili in futuro

2

Diciamo che ho uno script Bash che genera una password, crea un nuovo utente con quella password, quindi mi dice quale sia la password:

# Generate a password and set it to $PASSWORD
PASSWORD=$(tr -dc '[:graph:]' < /dev/urandom | head -c $(shuf -i 24-32 -n 1))

# Create a new user and set its password to $PASSWORD
useradd --home-dir /home/tom --create-home tom
echo "tom:$PASSWORD" | chpasswd

# Output the $PASSWORD
echo "The password is: $PASSWORD"

Eseguirò questo script, come root , solo una volta.

Dopo che lo script mi ha mostrato la password, la annoterò manualmente nel mio sistema di gestione password sicura.

Non voglio che la password in testo semplice sia mai più visibile sul sistema, anche all'utente root (nella maggior misura possibile).

1. Sarà possibile che qualcuno veda l'output (password in testo semplice) di questo script in futuro e, in tal caso, come posso rimuoverlo dal sistema?

2. Cosa posso fare (se necessario) per assicurarmi che i contenuti di $PASSWORD non siano mai accessibili dopo che lo script è terminato?

    
posta 18.10.2015 - 02:30
fonte

2 risposte

1

Lo script che hai scritto non inserisce la password in nessuna memoria a lungo termine facilmente accessibile (come un file). Anche se il tipico controllo di linux sarebbe abilitato (che scriverebbe tutte le chiamate di programma unix in un file di log, inclusi gli argomenti), la password non è visibile, poiché è passata solo attraverso i flussi. L'unica eccezione è il comando "echo", che risulta essere una shell incorporata su bash, quindi non è una "invocazione del programma unix".

Se lo script è finito, la memoria allocata a $PASSWORD viene liberata e se si verifica un altro processo per allocare quella memoria, verrà cancellata prima. Ma la memoria usata per "$ PASSWORD" (o le copie fatte all'interno di chpasswd, l'echo incorporato, la libreria grafica per mostrare la password) non viene necessariamente pulita dopo la terminazione di quello script. Se ti capita di utilizzare una GUI con una finestra della console, la password ovviamente è in memoria fino a quando puoi tornare ad essa. A seconda delle impostazioni di sicurezza nel kernel, i processi di root potrebbero essere in grado di cercare l'intera memoria fisica o lo spazio di swap per le copie della password, ma qualsiasi programma che assegna memoria tramite il kernel è garantito per non trovare la password, perché la memoria essere cancellato prima che venga distribuito per un altro processo.

Se il tuo computer ha un sacco di memoria, o se la password è finita nello spazio di swap, potrebbe essere in giro per un lungo periodo di tempo dopo che hai finito lo script. Non avere scambio (o disabilitare lo swap e cancellare l'intera partizione / file di swap) impedisce che la password finisca nel file di swap. Assegnare e sovrascrivere molta memoria può cancellare la password dalla memoria, ma è una cosa pericolosa da fare su linux perché il killer di OOM che kickerà proprio come si può essere sicuri di aver sovrascritto tutta la memoria che potrebbe contenere la password potrebbe uccidere alcuni non collegati processo.

Se hai bisogno di sicurezza contro lo scraping della memoria, la generazione della password dovrebbe accertarsi che la password non venga mai copiata in una memoria non controllata e che la memoria controllata venga cancellata prima che il programma esca. Non c'è modo di farlo in shell. Penso che non sia nemmeno possibile visualizzare una password (non scrivendola direttamente alla memoria video) che è garantita al 100% di non copiare la password in qualche memoria casuale.

    
risposta data 18.10.2015 - 11:02
fonte
0

Il tuo script è ben scritto per la generazione di password. La cosa più importante è tenere la password nella RAM e non salvarla su disco. La disabilitazione dello swap durante la creazione impedirà la memorizzazione accidentale della password sul disco.

Quando pensi che l'utente root possa scaricare la RAM, non hai alcuna possibilità di evitare completamente l'estrazione della password. Per proteggere ulteriormente dalle intercettazioni, è possibile creare le password offline da un Live-CD e copiare semplicemente gli hash delle password generate in / etc / shadow (o LDAP, o qualsiasi altra cosa).

    
risposta data 18.10.2015 - 13:54
fonte

Leggi altre domande sui tag