Magazine Società

LulzSecurity, hacking e SQL injection

Creato il 02 luglio 2011 da Newfractals @NewFractals

LulzSecurity, hacking e SQL injectionNelle ultime settimane, con l’operazione #AntiSec lanciata da Anonymous e dal gruppo Lulzsecurity sono stati diffusi i dati contenuti in un numero incredibile di diversi database, la maggior parte appartenenti a “bersagli di alto profilo” come governi, dipartimenti di polizia (scandalose per il loro razzismo feroce le e-mail private scambiate fra i poliziotti dell’Arizona), banche, multinazionali…
Ma come hanno fatto?

Analizzeremo ora una delle tecniche più semplici e diffuse fra quelle usate durante l’operazione #AntiSec (e ampiamente usata anche altrove, ovviamente), la SQL injection.

Leggendo questo articolo non diventerete degli hacker (non è questo lo scopo), ma potrete farvi anche voi un’idea di quanto sia labile la sicurezza dei siti a cui affidiamo i nostri dati privati. Il fatto che queste cose siano ampiamente possibili deve farci indignare contro questi colossi che non hanno evidentemente abbastanza interesse alla propria sicurezza, alla nostra sicurezza.

Iniziamo da una vignetta presa da xkcd.


LulzSecurity, hacking e SQL injection

Traduzione:
Voce al telefono: “Buongiorno, siamo la scuola di suo figlio. Abbiamo qualche problema con i computer”
Mamma: “Oddio, ha rotto qualcosa?”
Voce al telefono: “In un certo senso… Ha davvero chiamato suo figlio Robert'); DROP TABLE Students; --?
Mamma: “Oh, sì. Lo chiamiamo piccolo Bobby Tables.”
Voce al telefono: “Beh, abbiamo perso tutti i dati sugli studenti di quest’anno. Spero sia contenta.”
Mamma: “E io spero che voi abbiate imparato a migliorare il controllo dei dati in input ai vostri database”


Cosa vuol dire tutto questo?
E cosa ha a che vedere con l’operazione #AntiSec?

Beh, la seconda domanda ha una risposta semplice: quello che ha fatto la mamma nella striscia di xkcd si basa sullo stesso principio che ha permesso a LulzSecurity e chiunque si sia unito all’operazione #AntiSec (come anche a un sacco di gente prima di loro) di avere accesso a database che avrebbero dovuto essere inviolabili.

Si tratta di una tecnica chiamata SQL injection, che colpisce i database di tipo SQL quando non vengono effettuati controlli sufficienti sui dati ricevuti in input dall’utente. Nella pratica, si tratta di inserire determinate stringhe di codice nei campi di qualche form a cui si ha accesso, ad esempio quelli di “nome utente” e “password” in maniera tale da ingannare il database facendogli eseguire dei comandi.
In realtà non sarebbe così difficile proteggersi da questi attacchi filtrando i dati inviati dall’utente, ma sembra che questa falla nella sicurezza sia sottovalutata da molte aziende.

Iniziamo dal nome di “Bobby Tables”, ovvero:

Robert'); DROP TABLE Students;--

Un nome piuttosto insolito, certamente, che è stato inserito in un database che si aspettava di ricevere un nome più normale, come ad esempio il semplice “Robert”. Tutto ciò che segue “Robert” in quella riga in realtà serve a dare una nuova istruzione al database, che a causa dell’apostrofo e della chiusura di parentesi non considera quanto segue come “parte del nome”, ma come un’istruzione a se stante.

Immaginiamo ad esempio che per inserire nel programma il nome di uno studente si passi attraverso una variabile $firstName, con un codice simile al seguente:

INSERT INTO 'Students' ('first_name') VALUES ('$firstName');

Ora, se non si fa nessun controllo su cosa inserisce l’utente nella variabile $firstName possiamo avere, come in questo caso,

$firstName=Robert'); DROP TABLE Students;--

Da cui il codice viene modificato nella maniera seguente:

INSERT INTO 'Students' ('first_name') VALUES ('Robert'); DROP TABLE Students;--');

Abbiamo insomma inserito un nuovo comando “DROP TABLE Students”… Formattando il tutto un po’ meglio:

INSERT INTO 'Students' ('first_name') VALUES ('Robert');
DROP TABLE Students; --');

Il carattere ‘ delimita le “stringhe” ovvero le parti di testo che vanno interpretate come testo e non come comandi. Per cui il ' dopo Robert “chiude” la stringa: Robert è la stringa, quello che segue è da interpretare come codice. ); chiude l’istruzione in corso.
In pratica, la prima riga inserisce Robert come nome nel database, mentre la seconda cancella tutto il database “Students”, facendo perdere i dati non solo su di lui, ma su tutti gli altri studenti presenti nel database.
Il “--” alla fine commenta il resto della linea.

Questo “attacco” è già abbastanza fastidioso, soprattutto se non si è fatto un backup del database di recente (cosa che ci ricorda ancora una volta che fare backup è BENE).
Però non si è limitati a dare la sola istruzione DROP TABLE: si possono dare altre istruzioni.

Spero di essere stata abbastanza chiara… E di non avere fatto errori nel codice di esempio ^_^
Se avete domande o correzioni da fare, non esitate!


Potrebbero interessarti anche :

Ritornare alla prima pagina di Logo Paperblog

Possono interessarti anche questi articoli :