POODLE

POODLE (Padding Oracle On Downgraded Legacy Encryption) è un tipo di attacco alle connessioni https in grado di rubare informazioni sensibili, incluse, teoricamente, le password degli account.

L’attacco si basa su una vulnerabilità di SSLv3, RFC6101, un protocollo del novembre 1996 poco sicuro che fa parte del gruppo di protocolli di scambio dati previsti da https e da tutti i protocolli che usano TLS, come IMAPS, POP3S, SMTP con STARTTLS, eccetera.

Quando viene iniziata una connessione TLS client e server confrontano i protocolli supportati e negoziano il più sicuro tra quelli supportati da entrambi. Tuttavia è anche possibile che un attaccante in grado di disturbare la connessione tra client e server riesca a forzare usa sessione con il protocollo meno sicuro.

La vulnerabilità di SSLv3 può essere sfruttata con un attacco di tipo Man in the Middle, che riuscirebbe a decifrare dei coockie HTTP “sicuri” con la tecnica già utilizzata nell’attacco BEAST del 2011. L’attacco si basa su un codice JavaScript che gira su un sito civetta; la vittima viene convinta a visitare questo sito e il codice JavaScript cattura le informazioni spedita dal browser della vittima. Questi dati vengono utilizzati per impersonare la vittima nella connessione al sito legittimo in una maniera tale che ci sia una buona probabilità di riuscita. Qui l’ho fatta semplice per evidenti ragioni, il concetto è che se un server web supporta ancora SSLv3 può esporre i dati dei suoi visitatori a terzi.

La natura di questo tipo di attacco, che passa attraverso un codice JavaScript, è tale per cui gli altri protocolli che utilizzano TLS (ad esempio IMAPS o POP3S) non sono vulnerabili a questo specifico tipo di attacco; ma non c’è nessuna certezza in merito al fatto che possano essere comunque vulnerabili ad altri attacchi non noti o non pubblicati che si basano sulle falle di SSLv3.

La soluzione per gli amministratori di sistema e per gli utenti è di impedire che SSLv2 e SSLv3 vengano presi in considerazione quando vengono selezionati i metodi di scambio dati nel contesto di una sessione TLS. Questi sono i metodi per disabilitare SSLv2 e SSLv3 in alcuni programmi server.

Apache
Aggiungere -SSLv3 e -SSLv2 al parametro SSLProtocol che dovrebbe essere qualcosa come questo:
   SSLProtocol all -SSLv2 -SSLv3

Dovecot:
Aggiungere questo parametro, solamente se la versione di Dovecot è almeno 2.1:
   ssl_protocols = !SSLv2 !SSLv3
Le versioni più vecchie devono essere patchate come descritto dall’autore e ricompilate.

Exim con GNUTLS
Aggiungere questo parametro:
   “tls_require_ciphers = SECURE256:-VERS-SSL3.0″

nginx
Il parametro ssl_protocols elenca tutti i protocolli utilizzati; verificare che SSLv2 e SSLv3 non siano presenti.

Lighttpd
Nelle versioni successive alla 1.4.28 si possono disabilitare SSLv2 e SSLv3 con questi due parametri:
   ssl.use-sslv2 = "disable"
   ssl.use-sslv3 = "disable"
Nelle versioni precedenti può essere disabilitato solamente SSLv2.

Postfix:
Per chi ha configurato TLS come protocollo opzionale (opportunistic) aggiungere questi parametri:
   smtpd_tls_protocols = !SSLv2 !SSLv3
   smtp_tls_protocols = !SSLv2 !SSLv3
   lmtp_tls_protocols = !SSLv2 !SSLv3
se, invece TLS è configurato come protocollo obbligatorio (mandatory) i parametri sono questi:
   smtpd_tls_mandatory_protocols = !SSLv2 !SSLv3
   smtp_tls_mandatory_protocols = !SSLv2 !SSLv3
   lmtp_tls_mandatory_protocols = !SSLv2 !SSLv3

puppet:
Vedere le istruzioni pubblicate qui.

Per quanto riguarda i client:

Firefox
Scrivere about:config nella barra dell’indirizzo, impostare il parametro security.tls.version.min a 1 e riavviare il programma. SSL v3 sarà disabilitato per default in Firefox 34, che verrà rilasciato il 25 novembre. La versione 35 supporterà SCSV.

Google Chrome
Avviare il programma con il parametro --ssl-version-min=tls1. Da febbraio 2014 Chrome supporta il meccanismo di protezione dai downgrade dei protocoli SCSV per ridurre ulteriormente attacchi di questo tipo; naturalmente SCSV deve essere supportato anche dal server che si va a visitare e ciò non lo rende immune ad attacchi deliberati.

Internet Explorer
Disabilitare SSLv3 nelle opzione avanzate.

Safari
Non sono noti metodi per disabilitare SSLv2 o SSLv3.

Per tutti i prodotti Microsoft seguire le istruzioni pubblicate in questo articolo.

Si può verificare se il proprio browser utilizza ancora SSLv3 visitando questo sito (solamente per i browser) o questo sito (sia per i browser sia per i server).

Chi ha accesso ad una command line Linux può testare una qualsiasi connessione TLS dando questo comando:
   openssl s_client -connect <server>:<porta> -ssl3 [-starttls protocollo]
se la connessione va a buon fine, la sessione TLS utilizza SSLv3, se invece si riceve un errore simile a
   error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
la connessione non utilizza SSLv3. Il parametro opzionale -starttls permette di definire un protocollo da scegliere tra smtp, pop3, imap, ftp, xmpp per l’handshake iniziale e deve essere utilizzato se si sta testando un servizio diverso da http.

Si può utilizzare anche nmap per verificare se un server http supporta ancora SSLv3:
   nmap --script ssl-enum-ciphers -p 443 www.nomedelserver.com
Se nell’output del comando appare la riga
   SSLv3: No supported ciphers found
il server non supporta SSLv3, se invece appare
   SSLv3:
   ciphers:
   TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
seguito da un elenco di protocolli allora il server supporta ancora SSLv3

L’unico problema nel disabilitare SSLv3 è che alcuni vecchi programmi potrebbero smettere di funzionare correttamente. In base ai test che hanno fatto alcune persone i programmi interessati sono, per il momento, Internet Explorer 6 e Outlook 2003. In particolare che utilizza Outlook 2003 con Windows XP e si collega in SSL/TLS ad un server a cui è stato disabilitato SSLv3 si può trovare davanti ad un errore del genere:

Outlook 2003

Questo potrebbe essere un buon momento per forzare la dismissione di programmi non più supportati che creano danni a chi li utilizza.


Aggiornamenti dopo la pubblicazione iniziale

  • 16/10/2014 corretti alcuni errori, integrata nel testo la procedura per Exim+GNUTLS (grazie Kurgan), specificata meglio la command line di openssl (grazie Kurgan), aggiunto l’errore di Outlook 2003, aggiunto il riferimento a Safari.

 

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

4 pensieri riguardo “POODLE”

  1. Aggiungo qualche informazione:

    Per Exim4 (versione 4.80, non so quanto le piu` vecchie siano compatibili) e` possibile disattivare SSLv3 (e anche V2, visto che ci siamo) con questa impostazione:

    “tls_require_ciphers = SECURE256:-VERS-SSL3.0”

    Notare che questa impostazione va bene se Exim usa GNUTLS come libreria di crittografia. Se ne usa altre, allora la stringa da inserire sara` diversa. Questa impostazione e` stata provata con client Thunderbird (ultima versione) e Aquamail (ultima versione) e funziona (cioe` i client si collegano senza errori). Va altresi` notato che questa configurazione limita il protocollo SSL sia per i client che si collegano per inviare email e autenticarsi (SMTPA) sia per l’interscambio SMTP fra server diversi. Questo potrebbe essere in realta` un indebolimento della sicurezza, perche` potrebbe causare un fallback di una sessione SMTP fra due server diversi da un vulnerabile SSLv3 a una connessione totalmente priva di crittografia.

    E` possibile pensare a un workaround che limiti l’esclusione dell’ SSLv3 solo dalla porta Submit e non dalla porta SMTP, pero` ha senso solo se siamo sicuri che tutti i client autenticati ci chiamano sulla porta Submit e mai sulla SMTP.

    Altra informazione: per testare i protocolli che usano un meccanismo di STARTTLS (quindi partono in chiaro e poi vanno in cifra) e` possibile usare openssl in questo modo:

    openssl s_client -connect :25 -ssl3 -starttls smtp

    In pratica e` lo stesso test indicato nell’articolo, ma con in coda “-starttls smtp”, che dice di usare l’handshake STARTTLS specifico dell’ smtp. E` possibile usare come parametro per “-starttls” anche “pop3”, “imap”, “ftp” e “xmpp”, per provare ovviamente i server che usano suddetti protocolli.

  2. La stringa di openssl indicata sopra manca dell’hostname prima del “:25”, quella giusta e`

    openssl s_client -connect hostname:25 -ssl3 -starttls smtp

Spazio per un commento