Che cos'è un attacco SQL injection, esattamente?
Gli attacchi informatici SQL injection (SQLi) funzionano inducendo con l'inganno i database a concedere loro l'accesso. Un attacco SQL injection forza un database non protetto a eseguire comandi non sicuri inserendo codice dannoso nello Structured Query Language (SQL) del database, il linguaggio più comunemente utilizzato per la gestione dei database.
Sebbene sia in circolazione da decenni, il tipo di attacco SQL injection è una minaccia persistente, che oggi rappresenta i due terzi degli attacchi alle applicazioni Web. Secondo l'OWASP (Open Web Application Security Project, un'autorevole organizzazione no profit impegnata nella promozione di una maggiore sensibilizzazione sui vari aspetti della sicurezza sul Web), gli attacchi SQL injection si posizionano al primo posto nell'elenco dei rischi per la sicurezza delle applicazioni Web.
La vulnerabilità agli attacchi SQL injection è spesso dovuta al modo poco accurato in cui è stata scritta un'API (Application Programming Interface) dell'applicazione. Poiché gli sviluppatori di applicazioni Web a volte faticano a vedere i propri errori finché non vengono scoperti da qualcun altro, spesso i nuovi prodotti sono facili bersagli degli attacchi zero-day di tipo SQL injection.
E quando non sono impegnati a rubare dati, i criminali informatici più esperti sono intenti a rivenderli ai broker di dati. Potenzialmente redditizi e relativamente facili da realizzare con le giuste competenze ed esperienza, le violazioni basate su SQL sono un'importante fonte di entrate per molti gruppi di hacker.
Che cos'è SQL?
SQL, o Structured Query Language, è il linguaggio di programmazione standard utilizzato per la gestione dei database. Quando si comunica con un database o si esegue una query per recuperare informazioni presenti nel database, il linguaggio più comunemente utilizzato per l'accesso ai dati è proprio SQL.
Puoi pensare a un database come al magazzino di un'applicazione Web. Come gli scatoloni nel magazzino, le numerose tabelle del database contengono informazioni sui clienti, articoli in vendita, credenziali di accesso e altri dati. Quando si immettono informazioni in un'applicazione Web, il linguaggio SQL consente al database di elaborare la query e restituire le informazioni richieste.
Basata sulla lingua inglese, l'intuitiva sintassi del linguaggio SQL lo ha reso il linguaggio di gestione dei database preferito da molti programmatori di API. Se un database è come il magazzino di un'applicazione Web, un'API ne rappresenta la sfavillante vetrina. È ciò con cui interagisci effettivamente quando visiti un sito Web e invii richieste tramite un campo di immissione (ad esempio per eseguire una ricerca) o compilando un modulo.
Il linguaggio SQL lavora dietro le quinte, traducendo in codice le tue richieste per consentire al database di comprenderle. Sfortunatamente, la sua capacità di interpretare l'input dell'utente lo rende anche un facile bersaglio per gli attacchi informatici.
Nel caso te lo stia chiedendo, "SQL" può essere pronunciato sia "S-Q-L", come acronimo, sia come la parola inglese "sequel". Leggi questo articolo per un ripasso rapido di alcuni termini chiave della sicurezza informatica.
Come avviene un attacco SQL injection?
Per mettere in atto un attacco SQL injection, gli hacker sfruttano un campo di immissione (ad esempio in un portale di accesso, un modulo da compilare o una barra di ricerca) di un'API Web. Alterando i dati di ingresso con uno frammento di codice dannoso, noto come exploit, un criminale informatico può indurre un database non protetto a interpretare i dati come un comando.
I siti Web con campi di immissione non protetti possono essere vulnerabili agli attacchi SQLi.
Con ripetuti attacchi SQL injection, gli hacker possono farsi un'idea del grado di vulnerabilità di un software. Ecco un esempio di come viene eseguito un attacco SQL injection:
-
Stai cercando di accedere ai tuoi dati utente su un sito Web, quindi inserisci il tuo nome utente: AVGRocks17.
-
SQL rende il testo immesso comprensibile per il database, trasformandolo in un'istruzione del tipo: "Trova e recupera i dati dell'utente AVGRocks17". Tu devi solo digitare "AVGRocks17" e SQL traduce la richiesta in codice per dire al database cosa fare. L'istruzione sarà simile a questa:
SELECT * FROM users WHERE userID = AVGRocks17;
L'asterisco significa "tutti i dettagli", inclusi verosimilmente il tuo vero nome e la password.
Anziché filtrare per utente specifico, un attacco SQL injection realizzato inserendo OR 1=1 in una barra di ricerca, in un modulo di accesso o in un altro campo di immissione può forzare SQL a eseguire una query nel database per ottenere tutti i dettagli di OGNI utente. In che modo? Il database riceve questa istruzione:
SELECT * FROM users WHERE userID = AVGRocks17 OR 1=1;
Il database la interpreta come un comando che richiede di esaminare i dati di ogni utente e di restituirli tutti se l'ID corrisponde a AVGRocks17 o se 1 è uguale a 1, condizione che viene ovviamente sempre soddisfatta.
Gli attacchi SQL injection possono modificare, inserire ed eliminare gli elementi di un database o preparare il terreno per un attacco di tipo Denial of Service. Gli hacker possono anche installare alcune backdoor, per assicurarsi l'accesso a un server a tempo indeterminato.
I comandi più comunemente utilizzati negli attacchi SQL injection consentono agli hacker di alterare, rubare o distruggere dati, falsificare o rubare identità o modificare le autorizzazioni del database. In casi estremi, un attacco SQL injection può trasferire il controllo completo di un database al malintenzionato autore dell'attacco.
Perché gli attacchi SQL injection vanno a segno così facilmente? Innanzitutto, non dovrebbe essere così. Le vulnerabilità agli attacchi SQL injection sono in genere il risultato di una programmazione scadente da parte dello sviluppatore Web. Le aziende spesso assumono sviluppatori poco esperti o con scarse competenze e la programmazione di misure di protezione adeguate richiede più tempo di quanto ne abbiano a disposizione. Scadenze troppo pressanti possono portare molte aziende a sottovalutare l'importanza della sicurezza.
Tuttavia, non si tratta solo di errori umani. Poiché la logica utilizzata è davvero semplice, gli attacchi SQLi sono facilmente automatizzabili e nemmeno i migliori programmatori sono in grado di competere con un esercito di bot.
Esempi reali di attacchi SQL injection
2008 - A causa di un attacco SQL injection la società di elaborazione di pagamenti Heartland Payment Systems subisce una perdita di oltre 130 milioni di dollari. Gli aggressori hanno rubato ben 130 milioni di numeri di carte di credito in una delle più grandi violazioni di dati di sempre.
2014 - Più di 1,2 miliardi di combinazioni di ID e password univoche vengono trafugati da oltre 420.000 siti Web su Internet da un gruppo di hacker russi che ha utilizzato tecniche di SQL injection per comandare ai database di rivelare e scaricare i dati che contenevano.
2015 - Il colosso britannico delle telecomunicazioni TalkTalk viene preso di mira sfruttando le vulnerabilità della sua sicurezza Web. Risultano compromesse Centinaia di migliaia di informazioni personali dei clienti. Anche se all'epoca i rischi per la sicurezza del linguaggio SQL sono già noti, l'azienda si dimostra impotente di fronte all'attacco.
2016 - La violazione dei forum di Epic Games basata su un attacco SQL injection colpisce i patiti di videogame, con 800.000 account utente divulgati. Gli attacchi SQL injection hanno preso di mira anche il popolare software per bacheche online vBulletin, diventato tristemente famoso per la sua vulnerabilità agli exploit SQL. In generale, gli attacchi SQL injection si stanno diffondendo in modo incontrollato nell'industria del gaming.
Grandi aziende, proprietari di siti Web, utenti medi di Internet... nessuno è al riparo dagli attacchi SQLi. La praticità del linguaggio SQL garantisce di fatto la diffusione anche in futuro degli attacchi SQLi.
Il modo migliore per proteggere i tuoi dati è utilizzare un software di sicurezza in tempo reale in grado di garantire la protezione da attacchi di phishing e intrusioni di rete. AVG AntiVirus Free ti difende dalle vulnerabilità della sicurezza, dal phishing e dalle fughe di password, oltre che da tutti gli svariati malware esistenti.
Tipi di attacco SQL injection
I tre tipi principali di attacco SQL injection sono SQLi in-band, SQLi out-of-band e SQLi inferenziale. Gli attacchi basati sulle tecniche di SQL injection vengono classificati in base alla diffusione, al metodo di attacco utilizzato e al potenziale danno inflitto.
Che cos'è un attacco SQL injection in-band?
SQLi in-band è il tipo più elementare di attacco con SQL injection. Sfruttando tecniche di SQLi in-band, gli hacker possono sferrare un attacco e recuperare i risultati sullo stesso server. Si tratta di un tipo di attacco piuttosto comune perché è semplice da eseguire.
Che cos'è un attacco SQL injection out-of-band?
Gli attacchi SQLi out-of-band cercano di estrarre il contenuto di un database su un altro server e richiedono che il database sia in grado di elaborare richieste DNS o HTTP. Gli attacchi SQLi out-of-band sono meno comuni, ma comportano conseguenze più gravi.
Che cos'è un attacco SQLi inferenziale (alla cieca)?
Un attacco SQLi inferenziale (alla cieca) sottopone dichiarazioni vere o false a un database per cercare di dedurne la struttura. Esaminando le risposte ricevute, un hacker può infatti iniziare a identificare le potenziali vulnerabilità del database.
Come identificare le vulnerabilità agli attacchi SQL injection
Il modo migliore per identificare le vulnerabilità agli attacchi SQL injection di un database è testarlo. Di seguito è disponibile una panoramica di alcuni dei più popolari strumenti di test per la prevenzione degli attacchi basati su SQLi.
-
sqlmap è un "penetration tester" open source in grado di eseguire la scansione di un sistema alla ricerca di eventuali vulnerabilità nella sicurezza. Può scaricare il contenuto di un intero database, ma questo significa che anche gli hacker possono avere interesse a utilizzarlo.
-
suIP.biz è uno scanner online basato su sqlmap che può essere utilizzato per eseguire un attacco SQLi di prova nei più diffusi sistemi di gestione di database, come MySQL, Oracle o Microsoft SQL Server.
-
Hacker Target ricerca le vulnerabilità incentrate sugli attacchi alla cieca e basati su errore contro le richieste HTTP GET (un certo tipo di URL). Anche questo strumento è basato su sqlmap.
-
Vega ricerca sia gli attacchi SQL injection che un tipo di attacco simile, chiamato Cross-Site Scripting (XSS). Open-source e intuitivo, Vega funziona su Linux, macOS e Windows.
Come prevenire gli attacchi SQL injection
Gli sviluppatori Web possono prevenire gli attacchi SQL injection attenendosi a una buona prassi di scrittura del codice. Ma anche tu puoi fare molto per proteggere i tuoi dati sensibili dagli attacchi SQLi.
Gli sviluppatori Web e gli imprenditori possono proteggere i propri database dagli attacchi SQLi seguendo questi suggerimenti.
Query parametrizzate e input puri
La prevenzione degli attacchi SQLi inizia con la sanificazione degli input: "ripulendo" il codice dell'applicazione con l'impostazione di parametri per distinguere tra dati di immissione (informazioni legittime) e comandi (informazioni dell'hacker). La corretta sanificazione degli input è un problema così diffuso che un Webcomic di xkcd su un attacco SQL injection di drop-table è diventato virale.
Web application firewall (WAF)
Un firewall per applicazioni Web (WAF, Web application firewall) è una barriera che filtra il software dannoso e il traffico tra un'applicazione Web e Internet. I Web application firewall possono essere modificati per proteggersi da diversi tipi di attacco SQL injection e da altre minacce alla sicurezza.
Inserimento in whitelist anziché in blacklist
Le blacklist impediscono agli utenti di inserire caratteri potenzialmente problematici come segni di uguale, punti e virgola e virgolette. Poiché approvano solo determinati caratteri, le whitelist risultano più restrittive e hanno maggiore efficacia. Gli hacker hanno trovato modi creativi per aggirare le blacklist, ma le whitelist lasciano poco spazio di manovra.
Criptaggio dei dati
Il criptaggio dei dati tiene chiusi sotto chiave i dati finché non tornano al proprietario. Se i dati vengono criptati nel database, gli hacker non possono accedervi a meno che non riescano a sbloccarli.
Software di sicurezza sempre aggiornato
Per quanto si possa essere vigili, è difficile far fronte a milioni di hacker agguerriti. I moderni software di sicurezza per le aziende possono applicare automaticamente le patch per assicurare la protezione dalla minaccia degli attacchi SQL injection in continua evoluzione.
Proteggiti da minacce e vulnerabilità con AVG AntiVirus
Se il tuo sito Web preferito viene colpito da un attacco SQL injection, non c'è molto che tu possa fare. Ma quando si tratta dei tuoi dispositivi, scegli una soluzione di sicurezza di comprovata efficacia.
Il software di sicurezza brevettato di AVG monitora le minacce 24 ore su 24, 7 giorni su 7. Esegui la scansione del dispositivo in un istante, per chiudere eventuali falle nella sicurezza o vulnerabilità Wi-Fi. Proteggi la posta elettronica dagli accessi indesiderati e blocca download dannosi, collegamenti non sicuri e tentativi di phishing.
Previeni le minacce online con una protezione a 360°, che si tratti di proteggere la rete, di eliminare il software obsoleto o di rimuovere il malware. Prova subito AVG AntiVirus Free.