L’iniezione SQL è la tecnica che consiste nell’inserire comandi SQL completi o "partial" nei campi dati forniti dall’utente delle applicazioni web e nell’inviarli per l’esecuzione da parte del server di database.
Per dirla più semplicemente, l'SQL injection si verifica quando un attore dannoso riesce a iniettare codice dannoso in un'applicazione a causa di codice scritto male nell'applicazione.
Come funziona un attacco injection?
Le aziende usano campi come moduli di contatto, moduli di feedback, moduli di checkout e barre di ricerca per interagire con l'utente del sito web. Questi campi consentono all'utente di inviare legittimamente informazioni al database dell'azienda e di recuperarle. Questa “linea aperta” tra utente e database è soggetta a SQL injection.
Se il campo è codificato in modo errato, un hacker può usarlo per inserire comandi SQL dannosi. Il codice iniettato può indurre il database a eseguire i comandi dell’hacker, che possono estrarre informazioni private e modificare o danneggiare le tabelle del database. Il contenuto dinamico, così come i campi, è soggetto a SQL injection.
Quali passaggi compie un hacker in un attacco injection?
L’hacker inserisce un comando SQL manipolato nel campo del modulo
Un database non sicuro considera valida questa query
L'hacker riceve una risposta dal database contenente informazioni sensibili
L'hacker ottiene informazioni (come il nome della tabella) per comprendere la struttura del database
L’hacker modifica i dati nel database in modo dannoso
Tipi di SQL injection
Esistono tre categorie di SQL injection:
SQL injection (SQLi) inferenziale (blind)
In un attacco SQL blind, l'hacker invia dati al server e ne osserva il comportamento in risposta. L’hacker può raccogliere informazioni in base alla risposta del database alle richiesta/prompt degli hacker e dedurre informazioni critiche sul database. Con un'osservazione sufficiente, l'hacker è in grado di farsi un quadro del database e di come è costruito, contribuendo a capire come sfruttare l'exploit al meglio. Questo tipo di injection è “bind” perché l’hacker non è in grado di vedere effettivamente all’interno del database.
SQL injection in-band
Conosciuto anche come SQL injection classica, in un attacco injection SQL in-band, l’hacker ottiene il risultato nello stesso “canale” in cui ha lanciato l’attacco. Ad esempio, supponiamo che un hacker esegua un'iniezione SQL su un browser web; l'hacker riceverà i risultati di quell'attacco nella stessa posizione (il browser web).
SQL injection out-of-band
In un attacco SQL injection out-of-band, l'hacker non ottiene il proprio risultato (risposta) dall'applicazione sotto attacco sullo stesso «canale» del proprio attacco. L'attacco invece forza l'applicazione a inviare dati a un endpoint remoto. Questo endpoint è sotto il controllo dell’hacker, consentendogli così di accedere alla risposta dell’applicazione.
Esempio di SQL injection
Quando un utente invia le credenziali in una pagina di accesso, l’applicazione web le utilizza in una query SQL che viene inviata al database per l’esecuzione. Se il nome utente e la password inviati sono validi, l'utente ottiene l'accesso. Supponendo che il nome utente sia ‘user1’ e la password sia ‘pass123’, l’applicazione web invia al database la seguente query SQL per la verifica:
SELECT * FROM utente WHERE name = 'user1' AND password = 'pass123'
Invece di usare un nome utente valido, un hacker inserisce “test’ OR “1 = 1–” come nome utente e qualsiasi cosa come password. Questa query SQL arbitraria restituirà un valore vero. La query arbitraria si presenta così:
SELECT * FROM Users WHERE name = 'test' OR 1 = 1 --' AND password = 'xxxxx'
Dopo aver inserito la query, l'hacker ottiene l'accesso a una sessione con accesso effettuato senza password. L'hacker ruba quindi dati o manipola i database del sito web.
Come prevenire gli attacchi SQL
Un hacker che ottiene l’accesso amministrativo a un database rappresenta un breach della sicurezza estremo che l’SQL injection rende possibile. Attraverso questo tipo di attacco, un hacker può modificare o eliminare parti dell'intero database. L'hacker può anche lanciare attacchi da un server compromesso e accedere alle informazioni riservate archiviate nel database. È possibile prevenire questa grave minaccia alla sicurezza codificando correttamente i campi e aggiornando il software del server con le patch più recenti.
Strumenti come il Next-Gen WAF di Fastly, con il suo motore di rilevamento proprietario, SmartParse, prendono decisioni istantanee in linea per determinare se sono presenti payload dannosi o anomali. SmartParse elimina la necessità di usare regex e di una configurazione manuale intensiva.
Puoi saperne di più su come prevenire gli attacchi SQL injection e altri attacchi OWASP Top 10 con Fastly qui.