Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria – Sede di Modena Corso di Laurea in Ingegneria Informatica – Nuovo Ordinamento Analisi e Contromisure di tecniche di Sql Injection Relatore: Prof. Sonia Bergamaschi Correlatore: Ing. Francesco Guerra Candidato: Jacopo Canese Nobili Spinetti Obiettivi: - Analisi e classificazione delle tecniche di Sql Injection. - Studio delle possibili contromisure. Approfondimento delle injection in linguaggio Transact-Sql e delle misure di sicurezza in linguaggio ASP.NET. Attività sperimentale: - Verifica della sicurezza del sito Web della Facoltà. - Sperimentazione delle tecniche su di un'applicazione Web di prova. - Implementazione di diverse misure di sicurezza. Cosa sono le Sql Injection: - Riguardano la sicurezza delle applicazioni Web Database. - Consistono nell'inserimento ed esecuzione di codice Sql non previsto all'interno di una pagina web dinamica. - Sfruttano caratteristiche proprie del linguaggio Sql come le regole sintattiche e la loro flessibilità. - Per la loro esecuzione è sufficiente l'utilizzo di un qualunque browser web (sfruttano normali richieste HTTP). Un semplice esempio: - Query sottoposta al Database: SELECT campoStr FROM tabella WHERE chiave = 'stringa'; - stringa= X’ OR ‘X’=‘X SELECT campoStr FROM tabella WHERE chiave = 'X’ OR ‘X’=‘X'; - Il significato della query è stato alterato. Classificazione delle tecniche: - Tecniche di SQL injection di base Principi di base con i quali vengono realizzate tutte le altre tipologie di injection. - Tecniche di SQL injection avanzate Injection più complesse, che riguardano operazioni sul database. - Tecniche di investigazione di base Osservazioni preliminari del sistema da attaccare. - Tecniche di investigazione avanzate Usate per ottenere informazioni contenute nel database. - Tecniche di Blind SQL injection Injection “alla cieca”, in assenza di messaggi d'errore. Contromisure: - Validazione dell'input If (not Regex.IsMatch(numerotess.toString(),"^\d{5}$")) then %>Errore numero di tessera.<BR><% else... 5 caratteri di tipo numerico - Esecuzione di query all'interno di stored procedure strSQL = "sp_selectStudente" cmdSP = New SqlCommand(strSQL, cn) CREATE PROCEDURE sp_selectStudente @numtess int, @passwd sysname AS select * from studenti where numtess=@numtess and passwd=@passwd GO Contromisure: - Accesso ai dati effettuato da un utente con bassi privilegi - Occultamento di informazioni utili all’hacker Attività sperimentale: Tentativi condotti sul sito della facoltà - Browser web impiegato: Torpark 1.5 http://www.torrify.com - Pagine su cui sono state effettuate le injection: Attività sperimentale: Risultati delle injection sul sito della facoltà - Non è stato ottenuto alcun risultato significativo. - Il sito web si è rivelato efficacemente protetto da injection. Misure di sicurezza intervenute: - Occultamento dei messaggi d’errore. - Permessi di accesso in sola lettura. - Neutralizzazione del carattere apice negli input. Conclusioni: - Realizzata una classificazione completa e flessibile dei principi di funzionamento delle Sql Injection. - Analizzate le contromisure necessarie per rendere un’applicazione web sicura. - Verificata l'effettiva sicurezza del sito web della facoltà da attacchi condotti con Sql Injection. Sviluppi futuri: - Analisi e sperimentazione delle tecniche di Sql Injection in DBMS diversi da Sql Server (ad esempio Oracle). - Sviluppo delle misure di sicurezza con tecnologie diverse da Microsoft .NET.