Visualizzazione post con etichetta HTTPS. Mostra tutti i post
Visualizzazione post con etichetta HTTPS. Mostra tutti i post

lunedì 6 luglio 2015

Kali Linux: Testare le connessioni SSL/TLS tramite openssl

Al fine di testare la sicurezza dei propri server può essere utile poter verificare le connessioni SSL/TLS e porre rimedio ad eventuali falle di sicurezza trovate.

SSLv2 e SSLv3
Il protocollo SSL (Secure Socket Layer) è un protocollo aperto e non proprietario nato al fine di garantire la privacy delle comunicazioni su internet. La versione 1 del protocollo non fu mai rilasciata. Nel 1995 fu introdotto il protocollo SSLv2 e fu sostituito l'anno successivo da SSLv3 (RFC6101) che rimediava a diverse falle di sicurezza presenti nella seconda versione. Tuttavia anche il protocollo SSLv3 si è dimostrato vulnerabile ad alcuni attacchi, in particolare risulta vulnerabile all'attacco POODLE (Padding Oracle On Downgraded Legacy Encryption) tramite il quale un malintenzionato può rubare informazioni sensibili.

Per verificare se un host supporta ancora il protocollo SSLv2 o SSLv3 possiamo forzare l'utilizzo di tali protocolli su una connessione https con il comando openssl da una finestra terminale di Kali Linux:

openssl s_client -ssl2 -connect glubrano.com:443

openssl s_client -ssl3 -connect glubrano.com:443

Ovviamente bisogna sostituire glubrano.com con l'host che si intende testare.

Se la connessione va a buon fine allora i protocolli sono ancora supportati dall'host, in caso contrario si riceverà un errore di handshake.

Entrambi i protocolli andrebbero disabilitati per questioni di sicurezza.


openssl s_client -ssl3
FIG 1 - openssl s_client -ssl3


TLS
Il protocollo TLS (Transport Layer Security) rappresenta il successore di SSL. Nel 2009 è stata scoperta una vulnerabilità di questo protocollo causata da una non corretta gestione delle rinegoziazioni.
Per verificare se un server è affetto da questa vulnerabilità si può eseguire il seguente comando da terminale
openssl s_client -connect glubrano.com:443 < /dev/null

se all'interno dell'output è presente la scritta
Secure Renegotiation IS supported
il server è aggiornato e non vulnerabile

se, invece, troviamo la scritta
Secure Renegotiation IS NOT supported
il server è vulnerabile


TLS Secure Renegotiation IS supported
FIG 2 - TLS Secure Renegotiation IS supported

giovedì 18 giugno 2015

Kali Linux: Verificare tramite Nmap se il sistema è vulnerabile a Heartbleed

Heartbleed è il nome dato ad un errore di programmazione CVE-2014-0160  che affligge la libreria OpenSSL (dalla versione 1.0.1 alla 1.0.1f incluse) utilizzata per proteggere le comunicazioni sensibili e per l'autenticazione. 
La falla, resa pubblica il 7 aprile 2014, è stata scoperta indipendentemente da due gruppi di ricercatori: dal gruppo di Codenomicon (Riku, Antti e Matti) e Neel Mehta di Google Security.
Questa vulnerabilità consente ad un aggressore di acquisire dati riservati trasmessi dai siti che usano OpenSSL o spacciarsi per un sito attendibile utilizzando HTTPS e facendo visualizzare al browser della vittima l'icona del lucchetto chiuso (che indica una connessione sicura).

La vulnerabilità risale al 2012 quando con OpenSSL 1.0.1 è stato introdotto il supporto di RFC6250 ed è stato implementato l'heartbeat sulle connessioni TLS (Transport Layer Security protocol). L'heartbeat (chiamato anche keep-alive) viene utilizzato per evitare che client e server debbano rinegoziare la connessione in caso di temporanea inattività e mantiene il canale utilizzato dalla comunicazione aperto.  Per mantenere il canale aperto vengono inviati pacchetti dati senza informazioni al fine di resettare i contatori di inattività ma, a causa di un bug all'interno del codice, è possibile, tramite un pacchetto heartbeat opportunamente modificato, accedere ad informazioni di vario tipo.

Il protocollo prevede che il client invii al server un pacchetto di heartbeat, al massimo di 16K (anche se in realtà i pacchetti inviati sono  molto più piccoli), e che questo risponda con un pacchetto contenente la copia di quello ricevuto dal client. 
Andando nel dettaglio, il pacchetto heartbeat è composto da:

  • 0x01 costante che identifica TLS1_HB_REQUEST
  • 2 byte che indicano la dimensione del pacchetto
  • 2 byte che indicano il numero di sequenza del pacchetto
  • 16 byte di dati casuali
  • altri 16 byte casuali utilizzati come richiesto dal documento RFC6250

Il server, ricevuta la richiesta, copia i dati ricevuti e li rispedisce al client. Il codice affetto dalla vulnerabilità è il seguente:
/* Allocate memory for the response, size is 1 byte
 * message type, plus 2 bytes payload length, plus
 * payload, plus padding
 */
buffer = OPENSSL_malloc(1 + 2 + payload + padding);
bp = buffer;
/* Enter response type, length and copy payload */
*bp++ = TLS1_HB_RESPONSE;
s2n(payload, bp);
memcpy(bp, pl, payload);

Nel codice payload rappresenta la dimensione del pacchetto e viene dichiarata dal mittente (non viene verificata dal server). Se il mittente, anzichè dichiarare la vera dimensione del pacchetto, invia 0xFFFF (valore massimo esprimibile per 2 byte senza segno) il server copierebbe i 34 byte del pacchetto più altri 65501 byte prelevati dalla memoria. Proprio questi ultimi byte potrebbero contenere dati sensibili come la chiave di cifratura delle comunicazioni utilizzata dal server.

Dopo questa lunga premessa, di seguito mostrerò come testare se il proprio sistema è affetto dalla falla utilizzando Nmap su Kali Linux.
Nmap è un software libero (GNU GPL) creato per eseguire il port scanning, cioè individuare le porte aperte su un sistema e i relativi servizi attivi. Il software è incluso in Kali Linux pertanto per utilizzarlo non è necessario effettuare alcuna installazione.

Dalla finestra terminale digitare il seguente comando
nmap -d --script ssl-heartbleed --script-args vulns.showall -sV [HOST]
dove [HOST] rappresenta il nome o l'indirizzo ip della macchina che si intende verificare. 
Ad es. nel caso volessimo testare se il server con indirizzo IP 192.168.0.11 è vulnerabile possiamo digitare il comando

nmap -d --script ssl-heartbleed --script-args vulns.showall -sV 192.168.0.11

Nmap test Heartbleed
FIG 1 - Nmap test Heartbleed


ATTENZIONE:
Danneggiare un sistema informatico (anche da remoto) rappresenta un reato penale. Le informazioni presenti in quest'articolo vanno utilizzate solo per testare/verificare sistemi di cui si è titolari. Declino ogni responsabilità civile e penale derivante da un utilizzo non legale delle informazioni presentate in questo articolo a solo scopo didattico.