Le SQL Injections, dopo 15 anni sono ancora oggi il metodo di attacco più potente a disposizione dei black-hat

Che cosa sono le iniezioni SQL

Le iniezioni SQL sono l’attacco più a buon mercato, spesso molto semplice grazie ai tool che automatizzano il processo di ricerca delle vulnerabilità, cosa che rende l’uso della tecnica accessibile anche ai meno esperti. Che cos’è esattamente un’iniezione SQL?

Come suggerisce il termine stesso, l’iniezione SQL è un attacco che si basa sull’iniezione di istruzioni non desiderate all’interno di un’applicazione web. Un’applicazione PHP si interfaccia quasi sempre con un database relazionale. Chi visita un sito dinamico compie delle azioni attraverso il browser. Clicca per visitare le pagine del sito od inserisce dei prodotti in un carrello. Ogni azione del visitatore corrisponde ad una serie di richieste verso il database che vive sotto l’applicazione. Niente di pericoloso fino a quando si tratta di semplici visitatori o di clienti che stanno per acquistare un prodotto. Ma la musica cambia quando dall’altra parte del browser c’è un blackhat o uno script kiddie.

Considera questo esempio:

Una query come questa, passata nel browser, non fa altro che interrogare il database MySql per prelevare dalla tabella catalogo un valore che corrisponde all’idarticolo 88. Ma sicuramente c’è un problema. Sappiamo che l’applicazione può essere vulnerabile ad un’iniezione SQL perchè qualsiasi web app che accetta come input un parametro di query SQL può essere quasi sicuramente sfruttata.

Che cosa succede quindi se l’applicazione web è vulnerabile alle SQL Injections? Un attaccante può passare come parametro di query una qualsiasi istruzione SQL, che verrà interpretata dall’applicazione e passata al DB senza battere ciglio.

Le possibilità sono infinite. Un’applicazione vulnerabile alle iniezioni SQL può rivelare all’attaccante tutti i databases, le tabelle, le colonne, gli utenti e praticamente qualsiasi dato memorizzato all’interno dei DB. Soprattutto se il server non è configurato in modo da limitare i privilegi di ogni utente.

Difendersi dalle iniezioni SQL

La responsabilità più grande è principalmente nelle mani dei developer. Chi scrive il codice può scegliere se scriverlo tenendo a mente la sicurezza e considerando sempre il pericolo che può derivare da un’iniezione SQL andata a buon fine.

Le principali raccomandazioni che gli esperti consigliano per difendersi dalle iniezioni SQL sono:

  • Evitare i dati in chiaro

La principale conseguenza di un’iniezione SQL è l’esfiltrazione di dati. Username, password, indirizzi email, codici fiscali e numeri di carte di credito sono solo alcuni dei dati che possono essere estratti da un’applicazione vulnerabile. Per questo motivo un’applicazione web non dovrebbe mai memorizzare dati in chiaro all’interno del database. Questo vale soprattutto per le password. Inoltre i numeri delle carte di credito non dovrebbero essere affatto memorizzati all’interno di un database potenzialmente esposto all’esterno.

  • Sanitizzazione degli input

Un’applicazione web non dovrebbe accettare ed eseguire ad occhi chiusi qualsiasi istruzione SQL. Gli esperti raccomandano di sanitizzare gli input con tecniche che permettono di ripulire eventuali query anomale e di usare quando possibile i parameterized statement.

  • WAF e hardening del server DB

Lato server sono numerosi gli accorgimenti che possono essere adottati per rendere più sicura un’applicazione web. Primo tra tutti l’uso di un web application firewall come Mod Security. Anche se è importante essere consapevoli che un WAF non può tappare tutti i buchi di un applicativo, l’obiettivo è quello di rendere difficile la vita dell’attaccante. Più ostacoli vengono posti tra un blackhat e l’applicazione e più c’è la possibilità di rallentare, fermare e raccogliere importanti informazioni sull’attacco.
La chiave della difesa è anche nell’hardening del server di database.
I grant degli utenti di un database devono seguire il principio del minor privilegio possibile.
Il logging è fondamentale per registrare anomalie e tentativi di attacco. La crittografia dei dati è essenziale per prevenire esfiltrazioni di dati in chiaro. Inoltre accanto ai WAF esistono software che hanno la funzione di firewall per il database.
Chi difende un’applicazione web deve predisporre qualcosa di simile ad una fortezza, composta da strati concentrici ed irta di ostacoli posati per fermare o rallentare l’attaccante. L’atteggiamento migliore per fronteggiare i rischi di un’iniezione SQL è considerarsi già violati. È fondamentale il penetration testing continuo delle applicazioni e non ultimo è essenziale mettersi nei panni dell’attaccante per comprendere a fondo le tecniche di attacco più elaborate. E non dimentare che i WAF possono essere bypassati con poco sforzo dagli avversari più sofisticati.

fonte: http://www.servermanaged.it/sicurezza/sql-injections-attacco-iniezioni-sql/