martedì 14 febbraio 2012

Virus che infettano le condivisioni di rete

Molti virus di ultima generazione mirano a infettare le risorse condivise nella rete. Un solo computer infetto è in grado di trasmettere il virus a centinaia di altre macchine.

Spesso, molti siti hanno condivisioni aperte sui propri server a cui gli utenti possono accedere in modo illimitato. L’intento di tali condivisioni è fornire un’area comune in cui gli utenti possono scambiarsi file o informazioni. Altre situazioni prevedono condivisioni, non destinate a utenti comuni, che restano comunque accessibili per mancanza di pianificazione e protezione.

Tali condivisioni sono altamente esposte a virus, quali Pinfi e Funlove, che mirano ad infettare le condivisioni di file aperte.

 

Scenario tipico di un virus che infetta le condivisioni:

virus rete 1

La figura in alto mostra una workstation non protetta (IP: 192.168.0.13), abilitata ad eseguire un file infettato dal virus Pinfi. La workstation infettata propaga le condivisioni di file aperte ai computer in rete, cerca i file con estensione .exe e .scr su tali condivisioni e prova ad infettarli.

In questo caso specifico, tutti i server sono protetti da un software antivirus aggiornato che monitora il file system. Pertanto, ogni tentativo di infettare i file su tali condivisioni sarebbe rilevato immediatamente e i file infetti ripuliti.

Tuttavia, la workstation ancora infetta contaminerà nuovamente i file .exe e .scr non appena il software antivirus avrà eseguito la prima operazione di pulitura. In questo modo si crea un ciclo "virus-pulitura del file-virus" che avrà fine solo nel momento in cui si interverrà sulla causa originale dell’infezione: la workstation infetta.

 

Individuare l’origine del problema

Su grandi reti di centinaia o migliaia di macchine, risalire alla workstation infetta potrebbe essere un’operazione molto difficile. Solitamente, i messaggi di notifica di virus indicano solo il file infetto, il tipo di virus rilevato e il problema generato nel file. Per risolvere il problema sono necessarie altre informazioni.

Una possibile soluzione è utilizzare uno strumento esterno in grado di monitorare i file esposti all’attacco del virus. Per evitare troppe modifiche su uno dei server originali, può essere utile creare una macchina di prova in rete, creare una condivisione aperta e copiarvi il file .exe. Nel caso del virus Pinfi, i file .exe sono gli obiettivi più comuni, per cui il file calc.exe viene copiato dalla directory Windows alla nuova condivisione file. Il file calc.exe diventa quindi una sorta di "esca" per il virus.

Prima di connettere la macchina "esca" alla rete, è necessario installare un programma "sniffer". Si consiglia di utilizzare Wireshark (disponibile solamente in lingua inglese); ma sono altrettanto validi programmi quali Sniffer Pro ed Etherpeek. Wireshark può essere scaricato gratuitamente e contiene una serie di funzionalità. Per praticità, in queste pagine saranno presentate solo le funzioni necessarie a risolvere il problema specifico.

Installazione di Wireshark

Sono necessari due componenti:

  1. Installare ed eseguire il driver WinPCap, reperibile all’indirizzo winpcap.polito.it
  2. Installare ed eseguire Wireshark, reperibile all’indirizzo http://www.wireshark.org/

Nota: Norman considera Wireshark un software affidabile, tuttavia non fornisce assistenza all’utente.

Monitoraggio dell’attività di rete

Una volta installato Wireshark, assicurarsi che la funzione di scansione all’accesso di NVC sia in esecuzione, quindi avviare il programma Utilities di NVC in cui viene aperta la finestra Messages.
Prima di iniziare il monitoraggio del file, assicurarsi che venga infettato tenendo sotto controllo gli avvisi visualizzati nella finestra Messages. Una mancata visualizzazione degli avvisi indica che l’esca non funziona. Verificare che la directory contenente l’esca sia effettivamente condivisa e che tutti gli utenti abbiano accesso completo alla condivisione.

virus rete 2

Monitoraggio del virus Pinfi che attacca la condivisione di prova.

Se l’esca continua a non funzionare, è necessario installare Wireshark su uno dei server su cui si è manifestata in origine l’infezione. Alcuni virus di questo tipo infettano solamente le condivisioni disponibili all’avvio del programma infettato. In tal caso, individuare qui un file da utilizzare come esca per il virus.
Avviare Wireshark. L’obiettivo è monitorare l’attività di ricezione dalla rete della macchina. Tuttavia, si desidera controllare solamente l’attività correlata all’esca, in questo caso il file calc.exe.

virus rete 3

Wireshark in azione

Nell’angolo in basso a sinistra è presente un campo chiamato Filter: in questo campo digitare la stringa:

smb.file contains “calc.exe"

Selezionare il comando Capture/Start e fare clic su OK. Viene visualizzata la finestra di monitoraggio. Da questo momento sarà necessario osservare l’attività dalla finestra Messages del programma Utilities di NVC. Non appena il virus contamina l’esca, chiudere la finestra di monitoraggio di Wireshark. Nella finestra principale viene visualizzato il log del monitoraggio. Verificare che il filtro sia attivo facendo clic su Apply.
Osservando le colonne "Source" e "Destination", sarà possibile individuare gli indirizzi IP coinvolti nell’utilizzo del file calc.exe. In questo caso, l’indirizzo locale della macchina è 192.168.0.15. L’altro indirizzo IP coinvolto negli scambi è 192.168.0.13.

La macchina con IP 192.168.0.13 è responsabile della diffusione del virus. Il problema può essere risolto isolandola ed eseguendo una scansione completa su richiesta con le correzioni appropriate.

Ripetere l’operazione per assicurarsi che non ci siano altre macchine infettanti in rete.

Arrivederci al prossimo articolo

Michele Balzano

TELNET SMTP E FAKEMAIL

Telnet è un protocollo facente parte del TCP/IP, il quale fornisce servizi di connessione a terminali in remoto, in questo articolo descriverò la procedura ed i comandi necessari per inviare messaggi di posta elettronica utilizzando Telnet, per fare questo, utilizzeremmo un piccolo programma incluso nella maggior parte delle versioni di Windows che consente all'utente di connettersi ed interagire con un sistema remoto tramite linea di comando. Il piccolo programma che andremmo a utilizzare è Telnet.exe, più comunemente chiamato Telnet.

Il protocollo Telnet e un protocollo di login remoto di tipo client-server, che permette ad un utente attestato ad una certa macchina di stabilire una connessione TCP con un server remoto, la porta di default che utilizza è la numero 23.

La procedura ed i comandi da utilizzare:
L'invio dei messaggi di posta elettronica avviene generalmente tramite un server SMTP (Simple Mail Transfer Protocol) con il quale si comunica attraverso la porta 25 (quella riservata appunto al protocollo SMTP).

Il server SMTP è quindi il sistema remoto a cui andremmo a connetterci e ad interagire tramite Telnet; il server dovrà essere logicamente quello del nostro provider Internet (server della Tiscali se utilizziamo una connessione a Tiscali, server di Tin.it se utilizziamo una connessione Tin.it, ecc.). A seconda del provider, il nome (hostname) del server ovviamente varia: lo potete reperire sui settaggi del Server di posta in uscita del vostro eventuale client di posta elettronica (Outlook Express, Foxmail, Thunderbird, ecc.) oppure dalle informazioni fornitevi all'atto della sottoscrizione del vostro abbonamento Internet.

Per lanciare Telnet, basta scegliere Start>Esegui e digitare: Telnet e cliccare OK. Si aprirà il prompt dei comandi con Telnet pronto a ricevere comandi.


A questo punto dobbiamo connetterci al server SMTP. Il comando che in Telnet avvia una connessione ad un sistema remoto è:

open hostname port

dove hostname nel nostro caso rappresenta il nome del server SMTP e port la porta attraverso la quale comunicheremo con il server,cioè la 25. Occorre specificare sempre la porta qualora sia diversa dalla 23 poiché è quella utilizzata di default da Telnet per le connessioni.
Se ad esempio vogliamo utilizzare il server SMTP della Tiscali, dovremo digitare la riga:

open smtp.tiscali.it 25

seguita dalla pressione del tasto Invio.
Possiamo anche connetterci più velocemente al server senza dover prima lanciare

Telnet: basta digitare da
Start>Esegui, telnet open smtp.tiscali.it 25
quindi premere OK.

La scorciatoia funziona con qualsiasi sistema remoto. E' ovvio che per il buon fine dell'operazione deve essere attiva una connessione ad Internet e deve essere consentito (in caso di presenza di un firewall) il tentativo di accesso alla Rete da parte di Telnet.

Una volta connessi, il server risponderà con un messaggio di benvenuto e con la versione del suo software:
i comandi da utilizzare, a questo punto, sono praticamente gli stessi per tutti i server. Da notare che ad ogni comando inviato il server risponde con un codice e la relativa descrizione. Queste ultime possono leggermente variare a seconda del server, mentre i codici sono gli stessi.

Per il momento, sappiate che i codici di riposta "positiva" sono 220 e 250 ; descriverò più avanti i codici che rappresentano invece un errore.
A questo punto, possiamo iniziare ad inviare i comandi necessari per spedire l'e-mail. Per prima cosa è necessario "presentarsi" con il comando helo. In genere i client di posta indicano il nome host del computer mittente, ma potete anche mettere il vostro nome o quello che volete (ricordo che alla fine di ogni comando deve essere premuto il tasto Invio):

helo Mario Rossi

la stringa dopo helo verrà inserita nell'header del messaggio, accanto all'indirizzo IP mittente.
Dobbiamo ora indicare al server l'indirizzo e-mail mittente (il nostro), che verrà utilizzato dal destinatario in caso voglia risponderci (reply). Il comando da utilizzare è

mail from, con la seguente sintassi:
mail from:mario.rossi@internet.it

a questo comando deve seguire quello che indica l'indirizzo del destinatario del messaggio, che è rcpt to:

rcpt to:carlo.bianchi@internet.it

è necessario porre molta attenzione a scrivere l'indirizzo del destinatario in maniera corretta pena il mancato recapito dell'e-mail. E' inoltre possibile specificare più destinatari ripetendo il comando rcpt to.

rcpt to:carlo.bianchi@internet.it

rcpt to:vittorio.bianchi@internet.it

A questo punto, possiamo informare il server che siamo pronti a scrivere gli headers ed il corpo (body) del messaggio. Utilizziamo a tale scopo il comando data

data

senza aggiungere altre informazioni. Il server ci risponderà con il codice

354

invitandoci ad iniziare a scrivere le informazioni.

Anche in questo caso, ogni riga dovrà essere seguita dalla pressione del tasto Invio; a differenza di prima, però, il server non risponderà ad ogni linea inviata poiché il comando data lo istruisce sul fatto che stiamo scrivendo una serie di informazioni (per l'appunto gli headers ed il testo del messaggio).
Per iniziare, inseriamo i campi:

From: (che rappresentano le informazioni sul mittente) e
To: (le informazioni sul destinatario):
From: "Mario Rossi" <mario.rossi@internet.it>
To: "Carlo Bianchi"
carlo.bianchi@internet.it

queste informazioni sono quelle che compariranno nella barra di anteprima del client di posta del destinatario (di seguito l'esempio di come si vedrebbe in Outlook Express):
a questo punto, possiamo inserire l'oggetto del nostro messaggio, in questo modo:

Subject: Messaggio per Carlo Bianchi
se vogliamo, possiamo anche impostare la priorità del messaggio, mediante le righe
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal

se vogliamo dare al messaggio priorità normale (che viene anche data di default se non vengono specificate queste righe). Se riteniamo che il messaggio debba avere invece priorità alta, le righe da inserire sono:

X-Priority: 1 (Highest)
X-MSMail-Priority: High
mentre, per dare al messaggio priorità bassa, dovremo inviare le righe
X-Priority: 5 (Lowest)
X-MSMail-Priority: Low

Ci sono poi altri campi che è possibile inserire, ma tralascio perché in loro assenza il server SMTP provvede ad aggiungerli automaticamente (come la data e l'ora di invio del messaggio) o perché non sono importanti.
Possiamo ora inserire il testo vero e proprio del messaggio. Innanzitutto occorre istruire il server sul fatto che abbiamo concluso l'inserimento degli headers e ci accingiamo a scrivere il testo: questo lo si fa inserendo un invio a vuoto, a cui deve fare seguito il testo:

> Invio a vuoto
Gentile Carlo Bianchi,
le scrivo per ...
...
...
Distinti saluti.

adesso dobbiamo informare il server che abbiamo concluso la scrittura del testo: il comando preposto a questa azione è il punto (.), sempre seguito da Invio:
.
dopo questo comando, il server riterrà conclusa la e-mail e procederà alla suo recapito, rispondendo all'utente che ha accettato il messaggio mediante il codice 250.
L'ultima cosa che ci rimane da fare ora è chiudere la connessione con il server, mediante il comando quit:

quit

Telnet risponderà con il messaggio: Connessione al host perduta.
Nota importante: Telnet non permette di correggere eventuali errori di battitura da tastiera. L'uso dei tasti Backspace o Canc infatti non ha alcun effetto, per cui:

• se avete digitato in maniera errata un'informazione, vi conviene disconnettervi dal server con il comando quit e ricominciare daccapo;
• se invece avete sbagliato a digitare un comando, vi conviene dare Invio; in tal modo

il server risponderà che ha ricevuto un comando a lui sconosciuto e potrete quindi digitarlo nuovamente in maniera corretta.
Ecco l'esempio di invio di un'e-mail con Telnet (gli indirizzi usati sono di pura fantasia):
Per concludere, come detto in precedenza fornisco una sommaria descrizione dei più comuni codici di errore che sono restituiti dai server SMTP in caso di problemi:

421 - server al momento troppo affollato
500 - comando sconosciuto
501 - sintassi di un comando errata
503 - non è stato specificato l'indirizzo e-mail del mittente o del destinatario
504 - estensioni di un comando non valide
550 - relay non consentito verso l'indirizzo e-mail del destinatario (succede se non si è connessi al server del proprio provider Internet)
553 - indirizzo e-mail del mittente o del destinatario digitato in forma errata

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 possibilità` 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 permetterà, 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 risponderà sempre SMTP.

NOTA: se avete Winsock potete leggere il file "services", contenente i numeri
delle porte più usate. Il file si troverà 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 - può 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 identità.

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 sarà:
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 risponderà 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
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 e` passato il messaggio,
nonchè il nostro IP Address! Cio` 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 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 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:
Message-ID: <123.AA11345@microsoft.com>
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 verrà 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 listserv@brownvm.brown.edu).

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'è un file di 20 megabyte il cui nome è "enorme.zip" 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 vittima@lamer.it
CONNECT pluto.it anonymous indirizzo@falso.com
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 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 siccome  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 e-mail, no?

Arrivederci al prossimo articolo

Michele Balzano

Post più popolari