SQL injection Struttura Sito Web

SQL injection anche questa è una tecnica malevola per inserire del codice malevolo all’interno di una vostra banca dati. Tipicamente come dice il nome stesso si tratta di una query malevola all’interno del vostro database. Tipicamente mysql, ma non è detto. Ovviamente la W3C è molto attenta alla problematica e in ogni aggiornamento ci sono dei correttivi per tentare di risolvere tale problema.

Entriamo nello specifico per comprendere meglio di cosa si tratta.

Dove opera la tecnica del codice maligno SQL injection

SQL injection Form

Cerchiamo un attimo di contestualizzare dove ci troviamo.

Ossia siamo nel caso di specie di un sito web che richiede l’inserimento di moduli  per vari scopi. Mettiamo per esempio un carrello della spesa. Ossia voi utente finale state facendo il login in un modulo in un sito web in remoto che dietro di se ha un database.

Quindi nel codice sorgente di questo sito in remoto ci sarà una query SQL del tipo

 

SELECT * FROM Users WHERE UserId = $utente;

 

Questo per un caso in PHP. Mettiamo adesso che voi volete forzare il sito. Premesso tutto quello che vi sto dicendo è puramente a scopo didattico e per farvi comprendere il problema. Le stesse tecniche di Hacking che vi sto mostrando sono ormai obsolete. In quanto conosciutissime e quindi esistono tutte le contromisure del caso.SQL injection Struttura Sito Web

quindi nel get del form in remoto se inserite qualcosa del tipo 5 OR 1=1; la query al database sopra si trasforma in

SELECT * FROM Users WHERE UserId = 5 OR 1=1;

Con la condizione 1=1 sempre soddisfatta. Quindi riceverete tutti i dati che sono memorizzati nella tabella del database. E quindi possibilmente se siete degli hacker da qui è un attimo ricevere anche le dati delle password. Ovviamente nella trattazione ci fermiamo qui.

Facciamo un ulteriore esempio per meglio comprendere. Supponiamo di avere in remoto un codice del genere  in

uName = getRequestString("username");
 uPass = getRequestString("userpassword");

sql = 'SELECT * FROM Users WHERE Name ="' + uName + '" AND Pass ="' + uPass + '"'

In un modulo dove immettiamo normalmente le username e userpassowrd. Mettiamo pero’ che adesso siete invece un Hacker e quindi immettete del codice maligno in modo da trasformare la query al database in qualcosa del genere

SELECT * FROM Users WHERE Name ="" or ""="" AND Pass ="" or ""=""

Condizioni sempre vere e che quindi restituiscono l’intero tabella del database. Ma sempre utilizzando questa tecnica di hackjng si puo’ arrivare a qualcosa di molto più distruttivo tipo

SELECT * FROM Users WHERE UserId = 105; DROP TABLE password;

Dove abbiamo introdotto 105; DROP TABLE password che cancella un’intera tabella delle password. Impedendo in questa maniera qualsiasi accesso al sito.

Ci sono molti modi per prevenire questo tipo di problemi. Tutti incentrati nella programmazione e nel controllo dell’inserimento dei dati inseriti. Ossia si puo’ controllare che non siano stati inseriti and oppure or oppure che non ci siano nomi di tabelle realmente esistenti nel database etc. etc.

In ogni modo oggi i principali CDN monitorano anche questo tipo di traffico impedendo l’arrivo al server remoto di codice SQL Injection malevolo.

Oppure si ricorre ai Cloud WAF (Website Application Firewall) che sono dei Firewall di rete a pagamento che si frappongono fra il client e il server e impediscono che venga veicolato traffico maligno da script di questo tipo. Ce ne sono di ottimi della Sucuri( https://sucuri.net/website-firewall/sql-injection-protection)  e della Akamai (https://www.akamai.com/it/it/products/cloud-security/ ) . Ma purtroppo ( questa guida è di aprile 2018) si hanno notizie di hacker che sono riusciti a bypassare questi CLoud WAF. Come sempre accade la lotta fra chi controlla e chi tenta di aggirare non finisce mai…