I lettori come te aiutano a sostenere MUO. Quando effettui un acquisto utilizzando i link sul nostro sito, potremmo guadagnare una commissione di affiliazione. Per saperne di più.

Se c'è una cosa che i criminali informatici amano, sono i dati. I dati rubati sono molto preziosi sui mercati illeciti e l'accesso a database privati ​​può essere un ottimo modo per gli attori malintenzionati di trarre profitto dalle loro iniziative. Un modo per accedere ai dati privati ​​è tramite un'iniezione SQL. Ma cos'è esattamente un'iniezione SQL, come funziona e si può prevenire un simile attacco?

Che cos'è un'iniezione SQL?

I programmi software si basano sul codice per funzionare. Il codice è anche il linguaggio utilizzato dalle macchine per eseguire operazioni e può presentarsi in molte forme (Python, JavaScript, C++, ecc.). Spesso è attraverso il codice che i criminali informatici possono attaccare le vittime e le iniezioni SQL (o SQLis) non fanno eccezione. Questi consentono agli attori malintenzionati di "iniettare" codice dannoso in un'istruzione SQL.

instagram viewer

Per prima cosa esaminiamo cosa significa SQL.

SQL è l'acronimo di Structured Query Language. Questo è un altro tipo di linguaggio di programmazione specificamente utilizzato quando si tratta di database. Sviluppato negli anni '70 da IBM, SQL può manipolare, archiviare e recuperare le informazioni del database. Molti sistemi di comunicazione di database in tutto il mondo utilizzano SQL, quindi non sorprende che gli attori delle minacce abbiano escogitato modi per abusarne per prendere di mira i database.

Le istruzioni SQL costituiscono una parte fondamentale della comunicazione del database. Un'istruzione SQL è un comando che si presenta in molte forme diverse. Alcuni alterano i dati, altri li recuperano o li eliminano e altri ancora possono modificare la struttura del database stesso. Quando si verifica un'iniezione SQL, il codice dannoso viene iniettato in un'istruzione SQL.

Naturalmente, un sito Web o un'applicazione deve utilizzare il linguaggio di programmazione SQL affinché sia ​​possibile un'iniezione SQL. Ma come funziona questo vettore di attacco?

Supponiamo che tu abbia una normale riga di codice utilizzata da un'applicazione. Quando un criminale informatico inserisce una SQL injection dannosa, viene aggiunta una riga di codice che può interferire con le query che l'applicazione stessa invia al proprio database. In questo modo, il database può essere sfruttato in modo da consentire all'autore della minaccia di visualizzare i dati a cui altrimenti non avrebbe accesso.

Da qui, il criminale informatico potrebbe rubare i dati per sfruttarli direttamente o venderlo sul dark web o altrove. Potrebbero anche alterare, aggiungere o eliminare dati dal database mirato. A seconda del grado dell'attacco SQL injection, potrebbero verificarsi molti danni. Se si accede a dettagli di pagamento, numeri di previdenza sociale o altri tipi di dati privati, molte persone potrebbero essere a rischio di sfruttamento.

D'altra parte, se l'attaccante riesce ad alterare in modo significativo il database, grandi quantità di dati potrebbero andare perdute in modo permanente. Tutto sommato, le iniezioni SQL possono distruggere interi database con un solo attacco. Sebbene esistano dal 1998, sono ancora rilevanti e pericolosi ai giorni nostri.

Come rilevato dal Aprire il progetto di sicurezza delle applicazioni Web (OWASP), 274.000 istanze di SQL injection sono state identificate durante il test delle applicazioni per la presenza di un attacco di questo tipo nel 2021.

I tipi di SQL Injection

Esistono diversi tipi di SQL injection, i tre principali sono blind, in-band e out-of-band injection.

Una SQL injection cieca (o inferenziale) si verifica quando l'applicazione o il sito viene attaccato dal injection, ma le risposte HTTP (Hypertext Transfer Protocol) fornite non contengono il risultato del file Interrogazione SQL. In altre parole, nessun dato del database attaccato viene fornito al criminale informatico. Quindi, qual è il punto di questo?

Utilizzando una blind SQL injection, un utente malintenzionato invia dati al server di destinazione e può quindi discernere alcune cose su un database attraverso la natura della risposta HTTP stessa. Inoltre, i fattori associati alla risposta HTTP possono aiutare l'attaccante a creare un'altra SQL injection più efficace per accedere al database.

Esistono due tipi principali di blind SQL injection, noti come basati sul tempo e booleani. Queste due varianti sono abbastanza simili nella loro natura. Sia un'iniezione SQL booleana che basata sul tempo invia una serie di domande con risposta sì o no, sebbene quest'ultima richiederà al database di attendere un po' prima di rispondere alle query.

Successivamente, ci sono iniezioni SQL in banda. Le iniezioni SQL in banda consentono all'operatore di eseguire l'attacco e ottenere il risultato desiderato utilizzando lo stesso canale. Le iniezioni SQL in banda sono le più comunemente utilizzate, semplicemente perché sono le più facili da eseguire poiché richiedono un solo canale.

Infine, hai un'iniezione SQL fuori banda. Questa è essenzialmente la versione alternativa di un'iniezione SQL in banda, in cui l'attaccante non può eseguire l'attacco in totale utilizzando un singolo canale. In alternativa, un attacco potrebbe dover ricorrere a un'iniezione SQL fuori banda se il server di destinazione semplicemente non è abbastanza veloce da fornire risultati.

Questi fattori rendono il processo un po' più difficile, il che significa che deve fare affidamento su determinate funzionalità per essere attivo sul database di destinazione per avere successo. Ad esempio, la piattaforma attaccata deve presentare una mancanza di sanificazione degli input. Per questo motivo, le iniezioni SQL in banda sono molto più comuni delle iniezioni SQL fuori banda. Ma accadono ancora.

È possibile evitare le SQL Injection?

Le iniezioni SQL sono più una preoccupazione per le aziende e le organizzazioni rispetto ai normali individui. Ma ci sono cose che questi potenziali bersagli possono fare per ridurre la possibilità di essere colpiti da un simile attacco.

La sanificazione dell'input è la pratica comune chiave per evitare le iniezioni SQL. Questo è un processo di filtraggio che scansiona e pulisce l'input di caratteri pericolosi. Se il codice SQL viene elaborato prima di essere disinfettato, la possibilità di un'iniezione SQL aumenterà naturalmente.

Inoltre, le query parametrizzate possono aiutarti a evitare le iniezioni SQL. Si tratta di query che richiedono almeno un parametro per l'esecuzione. L'applicazione dei parametri rende più difficile per i criminali informatici portare a termine con successo un attacco SQL injection.

Ma non esiste un modo infallibile per impedire un'iniezione SQL. Come nel caso di molti attacchi informatici, è praticamente impossibile mantenere i tuoi dispositivi e sistemi totalmente ermetici. Quando si tratta di iniezioni SQL, il meglio che puoi fare è disinfettare tutti gli input e stabilire query parametrizzate.

Le iniezioni SQL sono obsolete, ma rappresentano ancora una minaccia

Sebbene le iniezioni SQL esistano da oltre 20 anni, rappresentano ancora un rischio per molti siti Web e applicazioni. Quindi è una buona idea tenere a mente questa forma di attacco e adottare le misure necessarie per cercare di prevenirlo, in quanto potrebbe rappresentare una minaccia per i tuoi database in futuro.