Una delle principali vulnerabilità degli applicativi web è rappresentata dalla sql (structured query language) injection attack. Si tratta di una tecnica di hacking pericolosa e pervasiva a cui può conseguire, nei casi più gravi, il pieno controllo del server da parte dell’attaccante.
Notorie sono le evidenze di questa tipologia di attacco (WordPress, Joomla, Yahoo, US Election Commission, Dipartimento della Funzione Pubblica, Playstation Network) ed ancora oggi si stima che una discreta percentuale degli applicativi web presenta una elevata vulnerabilità di questo genere.
Le più diffuse web application e/o blog utilizzano un database costituito da tabelle in cui sono inseriti dati. La query è tecnicamente un’interrogazione da parte di un utente di un database, strutturato tipicamente secondo il modello relazionale, che serve per compiere determinate operazioni sui dati contenuti nelle tabelle (selezione, inserimento, cancellazione dati, aggiornamento ecc.).
Una query utilizza generalmente un linguaggio di interrogazione interpretato che è rappresentato dallo standard SQL (Structured Query Language) nei suoi sottolinguaggi Data Query Language e Data Manipulation Language, per renderla più comprensibile al Database management system (DBMS). La query è dunque una istruzione in SQL (Structured Query Language), che serve per gestire l’interazione con i più comuni tipi di database relazionali.
Esistono varianti di SQL a seconda del database utilizzato, ma in linea generale, si basano tutte sugli stessi principi. L’attacco Sql injection sfrutta l’inserimento e l’esecuzione di codice Sql non previsto all’interno di una pagina web dinamica. A differenza di molte tecniche di hacking, le Sql Injection non richiedono particolari tools ma solo un collegamento alla rete internet ed un qualunque browser web.
La tecnica sfrutta, in buona sostanza, la possibilità di poter inviare ad un server tramite una richiesta HTTP (HyperText Transfer Protocol) uno o più parametri che saranno elaborati dal server medesimo per fornire all’utente abusivo il tipo di servizio desiderato.
Introducendo come parametri dei frammenti di codice Sql è possibile modificare la query consentendo un accesso non autorizzato al database con la conseguenziale acquisizione abusiva dei dati ivi contenuti (nomi, cognomi , indirizzi email, numeri di carte di credito, user id e password , etc.) degli utenti registrati al sito ed entrare in aree private del sito stesso.
Il fenomeno delle Sql Injection non riguarda l’architettura web in particolare, ma interessa qualunque tecnologia utilizzata per le pagine web dinamiche che si interfacciano con dei database. Considerata la pervasività dell’attacco, quali sono le tecniche di prevenzione e le misure di mitigazione da mettere in campo?
Ne abbiamo parlato con Giorgio Perego, responsabile dei progetti ICT locali per le tre divisioni di vendita della multinazionale tedesca B. Braun
“Per prevenire un attacco sql injection ovvero mitigarne la minaccia – ci spiega – la migliore tecnica difensiva consiste nel mettere in campo rigorosi controlli su ciò che può essere digitato in un campo di immissione dati in modo che i comandi di programmazione vengano rifiutati. Dovrebbero essere condotte anche revisioni del codice per garantire che tali modifiche siano in atto e che non vi siano carenze intrinseche nel modo in cui il codice è scritto. Esistono software per testare tali punti deboli. Il linguaggio di query strutturato si verifica a livello di applicazione. La maggior parte degli IPS (intrusion prevention systems) rileverà almeno i set di base di SQL injection e sarà in grado di fermarli”.
A fronte delle superiori considerazioni, è evidente che l’information security manager non potrà non misurarsi con la minaccia di un attacco sql injection che ben avrà precedentemente valutato nel risk assessment.
A tal fine è di fondamentale importanza che l’attività di security management si indirizzi verso l’implementazione di standard di codifica sicuri e la “peer review” (reviewing code) che come parte del SDLC (System Development Life Cycle), costituiscono validi ed efficaci controlli risolutivi degli attacchi sql injection.