Supponiamo di voler, per un motivo qualsiasi, inviare una e-mail a qualcuno facendo sembrare che essa sia stata mandata da qualcun altro. Il motivo per cui la studieremo è che provandone il funzionamento, ne approfitteremo per imparare ad utilizzare Telnet e soprattutto SMTP, ovvero il servizio della posta in uscita. Questa è infatti la base per capire come funzionano molte delle tecniche più utilizzate di mailbombing, e ci permetterà, quando padroni della materia, di capire meglio come riconoscerle e bloccarle all’origine.
Iniziamo dunque imparando ad usare Telnet. Telnet non è altro che un servizio di banca dati, con messaggi, programmi e cose del genere, proprio come nelle vecchie BBS. Ma perchè utilizzare proprio Telnet? In realtà, un client Telnet fa poco più che collegarsi a un server, inviargli tutto quello che scrivete e mostrarvi tutto quello che riceve dal server. Può in effetti sostituire (limitatamente) un qualsiasi altro client. Un esempio: quando usiamo un browser (Netscape, Explorer, ecc.) per collegarci 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.
Usandolo per collegarci a un sito semplicemente inserendo un host name, ci collegheremo al servizio Telnet. Ma abbiamo detto che non è questo il nostro obiettivo. A noi interessa il servizio SMTP. Bisognerà inserire, oltre all'indirizzo del server a cui vogliamo collegarci, anche un numero di "porta". Vogliamo collegarci a SMTP? Basta utilizzare la porta 25.
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 è identificarsi, e ciò 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* è possibile cancellare. Quindi digitate senza fretta, e se proprio sbagliate riavviate la connessione e ripetete tutto, oppure - in alcuni casi - può essere sufficiente premere invio e riscrivere la riga da zero. Non cancellate, anche se sembra funzionare. I risultati possono essere imprevedibili.
Talvolta è possibile inserire un nome falso, ma i nuovi server conoscono già il nostro IP Address quando vi collegate, quindi tanto vale inserire il vero nome.
La risposta sarà:
250 prova.it Hello NOMEPROVIDER.IT, pleased to meet you
A questo punto dovremo dire al server qual'è il nostro indirizzo di e-mail. Usiamo allo scopo il comando "MAIL FROM" e digitiamo:
MAIL FROM:
...ovviamente l'indirizzo da inserire è quello falso.
Il server risponderà con un messaggio. Se avremo sbagliato qualcosa, sarà un messaggio d'errore, e dovremo ripetere l'immissione.
A questo punto dobbiamo scegliere la nostra "vittima", che supponiamo essere
vittima@lamer.it. Usiamo il comando "RCPT TO" e scriviamo:
RCPT TO:
Il server risponderà 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 dirà 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 è elencare tutti i computer attraverso i quali è passato il messaggio, nonchè il nostro IP Address! Ciò potrebbe rivelare la nostra identità 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 è il nome del vostro provider (quello che avete usato con HELO) e l'ultima parte (Sun, 12 Oct...) è la data in formato standard. ID AA11212 va cambiato. Potete mettere un numero qualsiasi (possibilmente che inizi con AA1 più altre 4 cifre, per farlo sembrare più reale). Si tratta solo di un numero di serie del server, niente di importante. Ora dobbiamo digitare:
Ciò serve a far credere che il messaggio sia partito effettivamente dal server "microsfot.com" con l'ID AA11345 (può essere un numero qualsiasi, purchè 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 è 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 verrà inviata automaticamente dal server, e noi possiamo anche chiudere Telnet.
Questo è la tecnica di invio di mail utilizzato da molti worm che si diffondono per e-mail ed è denominata FakeMail.
Ma come può essere utilizzata questa tecnica per far danni? 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". Un Listserv è un programma che invia file 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'è un file di 20 megabyte il cui nome è "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:
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 anzichè QUIT usiamo altri GET, il risultato sarà molto più 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 poichè i server di e-mail spezzano i messaggi in tanti piccoli messaggi, la vittima riceverebbe migliaia e migliaia di messaggi...
Per concludere il nostro studio su FakeMail e messaggi anonimi, vedremo ora come riconoscere una e-mail "vera" da una "falsa" e come identificarne (in parte) l'autore. Per poter studiare un messaggio dobbiamo necessariamente essere in grado di leggerne gli "headers" (intestazioni), cioè quelle righe che iniziano con la parola "Received:" e simili, che si trovano prima del corpo del messaggio vero e proprio). Visualizzare gli headers è semplice: ogni programma di posta elettronica ha un'opzione (in genere nel menù) per attivare/disattivare la visualizzazione degli stessi.
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) è 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, nè i due punti; ne deduciamo perciò che è il seguito della riga superiore. L'header "Received" ci informa del percorso seguito dall'e-mail da quando è stato generato a quando l'abbiamo ricevuto.
Normalmente ce n'è più di uno e sono disposti in ordine inverso (il primo rappresenta l'ultimo computer in cui è arrivata l'e-mail - con ogni probabilità 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 già presenti. Tornando alla nostra e-mail, vediamo perciò 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 è 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 è il server destinatario (il nostro). Infatti, se guardiamo l'header "To:" vediamo che destinatario finale è
utente@provider.it. Il mittente, stando all'header "From:", dovrebbe essere
mittente@america.com 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 perciò ancora una volta all'analisi degli header "Received". Il primo header, quello che ci informa da CHI è stato inviato il messaggio, corrisponde all'ultimo header (cioè al secondo "Received"). Da li` scopriamo che il computer mittente è 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 è utilizzare un programma DNS. Basterà inserire l'IP Address per conoscere l'Host Name ad esso corrispondente.
Questo metodo è di estrema importanza, in quanto se da un lato non ci permette di scoprire l'autore, almeno potremo sapere quale computer è 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 è necessario conoscerne l'Host Name oppure l'IP Address.
Esiste un servizio, quello dei cosiddetti "remailer", per inviare posta completamente anonima (senza mittente e senza alcuna traccia di IP Address o altro). Usarli nella loro forma più semplice (senza criptazione e senza re-routingmultipli) è facile, basta inviare una normalissima e-mail (con qualsiasi programma di posta elettronica) all'indirizzo e-mail di un remailer e, PRIMA del messaggio, inserire una riga vuota, una coppia di due punti e altre informazioni.
EDIT: Si precisa che questa è una libera copia leggermente modificata e adattata di una più ampia e nota guida, non me ne vogliate ma penso che possa servire a tutti e quindi la posto.