Rubare i dati dal web? Un gioco da ragazzi…
Tutorial Multipiattaforma – Questo articolo non vuole essere l’ennesimo opuscolo sulla sicurezza in rete dove alla fine si capisce che comprando firewall e configurando software e sistemi operativi si rende il proprio sito un ambiente sicuro, ma qualcosa di più pratico e realistico alla portata di tutti.
In quasi tutti gli articoli inerenti la sicurezza sul web si parla sempre di fantomatici hacker che entrano nei sistemi, attaccandoli in maniera misteriosa sfruttando le “backdoors”, ossia delle porte logiche lasciate aperte e sguarnite sui server.
Certo è una realtà… ma come fanno questi hacker ad usare le backdoors? Come le individuano? E poi come mai quasi nessuno sa riprodurre un attacco hacker inteso come intrusione in un sistema, e quando parlo di intrusione intendo proprio un “ingresso” nel computer con tanto di furto di dati o pagine web?
La realtà è che spesso gli attacchi sulle backdoor sono soltanto dei bombing ossia dei bombardamenti di pacchetti TCP/IP su quella famosa porta lasciata aperta o sguarnita che mandano in crash il sistema.
Ultimo famoso attacco di questo tipo fu condotto verso il server della Yahoo un paio di anni fa.
In pratica per scorazzare liberamente in un computer online bisogna avere le userid e le password e spesso quando qualche pirata entra in un sistema è semplicemente perché ha la userid e la password, insomma un po’ come se comprassimo casa e non cambiassimo la serratura, magari il vecchio proprietario ha fatto dei duplicati delle vostre chiavi e quei duplicati hanno girato di mano in mano fino ad arrivare al fantomatico ladro che entrerà in casa vostra senza usare chissà quali escamotages esoterici e tecnologici.
La situazione
Prima di andare avanti ricordiamo le porte più famose e più usate da tutti i server:
La 21 porta FTP (File Transfer Protocol), cioè dove è in ascolto il server FTP che permette di uplodare e downlodare file dal vostro pc al server e viceversa.
• La porta 25 dell’SMTP (Simple Mail Transfer Protocol), che serve per inviare posta.
• La porta 110 del POP (Post Office Protocol) che serve per prendere la posta
• La porta 80 del http (HyperText Transfer Protocol), cioè quella del web-server, usata dal browser per navigare i siti web.
• Altra porta pericolosa è la 23, quella usata dal Telnet (emulatore di terminale) che permette di controllare dall’ ufficio o da casa il vostro server ovunque esso sia, in genere è attiva solo sui server Linux/Unix e non sui server Microsoft.
I server Microsoft sono in genere gestiti con console di amministrazione remota come il Symantec PcAnywhere che ha una sua porta di lavoro, quindi se si conosce la username e la password ci si può collegare al desktop del vostro server, che però a sua volta chiederà una username e password per farvi accedere al sistema, quindi è consigliabile utilizzare due password diverse.
Poi ci sono le porte dei vari sistemi di database (MS SQLServer, MySQL, ORACLE, ecc.) questi sono accessibili tramite client dedicati, quindi se si posseggono la username e la password, si può scorazzare tra i vari database contenuti in essi e cancellare, copiare o modificare record e tabelle.
Infine ci sono i linguaggi utilizzati dai webmaster per interfacciare i siti web con i database, qui la debolezza può essere nel software scritto e nei bug noti.
Dunque questa è la situazione, tutto questo è ciò che si cela dietro un sito web. Che fare allora per attaccarlo e cercare di rubare informazioni?
L’attacco
Simuleremo un attacco per rubare dati ad un sito web, così facendo possiamo capire quali sono le contromisure da adottare.
Immaginiamo di essere interessati ad un sito che contiene e vende le informazioni di tutte le aziende italiane produttrici di pasta. Informazioni che vogliamo acquisire per inserirle nel nostro archivio e riutilizzarle per i nostri scopi.
Il sito (ipotetico) individuato come obiettivo è: http://www.pastax.it,
l’home page grafica è, come spesso avviene, accattivante, con molti link, servizi e altro ancora. Ma ciò che balza all’occhio è la textbox del motore di ricerca, “CERCA L’AZIENDA PER PAROLA CHIAVE”.
Scriviamo BARI ed ecco uscire una lista di aziende cliccabili:
http://www.pastax.it/lista.asp
oppure
http://www.pastax.it/lista.asp?key=bari
oppure
http://www.pastax.it/lista.php con la sua variante http://www.pastax.it/lista.php?k=bari
oppure altre varianti a seconda del linguaggio di sviluppo del software del motore di ricerca.
Clicchiamo sul nome di una azienda e vediamo comparire una scheda aziendale minima, senza i dati sensibili che ci interessano: telefono,fax, certificazioni varie, indirizzo, ecc. ecc.
Con un tasto o link che ci invita a comprare quell’informazione o a sottoscrivere un abbonamento per ottenere l’accesso alle schede complete.
http://www.pastax.it/scheda.asp o http://www.pastax.it/scheda.asp?id=12
(omettiamo gli altri linguaggi php,cfm, ecc. per semplicità)
A questo punto abbiamo tutto quello che ci serve, conosciamo il linguaggio di programmazione, sappiamo che c’è un database alle spalle, non resta altro che scovare il sistema per avere tutti i dati.
Prima prova:
utilizziamo tutti i bachi noti del linguaggio usato (in questo caso ASP Active Server Pages), infatti ci sono alcuni server administrator che non hanno istallato tutte la patch rilasciate dalla Microsoft per rendere invisibile il codice asp e quindi, se magari siamo fortunati, possiamo leggere che tipo di database usano e in quel caso abbiamo un’informazione in più che poi vedremo come usare.
Se non funzionano i bug allora proviamo a “scassare” la query del motore di ricerca, così capiremo dal messaggio di errore che tipo di database c’è dietro
Ecco come fare :
nella textbox di ricerca proviamo ad inserire un numero dispari di apici ” ‘ “, perché alcuni programmatori dimenticano di difendersi dall’apice che rompe la stringa della query sql usata nello script, ad esempio: sql=”select * from aziende where key='”&request(“k”)&”‘” se la nostra k è BARI la query che sarà eseguita dal motore di ricerca sarà: select * from aziende where key=’Bari’ ma se la nostra k=’ allora avverrà questo select * from aziende where key=”’ che per l’inteprete asp è un errore dato che è come se fosse key=” (a vuoto) e poi un ‘ solo soletto nella stringa sql quindi avremo un errore del tipo:
Microsoft OLE DB Provider for ODBC Drivers errore “80040e14′
[Microsoft][Driver ODBC Microsoft Access] Errore di sintassi nella stringa nell’espressione della query ‘key=””.
E abbiamo scoperto che il database è MS Access, il famoso database su file… ma se è un file allora si può scaricare ! Infatti, uno degli errori più comuni è quello di inserire il database in una cartella del server servita proprio dal web server e situata nella stessa cartella in cui sono contenute le pagine web che stiamo navigando, così basterà indovinare il nome del database e scrivere nella barra degli indirizzi l’URL:
http://www.pastax.it/aziende.mdb e come per magia vedrete apparire la finestra del browser che vi chiede se volte scaricare il file equello è il momento più eccitante, perché da quel punto in poi avrete tutto quello che vi serve senza aver pagato un soldo e senza essere entrati in un server, ma semplicemente avendo sfruttato la superficialità dei creatori del sito.
Ma analizziamo la situazione appena vista:
Primo errore l’apice: potrebbe non funzionare, infatti bastava inserire nel codice sorgente del motore di ricerca lista.asp la seguente istruzione: key=replace(key,”‘”,”””) , cioè rimpiazza ogni apice nella stringa key con un doppio apice e la query non avrebbe generato errori. Diciamo la verità ogni programmatore appena più furbo di un novellino lo fa, anche perché altrimenti sarebbe stato impossibile cercare aziende in città come L’AQUILA !!! Allora potremmo provare a far generare un errore dalla scheda, ricordate che se cliccavamo sul nome di un’azienda appariva http://www.pastax.it/scheda.asp?id=12 ?
Quello id=12 serve a generare la query sql che deve andare a prelevare il record numero 12 dal database delle aziende per visualizzare solo i campi che il programmatore ha deciso di far vedere all’utente non pagante. Che fare? Proviamo a scrivere http://www.pastax.it/scheda.asp?id=ciccio e vediamo che succede. La cosa più probabile è che si generi un errore simile a quello dell’apice, questo perché il campo id del database è di tipo numerico e noi abbiamo passato la stringa “ciccio” quindi si il motore sql rileva un errore di type mismatch (errore di formato di dati) e quindi capiamo di nuovo il tipo di database usato. Qualcuno di voi potrebbe obiettare: e se invece che su stringa i dati fossero passati in metodo POST ? ossia con i tasti ed i <form></form> ? Infatti precedentemente abbiamo visto che la situazione poteva apparire così: http://www.pastax.it/scheda.asp
Qui la situazione è già più complicata, ma non insormontabile, basterà creare un clone della pagina col tasto di invio e salvarla sul proprio computer, avendo l’accortezza di cambiare action=”scheda.asp” con action=”http://www.pastax.it/scheda.asp”, dato che se non lo fate il form tenterà di inviare i dati al file scheda.asp del vostro computer, ma voi non avete alcun file scheda.asp sul vostro pc :
<html>
<body>
<form action=”http://www.pastax.it/scheda.asp” method=”post”>
<input type=hidden name=”id” value=”12″>
<input type=submit value=”Visualizza scheda”>
</form>
</body>
</html>
Alla pressione sul tasto “Visualizza scheda” il form invierà i valore della variabile ID al file scheda.asp presente sul sito http://www.pastax.it, però se voi cambiate il value=”12″ in value=”ciccio” otterrete l’effetto descritto precedentemente. Forse qualcuno si sta chiedendo: “Già ma come indovino il nome del database ? so che è un mdb quindi sarà ?????.mdb, ma il problema è ‘?????’ “. Giusta osservazione, infatti il sistema è quello di provare con dei nomi facili sfruttando la pigrizia e la mancanza di fantasia di alcuni programmatori, per esempio:
aziende.mdb, database.mdb, db1.mdb,db2.mdb, dati.mdb, aziendepasta.mdb, aziende_pasta.mdb, ecc. ecc.
ma c’è anche da indovinare la sottocartella in cui si trova il database, non sempre è nella stessa cartella in cui stanno le pagine web es.:
http://www.pastax.it/database/aziende.mdb oppure http://www.pastax.it/dati/aziende.mdb , o altro ancora. Ma come verificare se esiste o meno la directory contenente il database? Basterà digitare: http://www.pastax.it/database se il vostro browser visualizzerà un “ERRORE 404 File not found” vuol dire che la cartella non esiste, ma se visualizza l’errore: “Directory listing denied” vuol dire che la cartella esiste ma che non vi permette di vedere la lista dei file contenuti in essa. Ma se esiste una cartella database vuol dire che il nostro bersaglio è lì dentro. A volte capita che degli sprovveduti amministratori di server permettano il directory listening così non si ha nemmeno il problema di indovinare il nome del database. La contromisura per questo inconveniente è mettere i database in cartelle non servite dal web server, impossibilitando così il download.
Ma se il nome del database non lo indoviniamo? Se non è MS Access? La risposta a queste domande è la creazione di un programmino che effettua un ciclo for..to e che si colleghi all’indirizzo del sito facendo variare una variabile da x a y per esempio:
for i=1 to 1000
collegati al sito http://www.pastax.it/scheda.asp?id= i
scrivi un file di testo sul mio hard disk che si chiama i.htm (dove i varia tra 1 e 1000)
così facendo avremo 1000 file htm (1.htm,2.htm,ecc.) con ognuno il contenuto di scheda.asp?id=1, scheda.asp?id=2, ecc. ecc. Questa è già un’operazione più da “hacker” che si deve costruire uno strumento software per carpire le informazioni. Ma così abbiamo solo le schede pubbliche, quelle senza le informazioni censurate, infatti quest’ultimo sistema va bene per quando ci sono informazioni utili pubbliche, per non salvare le pagine a mano con “Salva file” e quando il database non è MS ACCESS ma un SQL Server che non ha file scaricabili. Un altro sistema è quello di provare a scrivere: ftp://www.pastax.it/ e aspettare la finestra di pop-up del browser che vi chiede username e password, provate a ciccare sulla checkbox “ANONIMO” e chissà, per sbadataggine del system administrator potreste pure entrare nelle cartelle del server. Insomma la morale della favola è questa: è impossibile entrare in un sistema senza conoscere la username e la password ! Ci sono dei software (Brute force attack) che provano a indovinare la password inviando moduli da 2, 3 o 5 o 10 ecc. caratteri al sistema in modo casuale (tra lettere e numeri) ma per provare tutte le permutazioni possibili ci vorrebbero mesi di attacco continuato e attenzione non è come nei film, cioè che si indovina un carattere alla volta, ma bisogna indovinare tutta la stringa che compone la password ! Per esempio: se la password è pippo123 ed il software di attacco invia paxtr222, non è che la “p” comincia a lampeggiare e si ferma mentre il software cerca di indovinare gli altri caratteri. Però questi software di attacco hanno dei dizionari (multilingue) che inviano tutte le parole del dizionario al sistema quindi se avete usato come password la parola “montagna”, probabilmente il software la “becca” subito perché prova con tutte le parole contenute nel dizionario italiano, quindi attenti a scegliere sempre password senza senso compiuto. Insomma se volete rendere il vostro server sicuro bisogna stare attenti a piccole cose e non pensare che istallando mega-software abbiate risolto il problema delle intrusioni. Concludiamo augurando agli amministratori di sistema: “Buona blindatura !” e agli altri….”Buona caccia !!!”