La procedura di valutazione di sicurezza di un'applicazione web riveste un ruolo fondamentale se parliamo di ambito business. Per questo motivo è necessario seguire una metodologia precisa che documenti e aiuti l'individuazione di errori progettuali o implementativi del sistema.
L'obiettivo
L'obiettivo finale di un security assesment è la sicurezza dai dati e del workflow dell'applicazione. Il dato (anagrafiche, know how tecnologico, progetti in essere o in studio ecc) è il vero valore di una azienda.
Partiamo dal presupposto che la richiesta del committente sia quella di una valutazione in cui abbiamo accesso alle informazioni sulla struttura interna (architetture di rete, implementazioni e codice sorgente).
Nota: se questo lavoro viene svolto in outsourcing, è necessario, da parte nostra, ricevere da parte del committente, di solito restio, tutte le informazioni necessarie alla comprensione della struttura.
È fondamentale tra le parti, stilare un documento con valore legale che declini ogni nostra responsabilità per eventuali malfunzionamenti generati sul sistema che stiamo valutando per il periodo che intercorre tra la presa in carico del lavoro e la consegna del rapporto di intervento. Un elenco di informazioni importanti è il seguente:
- Data/e e luogo/i del test.
- Specifica dettagliata di quali parti dell'applicativo analizzare e quali no.
- Dettagli tecnici dell'applicazione.
- Web server
- Application Server
- Database
- Tecnologie usate ( .net, java..)
- Sistemi di protezione in essere (firewall, ids, proxy o altro)
- Informazioni sugli account di test resi disponibili dall'amministratore o creati dal tester.
Questi dati vengono raccolti intervistando gli attori coinvolti nella struttura tecnologica. Il sistemista fornirà informazioni sull'infrastruttura di rete e su quella applicativa (application server, web server, sistemi operativi, IDS , firewall) , il DBA ci istruirà sul database utilizzato e le versioni/patch ecc., gli sviluppatori che hanno preso parte al progetto ci diranno quali tecnologie hanno utilizzato, e con quali obiettivi.
I metodi
Una volta in possesso dei dati preliminari, possiamo iniziare con la pratica. Dopo aver avuto conoscenza dei dettagli strutturali e implementativi del nostro sistema,
- Verifichiamo tutte le possibili vulnerabilità note. Ci sono siti specializzati nel riportarle (http://cert.org, http://nvd.nist.gov, http://cve.mitre.org)
- "Impariamo" a utilizzare i software presenti nel sistema. Per individuare account di default e altro e avere consapevolezza dei meccanismi dell'ambiente applicativo.
- Navighiamo internet (o intranet) per cercare qualunque rimando o informazione riguardo la nostra applicazione obiettivo (cartelle esposte, files esposti ecc)
- Navighiamo la nostra applicazione con occhio attento ai meccanismi di gestione del flusso di dati.
- Verifichiamo tutti le vulnerabilità che vedremo nel resto della guida riportando ogni possibile falla.
Il documento finale che andremo a redigere, sarà focalizzato sulle analisi effettuate e sui problemi noti e potenziali , riscontrati durante i test.
Durante questa breve guida, cercherò di introdurre un metodo generale da poter applicare in ogni valutazione di sicurezza che andrete a fare. La regola prima di un lavoro del genere è "pensa come uno di loro" ("loro" sono i cattivi ragazzi, quelli che potrebbero davvero far danni) aggiungo però "opera come uno di noi" (che i danni cerchiamo di non farli).
Inoltre: non devi dimostrare di poter fare una cosa, perché se la individui sai già (con buona probabilità) di poterla fare e non ti puoi permettere di commettere errori. Non esiste il "provo a vedere cosa succede" (se non in rarissimi casi) se non ho la totale certezza che tutto l'ambiente è stato salvato in un backup ed è pronto a un ripristino di emergenza che limiti al minimo il periodo di ferma del servizio in caso di problemi!
Mi guarderò bene dal dare riferimenti a "softwarini" che fanno tutto loro e mi concentrerò sulla teoria degli attacchi e sulla comprensione dei meccanismi.
L'invito a tutti è di dedicarsi allo studio e all'aggiornamento delle tecnologie di attacco e di difesa sempre con l'obiettivo finale ben presente e delineato: rendere il web un posto più sicuro per tutti.