Iniezione SQL: come funziona e come prevenirla

Cybersecurity Content Writer

Gli hacker possono prendere il controllo di un intero sito con poche stringhe di codice? Un'iniezione SQL consente agli hacker di spiare i database e rubare qualsiasi tipo di informazione, dalle credenziali amministrative ai dati delle carte di credito dei clienti.

Se un sito web o un'app presentano punti deboli a livello di programmazione, un hacker può estrarre informazioni altamente riservate.

Che cos'è un'iniezione SQL e come si può prevenire?

Cos'è l'SQL?

L'SQL è un linguaggio di codifica principalmente utilizzato per recuperare informazioni dai database online. È molto facile da usare: è intuitivo e i comandi sono termini inglesi piuttosto semplici.

Ad esempio, immagina che un utente faccia acquisti online e digiti la parola "scarpe" nella barra di ricerca di un sito e-commerce. Premendo Invio, dà inizio a un semplice processo informatico.

Il sito web utilizza un sistema di gestione dei database (DBMS) che, a sua volta, esegue una qualche forma di SQL. Quando il cliente cerca "scarpe", viene creata una stringa di codice che utilizza quel linguaggio. Si tratta della cosiddetta query SQL.

Questa contiene alcune indicazioni, ad esempio dove cercare e cosa recuperare, e dovrebbe avere un aspetto del genere:

SELECT name, description FROM products WHERE category = “shoes”

Quando la query raggiunge il database, il sistema DBMS la legge e capisce che deve cercare nella tabella "prodotti". Può quindi recuperare i nomi e le descrizioni degli articoli nella categoria "scarpe" e inviarli al cliente. Se trova dieci articoli, invierà dieci nomi e le relative descrizioni.

Come abbiamo già detto, si tratta di un processo semplice. Tuttavia, è proprio qui che possono iniziare i guai.

Cos'è l'iniezione SQL

Un hacker, infatti, potrebbe inserire un codice aggiuntivo nella stringa SQL ed eseguire la cosiddetta iniezione.

Fortunatamente, non sempre funziona. Il DBMS del sito interpreta alcuni caratteri come comandi di codifica (ad esempio, SELECT) e altri come parole e caratteri normali (in questo caso , "scarpe").

Se un sito è stato programmato correttamente, la ricerca di un comando di codifica non comporterà un'iniezione. Al contrario, il sistema leggerà il comando come un insieme di caratteri che non riconosce e invierà un messaggio del tipo "nessun elemento trovato".

Tuttavia, se il sistema non è stato adeguatamente protetto, interpreterà i caratteri inseriti come un vero comando SQL. Ed è proprio qui che le cose possono andare male.

Invece di usare la parola chiave "scarpe", l'hacker potrebbe cercare comandi SQL specifici. Quando la stringa viene formata e inviata al database, il DBMS legge la parola chiave cercata come comando e la esegue di conseguenza.

Il danno

Utilizzando una tecnica chiamata iniezione SQL cieca, un hacker può capire rapidamente e con esattezza quale DBMS viene gestito dietro le quinte e utilizzare di conseguenza il linguaggio SQL più appropriato.

Se cerca i termini di codifica giusti, può forzare il DBMS a restituire l'elenco completo delle tabelle di dati che contiene. Dopodiché, può accedere a ognuna di esse ed estrarre le informazioni desiderate. Se trova una tabella denominata "user", può provocare danni davvero gravi.

UNION è un comando di codifica che consente di aggiungere una query supplementare a quella principale. I risultati di questa "sottoquery" appariranno sotto i risultati della query principale.

Un hacker potrebbe scrivere nella barra di ricerca qualcosa del genere:

“shoes” UNION (SELECT username, password FROM users);--"

Dietro le quinte, verrebbe generata una stringa SQL che potrebbe avere questo aspetto:

SELECT name, description FROM products WHERE category = “shoes” UNION (SELECT username, password FROM users);--

A questo punto, oltre ai risultati per la parola chiave "scarpe", l'hacker potrà visualizzare tutti i nomi utente e le password presenti nella tabella "users".

Anche se le password sono crittografate, non ci metterà molto a decifrarle. Se riesce a capire quali nomi utente appartengono agli amministratori, può anche utilizzare un software di brute-forcing per entrare rapidamente nell'account in questione e ottenere l'accesso all'applicazione in qualità di amministratore.

Tipologie di iniezioni SQL

Per aiutarti a rendere più solide le tue difese, prima di tutto dobbiamo esaminare nel dettaglio i diversi tipi di attacchi di iniezione SQL e comprendere in modo più approfondito questa categoria di minacce informatiche.

1. Iniezione SQL classica

L'iniezione SQL di tipo classico, altresì nota come iniezione SQL in-band, è la forma più diffusa di questo attacco informatico. Inserendo dei codici SQL dannosi nei campi di input degli utenti, i malintenzionati ottengono un accesso non autorizzato che consente loro di manipolare, eliminare o addirittura eseguire comandi di amministrazione sul database colpito. È fondamentale essere al corrente di questa minaccia comune e adottare le misure necessarie per prevenirla.

2. Iniezione SQL cieca

Gli attacchi di iniezione SQL cieca, come suggerisce il nome, implicano che i criminali informatici debbano procedere per tentativi, senza il privilegio dell'accesso diretto all'output del database. Nella maggior parte dei casi, i malintenzionati che perpetrano un attacco SQL cieco ricorrono a una serie di query vere e false per raccogliere informazioni. Questo modo di operare consente ai criminali di dedurre lo schema e i contenuti di un database, un pezzo alla volta.

3. Iniezione SQL basata su errori

Le iniezioni SQL basate su errori sfruttano i messaggi di errore del database per far emergere informazioni sensibili. Gli aggressori che perpetrano questi attacchi inviano intenzionalmente delle query SQL formulate in modo non corretto, inducendo così il database a generare messaggi di errore che contengono preziose informazioni. Analizzando minuziosamente questi messaggi, i criminali informatici possono arrivare a comprendere il funzionamento interno del sistema e identificarne le potenziali vulnerabilità.

4. Iniezione SQL cieca basata sul tempo

Le iniezioni SQL cieche basate sul tempo sono una tipologia più specifica dell'attacco di iniezione SQL cieca. I criminali informatici che conducono attacchi SQL ciechi basati sul tempo si concentrano sul tempo di risposta del database al fine di dedurre informazioni. Inviando delle query SQL che causano ritardi nella risposta, sono in grado di ottenere dettagli specifici sul database a seconda del tempo necessario per ricevere tali risposte.

5. Iniezione SQL out-of-band

Gli attacchi di iniezione SQL out-of-band utilizzano un canale di comunicazione separato per inviare e ricevere dati, invece del canale diretto tra l'applicazione e il database. Questo metodo di attacco, meno comune ma potente, consente ai malintenzionati di aggirare specifiche misure di sicurezza come firewall e sistemi di rilevamento delle intrusioni, al fine di conseguire i propri obiettivi dannosi.

Gli attacchi da iniezione SQL comportano una serie di minacce alla sicurezza dell'azienda colpita. Una volta che i cybercriminali riescono a sfruttare una vulnerabilità, possono:

  • Aggiungere, rimuovere o modificare i contenuti dei database.
  • Scrivere nuovi file nei database.
  • Leggere il codice sorgente del server dei database.

Tali capacità di accesso possono persino portare alla completa acquisizione dei database e del server, che, come si può immaginare, può essere disastrosa.

Come prevenire l'iniezione SQL

Un'iniezione SQL andata a buon fine può provocare danni enormi. Un hacker può rubare password e dati di pagamento, far trapelare online le informazioni degli utenti e cancellare dati importanti. Un evento del genere può far perdere la fiducia dei consumatori in modo irreversibile. Come si può prevenire?

  • Convalida dell'input

    Mettendo a punto un processo di convalida degli input nella codifica backend del tuo sito, puoi fare molto per ridurre questo tipo di minaccia. Puoi creare un elenco di caratteri consentiti e programmare il DBMS affinché riconosca se una parola chiave non è presente nell'elenco. Se un hacker "cerca" un comando di codifica, il sistema lo confronterà con l'elenco degli elementi consentiti. In caso di mancata corrispondenza, il codice non verrà eseguito.

  • Istruzioni preparate

    Creare istruzioni preparate è probabilmente la strategia migliore. Un sito vulnerabile crea una nuova stringa SQL ogni volta che l'hacker esegue una ricerca, ma con un'istruzione preparata non è così. Quando programmi il backend del sito, crea i modelli SQL in anticipo, con un punto interrogativo al posto della parola chiave. Il DBMS può essere programmato per leggere quel punto interrogativo come qualsiasi dato si trovi nella barra di ricerca, ma la query in sé è già pronta. Questo riduce drasticamente il rischio che un comando SQL pericoloso raggiunga il database.

  • Segregazione dei dati

    Più i tuoi dati sono segregati e meno un hacker potrà sottrarne nell'ambito di un singolo attacco. Nell'esempio del negozio online di cui abbiamo parlato in precedenza, il problema della debolezza SQL è pesantemente aggravato dal fatto che i dati degli utenti sono contenuti nello stesso database in cui figurano gli elenchi dei prodotti di base. La separazione di diversi tipi di informazioni all'interno di database e server distinti limita l'entità dei danni che un attacco SQL è in grado di arrecare.

  • Utilizza le tecnologie più recenti

    Assicurati di utilizzare sempre le versioni più aggiornate degli strumenti di sviluppo per garantire il massimo livello di sicurezza. Le tecnologie di sviluppo web meno recenti potrebbero non disporre di protezione SQL o presentare potenziali vulnerabilità di cui i malintenzionati potrebbero approfittare. Assicurati di mantenere aggiornati i componenti software che potresti utilizzare per lo sviluppo, dal momento che gli aggiornamenti vengono messi a punto proprio per risolvere i bug e i potenziali problemi di sicurezza.

Iscriviti alla newsletter di NordPass

Ricevi le ultime notizie e i suggerimenti di NordPass direttamente nella tua casella di posta.