Come progettersi dallo Shellshock Bash bug

Shell Shocker
Shell Shocker

Introduzione

Il 24 Settembre 2014 è stata scoperta una vulnerabilità della GNU Bash molto grave, nominata Shellshock o “Bash Bug”. In parole povere la vulnerabilità consente ad un aggressore di eseguire del codice arbitrario (sotto certe condizioni) semplicemente passando una stringa di codice successivamente ad una assegnazione di una variabile d’ambiente.

Considerando la grande diffusione della shell Bash nei sistemi Linux, BSD, Max OS X sono moltissimi i computer vulnerabili. Tutte le versioni della Bash senza patch tra la 1.14 e la 4.3 (vale a dire tutte le versioni fino ad oggi) sono a rischio vulnerabilità.

Maggiori dettagli sul bug possono essere trovati nei bollettini ufficiali CVE-2014-6271, CVE-2014-7169, CVE-2014-7186, CVE-2014-7187.

Poichè la vulnerabilità ShellShock è molto diffusa, ancora più del bug OpenSSL Heartbleed, e facile da sfruttare, si raccomanda vivamente di verificare se i propri sistemi sono vulnerabili e in caso applicare le patch quanto prima.

Verifica della vulnerabilità

In ogni sistema che esegue la Bash è possibile la vulnerabilità a Shellshock semplicemente eseguendo questo comando:

env VAR='() { :;}; echo Bash is vulnerable!’ bash -c “echo Bash Test”

La porzione di codice scritta in neretto rappresenta il codice che un aggressore potrebbe iniettare; un codice arbitario subito dopo una funzione di definizione di una viariabile d’ambiente. Se l’output risulta come il seguente allora la versione di Bash è vulnerabile:

Bash is vulnerable!
Bash Test

In caso contrario se la versione della Bash non è vulnerabile la stringa “Bash is vulnerabile” non dovrebbe apparire e al massimo si dovrebbe vedere un messaggio del tipo:

bash: warning: VAR: ignoring function definition attempt
bash: error importing function definition for `VAR’
Bash Test

Come risolvere la vunlnerabilità

Il modo più semplice per risolvere la vulnerabilità è quello di usare il sistema di default di gestione degli aggiornamenti nelle varie distribuzioni di Linux incluso Ubuntu, Debian, CentOS, Red Hat e Fedora.

Ubuntu/Debian: APT-GET

L’aggiornamento della bash all’ultima versione è possibile con il comando:

apt-get update && apt-get install –only-upgrade bash

Al termine testare nuovamente la vulnerabilità.

CentOS/Red Hat/Fedora: YUM

L’aggiornamento della bash all’ultima versione è possibile con il comando:

yum update bash

Al termine testare nuovamente la vulnerabilità.

Conclusione

Assicuratevi di applicare la patch a tutti i server e client che gestite.

Come usare Putty per connettersi ad una machina linux con chiavi SSH

 

Il modo migliore per connettersi alla shell linux da una macchina Windows è quello di usare il programma PuTTY. L’eseguibile è scaricabile a questo link.

Nella configurazione standard una volta stabilita la connessione con il server linux si dovranno inserire le proprie credenziali (username e password). Per rendere più sicuro l’accesso è possibile utilizzare le chiavi SSH senza la necessità di inserire la password di root.

Come prima cosa bisogna generare le chiavi, per far questo si può utilizzare il programma PuTTYgen. Si può scaricare da questo indirizzo e mandarlo in esecuzione.

 image

 

Scegliere il formato delle chiavi SSH-2 RSA con dimensione di almeno 1024 bit e cliccare su Generate. Al termine della procedura la finestra conterrà la chiave appena generata:

image

 

Nel campo key comment si può inserire un commento da associare alla chiave e nei due campi Key passphrase e Confirm passphrase è possibile inserire una password per la chiave.

Se si inserisce la password ad ogni accesso è necessario inserirla altrimenti si può accedere in automatico senza digitare nulla.

A questo punto cliccare su Save private key e salvare la chiave privata in un file con estensione .ppk. Questo file ci tornerà utile più tardi. La chiave pubblica invece è visualizzata nella casella in alto sotto la dicitura Public key for pasting into OpenSSH autorized_keys file: e va copiata negli appunti.

Torniamo alla shell di linux e all’interno della cartella home dell’utente utilizzato creiamo la cartella nascosta .ssh, se non fosse presente, e dentro questi creiamo il file authorized_keys e incolliamo la chiave pubblica che abbiamo precedentemente copiato negli appunti.

Fatto questo aprite putty e create una normale sessione verso la macchina linux con l’accortezza di inserire all’interno della sezione Connection –> SSH –> Auth il file .ppk precedentemente salvato:

image

 

Se ora provate  a collegarvi a questa sessione vi verrà chiesto l’utente e subito noterete la scritta:

Authenticating with public key "rsa-key-20130618"

ad indicare che è stata usata la chiave privata configurata.

A questo punto il procedimento è concluso, volendo si possono eseguire altre due operazioni:

  • Impostare un login automatico
  • Disabilitare l’accesso alla shell tramite password

Per impostare l’autologin basta aprire la sessione creata precedente dentro putty e inserire la username nel campo Connection –> Data –> Auto-login username. In questo modo basta un doppio click nel nome della sessione e vi ritroverete automaticamente nella shell senza aver digitato nulla.

Se invece avete impostato una password per la chiave SSH dovrete inserirla comunque.

 

Per disabilitare l’accesso con password bisogna editare il file /etc/ssh/sshd_config e impostare il parametro seguente:

PasswordAuthentication no

dopodichè riavviare il servizio ssh con il comando /etc/init.d/ssh restart

Se ora provate a connettervi senza un certificato otterrete un errore del tipo:

image