Sql-Injection

SQL injection non è propriamente un virus ma una tecnica di Code Injection. Ossia come potete facilmente capire di codice iniettato all’interno della vostra applicazione sito web oppure direttamente nel vostro database.
Sql Injection trova la sua forza nella vulnerabilità del vostro sistema di sicurezza. Un tipico esempio di questo tipo di attacco informatico è quando il vostro sistema non è correttamente filtrato. Per esempio con gli escape nelle query SQL, o tipizzato ad esempio si cerca di forzare l’introduzione di una stringa dove il campo è un integere.

 

Tipologia di attacco Sql Injection

Sql-Injection
L’attacco sql injection va di pari passo con lo spoof identity per modificare dati esistenti vedi transazioni . Tipico esempio manipolare un database server per ottenerne le credenziali.
Da quando si è osservato il primo tipo di attacco di questo tipo si è assistito ad una crescita esponenziale. Tipicamente questa tecnica è utilizzata nei siti di grandi aziende.

Al momento i siti poco più che amatariali e i blog WordPress non sembrano essere particolarmente interessati a questa piaga.
Quindi in conclusione Sql Iniection non è un virus classico, ma l’introduzione di un codice malevolo al fine di entrare nel database del vostro sistema. O cmq accedere ai dati sensibili.

Esempio Sql Injection al database SQL

Vediamo alcuni esempi. Prendiamo in considerazione le Query Sql al vostro database.

Un programmatore potrebbe scrivere una query del tipo per poi fare delle istruzioni condizionali per vedere se l’utente in questione ha le credenziali per accedere al vostro sito.

"SELECT * FROM utente WHERE name = '" + nome_utente + "';"

Come potete vedere una normalissima query di accesso ai dati. Il malenintenzionato potrebbe riscrivere la query nel seguente modo.

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

e ovviamente la OR 1 uguale 1 farebbe in modo tale che avrebbe sempre accesso ai dati del tabase.

Un altro tipo di attacco molto utilizzato è invece aggiungere alla query sopra il codice

DROP TABLE users;

In questo caso perderete tutti i dati del vostro database. Per questo motivo è sempre di buon conto fare delle copie.

Blind SQL injection

Una diciamo sottotecnica di quella principale è la Blind. Questa tecnica non attacca specificatamente la tabella utente per reperire i dati sull’autenticazione ma una tabella specifica.
Pensate ad esempio ad un sito di prenotazioni e ad una query del tipo

SELECT * FROM bookreviews WHERE ID = 'Value(ID)';

L’hacherk invece che l’url tradizionale invocherà il seguente

http://prenotazioni.albergo.com/showReview.php?ID=5 AND 1=1

E dopo aggiungerà altro codice tipo Drop come visto sopra oppure potrebbe mettere

http://prenotazioni.albergo.com/showReview.php?ID=5 AND 1=2

Per non fare funzionare il sito o altre combinazioni ancora.

Come prevenire gli attacchi Sql Injection

C’è da dire che questi attacchi una volta individuati sono facilmente prevenibili. Insomma non occorrono particolari algoritmi di case di antivirus che si occupano di euristica.

I metodi sono abbastanza semplici. In primo luogo settate i giusti permessi nelle vostre cartelle . Ossia evitate il 777 se proprio non necessita. Comprendo che è semplice e comodo , ma purtroppo è la via privilegiata d’accesso a chi vuole eseguire un attacco malevolo.
Tenere sempre aggiornata la versione di linguaggio di programmazione che state usando.

Ma sopratutto prendere le giuste contromisure.
Ossia se vi aspettate di leggere un numero , controllate che state ricevendo veramente un numero e non altro…

Ogni qual volta che inserite una stringa nel database mettete sempre gli escape.

$mysqli->real_escape_string($username),

Un altro rimedio è limitare i permessi di accesso a determinati file ad alcune tabelle. Per esempio da un file di lettura delle prenotazioni non ci si aspetta che legga gli utenti e quindi blocchiamo al file l’accesso alla tabella utenti.

Tecniche sofisticate per prevenire gli attacchi Sql Injection

Sicuramente fra le tecniche più sofisticate per prevenire questo tipo di attacco c’è la conversione esadecimale.

Il fine appare alquanto ovvio con la conversione e la deconversione si impedisce al linguaggio di interpretare la stringa passata. Per esempio in PHP

$cod = bin2hex("codice_segreto");

e dopo

SELECT * FROM myTable WHERE id=unhex($cod);

Ovviamente questa è solo una possibile tecnica. In quanto avrete capito perfettamente che in questo tipo di attacchi la risposta va di pari passo all’offesa architettata dall’hacker.