La tecnica di hacking che sfrutta le vulnerabilità HTML per iniettare pezzi di codice maligno nelle applicazioni web.
Il risultato? L’applicazione viene alterata dall’hacker che ne modifica i comportamenti.

A lungo decantato ma mai compreso: stiamo parlando della tecnica di attacco sql injection e delle sue caratteristiche: ma prima di entrare nei dettagli vogliamo anticiparvi di che cosa parleremo in questo articolo. Partiamo dal presupposto che l’sql injection attack è in grado di permettere all’hacker di leggere dati sensibili provenienti dal database, alterare i dati di un database e eseguire ogni genere di altra operazione sul database.

sql injection di cosa si tratta

Un pericolo davvero incalcolabile

A tal proposito, in questo articolo vi illustreremo tutte le sfaccettature della tecnica di sql injection e perché questo processo è considerato così pericoloso da tutti i titolari di applicazioni e siti web (o almeno così dovrebbe essere).

Oggi, l’SQL Injection è un problema comune legato ai siti web basati su database. La vulnerabilità che lo causa è facilmente individuabile e sfruttabile. Ecco perché qualsiasi sito o software web-based con una base di utenti anche piccolo rischia di essere soggetto a un tentativo di attacco di questo tipo.

Per anticiparvi quanto diremo nei prossimi paragrafi, sappiate che questo difetto dipende dal fatto che SQL non fa alcuna distinzione reale tra i piani di controllo e dati. Ecco di che cosa parleremo in questo articolo.

  1. Definizione di un attacco SQL
  2. Crescita delle vulnerabilità software negli ultimi anni
  3. Come si svolge un attacco SQL Injection
  4. A che cosa serve un attacco di SQL Injection
  5. Tipi di attacco SQL
  6. Sintomi SQL Injection
  7. Come prevenire gli attacchi di SQL Injection
  8. SQL Injection su WordPress: come si possono prevenire
  9. Difendersi da un attacco in corso
  10. Riflessione etica

SQL Injection: panoramica dell’infezione

L’SQL Injection è una tecnica di attacco informatico sfruttata dagli hacker per attaccare le applicazioni web-based e i siti web. La perfetta definizione di attacco SQL injection prevede che l’hacker possa inserire delle istruzione in linguaggio SQL dannoso all’interno dell’applicazione o sito web di riferimento.

L’attacco è ritenuto oltremodo pericoloso per ogni genere di applicazione perché permette all’hacker di ottenere potenzialmente accesso a database di informazioni e di farne ciò che vuole.

Questa tecnica nasce per la prima volta nel 1998 e nel tempo si è scoperto essere calzante verso tutti i tipi di applicazioni.

Avviare un attacco di SQL Injection non richiede particolari tecnologie: sono sufficienti un computer e un qualsiasi browser web, anche uno di quelli che usiamo comunemente anche noi per connetterci al web.

Solitamente, tutte le applicazioni sono a rischio poiché questa tecnica non si lega né ad un particolare linguaggio di programmazione tanto meno ad una specifica categoria di server DB. Ciò nonostante, l’efficacia di un SQL Injection attack cambia a seconda di come è stato scritto il codice del software (sintassi): se u software contiene degli errori di codice sarà più facilmente soggetto ad attacchi di iniezione.

Vulnerabilità software: un fenomeno in netta crescita

Un trend notoriamente colpevole della crescita degli attacchi di SQL Injection è l’aumento delle vulnerabilità software. Secondo le statistiche di CVE, ovvero il dizionario completo di tutte le vulnerabilità o punti deboli noti, segnala che nel 2020 sono state pubblicate oltre 17.000 vulnerabilità di sicurezza. Nel 2019 erano poco più che 16.000.

Di tutte le vulnerabilità rilevate, oltre 400 riguardavano proprio SQL Injection.

Indubbiamente, la situazione ha assunto queste dimensioni anche grazie all’arrivo e alla permanenza della situazione Covid-19 che ha stravolto anche la situazione delle infrastrutture informatiche nelle aziende. In particolare il settore dei software e delle web-app ha pagato quasi cinque volte tanto l’aumento di criticità rispetto ad altre componenti.

Sappiate, che in linea di massima, ogni applicazione o sito web è vulnerabile ad un attacco di SQL Injection.

Questo non significa che non esistano applicazioni sicure. Tuttavia, in fase di sviluppo del codice, molti tecnici tralasciano l’aspetto sicurezza dando luogo al sorgere di vulnerabilità gravi se non opportunamente sistemate.

Dovete pensare che il mercato delle vulnerabilità web (o in generale, le vulnerabilità software) è talmente redditizio che non appena una falla di sicurezza viene scoperta, viene pubblicata su appositi portali o forum e chiunque la può sfruttare per portare un attacco informatico.

Come si svolge un attacco di SQL Injection

Possiamo assolutamente affermare che per portare a compimento un attacco SQL è importante appurare da parte dell’hacker che l’applicazione web da attaccare sia vulnerabile. Normalmente per accedere ad un software web è importante che il database richieda un input da parte dell’utente (ovvero, un’azione).

L’input può essere in questo caso un modulo di login che richiede la compilazione di alcuni campi. Normalmente, un utente inserisce i propri dati (nome utente e password, ad esempio) e il sistema controlla che queste informazioni esistano nel database. Logicamente, all’interno del database esisterà una tabella contenente tutti i nomi utente e tutte le password ad essi assegnate (viene chiamata tabella utenti).

L’hacker cercherà di inserire stringhe di comandi nei campi compilabili del form in modo da inviare al database comandi inconsueti contro la stessa applicazione. L’obbiettivo è far sì che che l’applicazione restituisca un errore o indicazioni di configurazione.

Grazie a questa azione l’hacker riesce a reperire informazioni su:

  1. credenziali di amministrazione;
  2. hashing delle password;
  3. trova informazioni sui punti di accesso tramite la presenza di vulnerabilità: a questo punto l’attacco può proseguire addirittura attraverso la manipolazione degli archivi digitali.

Non scenderemo in ulteriori dettagli tecnici, quello che è importante sottolineare è la natura di un attacco di SQL injection: a fronte di una richiesta specifica dell’hacker, il database colpito restituisce un errore che gli consentirà di violare l’infrastruttura.

sql injection test

A che cosa serve un attacco di SQL Injection

Un attacco di SQL Injection è estremamente utile all’hacker che lo implementa per riuscire ad ottenere l’accesso esteso al database (o back-end del software). Questo significa che il criminale informatico è fermamente interessato a reperire informazioni di carattere sensibile, come l’elenco degli utenti di un sito web, oppure dati finanziari o societari. Nella peggiore delle ipotesi, un attacco informatico di iniezione SQL può portare alla modifica dei dati o alla loro eliminazione.

Sostanzialmente, il risultato di una violazione di un database attraverso la tecnica del SQL Injection sarà:

  • la perdita di riservatezza di alcuni dati;
  • la violazione del sistema di autenticazione;
  • modifica dei permessi di accesso all’interno del database;
  • fuga, furto o manomissione dei contenuti del database.

Tipi di attacco di SQL Injection

Saremo rapidi e indolori, ma un breve elenco delle tipologie di attacchi SQL injection dobbiamo farlo. Esistono sostanzialmente 5 tipi di attacco SQL e si differenzia in base al metodo utilizzato:

#1 SQL Injection basato su UNION

#2 SQL Injection per errori

#3 Blind SQL Injection a tempo

#4 Blind SQL Injection su valori booleani

#5 Out-of-Band SQL Injection

Sintomi di un attacco SQL Injection

I sintomi degli attacchi di SQL injection molto spesso includono:

  • Qualcuno sta tentando di identificare la struttura di una query SQL dinamica, ad esempio il numero di colonne interrogate;
  • La comparsa di una quantità insolita di nuove query, in particolare query strutturate in modo univoco;
  • Accesso alle tabelle che contengono informazioni sulla struttura del database.
sql injection attack web

Prevenire gli attacchi di iniezione SQL

Correggere alcuni funzionamenti di un sito o applicazione web al fine di prevenire un attacco di SQL Injection non è difficile. Al contrario, la corretta e periodica manutenzione (anche lato sicurezza) fanno sì che l’infrastruttura sia al riparo da attacchi.

Uno dei consigli che generalmente diamo ai nostri lettori è quello di monitorare:

  • tutte le applicazioni e i servizi connessi al database;
  • gli aggiornamenti e le patch di sicurezza del database;
  • l’inserimento di servizi di monitoraggio della sicurezza come il Vulnerability Assessment;

Considerato poi, che l’SQL Injection utilizza l’inserimento di codice SQL dinamico, consigliamo a tutti gli sviluppatori, in fase di scrittura e configurazione dell’applicazione di limitare l’inserimento di input da parte dell’utente e inserire appositi filtri dati.

Tuttavia, sappiamo che esistono delle tipologie di attacchi SQL Injection che non servono tanto ad attaccare l’applicazione, quanto più per riuscire ad introdurre dei malware: queste tipologie di virus vengono introdotte all’interno delle pagine web e ogni volta che un visitatore vi accede, il malware si installa sul dispositivo. Il rischio generato da questa presenza è che da quel momento in poi, il malware inizia a registrare cronologia di navigazione, credenziali, informazioni sensibili e addirittura sequenza delle digitazioni sulla tastiera nel caso in cui si trattasse di uno spyware.

Attacchi SQL Injection su WordPress

Parlando di siti web, molti di voi utilizzeranno come CMS proprio WordPress, ebbene, sappiate che esistono attacchi che sfruttano le vulnerabilità SQL anche per questa interfaccia. Ma niente panico, anche su WordPress è possibile difendersi dalla minaccia. Il consiglio è quello di utilizzare sempre plugin e temi aggiornati e possibilmente non di terze parti sconosciute. Considerate che se lo sviluppo di alcuni plugin si è bloccato, potrebbe non essere una buona idea utilizzarli sul vostro sito web.

Dal momento che interagite con il vostro database, il consiglio che vi diamo è quello di utilizzare sempre le funzioni native del CMS perché già di per sé protette da eventuali vulnerabilità da SQL Injection.

Al contrario se parliamo di

Protezione di un sito WordPress

pensiamo che la piattaforma WordPress già di per sé è sostanzialmente sicura. Tuttavia, all’interno del sito possono esserci funzioni, plugin e configurazioni obsolete inserite dallo sviluppatore.
A tal proposito, noi di Onorato Informatica, consigliamo sempre di eseguire un Web Venerability Assessment. Prendiamo coscienza che i tipi di vulnerabilità più popolari nei plugin di WordPress sono Cross-site Scripting e SQL Injection.

Come difendersi dall’SQL Injection

Non ci dilungheremo in spiegazioni tecniche, preferiamo indicarvi in modo schematico quali sono le indicazioni di massima per la difesa da attacchi di injection.

Eccovi dunque le nostre proposte:

  • Usare possibilmente solo query parametrizzate, stored procedure, librerie ORM (object-relational mapping) che generano a loro volta statement SQL parametrizzati;
  • Validare sempre l’input: tipologia di dato, lunghezza massima, formato accettato, contenuto;
  • Fornire all’applicazione un account utente di database limitato per diminuirne le possibilità di manovra;
  • Non fornire informazioni utili agli attaccanti, ovvero, non visualizzare gli errori di dettaglio sulle pagine web ma reindirizzare l’utente a una pagina di atterraggio più generica;
  • Rimuovere qualsiasi vecchio codice che non venga usato;
  • Aggiorna il software per assicurarti che tutte le patch più recenti vengano applicate;
  • In base all’architettura applicativa ragionare su come potrebbe essere utilizzata per un attacco (e per questo consigliamo di rivolgervi a specialisti cyber security);
  • Predisponete dei sistemi di difesa dell’applicazione/sito dall’esterno.

Attacchi SQL Injection: una breve riflessione etica

Quando qualcuno trova una vulnerabilità su una piattaforma e la sfrutta per entrare in contatto con le informazioni aziendali si parla di reato.

Il parallelismo che vogliamo proporvi è il seguente: lasciare la vostra auto aperta con all’interno le chiavi inserite per poi scoprire che l’auto vi è stata rubata è un reato? Ovviamente sì! Si tratta comunque di furto o accesso a dati altrui.

Se possedete dei siti web o delle applicazioni web sappiate che in media, ogni giorno vengono violati oltre 30.000 siti web secondo Forbes.
Non esiste una soluzione miracolosa su come prevenire gli attacchi di iniezione codice SQL . In questo articolo, abbiamo utilizzato un approccio che chiunque possieda un sito web o un applicazione possa adottare, in combinazione con altre misure di sicurezza strutturate chiaramente.