Elaborato Paesano Serena N46000600
Transcript
Elaborato Paesano Serena N46000600
Scuola Politecnica e delle Scienze di Base Corso di Laurea in Ingegneria Informatica Elaborato finale in CALCOLATORI ELETTRONICI I Analisi delle vulnerabilità di applicazioni web Anno Accademico 2016/2017 Candidato: Serena Paesano matr. N46/600 Indice Indice..................................................................................................................................................................II Capitolo 1:Le vulnerabilità di un sistema informatico e catalogo CVE.............................................................3 1.1 Le vulnerabilità.........................................................................................................................................3 1.2 Database di vulnerabilità..........................................................................................................................6 1.3 Common Vulnerabilities and Exposures..................................................................................................7 1.3.1 Struttura CVE....................................................................................................................................8 Capitolo 2: Owasp: linee guide per lo sviluppo di applicazioni sicure.............................................................12 2.1 Owasp development guide .....................................................................................................................12 2.2 Threat Risk Modeling.............................................................................................................................15 Capitolo 3:Owasp Top Ten Vulnerabilities......................................................................................................17 3.1Top Ten Vulnerabilities...........................................................................................................................17 Capitolo 4:ZAP ................................................................................................................................................26 4.1 Zap:Un caso d'uso...................................................................................................................................27 CAPITOLO 1 : Le vulnerabilità di un sistema informatico e catalogo CVE Le minacce informatiche sono uno dei principali problemi dell’era digitale. L'enorme sviluppo tecnologico che ha investito il mondo dei sistemi informatici ha portato alla nascita di molti nuovi servizi, ma allo stesso tempo ha aperto le porte a nuovi, più inquietanti scenari e possibilità di attacco che mirano a ledere la sicurezza di un sistema informatico. Un ruolo importante all’interno di un sistema è quindi affidato alla sicurezza, ossia la salvaguardia da minacce, malfunzionamenti, integrità dei dati e loro divulgazione. La Sicurezza Informatica consiste in un insieme di misure di carattere organizzativo, tecnologico e procedurale mirate a garantire 3 principi fondamentali: • Segretezza/Confidenzialità: le informazioni possono essere lette solo da chi ne ha diritto. • Integrità: le informazioni possono essere modificate solo da chi ne ha diritto. • Disponibilità: una risorsa deve essere disponibile quando richiesta. 1.1 Le Vulnerabilità La gestione del rischio informatico si svolge attraverso un articolato processo che mira a identificare le vulnerabilità del sistema, le possibili minacce e la relativa probabilità di accadimento nonché a stimare i potenziali danni. Il rischio è calcolato in funzione di 3 fattori:minacce, impatto e vulnerabilità. Una minaccia (Threat) è una potenziale causa di incidente che può danneggiare uno o tutti i beni del patrimonio informativo. 3 L'impatto rappresenta il danno effettivo dell'incidente. Una Vulnerabilità[1] rappresenta un difetto nella progettazione, nell’ implementazione di un componente o nei controlli di sicurezza del sistema che può essere sfruttata, intenzionalmente o meno, da un attaccante, per violare il sistema. Le vulnerabilità quindi non compromettono un sistema, ma se utilizzate da una minaccia possono dar luogo ad un evento indesiderato. Non esiste una classificazione univoca delle vulnerabilità,essa dipende dal tipo di analisi che si vuole condurre, ovvero dall'ambito di applicazione. Per quanto riguarda i sistemi informatici,le vulnerabilità si possono presentare a qualsiasi livello che costituisce il sistema. Una possibile classificazione è quella che raggruppa le vulnerabilità principalmente in 3 categorie, che rappresentano tre diversi livelli da analizzare per la sicurezza: la rete, i sistemi e gli applicativi. Vulnerabilità di Rete: Per rete si intende tutta l’infrastruttura di comunicazione di un sistema informativo, dal cablaggio ad apparati concentratori (hub/switch), fino al livello dei protocolli per il trasporto. In modo particolare troviamo vulnerabilità a livello fisico (sniffing) e vulnerabilità ad alto livello network (attacchi a protocolli di autenticazione, attacchi per il blocco dei servizi(Denial Of Service - DOS)). Vulnerabilità dei Sistemi: Per sistemi si intende tutto il software che controlla un apparato hardware dotato di processore e memoria. I problemi di sicurezza sono legati al fatto che i sistemi accettano connessioni dall’esterno, o scambiano informazioni tramite la rete. Le relative vulnerabilità sono spesso causate da “buffer overflow”, scripting o malfunzionamenti del sistema di autenticazione, che permettono accesso remoto al sistema con tecniche conosciute con il nome di “exploit”. Vulnerabilità delle Applicazioni: Per applicazione si intende tutto il software, compilato od interpretato che è funzionante su di un sistema. Si definisce “servizio” un’applicazione che rende disponibili delle informazioni via rete od in locale.. Fanno parte della categoria 4 applicazioni tutti i tools di posta elettronica e web, i programmi di autenticazione ed accesso ai sistemi ed applicativi gestionali, servizi web server, file server, mail server ecc. Le vulnerabilità maggiori e più pericolose sono relative ai servizi disponibili via rete, che spesso permettono di accedere al sistema. Tra i software che sfruttano queste vulnerabilità troviamo anche i più noti Virus, Trojans,Worms. Le vulnerabilità hanno un proprio ciclo di vita scandito da varie fasi: 1. Creazione: la vulnerabilità nasce nel momento in cui viene scritto il codice e tale codice viene rilasciato. Tuttavia in questa prima fase, la vulnerabilità pur esistendo non è nota, quindi non rappresenta un problema. 2. Scoperta: La vulnerabilità viene scoperta, ma è nota solo a un gruppo ristretto di individui. Tutta via questi cominciano a sfruttarla per attaccare i vari sistemi vulnerabili. 3. Condivisione/Annuncio: Viene diffusa la conoscenza della vulnerabilità. In questa fase spesso vengono anche creati automatismi per sfruttare la vulnerabilità, non è quindi necessario essere degli esperti di hacking. In questa fase gli attacchi crescono a dismisura. 4. Pubblicazione della patch: Viene creata la patch, ossia una correzione al codice che mira a risolvere la vulnerabilità.. E’ interessante notare, che in questa fase, gli attacchi continuano ad aumentare, per iniziare a scendere molto dopo che la patch sia stata distribuita. 5. Installazione della patch: In questa fasi si procede all'installazione della patch e alla risoluzione della vulnerabilità. Gli attacchi qui si annullano del tutto. 5 1.2 Database di vulnerabilità Le vulnerabilità sono raccolte e descritte in database di informazioni. Un database di vulnerabilità è una piattaforma volta a raccogliere,mantenere e diffondere informazioni circa la scoperta di nuove vulnerabilità. Il database di norma conterrà informazioni quali la descrizione della vulnerabilità identificata,il potenziale effetto sui sistemi informatici e la soluzione necessaria. Database di vulnerabilità o mailing list sono spesso presenti come documentazione di supporto anche in molte applicazioni e tools volti a effettuare test di sicurezza. Una delle voci presenti in molti database risulta essere quella dedicata allo Scoring. Per determinare quantitativamente la gravità di una vulnerabilità esistono diverse tecniche: Il Common Vulnerability Scoring System (CVSS)[2] è una delle tecniche più utilizzate dalla maggior parte dei database di vulnerabilità. Il CVSS determina lo score da assegnare ad una vulnerabilità basandosi su 3 tipi di metriche: Base: rappresenta le caratteristiche di una vulnerabilità che sono costanti nel tempo ed indipendenti dal contesto in cui si trovano. Informazioni di questo tipo sono ad esempio l’impatto generato dalla vulnerabilità in termini di confidenzialità, integrità e disponibilità. Temporal: rappresenta le caratteristiche di una vulnerabilità che cambiano nel tempo. Ad esempio perché le tecniche di uso (exploit) si raffinano, oppure perché divengono disponibili rimedi (patch) alla vulnerabilità stessa Environmental: rappresenta le caratteristiche di una vulnerabilità che sono rilevanti rispetto al contesto utente in cui vengono considerate. Informazioni di questo tipo comprendono l’impatto collaterale che la vulnerabilità genera se sfruttata da un attaccante, come ad esempio una perdita finanziaria. 6 Dalla combinazione di queste 3 metriche si ottiene poi lo score definitivo,un valore compreso tra 0 e 10, associato alla vulnerabilità. 1.3 Common Vulnerabilities and Exposures Negli decenni passati la maggior parte dei tools di sicurezza informatica usavano i propri database e i proprio nomi per le vulnerabilità di sicurezza. A quel tempo non c'era una significativa variazione tra i prodotti e non c'era un modo semplice per determinare quando database differenti si riferivano allo stresso problema. Le conseguenze erano potenziali falle nella coperture della sicurezza e nessuna effettiva interoperabilità tra i distinti database e tool. In più le vulnerabilità non erano standardizzate. E' stato il CVE ha fornire una soluzione a questi problemi. Il Common Vulnerabilities and Exposures[3], o CVE è un dizionario pubblico di vulnerabilità e falle di sicurezza note. Il CVE è progettato per raccogliere e standardizzare la classificazione delle vulnerabilità a livello mondiale,in modo tale da consentire a database di vulnerabilità e altri sistemi di essere collegati insieme così da facilitare la comparazione degli strumenti e servizi di sicurezza,e rendere più semplice la condivisione delle informazioni. La lista di vulnerabilità CVE è pubblica,disponibile a chiunque sia interessato a consultarla,scaricarla, farne riferimento o analizzarla,ma senza modificare le informazioni in essa contenute. Il processo per la creazione di un nuovo CVE comincia con la scoperta di una vulnerabilità a cui viene assegnato un identificatore CVE da un authority CNA una volta che questi è stato verificato. 7 1.3.1 Struttura CVE Ogni vulnerabilità è associata ad un identificatore. Gli identificatori CVE,detti anche nomi cve, cve-id, sono degli identificatori univoci comuni per le vulnerabilità di sicurezza informatica di dominio pubblico. Ogni identificatore CVE include: Un numero identificativo CVE. Una breve descrizione della vulnerabilità di sicurezza. Tutti i riferimenti pertinenti ( ad esempio i rapporti di vulnerabilità). Campi di un dato CVE In un dato CVE sono presenti i seguenti campi: Name Contiene l'identificativo associato alla vulnerabilità. La sintassi di un CVE-ID segue la forma: CVE prefisso + YYYY + NNNN. Y rappresenta l'anno di pubblicazione e N un numero incrementale. Es.:CVE-2016-6319. Dato l'aumento di vulnerabilità segnato ogni anno, dal gennaio 2015 è stata introdotto un nuovo formato :CVE prefisso + YYYY + NNNN[N]{0,7}, dove questa volta N può assumere fino a 7 cifre in modo tale da superare il limite di 9999 vulnerabilità annue consentite nel precedente formato. 8 Description Fornisce una breve descrizione della vulnerabilità. Quando possibile, la descrizione include dettagli come il nome del prodotto interessato e fornitore, un riepilogo delle versioni interessate, il tipo di vulnerabilità, l'impatto, i permessi che un attaccante richiede per sfruttare la vulnerabilità, e i componenti di codice o input che sono coinvolti. Tuttavia, dal momento che queste informazioni non sono sempre disponibili al pubblico, non tutte le descrizioni includono tutti questi dettagli. References E' una lista di url e altre informazioni pertinenti la vulnerabilità. In ogni riferimento utilizzato in CVE viene identificata la fonte, è incluso un identificatore ben definito per facilitare la ricerca sul sito web della fonte, e sono presenti eventuali identificatori CVE correlati. Data Entry Created Si riferisce alla data di quando la entry è stata inserita nella lista una volta che l'identificatore candidato è stato approvato. Phase Indica la fase in cui si trova in CVE,ossia se è un candidato o una voce. Votes Conteneva un voto con cui si esprimeva la preferenza o meno riguardo il passaggio dei candidati a voci effettive CVE. 9 Comments Contiene commenti sulla vulnerabilità. Proposed Indica quando il problema è stato proposto per la prima volta. Tuttavia, negli ultimi anni i campi di Votes, Comments e Proposed non sono più utilizzati e vengono lasciati vuoti. Ecco un esempio di una entry CVE: 10 Vantaggi di CVE All'interno del catalogo CVE non troviamo informazioni circa i rischi,l'impatto,soluzioni proposte,informazioni tecniche dettagliate o indici di sicurezza (es. score CVSS). Queste sono tutte informazioni presenti già nei database di vulnerabilità e il CVE non vuole replicarle. Il CVE ha invece il compito di fornire uno standard di vulnerabilità in modo tale da facilitare la comunicazione tra i diversi database. La semplice conoscenza dell' identificatore comune consente di accedere velocemente e accuratamente alle informazioni sulla vulnerabilità, attraverso sorgenti di informazioni multiple che sono tutte compatibili con CVE. Ad esempio se si possiede un tool di sicurezza i cui rapporti contengono riferimenti a identificatori CVE,viene fornita la possibilità di accedere facilmente a informazioni corrette in un database differente che è anch'esso compatibile con CVE. Gli identificatori CVE inoltre forniscono una base di riferimento per la valutazione della copertura degli strumenti e dei servizi così che gli utenti possono determinare quale tool è il più efficace e appropriato in base alle proprie esigenze. In breve,prodotti e servizi compatibili con CVE forniscono migliore copertura,un'interoperabilità più semplice e una maggiore sicurezza. 11 CAPITOLO 2 Owasp: Linee guida per lo sviluppo di applicazioni sicure Applicazioni e servizi web sono diventati lo strumento più popolare attraverso cui un numero sempre crescente di organizzazioni decide di interfacciarsi con il mondo esterno. L'enorme aumento di applicazioni web in svariati campi di azione,e-commerce,social networking, web search, web mail,banking ecc,ha portato all'aumento dei requisiti necessari alla sicurezza di internet,dei dati e delle applicazioni web. La progettazione e l'implementazione di funzionalità di sicurezza all'interno di applicazione web è sicuramente un compito molto complesso e troppo spesso sottovalutato da analisti e sviluppatori. Purtroppo la sicurezza non è una semplice componente che può essere facilmente aggiunta ad un software già sviluppato,ma è parte integrante del processo della progettualità stessa di un applicativo. Pertanto la sicurezza di un'applicazione dovrebbe partire dalle basi: aziende e sviluppatori dovrebbero porsi l'obiettivo di progettare e sviluppare un'applicazione che sia sicura. In questo contesto si colloca l'opera del gruppo Owasp: fornire delle linee guida per lo sviluppo sicuro di applicazioni web, ad uso e consumo di analisti,progettisti e sviluppatori. 2.1 Owasp Development Guide[4] Non è possibile sviluppare un'applicazione sicura senza aver progettato un'architettura di sicurezza. E' proprio l'architettura di sicurezza che consente all'applicazione di garantire i principi di integrità,disponibilità e confidenzialità dei dati che costituiscono i pilastri fondamentali della Information Security. Le applicazioni dovrebbero quindi fornire una 12 serie di controlli diversi e complementari per proteggere la riservatezza delle informazioni,l'integrità dei dati, e garantire l'accesso alle informazioni solo agli utenti che ne hanno diritto quando essi ne fanno richiesta. Accanto a questo principio base,Owasp propone delle linee guida per lo sviluppo e progettazioni di applicazioni web sicure. Minimizzare l'area della "superficie di attacco" Ogni caratteristica aggiuntiva di un'applicazione introduce inevitabilmente una certa quantità di rischio per l'intero progetto. L'obiettivo dello sviluppo sicuro è quello di ridurre il rischio globale riducendo la "superficie di attacco". Per esempio un'applicazione web che implementa help online con funzione ricerca,può essere vulnerabile ad attacchi di tipo SQL injecton. Se la funzione help fosse limitata agli utenti autorizzati, le probabilità di attacco sarebbero ridotte. Se la funzionalità di help fosse poi anche interfacciata con un modulo centralizzato di validazione dei dati,le possibilità di eseguire Sql Injecton sarebbero ridotte drasticamente. Principio del Secure by default L'applicazione dovrebbe utilizzare caratteristiche di sicurezza di default: per esempio l'abilitazione automatica di meccanismi di costruzione di password di una certa complessità contro il password guessing ed il rinnovo delle password secondo una scadenza temporale. Principio del Least Privilege Il principio del Least Privilege raccomanda che gli utenti ( e più in generale gli stessi applicativi) abbiano l'insieme minimo dei privilegi richiesti per eseguire correttamente il proprio lavoro. Ciò riguarda, ad esempio, la possibilità per un utente di interagire con le funzionalità critiche di un applicativo, di lanciare altri programmi, di avere i permessi di accesso al database e al file system,di avere i diritti di accesso alle risorse fisiche quali 13 rete, memoria, CPU. Questo principio del tutto generale limita il danno che può risultare in caso di errore, o di utilizzo non autorizzato dell'applicativo. Principio del Defense in depth Il principio del Defense in Depth attesta che dove un solo controllo dovrebbe essere ragionevole, più controlli che contrastano i rischi in maniera differente sono sicuramente migliori. Quando viene utilizzata una simile strategia, si rende estremamente difficile la possibilità per un attaccante di sfruttare una singola vulnerabilità di un singolo sistema. Terminare in modo "sicuro" Le applicazioni possono terminare per diversi motivi i propri processi: il modo in cui avviene questa terminazione determina se l'applicativo è sicuro o meno. Per esempio,consideriamo il seguente codice: isAdmin = true; try { codeWhichMayFail(); isAdmin = isUserInRole( “Administrator” ); } catch (Exception ex) { log.write(ex.toString()); } Se codeWhichMayFail() fallisce, l'utente è l'amministratore per default. Questo è ovviamente un rischio di sicurezza da evitare. Considerare i sistemi esterni come insicuri Molte organizzazioni utilizzano processi e/o comunicano con i propri partner durante le fasi del proprio business. Questi partner avranno differenti politiche ed un diverso approccio alla sicurezza e devono pertanto essere considerate terze parte non fidate: risulta invece prassi comune fornire una fiducia implicita verso sistemi esterni, senza considerare i rischi derivanti da tale scelta. 14 Principio della Separation of Duties La separazione dei compiti, cioè l'assegnazione a utenti diversi di parti distinte di un processo critico,è un controllo chiave nel campo delle frodi. Questo controllo previene numerose frodi perché, se il processo prevede che più utenti abbiano il controllo dei meccanismi di sicurezza, il rischio di compromettere l'intera infrastruttura viene notevolmente ridotto. Non fidarsi del " Security Through Obscurity" Nel modello di sicurezza indicato in letteratura come Security Through Bbscurity un sistema è considerato sicuro semplicemente perché si ritiene che nessuno ne conosca i dettagli. Tale approccio porta alla realizzazione di controlli di sicurezza che alla lunga risultano deboli, e fallisce quando è il solo ad essere implementato. La sicurezza di un sistema non può dipendere esclusivamente dal riuscire a mantenere nascosti i dettagli sul sistema stesso, e così la sicurezza di un'applicazione non risiede nella segretezza del codice sorgente. Bisogna invece sempre presupporre che un attaccante sia in possesso di tutte le nostre informazioni: assumere cioè che abbia accesso al codice o alla documentazione del progetto. 2.2 Threat Risk Modeling Un elemento fondamentale per creare un'architettura sicura è il Threat Modeling. Il Threat Modeling di un applicativo web è un'analisi sistematica che aiuta sviluppatori ed analisti ad identificare e valorizzare in modo ordinato le minacce che potrebbero affliggere l'applicativo e in che modalità si potrebbero manifestare gli attacchi. Gli obiettivo di tale processo sono: identificare le minacce più gravi da contrastare e partire da quest'ultime per mitigare il rischio, selezionando i controlli di sicurezza più efficaci. fornire un approccio strutturato e più efficiente dal punto di vista dei costi. 15 Il processo di Threat Modeling si compone dei seguenti passi: La valutazione degli asset, è il punto di partenza per tutte le attività di analisi e valutazione del rischio, poiché dal valore che realmente hanno gli asset, ossia le risorse, scaturiscono le considerazioni sulla tipologia di controlli di sicurezza da implementare e sui loro gradi di efficacia. Creare una visione dell'architettura. Inizialmente si identifica cosa fa l'applicazione,successivamente si crea un diagramma dell'applicazione che mostri i sottosistemi,il flusso dei dati, la lista degli asset ed un diagramma architetturale che scomponga l'applicativo. Scomporre l'identificativo. Si procede al raffinamento del diagramma architetturale mostrando il meccanismo di autenticazione, il meccanismo di autorizzazione, le tecnologie utilizzate, gli entry point. Avendo ora a disposizione una fotografia dello scenario, ci si pone dal lato di un possibile attaccante cercando di capire dove sono le possibili vulnerabilità e quali contromisure sono in atto per eliminarle. Identificare le minacce. In questa fase si crea una lista delle possibili minacce e si identificano quelle che andranno ad impattare sull'applicazione in oggetto. Documentare le minacce. Si documentano l'insieme delle minacce identificando, per ciascuna minaccia, l'obiettivo, la tecnica di attacco utilizzata e le contromisure da adottare. Misurare le minacce. Il processo di Threat Modeling termina quantificando ogni singola minaccia e misurando il rischio associato. La determinazione del rischio viene fatta affidandosi a formule o modelli appositi. La progettazione è solamente una parte del processo di creazione di applicazioni web sicure. Supporto esecutivo,implementazione, testing, creazione e consegna, nonché fornitura e manutenzione giocano tutti un ruolo cruciale nella protezione finale di un sistema ed è solo inserendo la sicurezza in ogni singola fase dell'intero processo di sviluppo del ciclo di vita di un applicativo che si possono realizzare applicazioni sicure. 16 CAPITOLO 3 OWASP TOP TEN VULNERABILITIES Il progetto OWASP Top Ten è una classifica delle 10 vulnerabilità più comuni e più pericolose a cui possono essere soggette al giorno d'oggi le applicazioni web. La guida si focalizza sull'identificare i rischi più gravi per una vasta gamma di organizzazioni. Per ognuno di questi rischi vengono fornite poi informazioni utilizzando degli schemi di valutazione che tengono conto di: vettore di attacco, diffusione, individuazione e impatto tecnico. Gli agenti di minaccia presentati nella guida dipendono dalle specifiche applicazioni,pertanto ogni azienda dovrebbe valutare focalizzandosi sugli aspetti caratteristici della propria impresa. 3.1 Top Ten Vulnerabilities[5] Le 10 vulnerabilità più rischiose elencate da Owasp sono : A1- Injection. A2 - Broken Authentication and Session Management. A3 - Cross-Site Scripting (XSS). A4 - Insecure Direct Object References. A5 - Security Misconfiguration. A6 - Sensitive Data Exposure. 17 personalmente il rischio A7 - Missing Fnction Level Access Control. A8 - Cross-Site Request Forgery (CSRF). A9 - Using Components with Known Vulnerabilities. A10 - Unvalidated Refirects and Forwards. A1 - INJECTION Le Injection Flaws,si verificano quando dati non validati sono inviati come parte di un comando o di una query al loro interprete. Il dato infetto può quindi ingannare tale interprete, eseguendo comandi non previsti o accedendo a dati per i quali non si ha l'autorizzazione. Sfruttabilità Facile. L'attaccante invia del semplice testo che sfrutta la sintassi dell'interprete. Ogni sorgente di dati può essere un vettore di Injection, comprese le sorgenti interne. Diffusione:Comune - Individuazione:Medio. Un'injection si verifica quando un'applicazione invia dei dati non fidati ad un interprete. Tali debolezze sono spesso presenti nel codice legacy, principalmente nelle query SQL, LDAP,nei comandi OS, negli Header SMTP, nei parametri dei programmi ecc. E' più facile individuare un'injection tramite analisi del codice che tramite testing. Impatto: Severo. Un' Injection può comportare perdita o corruzione di dati,mancanza di tracciabilità,negazione d'accesso e, in alcuni casi il controllo completo dell'host. Il miglior modo per individuare se un'applicazione è vulnerabile a Injection è verificare che, ogni volta che l'interprete è ingaggiato, ci sia una separazione netta tra i dati non fidati e i comandi/query. Per le chiamate SQL, ciò significa utilizzare variabili "blinded" negli statement e nelle stored procedure, evitando l'uso di query generate dinamicamente. 18 A2 - BROKEN AUTHENTICATION AND SESSION MANAGEMENT Le procedure applicative relative all'autenticazione e alla gestione della sessione sono spesso implementate in modo non corretto, permettendo agli attaccanti di compromettere password,chiavi, token di sessione o sfruttare debolezze implementative per assumere l'identità di altri utenti. Sfruttabilità: Medio. L'attaccante usa difetti nel sistema di gestione della sessione o dell'autenticazione ( es. : esposizione delle password o degli account, identificativi di sessione, ecc.) per impersonare l'utente. Diffusione: Diffuso - Individuazione: Medio. Approcci personalizzati di gestione della sessione e autenticazione spesso contengono difetti in varie aree quali il logout, i timeout, il ricordarmi su questo computer", la domanda segreta, ecc. Scoprire tali difetti può essere difficile, in quanto ogni implementazione è unica. Impatto: Severo. Tali difetti possono consentire un accesso diretto verso uno o più account. In caso di successo l'attaccante ottiene gli stessi privilegi della vittima. A3 - CROSS-SITE SCRIPTING (XSS) Le falle di tipo XSS si verificano quando un'applicazione web riceve dei dati, provenienti da fonti non affidabili, e li invia ad un browser senza una opportuna validazione e/o "escaping". Il XSS permette agli attaccanti di eseguire degli script malevoli sui browser delle vittime; tali script possono dirottare la sessione dell'utente, defacciare il sito web o re-indirizzare l'utente su un sito malevolo. Sfruttabilità: Medio. Si inviano sequenze di comandi testuali(script) per forzare l'interprete interno del browser. Quasi tutte le sorgenti di dati possono essere vettori di attacco,anche quelle interne(es. database interni). Diffusione: Molto diffuso - Individuazione : Facile. Il XSS è il più diffuso difetto di sicurezza delle applicazioni web. Questa vulnerabilità si manifesta quando un applicativo 19 genera una pagina includendo dati forniti dall'utente senza averli prima validati o aver fatto l'escaping del contenuto. I difetti di XSS sono semplici da trovare attraverso l'analisi ed il testing del codice. Impatto: Moderato. L'attaccante può eseguire del codice all'interno del browser della vittima allo scopo di: impadronirsi della sessione della vittima, defacciare un sito web, inserire contenuti ostili, reindirizzare, ecc. Una copertura completa della problematica richiede, oltre all'uso di tool automatici, revisione manuale del codice e dei penetration test. A4 - INSECURE DIRECT OBJECT REFERENCES Quando uno sviluppatore espone un riferimento all'implementazione interna di un oggetto, come un file, una directory o una chiave di un database, si ha un riferimento diretto ad un oggetto. Senza un opportuno controllo degli accessi o altre protezioni, gli attaccanti possono manipolare questi riferimenti in modo da accedere a dati non autorizzati. Sfruttabilità: Facile. L'attaccante, da utente autorizzato, cambia il valore di un parametro, che riferisce direttamente ad un oggetto di sistema, con un altro oggetto a cui non è autorizzato ad accedere. Diffusione: Comune - Individuazione: Facile. Le applicazioni di solito utilizzano il nome reale o chiave di un oggetto quando generano pagine web. Le applicazioni non sempre verificano se l'utente è autorizzato o meno ad accedere ad un oggetto specifico. Questo comporta difetti di riferimento di accesso diretto non sicuro agli oggetti. I tester possono facilmente manipolare i valori dei parametri per rilevare questi difetti. L'analisi del codice mostra rapidamente se l'autorizzazione viene verificata in modo corretto. Gli strumenti automatici di solito non ricercano questi difetti perchè non possono riconoscere cosa debba essere protetto o se è sicuro o meno. 20 Impatto:Severo. Tali falle possono compromettere tutti dati che possono essere referenziati da un parametro. A meno di riferimenti ad oggetti non predicibili, è facile per un attaccante accedere a tutti i dati disponibili di questo tipo. A5 - SECURITY MISCONFIGURATION Una buona sicurezza richiede un'opportuna configurazione impostata e sviluppata per applicazioni, framework, server applicativi, webserver, database e piattaforme. Tutte le configurazioni devono essere definite, implementate, mantenute in quanto le configurazioni di default non sono sempre sicure. Inoltre tutto il software deve essere sempre aggiornato. Sfruttabilità: Facile. Gli attaccanti accedono al sistema tramite utente di default, pagine non utilizzate, difetti non sanati, file e directory non protette,ecc. Diffusione: Comune - Individuazione: Facile. Errate configurazioni di sicurezza possono avvenire a qualsiasi livello della pila applicativa. Gli sviluppatori e gli amministratori devono lavorare insieme per assicurare la corretta configurazione del sistema. Scanner automatici consentono l'individuazione di patch mancanti, errate configurazioni, account di default, servizi non necessari. Impatto:Moderato. Questo tipo di difetto può fornire accesso a dati di sistema o ad alcune funzionalità. In alcuni casi, tali debolezze, portano ad una totale compromissione del sistema. A6 - SENSITIVE DATA EXPOSURE Molte applicazioni web non proteggono adeguatamente dati quali numeri di carte di credito o credenziali di autenticazione. Gli attaccanti possono impossessarsi di tali dati o approfittare dei punti deboli nelle misure di protezione per il furto di credenziali, per 21 operazioni fraudolente. Questo tipo di dati necessitano di misure di protezione ulteriori,come la crittografia anche per i dati in transito, nonché speciali precauzioni quando vengono scambiati con il browser. Sfruttabilità: Difficile. Generalmente un utente malevolo non rompe direttamente un cifrario, ma ruba le chiavi crittografiche, fa attacchi di tipo man-in-the-middle o intercetta i dati in chiaro in transito o direttamente tramite il browser dell'utente. Diffusione:Non comune - Individuazione: Medio. L'errore più comune è non cifrare le informazioni confidenziali. Invece, quando queste sono cifrate, altri errori molto diffusi sono : l'utilizzo di chiavi poco robuste, algoritmi o tecniche di hashing delle password deboli. Impatto: Severo. Spesso le vulnerabilità compromettono dati che dovrebbero essere protetti. Tipicamente questi dati comprendono cartelle sanitarie, credenziali di accesso, carte di credito, dati personali, ecc. A7 - MISSING FUNCTION LEVEL ACCESS CONTROL Molte applicazioni verificano il livello dei diritti di accesso prima che la relativa funzionalità sia resa visibile nell'interfaccia utente. Tuttavia, le applicazioni devono eseguire il controllo accessi sul server ogni volta che la funzionalità è acceduta. Se le richieste di accesso non sono verificate, gli attaccanti possono falsificarle per accedere senza autorizzazione alle funzionalità. Sfruttabilità: Facile. E' importante porsi le seguenti domande: Se l'attaccante cambia l'URL o un parametro di una funzione privilegiata, si ottiene l'accesso? Gli utenti anonimi possono accedere a funzionalità private non protette? Diffusione:Comune - Individuazione:Medio. Le funzionalità delle applicazioni non sono sempre protette come dovrebbero. A volte l'accesso alle funzionalità è gestito tramite file di configurazione e sono presenti problematiche nella configurazione. In altri casi gli sviluppatori devono includere dei controlli nel codice e se ne dimenticano. Individuare 22 questo tipo di problematiche è facile. La difficoltà è individuare le pagine (URL) o le funzionalità da attaccare. Impatto: Severo. Queste vulnerabilità consentono l'accesso non autorizzato alle funzionalità. Solitamente le funzionalità più attaccate in questo modo sono quelle amministrative. A8 - CROSS-SITE REQUEST FORGERY ( CSRF) Un attacco CSRF forza il browser della vittima ad inviare una richiesta HTTP opportunamente forgiata, includendo i cookie di sessione della vittima ed ogni altra informazioni di autenticazione, ad un'applicazione web vulnerabile. Questo permette all'attaccante di forzare il browser della vittima a generare richieste che l'applicazione vulnerabile crederà legittimamente inviate dalla vittima. Sfruttabilità: Medio. L'attaccante forgia delle richieste HTTP e spinge la vittima a inviarle tramite tag image, XSS, o altre tecniche. Se l'utente è autenticato, l'attacco ha successo. Diffusione: Comune - Individuazione: Facile. Il CSRF approfitta del fatto che la maggior parte delle applicazioni permette agli attaccanti di essere a conoscenza di tutti i dettagli di una particolare azione. Poiché i browser inviano le credenziali automaticamente, l'attaccante può creare pagine web malevoli per generare delle richieste forgiate, impossibili da distinguere da quelle lecite. E' abbastanza facile identificare CSRF tramite un penetration test o una code analysis. Impatto: Moderato. Gli attaccanti possono spingere le vittime ad eseguire qualsiasi cambio di stato se la vittima è autorizzata a farlo, es. eseguire acquisti,eseguite logout e login. 23 A9 - USING COMPONENTS WITH KNOWN VULNERABILITIES Componenti quali librerie, framework e altri moduli software sono quasi sempre eseguiti con i privilegi più alti. Sfruttando un componente vulnerabile, un attaccante potrebbe ottenere dei dati o accedere al server. Le applicazioni che utilizzano componenti con vulnerabilità note possono minare le loro difese agevolando molte tipologie di attacco con impatti notevoli. Sfruttabilità:Medio. L'attaccante identifica tramite scanner o manualmente un componente vulnerabile. Personalizza l'exploit ed esegue l'attacco. Se il componente è integrato nell'applicazione si complica il tutto. Diffusione:Diffuso - Individuazione: Difficile. Virtualmente, ogni applicazione ha questo problema perché la maggior parte dei team di sviluppo non si focalizza sull'assicurarsi che i propri componenti o librerie siano aggiornati. Impatto:Moderato. L'intera gamma di problematiche è possibile, come Injection, XSS e broken access control. L'impatto può variare da parziale a completa compromissione dell'host e dei dati. A-10 UNVALIDATED REDIRECTS AND FORWARD Le applicazioni web spesso reindirizzano o inoltrano gli utenti verso altre pagine o siti ed usano dati non validati per determinare le pagine di destinazione. Senza un'opportuna validazione, gli attaccanti possono re-indirizzare le vittime verso siti di phishing o di malware o utilizzare il forward per accedere a pagine non autorizzate. Sfruttabilità: Medio. L'attaccante forza la vittima a cliccare su un link con un redirect non validato. Le vittime sono propense a cliccare poiché il link appartiene a un sito valido. L'attaccante punta ai forward insicuri per bypassare i controlli di sicurezza. 24 Diffusione: Non Comune - Individuazione: Facile. Rilevare redirect controllati è semplice. E' sufficiente cercare i redirect dove si può impostare l'URL completo. I forward non controllati non sono più difficili da individuare perché puntano a pagine interne. Impatto:Moderato. Tali redirect possono installare malware o chiedere agli utenti di inserire credenziali o altre informazioni sensibili. Le vulnerabilità a cui può essere soggetta un'applicazione web non si limitano alle 10 elencate nella guida TOP TEN di Owasp. Tuttavia risultano essere le più comuni e le più critiche per gli applicativi. In particolar modo la vulnerabilità più diffusa che colpisce le applicazione rientra nella categoria delle SQL Injection. 25 CAPITOLO 4: ZAP Nei capitoli precedenti sono state introdotte le linee guida che conducono allo sviluppo di applicazioni sicure, in particolare è stato evidenziato quanto sia importante introdurre la sicurezza in fase di progettazione. Tuttavia ciò non basta a garantire la sicurezza di un applicativo, e per questo motivo gli sviluppatori possono contare sull'aiuto di tutta una serie di strumenti che consentono di effettuare penetration testing e quindi verificare la sicurezza dell'applicazioni. Uno strumento che consente di fare ciò è ZAP (Zed Attack Proxy), un tool di sicurezza fornito da gruppo Owasp, gratuito e open-source, progettato appositamente per testare le applicazioni web. Zap si pone quindi come strumento a supporto di sviluppatori di applicazioni web che vogliono verificare la sicurezza del proprio applicativo. Zap in particolare effettua un'analisi di vulnerability assessment, 26 pertanto individua le vulnerabilità presenti in un'applicazione e sulla base dei risultati ottenuti è possibile stabilire le strategie e le manovre da adottare per rendere sicure le proprie applicazioni. Fornisce un' ampia gamma di funzionalità che consentono di effettuare analisi profonde e dettagliate,modellate sulle caratteristiche del caso specifico. 4.1 Zap: Un caso d'uso E' presentato ora un caso d'uso nel quale ci si avvale di Zap per individuare la presenza di vulnerabilità di tipo Sql Injection. E' stata creata quindi un'ambientazione volutamente vulnerabile al fine di riscontrare questo tipo di vulnerabilità. Cominciamo con la configurazione di Zap come server proxy: in questo modo è possibile vedere tutte le richieste fatte all'applicazione web e tutte le risposte ricevute,zap quindi opera collocandosi tra il browser e l'applicazione così da essere in grado di interpretare e ispezionare i messaggi mandati tra le due parti parte,modificarne il contenuto se è necessario e poi inoltrare i pacchetti alle destinazione. Dopo la configurazione iniziale, si procede con l'analisi dell'applicazione web interessata. Spider e Scansione Attiva Nella schermata principale,a sinistra, è possibile notare la finestra siti, da questa selezioniamo l'applicazione web che vogliamo testare. L'analisi vera e propria dell'applicazione si articolare in due passi : Spider e Scansione Attiva. Lo spider consente automaticamente di trovare nuove risorse (URL) in un 27 particolare sito esaminando le risponde html provenienti dall'applicazione: comincia con una lista di url da visitare, chiamati seeds, quindi visita questi url, identifica tutti gli ipertesti nella pagina e li aggiunge poi alla lista di url da visitare. Il processo continua ricorsivamente fintantoché nuove risorse sono trovate. In questo modo siamo in grado di individuare le pagine che compongono il sito. Nel caso d'interesse selezioniamo i collegamenti che interessano e per i quali si vogliono trovare le vulnerabilità che compongono il sito. Si procede poi con la Scansione Attiva: In questa fase si tenta di trovare le potenziali vulnerabilità utilizzando attacchi conosciuti applicati sui target selezionati. Si procede selezionando quindi i target interessati e avviando la scansione attiva. 28 Alla fine della scansione attiva, nella sezione Avvisi, sono riportati i risultati organizzati per priorità. Cliccando due volte su un avviso si apre una finestra che fornisce una serie di informazioni sulla vulnerabilità trovata: l'url a cui si è verificata la vulnerabilità, il rischio, la descrizione,la possibile soluzione e di particolare importanza, l'attacco condotto e il parametro attaccato. Dal risultato della scansione risulta che sono stati individuati avvisi ad alta priorità di tipo Sql Injection. Tramite la finestra delle informazioni possiamo conoscere gli attacchi e i parametri su cui essi sono stati effettuati. 29 ATTACCO 1 - BYEPASS LOGIN Si vuole ora procedere con l'exploit delle vulnerabilità trovate. Apriamo quindi l'url corrispondente alla prima vulnerabilità individuata. E' una pagina che effettua il login degli utenti. Procediamo inserendo nel campo nome un valore arbitrario, ad esempio ADMIN, e nel campo password il comando suggerito da zap che genera la vulnerabilità. Se procediamo con l'autenticazione, è possibile notare che questa è avvenuta correttamente 30 ATTACCO 2 - SHOW DATABASE Procediamo con l'exploit di un'altra vulnerabilità individuata da zap. La pagina in esame contente effettuare la ricerca di un elemento presente in un database. Si apre quindi nuovamente l'url associato e si inserisce il comando suggerito da zap nel campo opportuno. E' possibile notare che il comando inserito ha avuto l'effetto di far visualizzare l'intero database. 31 Contromisure E' possibile mettersi al riparo da questo tipo di vulnerabilità adottando delle semplici contromisure. Per attacchi a funzionalità di login si può ricorrere ad una funzione che effettua l'escape di tutti i caratteri potenzialmente dannosi(per esempio l'apice singolo '). Ad esempio, la query vulnerabile : SELECT * FROM login WHERE name='admin' AND password='1' OR '1'='1' ,con la funzione che effettua l'escape diventa: SELECT * FROM login WHERE name='admin' AND password='1\ ' OR \'1\ '=\'1' , la quale non produce alcun risulto. Conclusioni Da questo esempio si è potuto constatare che l'applicazione web testata è soggetta a due semplici ma importanti vulnerabilità di tipo Sql Injection : Una consente l'autenticazione di utenti non autorizzati e l'altra invece fornisce totale visione degli elementi che compongono un database. Sono pertanto stati violati i principi di sicurezza e integrità dei dati. Seppur semplice questo esempio mostra chiaramente quali più gravi conseguenze potrebbero avere vulnerabilità di questo tipo se fossero presenti in applicazioni web di più grande rilievo e impatto. E' pertanto di fondamentale importanza che aziende,società e sviluppatori prestino sempre più attenzione e cura alla progettazione di applicazioni web sicure. 32 Bibliografia [1] Owasp foudation, www.owasp.org [2] Common Vulnerabilities Scoring System, www.first.org/cvss [3] Common Vulnerabilites and Exposures, www.cve.mitre.org [4] Owasp Group, Owasp developmente guide, luglio 2005 [5] Owasp Group, Owasp Ton Ten, 12 giugno 2013 33