SQL Injection

Con questo articolo vogliamo spiegare in consa consiste un attacco SQL Injection e come fronteggiarlo.

La prima cosa che c’è da sapere quando si ha davanti una pagina di login di un qualsiasi sito web è che dietro vi è sicuramente un database contenente le informazioni che voi richiedete nel momento in cui vengono inseriti Username e Password.

Anche se non si vede, inserire i vostri dati equivale a mandare un messaggio al database in questione con il seguente linguaggio:

“SELECT * FROM users WHERE user='”.$_POST[‘user’].”‘ AND pwd='”.$_POST[‘pwd’].”‘”

Si lo so per alcuni di voi potrebbe sembrare aramaico antico, in realtà la “traduzione” è la seguente:

“Seleziona TUTTO (* significa All) dalla tabella USERS dove il valore user è “il vostro username” e la password è “la vostra password”.

In poche parole si sta richiedendo al database di restituire tutte i dati a cui voi, con il vostro username e la vostra password avere accesso. Il significadel del valore POST per i più curiosi è che lo scambio di pacchetti tra client (voi) e il server a cui state facendo richiesta di accesso avviene in modo cifrato, così da evitare un altro tipo di attacco chiamato MiTM (Man in The Middle).

Ora qui entra in gioco la nostra vulnerabilità SQL Injection: nei siti affetti da questo problema, si può “injettare” (gergo tecnico) quinti iniettare del codice malevolo con lo scopo di ingannare il server ed ottenere le informazioni che altrimenti sarebbero per noi inaccessibili. Per motivi di sicurezza non posso esporre tutto il procedimento o dettagli precisi per cui vi chiedo un grande sforzo di fiducia J
Posso tuttavia illustrare l’idea attraverso cui viene attuato l’attacco. Come alcuni probabilmente avranno notato, ci sono degli apici all’interno della richiesta precedente (in gergo si chiama Query): quegli apici non sono casuali, essi determinano l’inizio e la fine di una stringa, ovvero di qualcosa che il nostro database deve interpretare ed eseguire. Senza di essi, oppure ponendoli in modo errato, le richieste non avrebbero senso e otterremmo solo messaggi di errore.

Il gioco della SQL Injection quindi è il seguente: dare ordine al database di tirar fuori le informazioni che vogliamo sfruttando il fatto che il nostro sito internet non riconosce quando vengono inseriti dei caratteri speciali all’interno della richiesta dell’utente, ovvero all’interno dei campi di user e password. E qui che bisogna intervenire per fronteggiare questa vulnerabilità. Supponiamo che un programmatore abbia configurato male la query del database e che esso non riconosca i caratteri speciali, un Cracker (così si chiamano coloro che fanno hack a scopo malevolo) potrebbe injettare determinate informazioni per ottenere utenze, password, informazioni varie, qualsiasi cosa!

Come si previene quindi? Semplice, configurando bene la query e facendo si che:

  • I caratteri inseriti all’interno dei campi di username e password siano accettabili e non contengano caratteri speciali che possano in qualche modo alterare le richieste
  • Non mostrare con messaggi di errore che sono stati rilevati caratteri speciali, questo potrebbe far capire all’attaccante che il sito potrebbe presentare delle vulnerabilità

Questo è in breve una vulnerabilità SQL Injection, ovviamente per varie questioni ho semplificato moltissimo ciò che avviene in realtà, ma l’idea dovrebbe essere questa.

Ovviamente per i più esperti queste brevi righe non saranno gran che soddisfacenti ma in caso servisse qualche altri chiarimento non esitate a chiedere commentando questo articolo. Vi allego inoltre il link per accedere alla pagina di Wikipedia riguardo alla SQL Injection,

https://it.wikipedia.org/wiki/SQL_injection

Introduzione alla Web Security

Primi passi:

Al giorno d’oggi il mondo del web è talmente vasto che è impossibile riuscire a controllarlo tutto (per fortuna oserei dire). Navigando in rete possiamo trovare qualsiasi cosa di cui abbiamo bisogno: informazioni, oggetti da acquistare, persone da conoscere etc..

La domanda in questione ora è: ovunque riusciamo a spostarci con un semplice click all’interno del web, è sempre tutto sicuro?

La risposta ovviamente è “NO”. All’interno della rete si nascondono innumerevoli pericoli che vanno molto al di la del banale Parental Control per bambini. In giro per il mondo ci sono milioni di persone che, armate di cattive intenzioni, cercheranno di rubare i vostri soldi, o di penetrare nel vostro sito, o chissà quant’altro!

E’ bene sapere a cosa si va incontro se decidiamo di aprirci un sito personale, o se decidiamo di lasciare dei nostri dati salvati all’interno di un sito internet.

Per questa breve introduzione mi limito a spiegare il concetto base su cui si forma il mondo della Web Security. La parola chiave è “VULNERABILITA'”. Con questa parola si intende un qualcosa che potrebbe per esempio essere un errore di configurazione di un sito, di una app, o di molte altre cose. Quando si dice che “un sito è vulnerabile” significa che esso potrebbe essere soggetto dal alcuni attacchi da parte di malintenzionati per sottrarre informazioni riservare. Dobbiamo tuttavia fare una precisazione: la frase precedente (“un sito è vulnerabile”) non ha molto senso se lasciata così com’è. Nel mondo del web ogni vulnerabilità ha un nome, per così dire, che ne identifica il tipo e, quindi, il vettore d’attacco.

Per concludere, elencherò le principali vulnerabilità che si possono trovare su internet (l’ordine è casuale, non di pericolosità! Sono TUTTI pericolosi):

  • SQL Injection
  • XSS (una cui “variante” è l’XST)
  • DOS (o DDOS)
  • MiTM (Man in The Middle)
  • Overflow
  • Gain Privileges of Information