Oggi vorrei parlare di una vulnerabilità poco conosciuta, ma molto diffusa, che può facilmente aprire le porte a tecniche di attacco come il phishing. La cosa si fa particolarmente interessante (e inquietante) se vi dico che big come Facebook e Google sono soggette al problema.
Andiamo per gradi.
Cos’è il phishing
Si tratta di un attacco che non sfrutta la debolezza di un sistema informatico, ma del comportamento umano (social engineering). Ad esempio, può essere una pagina visivamente uguale alla pagina di login di Facebook. I malcapitati penserebbero di stare per accedere al sito di Zuckerberg, invece stanno regalando le proprie credenziali agli hacker.
L’exploit
La vulnerabilità è sfruttabile sui siti che utilizzano un link con target=”_blank”, che dice al browser di aprire la pagina in una nuova scheda. Potete ben immaginare che stiamo parlando di una fetta piuttosto ampia.
Immaginiamo il caso. L’hacker ha un sito web, su cui carica un contenuto per distrarre l’utente, ad esempio una classica gallery di gattini e inserisce il potentissimo codice JavaScript malevolo: appena una riga, che è la seguente.
window.opener.location="http://zombie_fake_facebook.com"
Quindi l’hacker condivide il link su Facebook. L’utente, affascinato dai gattini, clicca sul link. Mentre si intrattiene in questa divertentissima gallery, il JS malevolo dice al browser che la scheda da cui è stato aperto il sito (detta opener), ovvero la pagina Facebook, deve cambiare location (cioè indirizzo) e andare su http://zombie_fake_facebook.com, che si presenta come la pagina di login del social network.
Il tutto avviene in sordina, mentre l’utente ignaro scorre le immagini dei gattini. Dopo minuti di rincoglionimento, chiude la scheda e si ritrova il login di Facebook, che conosce bene. Boh, ci sarà stato un errore, quindi inserisce le credenziali di accesso e le regala all’hacker.
In definitiva si tratta di un attacco di tipo phishing, detto tabnabbing.
Volete provare? Se avete aperto questa pagina da Facebook (altrimenti aprite un link dal social network e provatelo da lì), premete il tasto F12 e andate nella tab Console. Nella riga in basso inserite il JS, premete INVIO e vedrete la scheda di Facebook andare sul sito fake.
Come proteggersi
Proteggersi è di per sé molto semplice. Basta dare a qualsiasi link con target=”_blank” l’attributo rel=”noopener noreferrer”. In questo modo sarà impossibile per il browser cambiare la location della pagina opener. Mi rendo conto che inserire questi attributi manualmente su tutti i link è fuori discussione e anche che nessun tool prende in considerazione il problema, ma con un pizzico di JavaScript (jQuery in questo caso) tutto si risolve:
$(document).ready(function() { $.each($('a[target="_blank"]'), function() { var rel = (hasAttr($(this).attr('rel'))) ? $(this).attr('rel') : ""; if ( rel.indexOf('noopener') === -1 ) { rel += ' noopener'; } if ( rel.indexOf('noreferrer') === -1 ) { rel += ' noreferrer'; } $(this).attr('rel', rel.trim()); }); }); var hasAttr = function(attr) { return (typeof attr !== typeof undefined && attr !== false); };
Quello che fa questo codice è prendere tutti i link con target=”_blank” e per ognuno di essi prelevare i valori dell’attributo rel eventualmente esistenti e, se noopener e noreferrer sono assenti, li aggiunge. È un metodo un po’ grezzo, ma funziona.
Chi dovrebbe preoccuparsi?
Fosse per me direi tutti. Come abbiamo visto, proteggersi è un attimo, quindi perché no? Se proprio dobbiamo fare una lista, invece, direi che devono preoccuparsi in primis quelli che trattano dati sensibili o privati e poi quelli che permettono ai propri utenti di inserire dei link sulla propria piattaforma, come i commenti di un blog.
Considerazioni
Se avete ben chiaro i rischi del phishing, capirete che è molto strano il fatto che siti come Google e Facebook se ne sbattano. E se ne sbattono realmente: Google si è espressa a riguardo e in poche righe dice di non trattare il problema perché questo tipo di contromisure non fa parte del design (inteso come architettura) dei browser moderni e implementare una soluzione su un solo sito non mitiga il problema… e quindi? Sinceramente mi delude un po’ questa opinione, soprattutto perché sembra prendano sottogamba il potere del phishing, che può essere molto pericoloso. Dicono che tanto l’URL sarebbe diversa da quella del sito reale, ma consideriamo che:
- Non tutti gli utenti si pongono troppe domande e comunque tutti siamo inclini a distrarci mentre navighiamo (la gallery dei gattini non vi metterebbe in uno stato di relax?);
- Nei dispositivi mobile non sempre l’URL è visibile, quindi anche l’utente generalmente attento potrebbe non accorgersene affatto;
- Sfruttando altri attacchi informatici, il dominio reale potrebbe puntare al server dell’hacker (se ad esempio fosse riuscito a manipolare i DNS); ci sono fiotti di casi di questo tipo;
- Poco tempo fa fu evidenziata una vulnerabilità grazie a cui domini formati da caratteri non-ASCII possono essere rappresentati da caratteri ASCII, grazie ad un particolare sistema di codifica, detto Punycode. Vedi il caso di apple.com che non è apple.com. Insomma, URL visivamente uguale all’originale e phishing a go go.
A me sembra che esista un problema molto sottovalutato, per cui il consiglio è di imparare a proteggere i propri utenti e pure di guardarsi le spalle. Anche questo articolo è terminato, ora puoi pure tornare su Facebook… sempre che si tratti di Facebook :p