Politecnico di Milano QuickTime™ e un decompressore TIFF (Non compresso) sono necessari per visualizzare quest'immagine. Analisi e Valutazione sulla sicurezza delle applicazioni web generate con WebML/WebRatio 31 Maggio 2005 Luca Carettoni - [email protected] Sicurezza nelle web application Un requisito importante, al pari di quelli funzionali, che spesso viene trascurato… Le applicazioni diventano sempre più aperte e flessibili; garantire il paradigma CIA non è un compito semplice: HTTP è un protocollo debole Un web server, per sua stessa natura, è un servizio esposto con meccanismi più o meno funzionali di autenticazione e/o autorizzazione Applicazioni “data-intensive” sono un obiettivo appetibile per un aggressore. @stake stima che il 70% delle applicazioni analizzate, presenta delle vulnerabilità rilevanti. Qualche esempio: Sql Injection,Transversal Directory, XSS, etc.. $query = sprintf("SELECT * FROM %s WHERE owner='%s' AND nickname='%s'", $this->table, $this->owner, $alias); $res = $this->dbh->query($query); E se $alias contenesse ' UNION ALL SELECT * FROM address WHERE '1'='1 ? -2- Web Hacking Methodology utilizzata per le applicazioni WebML/WebRatio Due livelli di analisi: Modello concettuale Considerazioni generali sull’uso di un metodo formale per lo sviluppo; Mapping tra elementi del modello e valutazione dei rischi; Implementazione automatica delle applicazioni Profiling; Tentativi di attacco alla piattaforma di deployment; Tentativi di attacco ai meccanismi di autenticazione; Tentativi di attacco ai meccanismi di autorizzazione; Tentativi di attacco alla gestione delle sessioni; Problematiche di Input Validation; Tentativi di attacco alla base di dati; -3- Valutazione dei rischi associati al modello Utilizzare un modello formale per lo sviluppo di software permette di avere una visione globale del progetto, oltre ad aiutare le varie fasi dello sviluppo stesso (analisi di sicurezza compresa!) Nei tools che utilizzano il modello è possibile effettuare controlli in maniera automatica (Es: Validità dell’hypertext) Sono molteplici i casi di attacco sferrati su pagine di test, che andavano rimosse…test.php, debug.asp e sqlquery.jsp Generare del codice da un modello formale pone una serie di problematiche intrinseche: Replicazione degli errori Approccio black-box VS (quasi) white box Sviluppo agevolato ≠ Tutti possono fare web application Ogni elemento del modello è un potenziale candidato per differenti vulnerabilità -4- Casi di studio: Acme e Gestione Corsi Seguendo lo schema precedentemente illustrato abbiamo analizzato due applicazioni implementate con WebRatio. Forniamo ora una brevissima panoramica sui risultati: Profiling - a livello applicativo: simulando una normale interazione dell’utente e attraverso lo studio del progetto WebRatio - a livello di piattaforma di deployment: manualmente e con strumenti di scansione automatica (Nmap, Amap, Nikto, Nessus, etc.) Anche da remoto, si evince che la piattaforma di deployment risulta esser una configurazione base dell’application server Apache Tomcat con servizi di management attivati, presenza di file di esempio, directory listing, ect. Attacco alla piattaforma di deployment La versione di Tomcat presente con WebRatio è SOLAMENTE una piattaforma usabile in fase di testing, sebbene l’integrazione possa indurre ad usare inizialmente il servizio integrato. -5- Casi di studio: Acme e Gestione Corsi Tentativi di attacco ai meccanismi di autenticazione - SQL-Backend Login Form Meccanismo fondamentalmente sicuro a causa della buona validazione dell’input effettuata tramite il framework Struts. SELECT A1.oid_2, A2.groupoid, A4.siteviewid FROM usertable A1, usertable A2, grouptable A3, siteviewtable A4 WHERE (A1.username = ‘admin’ ) --’) AND ((A1.password = ‘$pass’) OR (A1.password IS NULL AND ‘$pass’ IS NULL)) AND (A1.oid_2 = A2.oid_2) AND (A2.groupoid = A3.oid_2) AND (A3.siteviewoid = A4.oid_2) E’ però possibile fare di più: Confronto tra hash invece che tra coppie di password Eventuali timeout per applicazioni critiche Abilitare SSL -6- Casi di studio: Acme e Gestione Corsi Tentativi di attacco ai meccanismi di autorizzazione - Concetto di SiteView, Utenti e Gruppi. - Meccanismo comune di RBAC Meccanismo concettualmente sicuro, anche se all’interno della singola SiteView non viene definito automaticamente un meccanismo forte di separazione dei dati tra utenti con gli stessi privilegi. Tale vulnerabilità permette un attacco denominato Horizontal Privilege Escalation. Cosa si può fare: Abilitare l’opzione “Use URL checksum for pages” nelle security properties; Introdurre meccanismi a livello di logica applicativa; -7- Casi di studio: Acme e Gestione Corsi Tentativi di attacco alla gestione delle sessioni - Cookies contenenti un Session ID - Stringhe alfanumeriche da 32 caratteri - Sembrerebbe il risultato di una digest function (MD5 forse!) applicata ad informazioni legate all’utente con un seme random (timestamp+seed forse!) Attaccare questo aspetto significa, in pratica, essere in grado di generare dei fake token. Ma non è un compito semplice! Se fosse MD5(Epoch Time, Server Secret, Pass, User) sarebbe computazionalmente impossibile un attacco a forza bruta. Validazione dell’input Struts fornisce un ottimo sub-framework per la validazione. In aggiunta: Definire delle validazioni specifiche per il contesto applicativo (WebRatio permette l’uso di predicati ed espressioni regolari) Porre attenzione a tutti gli input, file compresi! (vedi vulnerabilità nella gestione degli stores in Acme! ) -8- Conclusioni WebML e WebRatio possono veramente agevolare ed aiutare lo sviluppo di un’applicazione, anche per gli aspetti legati alla sicurezza. La validazione dell’input, problema principale delle web apps, sembra ridotto grazie all’uso del framework OpenSource Struts e dei ValidatorBean. Serve comunque sempre uno sviluppo attento che cerchi di porre rimedio ad eventuali problemi tramite la logica applicativa e che adotti tutte le soluzioni fornite dall’ambiente di sviluppo per assicurare la confidenzialità, l’integrità e la disponibilità dei dati. Sono a vostra disposizione per eventuali domande. Grazie per l’attenzione! -9-