I migliori scanner di vulnerabilità per valutare la sicurezza di un’applicazione Web?
Nel Rapporto Clusit 2020 [1], redatto dagli esperti aderenti all’Associazione Italiana per la Sicurezza Informatica, si evidenzia che nel 2019+2020 (primo semestre) gli attacchi informatici gravi in Italia sono stati 1.670 (2019), più 850 nel primo semestre del 2020, con un aumento rispetto al 2018 del 7%. Se si prende in considerazione il lasso di tempo tra il 2014 e il 2019, gli attacchi sono aumentati del 91.2%. Gli attacchi gravi registrati nel primo semestre 2020 (850) sono quasi pari al numero di attacchi registrati in tutto il 2014. La media degli attacchi gravi nel 2019 è 139 al mese, rispetto ad una media di 107 al mese dal 2014. Nel 2020 questa media sale a 142 al mese. Purtroppo il rapporto Clusit non valuta gli attacchi ad applicazioni Web, oggetto di questo articolo, come una classe ben precisa. Le classi utilizzate nel rapporto sono per esempio DDoS, 0-day, SQL Injection ed altre, che sicuramente comprendono anche attacchi Web. Siamo certi che l’impatto di questi attacchi non sia marginale sul totale, e ancor di più per quanto riguarda la loro pericolosità, visto anche l’utilizzo più intenso del Web in stato di pandemia.
Un Penetration Test, o più brevemente pentest, è un processo di valutazione della sicurezza e dei rischi di un’infrastruttura di rete, o di un sistema informatico, atto a mettere in risalto potenziali vulnerabilità. Esso simula un vero e proprio attacco secondo le regole di ingaggio concordate dal professionista di cybersecurity con l’organizzazione sottoposta al test. Dato la gravità descritta nel primo paragrafo, ogni azienda che si propone sul Web e che offra servizi o informazioni può essere colpita anche in modo grave, con perdita o compromissione di dati o servizi (e relative conseguenze, anche in termini di immagine). Diventa quindi necessario valutare la sicurezza delle proprie interfacce verso il Web, in modo da mettere in sicurezza i propri asset e clienti attraverso le vulnerabilità riscontrate.
Le vulnerabilità delle applicazioni Web, come il Cross-Site Scripting (XSS), Injection (SQL injection, Code Injection), Broken Authentication, Sensitive Data Exposure, XML External Entities (XXE), Broken Access control, Security misconfigurations, e Cross Site Scripting (XSS), sono oggi uno dei problemi di sicurezza più urgenti su Internet. Per un’iniziale descrizione di queste classi di attacco, rimandiamo il lettore alla lettura di [2]. Le vulnerabilità delle applicazioni Web sono molto diffuse e rappresentano la maggior parte delle vulnerabilità segnalate nel Common Vulnerabilities and Exposures database (CVE) [3]: una semplice ricerca “Web application” restituisce 2293 vulnerabilità su CVE, mentre su National Vulnerability Database del NIST (NVD) [4], possiamo recuperare 926 vulnerabilità solamente negli ultimi 3 anni, di cui 416 con una severità classificata come medium, 338 come high, e ben 105 come critical.
Di seguito descriviamo un esperimento volto a valutare sette differenti tool (o scanner) black-box di pentesting, sia proprietari, sia open source e free, su un insieme di 216 differenti vulnerabilità reperite collezionando quattro note macchine vulnerabili e assemblate come laboratorio di test, più una sviluppata appositamente per l’esperimento. In un pentest black-box, il pentester viene posto nel ruolo dell’hacker medio, senza quindi alcuna conoscenza interna del sistema di destinazione. I tester non vengono forniti di diagrammi dell’architettura o codice sorgente non disponibile pubblicamente. I test black-box (che si estendono a gray e white a seconda della disponibilità di informazione) si basano sull’analisi dinamica dei programmi e dei sistemi in produzione all’interno della rete di destinazione. Le conoscenze limitate rendono i test di penetrazione black-box più rapidi e semplici da eseguire, soprattutto attraverso strumenti di scansione automatica. Di contro, eventuali vulnerabilità interne alla rete target non possono venire rilevate in caso non si riesca a guadagnare l’accesso ad essa.
I risultati presentati in questo articolo sono frutto del lavoro svolto per la tesi triennale in Informatica (Università degli Studi di Perugia) dal Dott. Alessio Amatucci, i cui relatori, oltre al sottoscritto, sono stati il Prof. Stefano Bistarelli (UniPG), il Dott. Pietro Minniti, e il Dott. Cristiano Regni (entrambi Cybertech, gruppo Engineering). Ad Amatucci si deve la produzione di tutte le immagini e tabelle prodotte in questo articolo, oltre che la maggior parte del merito e dello sforzo speso nell’esperimento.
Il laboratorio di applicativi Web vulnerabili è composto dalle seguenti macchine virtuali: una macchina Custom personalmente assemblata, Web for Pentester II, bWAPP, Hackazon, e OWASP Juice Shop. In Figura 1 vediamo la distribuzione degli attacchi per ogni macchina, suddivisi per tipologia. Tra parentesi dopo il nome, il numero totale di attacchi per ciascuna di esse, per un totale di 340.
Gli scanner black-box testati includono 3 software proprietari (P) e 4 open-source (O). Questi tool sono Acunetix 360 (P), AppScan (P), BurpSuite (P), Arachni (O), Vega (O), Wapiti (O), w3af (O). La macchina OWASP Juice Shop è sicuramente quella più all’avanguardia e più interessante da testare al momento, essendo un applicativo Web basato su l’uso esclusivo di Javascript. Per questo motivo, tutti gli scanner open-source non sono riusciti a rilevare alcuna vulnerabilità. Neanche gli scanner commerciali si sono mostrati però molto performanti, trovando solamente una manciata di vulnerabilità in questo ambito.
Dalle iniziali 340, abbiamo stilato una classifica tra gli scanner utilizzando 216 vulnerabilità. Le rimanenti 124 vulnerabilità sono al di fuori delle capacità di tutti gli scanner trattati: per esempio riguardavano aspetti criptografici. In Figura 2 possiamo osservare i risultati, seguendo una graduatoria discendente da sinistra verso destra.
Alcuni degli scanner testati non possiedono alcuni moduli per poter individuare attacchi ben precisi: per esempio Wapiti non ha un modulo per LDAP injection. Abbiamo ritenuto questi attacchi come “non-rilevabili” da parte di un tool. In Tabella 1, il dettaglio delle vulnerabilità trovate sul totale (/), e tra parentesi le vulnerabilità non rilevabili da parte di quello scanner per via di moduli mancanti. Lo sfondo più scuro evidenzia i vincitori per ogni macchina. È interessante notare che, senza considerare il fattore non-rilevabili, lo scanner Burp Suite sia predominante in quasi tutti gli scenari. Se si considera invece il rapporto trovati / rilevabili la situazione cambia: gli scanner open-source riescono a spodestare nelle macchine Custom e Web for Pentester II la prima posizione di Burp Suite. Nella classifica generale inoltre, Burp Suite mantiene la prima posizione, ma Wapiti e Arachni arrivano in seconda e terza rispettivamente.
La Figura 3 visualizza il riassunto delle differenti vulnerabilità trovate per ciascuno scanner/macchina (stessa riga, stessa vulnerabilità). Nelle “non rilevate” includiamo anche le “non-rilevabili”.
Sebbene le tecniche per rilevare determinati tipi di vulnerabilità siano ben consolidate e funzionino in modo affidabile, abbiamo constatato che esistono intere classi di vulnerabilità su cui gli scanner si sono rilevati deboli. Per esempio, abbiamo scoperto che 6 vulnerabilità su 28, riguardanti l’autenticazione e l’autorizzazione, sono state rilevate da solo 3 scanner (Acunetix, AppScan e w3af).
Una prima classe di problemi che abbiamo riscontrato consiste nella difficoltà, da parte degli scanner, di comprendere la differenza tra sessioni di autenticazione diverse. La seconda classe di problemi che ha ostacolato la scansione è correlata alla progettazione di applicazioni Web che fan- no pesante uso di JavaScript. Abbiamo rilevato che applicazioni con moduli complessi e un controllo aggressivo dei valori di input possono bloccare efficacemente uno scanner, impedendogli di eseguire la scansione delle pagine in profondità nella struttura del sito Web. Gli scanner attuali non riescono a rilevare efficacemente le vulnerabilità logiche (e.g., Broken Authentication/Authorization); solo w3af ed Acunetix sono riusciti in minima parte. Sono sempre più diffuse le applicazioni che prevedono un modulo di autenticazione e questo tipo di vulnerabilità può potenzialmente rimanere tra i più diffusi.
Un consiglio finale che ci sentiamo di dare è quello di utilizzare più di un tool solo durante un pentest approfondito, in modo da coprire il più possibile le debolezze scoperte: per esempio, su attacchi di tipo Command Injection Wapiti risulta scoprire più vulnerabilità di Burp Suite.
Lungi dall’essere strumenti punta e clicca utilizzabili da chiunque, gli scanner di sicurezza black-box per applicazioni Web richiedono una conoscenza sofisticata dell’applicazione sotto test e dei limiti dello strumento. Ovviamente se l’obiettivo è un’analisi approfondita, come dovrebbe sempre essere.
Note
[1] Clusit Associazione Italiana per la Sicurezza Informatica. Rapporto clusit 2020: https://clusit-webcast.1rnd.com/presentazione-rapporto-2020/.
[2] Open Web Application Security Project OWASP. Top 10 web application security risks, 2017. https://owasp.org/www-project-top-ten/.
[3] Common Vulnerability Exposure. https://cve.mitre.org
[4] National Vulnerability Database. https://nvd.nist.gov
Articolo a cura di Francesco Santini
Francesco Santini è Professore Associato presso il Dipartimento di Matematica e Informatica dell’Università degli Studi di Perugia. Si occupa da quasi venti anni di Intelligenza Artificiale e Cybersecurity, con un approccio integrato. È docente di corsi riguardanti la sicurezza per corsi di laurea magistrale in informatica e in master universitari di primo livello su protezione del dato e forensics. È relatore di tesi sulle materie di insegnamento. Organizza il programma di training CyberChallenge.it per studenti di scuole superiori e laurea triennale, ed è membro del Cybersecurity National Lab. presso il nodo di Perugia.