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 Wordpress 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, Wordpress, così come tutti i cms, 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 cms (o meglio il programma wp-login.php) provvederà a chiedere al database MySQL <<Scusa, sono il cms Wordpress,l’utente “Coda” vorrebbe connettersi, con la password “123qwerty”, che tradotta in md5 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 md5 è un algoritmo che per generarlo un calcolatore ci mette pochissimo, ma per il calcolo inverso dell’md5 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 md5, nell’esempio precedente la password era “123qwerty”, quindi la risposta sarà :4d6341896a313c02d55a86eaaa8126b4
Come ho scritto prima, eseguire l’md5 inverso è impensabile. Qua l’untico metodo di decrittazione è la Brute Force: si dice al computer di prendere tutte le parole, ad esempio, prese da un dizionario, di calcolare l’md5 e confrontarlo con l’hash che abbiamo. Ovviamente questo procedimento è moooolto lungo (se non si sa fare bene una brute force…), per velocizzare il tutto ci sono vari espedienti, ma questa è un altra storia…
Ma allora perchè il mio Wordpress non ha subito l’attacco? Bhè, io sinceramente non conosco bene il funzionamento di Wordpress, 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 attacco (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







