Gli attacchi SQL injection sono una delle vulnerabilità più longeve delle applicazioni Web. Presenti già dalla fine degli anni '90, mantengono ancora oggi la loro rilevanza. Questo articolo spiega cosa sono, come funzionano e come prevenirli.
SQL injection - significato e definizione
SQL injection, spesso abbreviato in SQLi, è un tipo di vulnerabilità in cui l'autore di un attacco utilizza parte di un codice SQL (Structured Query Language) per manipolare un database e accedere a informazioni potenzialmente preziose. Si tratta di uno dei più diffusi e minacciosi tipi di attacco, perché può potenzialmente essere utilizzato contro qualsiasi applicazione Web o sito Web che utilizzi un database basato su SQL (cioè la maggioranza).
Come funzionano gli attacchi SQL injection?
Per comprendere gli attacchi SQL injection è importante sapere cos'è il linguaggio SQL (Structured Query Language). SQL è un linguaggio di interrogazione utilizzato nella programmazione per accedere, modificare ed eliminare i dati archiviati nei database relazionali. Poiché la stragrande maggioranza dei siti Web e delle applicazioni Web si basa su database SQL, un attacco SQL injection può avere gravi conseguenze per le organizzazioni.
Una query SQL è una richiesta inviata a un database affinché sia eseguita una certa attività o funzione, ad esempio per ottenere dati o eseguire codice SQL. Un esempio consiste nell'invio di informazioni di accesso tramite un modulo Web, per consentire a un utente di accedere a un sito. In genere, questo tipo di modulo Web è progettato per accettare solo tipi di dati specifici, come un nome e/o una password. Quando si inseriscono informazioni, queste vengono controllate rispetto a un database e, se corrispondono, viene consentito l'accesso. In caso contrario, l'accesso viene negato.
I problemi sorgono perché la maggior parte dei moduli Web non ha alcun modo di impedire che vengano immesse informazioni diverse nel modulo. Gli autori degli attacchi possono sfruttare questo punto debole utilizzando le caselle di immissione del modulo per inviare le proprie richieste al database. Ciò potrebbe dare adito a molte attività dannose, dal furto di dati sensibili alla manipolazione delle informazioni presenti nel database per finalità personali.
A causa della prevalenza di siti Web e server basati su database, le vulnerabilità SQL injection rientrano fra le tipologie di cyberattacco più vecchie e diffuse. Alcuni sviluppi nella comunità degli hacker hanno aumentato il rischio di questo tipo di attacco, in particolare l'avvento di strumenti per rilevare e sfruttare casi di SQL injection. Resi liberamente disponibili da sviluppatori open source, questi strumenti consentono ai criminali informatici di eseguire attacchi automaticamente e in pochi minuti, accedendo a qualsiasi tabella o colonna del database con un solo clic.
Sintomi di SQLi
Un attacco SQL injection andato a buon fine potrebbe risultare asintomatico. Tuttavia, talvolta questi attacchi sono segnalati da indicatori come:
- Numero eccessivo di richieste in breve tempo. Potresti ad esempio ricevere numerose e-mail provenienti dal modulo di contatto della tua pagina Web.
- Annunci che reindirizzano a siti Web sospetti.
- Strani messaggi pop-up e di errore.
Tipi di SQL injection
A seconda di come ottengono l'accesso ai dati di back-end e dell'entità del possibile danno, gli attacchi SQL injection rientrano in tre categorie:
SQLi in banda:
Questo tipo di attacco SQLi è facilmente attuabile, poiché gli aggressori utilizzano lo stesso canale di comunicazione per lanciare gli attacchi e raccoglierne i risultati. Presenta due sottovarianti:
- SQLi basato su errori: il database genera un messaggio di errore a causa delle azioni dell'aggressore. Quest'ultimo raccoglie informazioni sull'infrastruttura del database a partire dai dati generati da questi messaggi di errore.
- SQLi basato sull'unione: l'autore dell'attacco utilizza l'operatore UNION SQL per ottenere i dati desiderati unendo più istruzioni select in un'unica risposta HTTP.
SQLi inferenziale (noto anche come Blind SQL injection):
Questo tipo di SQLi è condotto da hacker che utilizzano i modelli comportamentali e di risposta del server dopo l'invio di payload di dati per ottenere altre informazioni sulla relativa struttura. I dati non vengono trasferiti dal database del sito Web all'aggressore, pertanto quest'ultimo non vede le informazioni sull'attacco in banda (da cui il termine "blind", cieco). Gli SQLi inferenziali possono essere classificati in due sottotipi:
- SQLi basato sul tempo: gli autori degli attacchi inviano una query SQL al database, facendo sì che il database attenda alcuni secondi prima di restituire la query come vera o falsa.
- SQLi booleano: gli autori degli attacchi inviano una query SQL al database, consentendo all'applicazione di rispondere generando un risultato vero o falso.
SQLi fuori banda:
Questo tipo di attacco SQL avviene in due scenari:
- Quando gli autori dell'attacco non sono in grado di utilizzare lo stesso canale per lanciare l'attacco e raccogliere informazioni; oppure
- Quando un server è troppo lento o instabile per eseguire queste azioni.
Impatto degli attacchi SQL injection
Un attacco SQL injection andato a buon fine può avere gravi conseguenze per un'azienda. Questo avviene perché un attacco SQL injection può:
- Esporre dati sensibili. Gli autori degli attacchi possono recuperare dati, con il rischio di esporre i dati sensibili archiviati sul server SQL.
- Compromettere l'integrità dei dati. Gli autori degli attacchi possono modificare o eliminare informazioni dal sistema.
- Compromettere la privacy degli utenti. A seconda dei dati archiviati sul server SQL, un attacco può esporre informazioni sensibili dell'utente, come indirizzi, numeri di telefono e dettagli delle carte di credito.
- Concedere all'autore di un attacco l'accesso al sistema come amministratore. Se un utente del database dispone dei privilegi di amministratore, un aggressore può accedere al sistema utilizzando codice dannoso.
- Concedere a un aggressore l'accesso generale al sistema. Se si usano comandi SQL deboli per controllare nomi utente e password, un aggressore potrebbe accedere al sistema anche senza conoscere le credenziali di un utente e provocare innumerevoli danni accedendo e manipolando informazioni sensibili.
Il costo di un attacco SQL injection non è solo finanziario: può anche comportare la perdita di fiducia dei clienti e danni reputazionali in caso di furto di informazioni personali come nomi, indirizzi, numeri di telefono e carte di credito. Una volta venuta meno la fiducia dei clienti, sarà molto difficile recuperarla.
Esempi di SQL injection
Nel corso degli anni, molte organizzazioni sono state vittime di SQLi. Alcuni esempi di alto profilo:
Fortnite, 2019
Fortnite è un gioco online con oltre 350 milioni di utenti. Nel 2019 è stata scoperta una vulnerabilità SQL injection che poteva consentire agli aggressori di accedere agli account degli utenti. La vulnerabilità è stata corretta.
Cisco, 2018
Nel 2018 è stata rilevata una vulnerabilità SQL injection in Cisco Prime License Manager. La vulnerabilità consentiva agli aggressori di ottenere l'accesso shell ai sistemi in cui era stato distribuito il gestore delle licenze. Da allora Cisco ha corretto la vulnerabilità.
Tesla, 2014
Nel 2014 alcuni ricercatori in ambito di sicurezza hanno annunciato di essere stati in grado di violare il sito Web di Tesla utilizzando attacchi SQL injection, ottenendo privilegi amministrativi e rubando i dati degli utenti.
FAQ sugli attacchi SQL injection
Alcune domande frequenti su SQLi:
Che cos'è un attacco SQL injection?
Un attacco SQL injection utilizza codice SQL dannoso per la manipolazione del database di back-end al fine di accedere a informazioni private. Queste informazioni possono includere dati aziendali sensibili, elenchi di utenti o dettagli sui clienti. SQL sta per "Structured Query Language" (linguaggio di interrogazione strutturato) e SQL injection è talvolta abbreviato in SQLi.
Che cosa fa un attacco SQL injection?
Gli attacchi SQL injection consentono agli aggressori di falsificare l'identità (spoofing), alterare i dati esistenti, divulgare dati sul sistema, distruggere dati o renderli non disponibili e diventare amministratori del server di database. Gli attacchi SQL injection possono causare seri danni alle aziende, inclusa la perdita di fiducia dei clienti in caso di violazione dei dati riservati.
Quanto sono comuni gli attacchi SQL injection?
Poiché sono relativamente facili da attuare e poiché la potenziale ricompensa è elevata, gli attacchi SQL injection sono frequenti. Le statistiche variano, ma si stima che gli attacchi SQL injection comprendano la maggior parte degli attacchi alle applicazioni software. Secondo Open Web Application Security Project, gli attacchi di tipo injection, inclusi gli SQL injection, sono stati la terza fonte di rischio più preoccupante per la sicurezza delle applicazioni Web nel 2021.
Come prevenire gli attacchi SQL injection
Per le aziende interessate alla prevenzione di questi attacchi, i principi di difesa fondamentali per siti Web e applicazioni Web includono:
Formazione del personale: Genera consapevolezza sui rischi da SQLi all'interno del team responsabile dell'applicazione Web e fornisci la necessaria formazione basata sui ruoli a tutti gli utenti.
Tenere sotto controllo l'input dell'utente: Qualsiasi input dell'utente utilizzato in una query SQL introduce rischi. Tratta l'input di utenti autenticati e/o interni allo stesso modo dell'input pubblico fino a quando non viene verificato. Assegna agli account che si connettono al database SQL solo i privilegi minimi necessari. Utilizza whitelist come prassi standard invece delle blacklist per verificare e filtrare l'input dell'utente.
Utilizzare sempre le ultime versioni: È importante utilizzare la versione più recente dell'ambiente di sviluppo per massimizzare la protezione, in quanto le versioni precedenti potrebbero non avere le funzionalità di sicurezza aggiornate. Assicurati di installare il software e le patch di sicurezza più recenti non appena vengono resi disponibili.
Eseguire costantemente la scansione delle applicazioni Web:
Usa strumenti completi di gestione delle prestazioni delle applicazioni. La scansione regolare delle applicazioni Web identificherà e risolverà le potenziali vulnerabilità prima che queste causino danni gravi.
Utilizzare un firewall: Un firewall per applicazioni Web (WAF) viene spesso utilizzato per filtrare SQLi e altre minacce online. Un WAF si basa su un elenco di firme ampio e aggiornato di frequente che gli consente di filtrare le query SQL dannose. L'elenco contiene in genere firme per gestire vettori di attacco specifici ed è regolarmente aggiornato in risposta alle vulnerabilità scoperte di recente.
Prodotti correlati:
- Kaspersky Anti-Virus
- Kaspersky Total Security
- Kaspersky Internet Security
- Kaspersky Password Manager
- Kaspersky Secure Connection
Ulteriori approfondimenti: