Come ho "hackerato" la mia banca

Le APP di home banking dovrebbero essere sicure: "dovrebbero". Purtroppo non è così. Oggi vi spiego come ho "hackerato" l'APP della mia banca. Questo articolo non servirà a chi queste cose le sa fare, ma a smontare i pochi che si sentono sicuri con un cellulare in mano e un'APP che si attiva usando la biometria e canali sicuri

  
a-
+
Prima di tutto chiariamo un concetto: se la sicurezza non viene messa al primo posto, è impossibile realizzare applicazioni sicure.
Quando viene messo l'utente al primo posto, normalmente vengono trascurati molti aspetti legati alla sicurezza.

Oggi vi voglio raccontare qualcosa che ho scoperto, quasi per caso, analizzando il traffico che parte dal mio cellulare.

Cosa volevo fare
Ogni tanto effettuo una bonifica degli apparati che uso, verificando se esistono applicazioni in grado di esportate, a mia insaputa, dei dati personali.

Per questo tipo di analisi utilizzo un tool gratuito: BurpSuite.
Si tratta di un proxy, anche se definirlo solamente proxy è riduttivo, in grado di analizzare tutto il traffico che passa fra due punti di rete.
Uno dei grandi vantaggi di BurpSuite è quello di essere totalmente visuale e quindi facilmente modificabile: "scimmia mode on".

Rispetto ad altri prodotti del genere, nella sua versione gratuita, è anche in grado di effettuare il classico attacco di Man in the middle.

Nel nostro caso si pone fra cellulare e server remoto, permettendo di visualizzare in chiaro tutte le chiamate, anche quando effettuate tramite protocollo HTTPS.

Per abilitare questa funzionalità basta installare la Certificate Authority di Burp Suite e fare in modo che il cellulare ne autorizzi l'uso

Questo tipo di modifica non è certo una novità, ma quando un'applicazione è "fatta bene" si accorge di questa cosa modifica, tramite una serie di meccanismi di smascheramento: monitoraggio dei tempi d'attesa, verifica certificato utilizzato etc etc.

Per capire cosa intendo per applicazioni fatte bene, provo a sintetizzare in uno schema i livelli di sicurezza che si possono avere all'interno di un'APP, in un modo che sia comprensibile anche a mia mamma:

1: Applicazioni fatte bene
Come detto sopra, le applicazioni "fatte bene", se cambi un BIT si accorgono subito del problema e si bloccano, dando errori e monitorando questo tipo di attività.

2: Applicazioni fatte male
Quelle "fatte male" non si accorgono dell'attacco e non utilizzano neppure la regola basilare di cifrare il traffico tramite HTTPS

3: Applicazioni fatte apparentemente bene
Sono le applicazioni più pericolose, quelle che ostentano sicurezza: la nostra APP è affidabile perché è super-certificata, quando l'unico accorgimento utilizzato è quello di cifrare il traffico scegliendo un canale HTTPS.

Quando penso a un'applicazione di home banking, penso ad applicazioni di tipo 1. Mi aspetto che tutto quello che faccio venga cifrato e controllato ad un livello tale da non correre rischi se utilizzo il mio cellulare, collegato a un WIFI pubblico, magari per pagare un ristorante tramite APP.

Purtroppo non è così

Come indicato sopra, durante l'analisi dei log di traffico, noto che le chiamate dell'APP della mia banca, pur essendo HTTPS, vengono intercettate dal proxy.



La cosa è divertente: l'APP non controlla minimamente la validità del certificato utilizzato nella comunicazione, si limita a dare per scontato che, se è riuscita a connettersi, allora andava bene.

Oltre a questo, i dati presenti all'interno del flusso HTTPS non sono cifrati end-to-end, ma si fidano del primi livello di sicurezza dato dal protocollo HTTPS.
Questo mi permette quindi di vedere, in chiaro, tutto quello che transita, come ad esempio il saldo:


{"esito":{"esito":true},"data":{"saldoDisponibile":12345.67,"saldoContabile":12345.67,"movimentiDaRegolare":0.00,"lineeCredito":0.00,"saldoCarta":0.00}}


Oppure gli avvisi che la banca manda all'APP e tutta una serie di dati che non mi aspettavo passasse: la mia posizione geografica, il nome della rete WIFI che uso, la mia login e password per più di una chiamata e così via (a proposito: sono dati necessari per il funzionamento dell'APP? Forse no)

Il mio primo pensiero
La prima cosa che ho pensato è: "va bene, ho fatto casualmente il MITM, ma figurati se, modificando le risposte del servizi, l'APP non si accorge che ho modificato il flusso dati"

Per questo motivo ho deciso di essere "ricco per un giorno", modificando il saldo a mio favore:



avere un gruzzoletto di 123 milioni di euro sul conto ti permette di dormire una notte tranquilla: domani vado in banca e chiudo il mutuo.

Andando però a vedere il proprietario del conto mi accorgo che non è più intestato a me, ma a Bill Gates



Ecco spiegato il motivo di tanta disponibilità.

Cosa possiamo fare?
Si tratta chiaramente di un gioco, ma immaginate le seguenti situazioni

- Raccolta di informazioni personali tramite cattura del traffico in ingresso e in uscita
- Finte notifiche da parte dell'APP, tramite la modifica dei dati in ingresso, che spingono gli utenti a visitare siti compromessi
- Modifica al volo dell'IBAN destinatario di un bonifico

Volendo si potrebbero fare dei test anche per capire quanto siano sicuri i servizi che l'APP usa, ad esempio provando a variare la chiamata che restituisce la lista dei movimenti, dando un altro IBAN


{"requestName":"listaMovimentiDaRegolare","serviceClassName":"SaldoEMovimenti","canale":"XXX","idRapporto":{"abi":"11111","filiale":"22222","numeroRapporto":"33333333","idTipoRapporto":"CC","tipoRapportoGate":"CC"}}


e queste sono le prime cose che mi sono venute in mente, immaginate qualcuno più cattivo e motivato di me cosa potrebbe pensare.

Conclusioni
Pur non essendoci un sistema di protezione assoluto per evitare queste operazioni, consiglierei alla banca di effettuare queste modifiche:

- Aggiungere un meccanismo di criptazione aggiuntivo end-to-end, in modo da passare dati criptati anche all'interno della comunicazione HTTPS
- Verifica del certificato, tramite il controllo di seriale ed emittente
- Monitoraggio tempi di risposta standard, per capire quando il sistema è rallentato
- Aggiunta di un HMAC sui dati inviati e ricevuti, calcolato sulla chiave di sessione o su un NONCE

questi meccanismi permetterebbero di avere un livello ulteriore di protezione dei dati, rendendo il MITM complicato per la maggior parte delle persone.
Al momento è possibile, da parte di chiunque, in pochi minuti e con pochi click.

PS
Volete sapere di che banca si tratta e perché non vi dirò mai il nome?

- Vorrei tutelarmi evitando che qualcuno possa fare scoperte peggiori di quelle che ho fatto io in pochi minuti di analisi
- Vorrei evitare di essere accusato di frode bancaria
- Vivo nella speranza che qualcuno si accorga del problema e lo risolva
- Leggendo queste poche righe sono sicuro che la banca, autrice dell'APP, sia in grado di capire i problemi che ci sono e porvi rimedio, rimanendo tutelata rispetto al suo anonimato
- Non sono l'unico che segnala problemi del genere sulle APP bancarie, ma una cosa è farlo nel 2015, un'altra farlo nel 2018: si il problema è attuale e reale
- Se ho segnalato il problema alla banca? No, non l'ho fatto, se non c'è un programma Bug Bounty, segnalare un problema ha l'effetto di farti sembrare un cattivo e non qualcuno che vuole aiutarti a fare meglio il tuo lavoro. Leggi QUI il post completo