Verificare la vulnerabilità ad attacchi SQL Injection tramite sqlmap
Pagina 1 di 4
Tra le vulnerabilità applicative più gravi e diffuse una nota di merito riguarda le SQL-Injection. Nonostante la teoria e le raccomandazioni a riguardo non abbiano subito particolari evoluzioni negli ultimi dieci/quindici anni, questa classe di vulnerabilità rimane uno dei principali incubi per programmatori e manutentori di applicativi Web e, al contempo, uno dei più appetibili target per aggressori interni e esterni; la sua rilevanza è tale da essere permanentemente inserita nelle varie Top Ten List di vulnerabilità indicate da OWASP (Open Web Application Security Project).
In questo articolo presenteremo sqlmap, un potente strumento open-source per automatizzare il processo di discovery ed exploit di SQL-Injection adattandosi al DBMS utilizzato come back-end dall'applicazione target.
Prerequisiti
Questo articolo è rivolto a lettori già in possesso delle basilari nozioni di SQL-Injection; in questo testo non saranno trattate le cause di questa vulnerabilità e/o le contromisure per evitarla, così come non sarà introdotto il linguaggio SQL la cui conoscenza, seppur di base, è considerato un prerequisito necessario ad una proficua lettura dell'articolo.
sqlmap
sqlmap è uno strumento open-source che promette di automatizzare la fasi di discovery ed exploit delle vulnerabilità classificabili come "SQL-Injection"; sviluppato interamente in Python, sqlmap è pertanto disponibile per tutti i maggiori sistemi operativi. sqlmap rappresenta uno strumento completo per l'analisi delle SQL-Injection in quanto:
- è in grado di rilevare il tipo di DBMS target (DBMS fingerprinting), adattando il proprio comportamento di conseguenza;
- implementa diverse strategie, spesso complesse da analizzare manualmente, per evidenziare eventuali vulnerabilità;
- individuate le vulnerabilità, permette un rapido exploit del DBMS e, se le condizioni al contorno lo permettono, del sistema host.
Ottenere sqlmap
Vista la sua enorme popolarità, ottenere sqlmap è estremamente semplice; normalmente si procede ad un download diretto dal sito ospitato su SourceForge, ove è possibile scaricare un archivio (platform-independent) o un pacchetto binario per le maggiori distribuzioni GBU/Linux o per Windows.
Per chi desidera usare e testare sempre l'ultima versione in sviluppo, è possibile procedere al checkout del repository Subversion attraverso il comando:
svn checkout https://svn.sqlmap.org/sqlmap/trunk/sqlmap sqlmap-devSi osservi che, essendo codice in fase di sviluppo, il repository Subversion contiene spesso versioni di sqlmap affette da bugs che possono influire notevolmente sul funzionamento del software.
Strategie di ricerca
sqlmap implementa tre strategie per verificare l'esistenza di una vulnerabilità di SQL-Injection:
- UNION ALL: una delle tecniche principe per sfruttare una SQL-Injection risiede nell'utilizzo di una UNION ALL per collegare al risultato legittimo i dati provenienti da una seconda query; sqlmap inserisce nei parametri vulnerabili dell'applicazione stringhe contenenti una query quale UNION ALL SELECT 'a', null ..., identificando dal risultato se l'esecuzione ha avuto successo;
- Stacked queries: stacked queries significa eseguire query multiple, impilandole all'interno di una sola chiamata. Al contrario di quanto sostenuto da molti, non è il DBMS a determinare se sia possibile utilizzare tale tecnica ma la coppia DBMS/Web Framework: noto è l'esempio di MS SQL Server su ASP/ASP.NET e PHP, ma questa caratteristica è disponibile anche su PostgreSQL con ASP/ASP.NET/PHP e su MySQL con ASP.NET. Se le stacked queries sono abilitate e l'applicazione è vulnerabile, è possibile inserire codice SQL arbitrario semplicemente interrompendo la query corrente ed inserendone una nuova a seguire (es. '; SELECT ...; --);
- Inferential blind SQL injection; non tutte le SQL-Injection sono facilmente riconoscibili: le più evidenti mostrano in output sulla pagina web informazioni di errore che ne permettono una facile identificazione ed exploit; altre, in ambienti meglio configurati, non mostrano in output alcuna differenza se la query presenta errori sintattici. Quest'ultime sono decisamente più difficili da individuare e sfruttare in quanto l'aggressore deve necessariamente procedere "alla cieca"; in ogni caso esistono alcuni test basati su logica booleana e sui tempi di risposta che permettono di determinare con un elevato grado di confidenza la presenza di una SQL-Injection; sqlmap implementa molteplici controlli di questa tipologia, atti a coprire gran parte delle casistiche.







