I Thick Clients sono software che forniscono funzionalità sia locali sia remote, in quanto vengono installati localmente ma effettuano anche richieste di rete. Essi possono essere per esempio client di messaggistica, client di posta elettronica, software di antivirus, e via discorrendo.
Il Penetration Test di un Thick Client è particolarmente interessante dal punto di vista di un attaccante, in quanto essi hanno una superficie di attacco notevolmente maggiore rispetto alle classiche applicazioni web o mobile.
In questa serie di articoli andremo ad approfondire la maggior parte dei test di sicurezza da effettuare e utilizzeremo come esempio l’applicativo DVTA. Per le istruzioni di installazione consiglio di seguire questo e quest’altro link.
La prima fase da eseguire è quella di Information Gathering al fine di ottenere più informazioni possibili in merito al tipo di binario, alle richieste di rete che effettua, etc.
Dopo aver installato il programma, andiamo a cercare tutte le cartelle e file che vengono create sul nostro computer, in modo da iniziare a capire quali file crea e se ci sono informazioni sensibili che ci possono essere utili nelle fasi successive.
In questo caso possiamo già vedere dei file .config che, una volta aperti, ci danno diverse informazioni in merito al programma:
Sapendo già l’utente, la password e l’indirizzo IP del database possiamo provare a connetterci con Miscrosoft SQL Server per vedere se ci sono altri informazioni di cui abbiamo bisogno.
Ed ecco che già abbiamo delle credenziali per poterci loggare al sistema (oltre che poter aggiungere utenti, cancellare il DB e altre azioni malevole).
Un altro tool molto utile per cercare informazioni sensibili è Strings, del tutto simile a strings che si trova su Linux. Per cercare delle stringhe basta posizionarsi nella cartella in cui cercare e digitare questo comando:
strings * | findstr /i ParolaDaCercare
Se invece volessimo vedere i processi, i file e le chiavi di registro associate a quel software si può usare Process Hacker, ProcMon o Access Enum. Se usassimo il secondo, c’è la comodissima funzione di filtro ed inserendo il nome dell’eseguibile (o anche altro, come un particolare path che ci può interessare) è possibile vedere tutte le modifiche effettuate durante il suo utilizzo
Prima di effettuare il login cerchiamo di vedere le richieste di rete che fa il Thick Client con Wireshark o NetMon. Una volta aperto NetMon, navighiamo DVTA cliccando su tutti i tasti e funzioni in modo da vedere le connessioni che esegue verso l’esterno
In questo caso è tutto in chiaro e possiamo vedere cosa viene inviato e ricevuto. Nel prossimo articolo vedremo come sniffare il traffico tramite Burp Suite.
Un’altro tool molto utile per vedere eventuali connessioni o porte aperte in locale (ho trovato un DOS in una recente attività su un thick client causato da una porta in ascolto su 0.0.0.0) è TCPView.
Poiché ogni volta che ci logghiamo è possibile che le credenziali (o il token di sessione) vengano salvate in chiaro, facciamo anche una verifica con RegShot, un tool che permette di fare la diff di una cartella o del registro di sistema prima e dopo un’operazione
Effettuo quindi un primo shot senza essere autenticato e un secondo shot dopo il login effettivo e li comparo
In questo caso non ci sono state modifiche perché con lo user admin non gestisce la sessione (quando si chiude perde il login), ma se ci logghiamo con l’utente rebecca, possiamo vedere subito che le credenziali dell’utente vengono inserite in chiaro nel registro di sistema
Altri tool utili per analizzare le modifiche sul sistema sono winhex, Volatility e ProcessSpawnControl.
Se invece volessimo analizzare la memoria del programma in esecuzione, dal Task Manager basterà fare tasto destro -> Create Dump File e poi estrarre le stringhe con strings
.strings.exe .process.DMP | Out-File -FilePath .process.DMP.txt
Per poter decompilare o disassemblare il binario è possibile che ci serva capire con che linguaggio è stato scritto, come è stato compilato e altre informazioni simili. Ci sono diversi tool che effettuare questa analisi, tra i quali:
Un altro punto importante durante un test su un Thick Client sono gli URI Handler associati ad esso. Un URI è una sequenza di caratteri che identifica universalmente ed univocamente una risorsa. Nel nostro caso sono le stringhe associate al programma con le quali si possono eseguire determinate funzioni. I tool che ci permettono di trovarli sono:
Esistono diverse presentazioni in merito a vulnerabilità trovate su URI Handler, come URI Use and Abuse e When Applications Exploit Each Other.
Se invece volessimo iniziare a vedere le API di Windows che vengono usate dal programma, potremmo utilizzare un tool come API Monitor che, sebbene sia molto a basso livello, potrebbe aiutarci ad indagare su certe funzioni del programma che non riusciamo a capire. Per esempio, in questo caso ho inserito come filtro a sinistra le API di Network e una volta fatto il login vedo che chiama l’API GetAddrInfoW con l’indirizzo IP del database.
Se trovassimo un metodo che vogliamo replicare ci viene in aiuto anche SmokeTest che può essere utilizzato per eseguire dei singoli metodi all’interno di un programma .NET.
Come abbiamo visto, la superficie di attacco di un thick client è enorme, in quanto comprende sia analisi locali, come su file explorer, registro, file sia su rete, quindi sniffing del traffico alla ricerca di comunicazioni non sicure, sia analisi delle richieste HTTP/S. Nei prossimi articoli andremo ad indagare a fondo i successivi step per analisi dinamica di rete o il reversing dei binari.
Alcune risorse utili che ho utilizzato per questa serie di articoli sono: