Zed Attack Proxy (ZAP) è un tool integrato per il penetration test di applicazioni web. Giunto ormai alla versione 1.4, rappresenta una evoluzione del ben noto Paros Proxy ed è stato sviluppato da Simon Bennetts secondo la filosofia alla base del progetto OWASP (Open Web Application Security Project), il cui obiettivo principale è quello di adottare una metodologia standard finalizzata allo sviluppo di applicazioni web sicure. A tal proposito la community OWASP ha sviluppato una serie di progetti (ZAP è uno dei tanti), tra cui vale certamente la pena ricordare la OWASP Testing Guide, giunta ormai alla release 3 (in preparazione la 4). La Testing Guide è una vera e propria guida allo sviluppo e al test di applicazioni web; essa contiene non solo una serie di "best practices" da seguire nello sviluppo di una web application, ma anche una nutrita batteria di test e controlli finalizzati all'individuazione di vulnerabilità. Lo scopo del presente articolo quindi è quello di mostrare le principali funzionalità di ZAP, in relazione al vulnerability assessment di una web application. I marchi citati all'interno dell'articolo appartengono ai legittimi proprietari.
ZAP: installazione e configurazione
Innanzitutto effettuiamo il download di Zed Attack Proxy da Google code, che ospita il progetto ed installiamolo: ZAP supporta attualmente i più diffusi sistemi operativi e può essere quindi installato ed eseguito in ambiente Linux, Windows e Mac OS X. Una volta lanciato, il programma ci chiederà innanzitutto di generare un certificato SSL
ZAP lo utilizzerà per criptare/decriptare il traffico tra il nostro web browser e ZAP stesso. Il modello di funzionamento è illustrato in Fig. 2.
In sostanza, i dati che ZAP scambia con il server che ospita il nostro sito target verranno criptati/decriptati utilizzando il certificato originale del server, installato in ZAP, mentre per crittare/decrittare il traffico fra il nostro browser e ZAP stesso, viene utilizzato appunto un certificato SSL generato dalla Certification Authority interna a ZAP. Una volta generato il certificato, salviamolo in una cartella qualsiasi (ad es. sul Desktop) e impostiamo il nostro browser per connettersi ad Internet tramite proxy. Nel nostro caso, apriamo Firefox e selezioniamo la tab "Cifratura" da Strumenti->Opzioni->Avanzate, dopodichè clicchiamo su "Mostra certificati". A questo punto clicchiamo sul pulsante "Importa" e andiamo a selezionare il certificato che abbiamo appena generato e salvato sul nostro desktop, il cui filename è del tipo "owasp_zap_root_ca.cer", come mostrato in Fig. 3.
Ora passiamo alla tab "Rete" e clicchiamo sul pulsante "Impostazioni" per dire a Firefox di utilizzare ZAP come Proxy. Per fare ciò, selezioniamo il radio button "Configurazione manuale del proxy" e nella textbox "HTTP Proxy:" scriviamo l'indirizzo IP localhost, ovvero 127.0.0.1 e come porta impostiamo la 8080 e premiamo due volte il tasto OK. D'ora in poi, quindi, ogni richiesta/risposta http passerà attraverso il nostro ZAP.
Test di una Web Application
Come è noto, è illegale condurre un penetration test senza essere in possesso di un'autorizzazione scritta, firmata dal rappresentante legale dell'azienda/organizzazione target. Per cui, per dimostrare il funzionamento di ZAP ci serviremo di un sito di test, deliberatamente vulnerabile, messo a disposizione da Acunetix e raggiungibile alla seguente URL: http://testphp.vulnweb.com/. Il sito è suddiviso in varie sezioni, alcune delle quali presentano delle vulnerabilità che cercheremo di individuare utilizzando ZAP.
Man mano che navighiamo nel sito, possiamo osservare come ZAP intercetti tutto il traffico web (riquadro "History" in basso) e organizzi le varie cartelle nel riquadro "Sites" in alto a sinistra, come mostrato in Fig. 4.
A questo punto, passiamo alla fase "attiva" del test e clicchiamo con il tasto destro su http://testphp.vulnweb.com, selezioniamo "Attack" e poi "Spider site". In questo modo ZAP effettuerà un completo web crawling del sito, ma soprattutto individuerà, se presenti, eventuali vulnerabilità che vengono mostrate selezionando la tab "Alerts" in basso a destra. Durante il nostro test, ad esempio, ZAP ha trovato 35 Alert di tipo CSRF (Cross Site Request Forgery), contrassegnate con la bandierina di color arancio e varie altre, come si vede in Fig. 5.
Nel riquadro di destra, "Description", viene invece mostrata la descrizione, appunto, del tipo di vulnerabilità individuata, mentre cliccando due volte sul singolo item viene fuori un'altra finestra che contiene una descrizione più dettagliata, contenente anche i parametri coinvolti ed eventualmente il codice.
Il passagio successivo adesso consiste nell'effettuare un "Active Scan" del sito o del nodo che vogliamo analizzare più da vicino. Selezioniamo quindi dal riquadro "Sites" un nodo a piacimento e col tasto destro selezioniamo la voce "Attack"->"Active Scan site". Dopo alcuni minuti otterremo i risultati dell'attività di scanning e potremo notare che lo scenario è sostanzialmente cambiato, in quanto sono state individuate vulnerabilità di livello "high" (bandierina rossa), come ad esempio, 7 di tipo XSS (Cross Site Scripting), 4 di tipo SQL Injection e così via, come mostrato in Fig. 6.
Sulla base dei risultati ottenuti, possiamo ora decidere quali vulnerabilità andare effettivamente a testare. Proviamo, ad esempio, a verificare la possibilità di effettuare una SQL Injection. Per fare ciò, selezioniamo sempre la tab "Alerts" e clicchiamo col tasto destro su una delle vulnerabilità di tipo SQL Injection individuate, dopodichè selezioniamo "Open URL in browser" e otterremo la conferma attraverso il tipico messaggio di errore, in questo caso di MySQL, mostrato in Fig. 7.
Proviamo ora a testarne una di tipo XSS e quindi selezioniamo uno dei risultati posti sotto il relativo alert, dopodichè clicchiamo due volte e otterremo la relativa scheda, che ci informa della possibilità di condurre un attacco di tipo XSS, fornendoci anche un piccolo codice di esempio per il test (javascript:alert(1);), come visibile in Fig. 8.
A questo punto apriamo l'URL nel nostro browser ed otterremo la conferma dell'esistenza della vulnerabilità XSS, come mostrato in Fig. 9.
Conclusioni
Abbiamo quindi mostrato, attraverso alcuni esempi, come sia possibile utilizzare Zed Attack Proxy per attività di penetration testing/vulnerability assessment. Va aggiunto però che, oltre ad essere un Proxy e un Active/Passive Scanner come abbiamo visto, ZAP è in grado anche di sferrare attacchi di tipo brute-force, effettuare port scanning o inviare payloads di tipo fuzzy. Inoltre supporta l'autenticazione web mediante smartcard utilizzando il protocollo HTTPS (SSL/TLS) e certificati digitali lato client secondo lo standard X.509. ZAP dispone inoltre di una API lato client sia per Java che per Python, per cui può essere anche invocato da programmi esterni.