Quando si invia un'email si pensa che questa non possa essere modificata dal mittente una volta che è stata consegnata al destinatario. Il ricercatore di sicurezza Francisco Riberio (Mimecast) ha sconfessato tale assunto dimostrando che nei client di posta più diffusi è presente una falla che consente la modifica del messaggio di posta anche dopo che questo è stato ricevuto/consegnato. Il messaggio può essere modificato e risultare valido anche se firmato digitalmente utilizzando tecnologie come OpenPGP e S/MIME.
Questo tipo di attacco è stato denominato ROPEMAKER (Remote Originated Post-delivery Email Manipulation Attacks Keep Emails Risky) e, per essere effettuato, necessita che il messaggio email sia in formato HTML e che al suo interno venga richiamato un foglio di stile esterno.
I client di posta, oltre alle immagini esterne al messaggio (non integrate all'interno dell'email), sono in grado di caricare anche altri elementi (come ad es. i file CSS) presenti in remoto e ciò li espone alla vulnerabilità trattata in questo articolo.
Di seguito verranno illustrate alcune tecniche indicate da Francisco Riberio che consentono di sfruttare tale vulnerabilità dei client di posta.
Switch: Scambiare il testo
Questa è probabilmente la tecnica più semplice. L'email viene creata in modo tale che vi siano più versioni del testo ciascuna contenuta nel proprio tag HTML (<div>). All'interno del codice HTML viene richiamato un foglio di stile presente su un server remoto gestito da chi esegue l'attacco. Il file CSS provvede a rendere visibile alla vittima solo una delle versioni del testo presenti all'interno del messaggio. Una volta che il messaggio è stato consegnato il malintenzionato può modificare la versione del testo visualizzata agendo sul file CSS.
In figura FIG 1 è mostrato un esempio del codice HTML dell'email contenente più versioni del testo e il relativo file CSS (FIG 2). Agendo tramite il file CSS è possibile decidere quale versione rendere visibile.
|
FIG 1 - ROPEMAKER, Switch - Email con più versioni del testo |
|
FIG 2 - ROPEMAKER, Switch - CSS per nascondere/visualizzare una versione del testo |
Tale tecnica presenta diversi svantaggi:
- Il malintenzionato deve conoscere e inserire in anticipo le varie versioni del testo pertanto non ha il pieno controllo sul messaggio visualizzato dalla vittima;
- Visualizzando il codice sorgente del messaggio la vittima potrebbe rendersi contro del tranello;
- Se la vittima esegue una ricerca utilizzando un termine presente nel testo nascosto, l'email verrà comunque evidenziata tra i risultati della ricerca creando sospetti;
Matrix: Manipolazione arbitraria del testo
Estremizzando l'approccio visto per la tecnica Switch è possibile rendere visibile/nascondere un carattere in una determinata posizione del messaggio in modo da permettere a chi attacca di personalizzare a proprio piacimento il testo visualizzato dalla vittima. Per fare questo bisogna implementare una sorta di sequenza di array contenenti tutti i caratteri per ciascuna posizione del testo. A ciascun carattere deve essere assegnato un ID univoco che permette di identificare il carattere stesso e la sua posizione. Si può pensare ad una corrispondenza carattere-ID come quella mostrata in tabella.
Carattere
|
TAG
|
Caratteri minuscoli
|
#<carattere minuscolo><posizione>
|
Caratteri maiuscoli
|
#<carattere
maiuscolo><posizione>
|
Numeri
|
#nb<numero>_<posizione>
|
Virgola
|
#cm<posizione>
|
Punto interrogativo
|
#qm<posizione>
|
Spazio
|
#ws<posizione>
|
Virgolette
|
#qt<posizione>
|
Punto
|
#dt<posizione>
|
Due punti
|
#cl<position>
|
Slash
|
#sl<posizione>
|
I caratteri saranno tutti nascosti e potranno essere abilitati singolarmente tramite il file CSS remoto. Il codice HTML dell'email avrà un contenuto simile a quello mostrato in figura FIG 3.
|
FIG 3 - ROPEMAKER, Matrix - Email contenente tutti i possibili caratteri attivabili per ciascuna posizione |
Il messaggio visualizzato dalla vittima può essere personalizzato modificando opportunamente il file CSS remoto e attivando solo i caratteri di proprio interesse per ciascuna posizione. In figura FIG 4 è mostrato come, tramite il CSS remoto, il messaggio mostrato dalla vittima viene modificato da ciao a bye.
|
FIG 4 - ROPEMAKER, Matrix - CSS remoto |
Questo tipo di approccio presenta diversi inconvenienti:
- La dimensione dell'email potrebbe diventare rilevante nel caso di messaggi lunghi;
- Nell'elenco messaggi vengono visualizzati tutti i caratteri.
|
FIG 5 - ROPEMAKER, Matrix - Nell'anteprima dell'elenco messaggi vengono visualizzati tutti i caratteri |
A questo è possibile porvi rimedio inserendo, all'interno dell'email, un testo alternativo abbastanza lungo oppure utilizzando numerosi caratteri Unicode U+2029 (che sono simili allo spazio) come mostrato in figura FIG 6
|
FIG 6 - ROPEMAKER, Matrix - Caratteri Unicode U+2029 aggiunti al messaggio |
- In MS Outlook ciascuna lettera viene separata da quella precedente con uno spazio. Per evitare tale comportamento possiamo agire tramite il file CSS impostando la dimensione dei font nascosti a 0px, forzando la dimensione dei font visualizzati a 14px e 0px per la proprietà margin e padding come mostrato in figura FIG 7
|
FIG 7 - ROPEMAKER, Matrix - Evitare lo spazio tra caratteri riducendo la dimensione dei caratteri nascosti tramite CSS |
- Un altro effetto collaterale si verifica se la vittima apre il messaggio quando non è online o nel caso in cui il client di posta non sia vulnerabile. In questi casi il client di posta, non caricando il file CSS remoto, visualizzerà una lunga lista di caratteri. Per ovviare a questo problema è possibile inserire un testo generico che verrà visualizzato quando il file CSS non è raggiungibile.
Proprietà Content
Nei fogli stile è possibile utilizzare la proprietà Content per definire il testo da aggiungere prima o dopo (con ::before e ::after ) un determinato tag HTML.
Tale elegante tecnica consente di semplificare e alleggerire il codice HTML presente all'interno dell'email e permette un maggiore controllo sul testo da visualizzare da parte del malintenzionato.
Il codice sorgente del messaggio avrà un aspetto simile a quello mostrato in figura FIG 8.
|
FIG 8 - ROPEMAKER, Content - Email |
Tramite il CSS remoto il malintenzionato, sfruttando la proprietà Content, può aggiungere/modificare il testo visualizzato. Nel CSS mostrato in figura FIG 9, tramite Content viene modificato il testo aggiunto dopo il tag body.
|
FIG 9 - ROPEMAKER, Content - CSS remoto da cui è possibile modificare il testo tramite Content |
Anche in questo caso conviene aggiungere del testo al corpo del messaggio da visualizzare nel caso in cui il client di posta della vittima non fosse vulnerabile o nel caso in cui l'email venga aperta in modalità offline. Tale testo, come visto nelle tecniche precedenti, verrà visualizzato solo nel caso in cui il CSS remoto non venga caricato.
Alphamix
Le tecniche precedenti si basano tutte sui fogli stile. Un'attacco analogo può essere portato a termine utilizzando un font personalizzato richiamato all'interno dell'email e situato su un server remoto gestito dal malintenzionato. Semplificando possiamo considerare un font come una tabella a cui ad ogni byte relativo al carattere ASCII/Unicode corrisponde un particolare glifo.
Inviando un email con all'interno caratteri aggiuntivi inutilizzati è possibile modificarne il testo tramite un font esterno appositamente creato che tenga anche conto della posizione di ciascun carattere.
|
FIG 10 - ROPEMAKER, Alphamix - Corrispondenza byte-carattere di un Font esterno |
In questo modo il malintenzionato, modificando il font presente sul server remoto, può modificare il testo contenuto all'interno dell'email recapitata alla vittima.
Altri tecniche
Oltre ai fogli stile (CSS) e ai Font è possibile utilizzare anche SVG (Scalable Vector Graphics) e altri tag HTML come <embed>, <iframe>,<object>,<element>.
Client di posta vulnerabili
Nella seguente tabella vengono riportati alcuni dei client di posta vulnerabili. Gran parte dei client di posta web (come Microsoft Outlook Web Access, Outlook.com, iCloud, Gmail, ecc) risultano immuni a questo tipo di attacchi; in ambiente web le implicazioni relative al caricamento di contenuti esterni (HTML/CSS injection) sono ben note e vengono gestite in maniera diversa rendendo le applicazioni web più sicure a questo tipo di attacco.
|
Microsoft
Outlook Desktop (MAC)
|
Microsoft
Outlook Mobile
|
Apple
Mail Desktop
|
Apple
Mail Mobile
|
Thunderbird
|
Android
|
Switch
|
Vulnerabile
|
Vulnerabile
|
Vulnerabile
|
Vulnerabile
|
OK
|
OK
|
Matrix
|
Vulnerabile
|
Vulnerabile
|
Vulnerabile
|
Vulnerabile
|
OK
|
OK
|
Content
|
Vulnerabile
|
Vulnerabile
|
Vulnerabile
|
Vulnerabile
|
Vulnerabile
|
OK
|
Alphamix
|
Vulnerabile
|
Vulnerabile
|
Vulnerabile
|
Vulnerabile
|
OK
|
OK
|
SVG
|
Vulnerabile
|
Vulnerabile
|
Vulnerabile
|
Vulnerabile
|
Vulnerabile
|
OK
|
Embed/frame
|
OK
|
OK
|
Vulnerabile
|
Vulnerabile
|
OK
|
OK
|
L'unico modo per difendersi è utilizzare le versioni Web dei client di posta oppure verificare se, tra le opzioni di sicurezza del proprio client di posta, sia possibile disabilitare il download automatico di contenuti esterni.