SQL Injection

Sommario: L'SQL injection (SQLi) è una delle vulnerabilità di sicurezza più pericolose che affliggono oggi le applicazioni web. Sfruttando le falle dell'SQL injection, gli aggressori possono ottenere l'accesso non autorizzato a dati sensibili, inclusi record dei clienti, password e dettagli delle carte di credito. In alcuni casi, gli aggressori possono sfruttare SQLi per ottenere il pieno controllo dei server interessati.

L'SQL injection (SQLi) è una delle vulnerabilità di sicurezza più pericolose che affliggono oggi le applicazioni web. Sfruttando le falle dell'SQL injection, gli aggressori possono ottenere l'accesso non autorizzato a dati sensibili, inclusi record dei clienti, password e dettagli delle carte di credito. In alcuni casi, gli aggressori possono sfruttare SQLi per ottenere il pieno controllo dei server interessati.

In questa guida completa, tratteremo tutto ciò che devi sapere sull'SQL injection, tra cui:

  • Cos'è SQL Injection e come funziona?
  • Impatti nel mondo reale degli attacchi SQL Injection
  • Rilevamento delle vulnerabilità di SQL Injection
  • Sfruttare i difetti comuni dell'SQL Injection
  • Tecniche di Blind SQL Injection
  • Concetti avanzati di SQL Injection
  • Prevenire gli attacchi SQL Injection
  • Correzione dei difetti di SQL Injection esistenti

Grazie a queste conoscenze, avrai una solida base per rilevare, sfruttare, prevenire e correggere le vulnerabilità SQL injection nelle tue applicazioni web.

Cos'è SQL Injection e come funziona?

SQL injection o SQLi si riferisce a una classe di attacchi di code injection che prendono di mira i database dietro le applicazioni web. Utilizzando una sintassi SQL dannosa, gli aggressori mirano a sfruttare i punti deboli nel modo in cui i dati inviati dagli utenti vengono incorporati nelle query SQL.

Gli attacchi SQLi riusciti consentono agli aggressori di:

  • Visualizza, aggiungi, modifica ed elimina dati non autorizzati
  • Accedi ad altre informazioni del database come i dettagli dello schema
  • Esegui attacchi di negazione del servizio
  • Stabilisci l'accesso backdoor ai server compromessi

L'SQL injection sfrutta i punti deboli nel modo in cui vengono gestiti i dati di input controllabili dall'utente durante la creazione di query SQL. Ad esempio, considera il seguente pseudocodice vulnerabile che costruisce una query SQL utilizzando la concatenazione di stringhe dell'input dell'utente:

string query = "SELECT * FROM users WHERE name = '" + userName + "';";

In questo caso, la variabile userName viene incorporata direttamente in una query SQL senza alcuna convalida o escape. Un utente malintenzionato può manipolare questo input per interferire con la struttura e la logica della query. Ad esempio, l'invio di un nome utente di a' OR 1=1– darebbe come risultato la query:

SELECT * FROM users WHERE name = 'a' OR 1=1--';

La sequenza — indica che tutto ciò che segue è un commento. Vengono restituiti tutti i record utente, poiché la condizione OR 1=1 è sempre vera. Le virgolette singole attorno all'input vengono chiuse e la sequenza di commenti inserita evita un errore di sintassi.

Manipolando la query in questo modo, gli aggressori possono recuperare dati a cui non dovrebbero avere accesso. Possono anche sovvertire la logica dell'applicazione, aggirare i controlli di sicurezza e altro ancora. Gli attacchi SQLi possono essere utilizzati per sfruttare le vulnerabilità in SELECT, INSERT, UPDATE e altri tipi di istruzioni SQL a seconda del contesto.

Impatti nel mondo reale degli attacchi SQL Injection

Anche se l'iniezione SQL sembra di natura altamente tecnica, uno sfruttamento riuscito può avere impatti devastanti nel mondo reale, tra cui:

  • Accesso non autorizzato a dati sensibili: record dei clienti, password, informazioni finanziarie, dati sanitari e altro ancora potrebbero essere accessibili agli aggressori dopo lo sfruttamento. Ciò può portare al furto di identità, alla frode finanziaria o alla criminalità informatica mirata.
  • Danni alla reputazione: le violazioni dei dati di alto profilo guidate da SQLi spesso attirano l’attenzione indesiderata dei media. Il danno che ne deriva alla reputazione del marchio e alla fiducia del pubblico può essere immenso.
  • Non conformità normativa: a seguito di un dato violazione, le aziende potrebbero dover affrontare sanzioni normative, contenziosi e una maggiore supervisione a causa di violazioni delle leggi sulla protezione dei dati.
  • Compromissione dei server: in alcuni casi, gli aggressori possono compromettere completamente i server backend tramite il solo SQLi o utilizzando SQLi per aprire la strada a exploit a livello del sistema operativo.
  • Interruzione dell'attività: gli aggressori a volte eliminano o modificano i dati dei clienti e altre informazioni critiche per l'azienda. Ciò può portare a tempi di inattività, perdita di entrate, costi di ripristino e riduzione della produttività.

Famosi esempi reali di attacchi SQLi ad alto impatto includono l'hacking di Sony Pictures, la violazione dei dati di British Airways e numerosi altri incidenti di sicurezza informatica che hanno fatto notizia.

Rilevamento delle vulnerabilità di SQL Injection

Il primo passo verso la gestione del rischio SQLi è identificare le vulnerabilità all'interno delle tue applicazioni web. Esistono due approcci principali per rilevare i difetti SQLi:

  • Scansione automatizzata: Strumenti come Burp Suite Scanner automatizzano il processo di indagine e conferma dei bug SQLi. Gli scanner eseguono la scansione della tua app alla ricerca di punti di iniezione, testano i payload e analizzano le risposte per rilevare potenziali vulnerabilità. La scansione automatizzata fornisce una copertura completa in modo rapido e affidabile.
  • Test manuali: i tester di sicurezza esperti possono anche identificare SQLi manualmente utilizzando test sistematici. Ciò comporta l’invio di payload dannosi nei punti di iniezione e l’analisi di eventuali differenze nel comportamento delle applicazioni. I test manuali forniscono precisione, versatilità e informazioni approfondite che integrano la scansione automatizzata.

Sia nei test manuali che in quelli automatizzati, stai principalmente cercando di vedere se i tuoi dati dannosi sono in grado di influenzare in qualche modo la struttura e la logica delle query SQL di backend. Alcuni esempi di payload di test dannosi includono:

  • Virgolette: utilizzate per uscire dal contesto dei dati
  • Commenti SQL: utilizzati per troncare le query
  • Modificatori logici: utilizzati per alterare la logica della query, ad es. OPPURE 1=1
  • Query di unione: utilizzate per recuperare dati da altre tabelle
  • Errori condizionali: utilizzati per attivare differenze nel comportamento

I payload potrebbero richiedere modifiche e perfezionamenti a seconda del database backend, del contesto e del comportamento dell'applicazione. L'acquisizione delle impronte digitali del database tramite l'acquisizione di banner e altre tecniche fornisce informazioni su come ottimizzare il tuo attacco.

Sfruttare SQL Iniezione

Le vulnerabilità SQLi generalmente rientrano in tre categorie in base a dove i dati non attendibili entrano in una query SQL:

  1. SQLi in banda: messaggi di errore, dati e altri canali di feedback in primo piano mostrano chiaramente i risultati del tuo exploit. Ciò consente una semplice estrazione dei dati, modifiche delle query e altri attacchi.
  2. SQLi cieco/inferenza: il canale di feedback dell'app non rivela risultati o errori delle query. È necessario dedurre il successo in base a fattori come ritardi temporali o attivazione di errori condizionali. Più lavoro ma può essere ugualmente devastante.
  3. SQLi di secondo ordine: l'app non è direttamente vulnerabile, ma memorizza i dati dell'utente che vengono successivamente incorporati in una query vulnerabile a valle. Anche più difficile da sfruttare, ma si trova spesso in natura.

I difetti SQLi in banda o non ciechi sono più facili da rilevare e sfruttare. Tuttavia, anche l'SQLi cieco e di secondo ordine può essere sfruttato in modo affidabile utilizzando l'inferenza e altre tecniche avanzate.

Alcuni esempi comuni di vulnerabilità SQLi sfruttabili includono:

  • Recupero di dati nascosti: utilizzo di commenti o altre tecniche per aggirare i controlli di sicurezza ed estrarre dati non autorizzati.
  • Sovversione della logica: alterazione della logica delle query per aggirare l'autenticazione, visualizzare contenuti nascosti o condurre operazioni non autorizzate.
  • Attacchi UNION: query di avvelenamento per unire risultati aggiuntivi da altre tabelle.
  • Esame della struttura del database: identificazione di tabelle, colonne, indici e altri metadati tramite injection.
  • Scrittura di file: in alcuni casi, potresti essere in grado di scrivere file dannosi contenenti risultati di query tramite UDF o altri metodi.
  • Esecuzione dei comandi: i vettori rari ma più devastanti consentono l'esecuzione arbitraria di comandi del sistema operativo sul server del database.

Le tecniche specifiche di sfruttamento che è possibile eseguire dipendono dal tipo di istruzione (SELECT, INSERT e così via), dal back-end del database e da altri fattori. Con abilità ed esperienza, gli aggressori possono condurre complessi attacchi SQLi multifase per compromettere profondamente le applicazioni.

Tecniche di Blind SQL Injection

SQLi cieco o inferenziale si verifica quando l'app non restituisce risultati di query SQL o messaggi di errore. Senza questo feedback in primo piano, è necessario utilizzare tecniche cieche per comprendere i risultati delle iniezioni. Tre tattiche principali sono:

  • Errori condizionali: inserisci payload come OR 1=1 vs OR 1=2 e osserva le differenze di comportamento quando la condizione logica cambia.
  • Ritardi temporali: introdurre chiamate di funzioni come il comando SQL WAITFOR DELAY e monitorare le differenze temporali che rivelano il ramo logico preso.
  • Canale fuori banda: utilizza query SQL per attivare richieste in uscita verso i sistemi che controlli, consentendo l'esfiltrazione dei dati su un canale alternativo.

Blind SQLi richiede uno sforzo maggiore per testare manualmente e sviluppare exploit automatizzati. Tuttavia, gli stessi attacchi devastanti sono possibili. Le tecniche cieche sono utili anche per eludere i filtri protettivi alla ricerca dei consueti tratti distintivi di SQLi.

Concetti avanzati di SQL Injection

Oltre alle tecniche SQLi di base, gli aggressori utilizzano varie tattiche avanzate, tra cui:

  • Codifica shellcode: quando è possibile l'esecuzione dei comandi, gli aggressori codificano lo shellcode per eludere i filtri alla ricerca di parole chiave pericolose.
  • Caso Snake: la modifica delle maiuscole a volte può aggirare i filtri di input difensivi. Ad esempio, SeLeCt invece di SELECT.
  • Query annidate: potenzialmente una query eseguita all'interno di un'altra per ridurre la sintassi dannosa.
  • Contrabbando SQL: terminare un'istruzione e iniziarne un'altra per confondere gli strumenti difensivi.
  • Troncamento SQL: l'interruzione prematura delle query a volte può ridurre la sintassi dannosa.
  • Query dinamiche: la creazione dinamica di query tramite concatenazione di stringhe può evitare parole chiave.
  • Procedure memorizzate: l'esecuzione di procedure memorizzate con argomenti dannosi può fornire vettori SQLi.
  • Second Order Injection: come descritto in precedenza, questa tecnica concatena vulnerabilità separate che possono estendersi a codice scritto in linguaggi diversi.

Queste e altre tattiche avanzate vengono impiegate quando i tentativi SQLi di base vengono contrastati da filtri difensivi. Concatenando più tecniche, gli aggressori più abili possono spesso trovare il modo di aggirare uno o più livelli di difesa.

Prevenire gli attacchi SQL Injection

Considerati gli impatti devastanti e la vulnerabilità diffusa, un’efficace prevenzione dell’SQL injection è fondamentale:

  • Query con parametri/istruzioni preparate: questo metodo è altamente consigliato e impedisce la maggior parte degli SQLi, inclusi quelli ciechi e di secondo ordine. I valori rimangono separati dalla logica della query.
  • Convalida dell'input: liste bianche, liste nere e sanificazione possono aiutare, ma non dovrebbero essere affidate esclusivamente a loro. Facilmente bypassabile.
  • Privilegio minimo: riduce le autorizzazioni dell'account del database al minimo assoluto richiesto per il normale funzionamento.
  • Messaggi di errore: non divulgare agli utenti analisi dello stack, metadati del database o altri messaggi di debug.
  • Regole WAF: le regole firewall generiche e personalizzate per le app Web possono bloccare gli attacchi comuni, ma gli aggressori esperti possono spesso eluderli.

La parametrizzazione impedisce completamente SQLi nella maggior parte dei casi, mentre le altre difese generalmente rendono più difficile lo sfruttamento efficace. Per una protezione ottimale, implementa difese SQLi a più livelli che coprano i livelli di app, rete e database.

Correzione dei difetti di SQL Injection esistenti

Se erediti app con vulnerabilità SQLi esistenti, la priorità della riparazione dovrebbe essere assegnata in base al rischio:

  • Applicazione di patch: correggi i difetti SQLi passando alle query con parametri come prima priorità. Applicare difese aggiuntive come la convalida dell'input come misure di sicurezza.
  • Isolamento: segmenta i sistemi vulnerabili lontano dalle risorse di dati sensibili a cui non hanno bisogno di accedere. Ciò può limitare i danni derivanti da SQLi senza patch.
  • Monitoraggio: stabilisci registrazioni, avvisi e altro monitoraggio in modo da rilevare gli attacchi contro i difetti persistenti il ​​più rapidamente possibile.
  • Rafforzamento: rafforza le configurazioni del database rimuovendo/revocando privilegi non necessari, abilitando la registrazione, limitando l'accesso ai dati e altri mezzi.
  • Smantellamento: come ultima risorsa, ritirare o smantellare in modo sicuro le applicazioni irrisolvibili che comportano un livello inaccettabile di rischio SQLi.

Adottando un approccio di riparazione graduale e basato sul rischio, le organizzazioni possono eliminare le vulnerabilità SQLi nel tempo in modo controllato.

Conclusione

Con oltre un decennio di attacchi nel mondo reale, l’SQL injection rimane uno dei difetti delle applicazioni web più pericolosi e diffusi. Questa guida completa ha fornito a ingegneri del software, professionisti della sicurezza e altri soggetti le conoscenze fondamentali per rilevare, sfruttare, prevenire e risolvere questa importante classe di vulnerabilità. Applica i concetti qui presentati per proteggere i dati della tua organizzazione dalla compromissione tramite SQLi e attacchi correlati.

Condividi questo documento

SQL Injection

Oppure copia il link

INDICE