SQL Injection

Pubblicato da Coda il 28 marzo 2009
Server, Sicurezza Informatica, Wordpress

Oggi è accaduto qualcosa di… particolare

Infatti, stanotte, alle due, un simpatico burlone ha voluto testare la sicurezza del mio blog, dimostrando che la versione di che uso è sicura e non vulnerablile alle SQL injection.

Furbescamente il lamerozzo che si è divertito a fare ciò, almeno, ha usato un proxy, in modo da nascondere la sua vera identità.

Ma esattamente cos’è un SQL Injection?

Come forse saprai, , così come tutti i , utilizzano un database per salvare le opzioni, gli articoli, i commenti, ecc… Il database utilizzato si chiama MySQL (SQL sta per script query language).

I database a loro volta si suddividono in tabelle, ovvero, nel database di questo sito c’è la tabella “post” che contiene tutti i post che ho salvato, divisi in vari “elementi”

Quando, ad esempio, io mi loggo, con il mio account, nel blog, digito il mio nome utente e la mia password nei campi appositi e il (o meglio il programma wp-login.php) provvederà a chiedere al database MySQL <<Scusa, sono il ,l’utente “Coda” vorrebbe connettersi, con la password “123qwerty”, che tradotta in corrisponde a “4d6341896a313c02d55a86eaaa8126b4″ le credenziali sono corrette?>>. E il database quindi cerca nella tabella utenti, l’utente “Coda”, se lo trova confronta l’hash della password che gli ha precedentemente fornito il programma wp-login.php.

Con questa tecnica degli hash è possibile salvare una password senza gravi problemi legati alla sicurezza: l’hash è un algoritmo che per generarlo un calcolatore ci mette pochissimo, ma per il calcolo inverso dell’ ci vorrebbero secoli (è non è un modo di dire). Come è possibile? Ti faccio un esempio: è facile calcolare l’esponenziale di un numero: 5^x, ma è più difficile difficile eseguire l’operazione opposta: trovare il logaritmo di una potenza (ovvero trovare x). La funzione logaritmica è comunque una funzione abbastanza semplice, ma se viene creata una funzione il cui calcolo diretto è velocissimo, almeno per un pc, ma il cui calcolo inverso richiede secoli, abbiamo creato un hash

Ritornando a cosa fa il nostro database MySQL, se le credenziali corrispondono, dà l’ok per la connessione

Ma se le credenziali non corrispondono, ad esempio se l’utente Coda non esistesse, il database direbbe <<Errore: non ho trovato l’utente “Coda”>>

Adesso se immettiamo nel campo dell’ utente un comando al database particolare del tipo “Seleziona dall’elemento 1 all’elemento 5 della tabella “utenti” ” Il database potrà rispondere: << Errore: non ho trovato l’utente “Errore: Ci sono solo 4 utenti nella tabella “utenti”>>

Come puoi vedere, al posto del nome utente originale, abbiamo l’output del comando. Se adesso riproviamo a fare un login mettendo come nome utente “Seleziona la colonna “password” dell’elemento n° 4 nella tabella “utenti” Avremo l’output della password, in , nell’esempio precedente la password era “123qwerty”, quindi la risposta sarà:4d6341896a313c02d55a86eaaa8126b4

Come ho scritto prima, eseguire l’ inverso è impensabile. Qua l’untico metodo di decrittazione è la : si dice al computer di prendere tutte le parole, ad esempio, prese da un dizionario, di calcolare l’ e confrontarlo con l’hash che abbiamo. Ovviamente questo procedimento è moooolto lungo (se non si sa fare bene una …), per velocizzare il tutto ci sono vari espedienti, ma questa è un altra storia…

Ma allora perchè il mio non ha subito l’? Bhè, io sinceramente non conosco bene il funzionamento di , ma le soluzioni per correre al riparo dalle SQL Injection sono due: o eseguire un controllo prima di inviare le richieste al database del tipo: <<Se nel nome utente è contenuto un comando come “Seleziona”, “Mostra” et similia, blocca la richiesta>> oppure, una volta che wp-login ha contattato il database e ha ricevuto una risposta potrebbe comportarsi così: << Se nella risposta, la prima parola è “Errore”, allora scrivi all’utente che si vuole connettere “Credenziali non corrette”, ma se la prima parola è “OK” allora restituisci lo stesso output che ti ha fornito il database>>

Spero di essere stato chiaro ed esauriente. Ho usato apposta un linguaggio semplice in modo che tutti i lettori (lamerozzo burlone compreso) possano capire :) , per questo a volte ho dovuto sostituire i tecnicismi con alcune “imprecisioni”. Comunque, visto che scrivere quest’articolo riguardo la sicurezza mi è piaciuto, ho intenzione di scriverne altri riguardo altri tipi di (hehe).

Nota: qualcuno potrebbe pensare che anch’io sia un lamerozzo o roba simile, ma ci tengo a precisare che, visto che in questo periodo sto aiutando l’amministratore della rete della scuola a proteggerla megio (in pratica il mio compito è di attaccare in tutti i modi rete e servers scolastici), questo è il mio pane quasi-quotidiano. Sta di fatto che io non userei mai le mie conoscenze per eseguire veri attacchi, perchè non lo trovo nè divertente, nè mi sembra giusto

Articoli Correlati:

Tags: , , , , ,

Nessun commento

Lascia un commento

WP_Big_City

Please don't insert text in the input below. If you do it you can't comment.