IronWASP è un Web Application Scanner che, nelle intenzioni dell'autore, punta a concentrare in un unico tool caratteristiche come facilità d'uso, automatismo, personalizzazione dei test e possibilità di generare automaticamente degli script, utilizzando ad esempio potenti linguaggi di sviluppo come Python e Ruby.
Attualmente, IronWASP supporta sia la modalità Active che Passive Scanning, nonché la Parameter Manipulation. Ad esempio, è possibile testare vulnerabilità come SQL Injection, Cross-site Scripting, Command Injection, Code Injection, Local/Remote File Include, CSRF, Privilege Escalation, directory listing e molte altre. IronWASP è disponibile per le principali piattaforme (Windows, Linux e Mac) ed è liberamente scaricabile qui; essendo Open Source è anche possibile ricompilare il codice sorgente per la propria piattaforma direttamente dal repository GitHub.
Scansione automatica
In questa modalità, l'unico parametro da inserire è l'URL del sito oppure il suo indirizzo IP dopodichè, cliccando sul pulsante "Start Scan", partirà uno "Scan Creation Wizard" che, oltre a verificare la raggiungibilità dell'URL target, ci consente eventualmente di personalizzare alcune opzioni. Nel caso non si desiderino configurazioni particolari, si possono tranquillamente accettare i parametri di default. Dopo aver terminato i passi del wizard, partirà lo scan vero e proprio.
Per il nostro test abbiamo utilizzato Metasploitable 2.0, la nota distribuzione Linux deliberatamente vulnerabile e liberamente scaricabile da sourceforge. Metasploitable è disponibile direttamente come Virtual Machine, per cui può essere importata in un qualsiasi virtualizzatore che supporti il formato vmdk. Una volta avviata la macchina virtuale contenente Metasploitable, possiamo dare un'occhiata alle applicazioni deliberatamente vulnerabili in essa contenute, come ad esempio Mutillidae, sviluppata da Adrian Crenshaw aka Irongeek. La schermata iniziale di Metasploitable 2 è visibile in figura.
Il processo di scanning, nonostante sia multithread e quindi distribuito su più jobs paralleli, ci metterà un pò, ma è possibile in ogni momento fermare la scansione, come abbiamo fatto noi dopo un numero sufficiente di risultati. Tale processo può però essere ottimizzato evitando che il motore di crawling di IronWASP visiti più volte le stesse pagine. Per fare ciò basta spuntare nel wizard la voce "Prompt me for Assistance during the Scan", in modo tale che venga chiesto all'utente se procedere allo scanning di una pagina oppure no. In questo modo i tempi di esecuzione possono contrarsi addirittura dell'80%.
Immagine in evidenza tratta da Shutterstock
Una volta terminata la scansione, nella finestra "Console" IronWASP ci presenta le eventuali vulnerabilità individuate suddivise per grado di pericolosità e indicate con colori diversi. Nel nostro caso (come era lecito aspettarsi) IronWASP ha trovato 111 vulnerabilità, di cui 55 classificate come "High", 47 come "Medium" e 9 come "Low", come mostrato in figura.
Concentrandoci per brevità solo sulle vulnerabilità classificate come "High" ed espandendo il nodo dell'albero, possiamo osservare che sono state individuate nel nostro caso 31 vulnerabilità di tipo XSS, 3 di tipo SQL Injection e 20 di tipo LFI. Cliccando su ognuno di questi risultati, viene fornita una dettagliata descrizione che comprende i "trigger", i payload utilizzati e molto altro. È inoltre possibile generare un report in modo del tutto automatico, il che risulta molto utile per produrre documentazione strettamente tecnica a supporto della reportistica da consegnare durante un'attività di pentesting. Per produrre il report basta cliccare su "Generate Report" nella toolbar e decidere in che formato lo si desidera (supportati HTML o RTF), come mostrato in figura.
Un estratto del report generato in HTML durante il nostro test è visibile in figura: si noti la dovizia di particolari, con tanto di link e riferimenti, nonchè l'esecuzione della GET da parte dello scanner, i cookie e molto altro.
Una delle tante funzioni di IronWASP è quella di agire come proxy per intercettare tutto il traffico Web (HTTP Requests e HTTP Responses) ed effettuare il crawling manuale di un sito Web. Spuntando la voce "Set as System Proxy" dalla tab "Proxy", viene quindi attivato un Proxy che si pone in ascolto sulla porta 8081: a questo punto, cliccando su "Site Map" nell'albero a sinistra, si può evidenziare un ramo ed effettuare una nuova scansione solo su quel ramo, come mostrato in Fig. 5 (img5.png, "Scan branch"). Analogamente è possibile selezionare una particolare Request dalla Sezione "Logs" ed effettuare una scansione automatica solo su quella request, specificando i parametri e/o i controlli di sicurezza desiderati.
È inoltre possibile generare automaticamente degli script per svariati task, come ad esempio la creazione di un Password Cracker a partire dai risultati dei test. Per generare script in Python (o in Ruby) è sufficiente cliccare sul pulsante "Run Script Creation Assistant". Si attiverà quindi un wizard che consente sia di selezionare una request direttamente dai risultati dello scan (nel nostro caso l'ID della request è il 49), sia di riscriverne una per intero. Attraverso una serie di passaggi non proprio automatici, un pò di conoscenza di Python e qualche ricerca in Google, si può arrivare alla costruzione dello script, di cui un esempio è mostrato in fig. 6 (img6.png, "Generazione semiautomatica del codice Python di un semplice password cracker").
Conclusioni
IronWASP è davvero un tool in grado di eseguire svariati tipi di test sia in modalità automatica che manuale. In linea di principio le sue potenzialità sono enormi, per cui può essere considerato un buon tool per condurre un'attività di vulnerability assessment, almeno nella fase iniziale. Inoltre supporta due tra i linguaggi di scripting più diffusi (Python e Ruby), interfacciandosi alla perfezione con essi e con le loro primitive. Se vogliamo trovare una pecca, è certamente il fatto che se non si procede ad uno scan "assistito", il software può generare delle eccezioni e chiudersi, il che non è proprio il massimo, anche perchè non salva automaticamente il progetto su cui si stava lavorando. Probabilmente, trattandosi ancora di una beta version, questi problemi verranno risolti quando si arriverà ad una release più stabile e definitiva.