In questa sezione sono elencati gli strumenti e le procedure di preparazione per l'analisi del malware.
un emulatore di PC multipiattaforma http://bochs.sourceforge.net/
LO SNIFFER per antonomasia, parte dell'installazione di default di molte distribuzioni Linux
versione GUI in GTK+ di VI Improved, parte dell'installazione di default di molte distribuzioni Linux
semplice dump esadecimale di file, parte dell'installazione di default di molte distribuzioni Linux
estrazione di stringhe ASCII da file, parte dell'installazione di default di molte distribuzioni Linux
compressore/decompressore di eseguibili http://upx.sourceforge.net/
antivirus scanner Open Source http://clamav.sourceforge.net/
Ho preparato un PC virtuale con Bochs, processore Pentium, 128Mega di RAM, 1,2Giga di disco, scheda di rete NE2000 compatibile, modem, VGA. In questo PC ho installato Windows 2000 Server SP1. La rete è configurata per essere completamente isolata dal resto dei PC del laboratorio, ed un notebook con RedHat 9 è usato per fornire una serie di servizi utili per la simulazione, in particolare: un server DNS, un server IRC, un server HTTP, un server Samba con condivisioni aperte sulla stessa rete logica e fisica del PC virtuale. Sul PC reale che ospita il PC simulato vi è Ethereal attivo e pronto per catturate tutto il traffico generato.
E' un metodo piuttosto rudimentale, lo so, ma permette di ottenere rapidamente informazioni su eseguibile e funzionamento di qualsiasi malware. Ho usato lo stesso metodo per analizzare alcuni worm catturati direttamente da Internet. Senza usare strumenti dal PC infetto, come debugger, disassembler ed altri strumenti che per definizione se eseguiti sulla macchina infetta non sono più affidabili. Tutti gli strumenti sono esterni ed usati con l'approccio "black box".
E' utile con malware creati per impedire l'uso di debugger ed altri strumenti di reverse engineering.
Sono convinto che in un prossimo futuro non sarà difficile trovare malware in grado di rilevare e contrastare attivamente i tentativi di reverse engineering, così come oggi molti worm e spyware rilevano l'esecuzione di antivirus, firewall, strumenti come il Task Manager e il Registry Editor di Windows e li terminano per evitare interferenze da parte del legittimo utente del computer.
Questo metodo non usa nulla all'interno del PC infetto, e si possono ottenere informazioni utili senza interferire con il "normale" funzionamento dell'attività del malware.
L'eseguibile è compresso un una versione modificata di UPX. Clamav non lo identifica ovviamente come un pericolo, né lo fa la scansione online di Kaspersky.
Appare con una simpatica icona di pesce palla, e mostra nelle proprietà alcune stringhe come Company name: Malware e Internal Name: RaDa che possono rendere facile la rilevazione con un antivirus scanner.
Se eseguito, crea una directory con nome RaDa sulla radice del disco C:, e due subdirectory, bin e tmp. Crea anche una chiave di registro in HKLM/Software/Microsoft/Windows/CurrentVersion/Run con nome "RaDa" per avviarsi al login di qualsiasi utente. Immediatamente dopo tenta di connettersi all'indirizzo IP 10.10.10.10 porta 80 (HTTP).
Sul notebook RedHat 9 ho creato un IP alias con il comando:
ifconfig eth0:1 inet 10.10.10.10 netmask 255.255.255.0 up
ed ho avviato Apache, configurato per "ascoltare" su tutte le interfacce.
Appena avviato Apache, il PC virtuale tenta la connessione al web server e manda la seguente richiesta HTTP:
GET /RaDa/RaDa_commands.html HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */* Accept-Language: it Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Host: 10.10.10.10 Connection: Keep-Alive
che ovviamente fallisce, non esistendo il documento richiesto.
Ho mandato un segnale di "segmentation fault" (SEGV) a Bochs con il comando:
killall -SEGV bochs
che provoca la terminazione di Bochs con un core dump, contenente l'immagine della memoria del PC virtuale durante l'esecuzione del malware. Successivamente ho estratto le stringhe ASCII con:
strings -a -tx core > RaDa.txt
ed ho aperto il file risultante con Gvim. Una ricerca per "RaDa" porta a trovare questi gruppi di caratteri:
Offset Stringa 5cff654 Command_install 5cff674 You can learn a lot playing funny security challenges 5cff6dc Command_usage 5cff6ec Command_exit 5cff6fc Command_conf 5cff71c Label1 5cff724 Label2 5cff72c Label3 5cff734 Command_go 5cff740 Command_uninstall
ed ancora più interessanti:
Offset Stringa 5ec0dba Command_uninstall 5ec0dd0 Uninstall 5ec0df2 MS Sans Serif 5ec0e08 Command_install 5ec0e1c Install 5ec0e3c MS Sans Serif 5ec0e52 Command_exit 5ec0e63 Exit 5ec0e80 MS Sans Serif 5ec0e96 Command_usage 5ec0ea8 Show usage 5ec0ecb MS Sans Serif 5ec0ee1 Command_conf 5ec0ef2 Show config 5ec0f16 MS Sans Serif 5ec0f2c Command_go 5ec0f59 MS Sans Serif 5ec0f6f Label3 5ec0f7a (c) Raul Siles && David Perez 5ec0fb2 Comic Sans MS 5ec0fc8 Label2 5ec0fd3 SotM 32 - September 2004
Se si prova a lanciare rada.exe con un qualsiasi argomento (per esempio /help) si ottiene una finestra di Internet Explorer (senza menu, toolbar e barra di stato) con un messaggio che contiene un URL per il sito Scan of the Month. Queste stringhe non compaiono nel file generato dal comando strings visto sopra. Ho generato allora un dump esadecimale completo del core con:
hexdump -C core > RaDa.hex
e l'ho aperto con Gvim, cercando strighe come: h<any char>o<any char>n<any char>e, ed ho trovato alcune stringhe Unicode interessanti:
--period --gui --cgiput --tmpdir --verbose --visible --server --commands --cgipath --cgiget --cycles --help --installdir --noinstall --uninstall --authors
Passando queste stringhe come argomento al lancio di rada.exe sulla riga di comando si ottengono risultati interessanti:
non installa né le chiavi di registro né l'eseguibile nella directory c:\RaDa directory.
avvia RaDa in modo GUI.
accetta un argomento com path alla directory temporanea (Default c:\RaDa\tmp)
accetta un argomento come path di intallazione dell'eseguibile
cancella la chiave di registro in HKLM/...../Run per l'autostart e l'eseguibile RaDa.exe da c:\RaDa\bin, ma non rimuove le directory
mostra una finestra di IExplorer con un messaggio di aiuto (solo una specie di About al momento)
rende visibile la finestra di IExplorer con la pagina HTML scaricata da http://10.10.10.10/RaDa/RaDa_commands.html
cambia il nome del documento HTML dal default RaDa_commands.html
cambia sia il server che la directory nel web server dal default http://10.10.10.10/RaDa
mostra un dialog di tipo MessageBox con i nomi degli autori (RAul e DAvid, le prime lettere usate per dare il nome all'eseguibile)
tempo in secondi fra tentativi di lettura del file comandi dal server
numero di cicli download/esecuzione da ripetere(default per sempre=0)
imposta il path per i cgi script sul server (Default cgi-bin)
nome dello script di upload (default upload.cgi)
nome dello script di downolad (default download.cgi)
Ci sono altre stringhe interessanti:
Starting DDos Smurf remote attack
HKLM\Software\VMware, inc.\VMware Tools\Install\Path
Non ho potuto ottenere molte altre informazioni con questo metodo. Ma provo comunque a rispondere alle domande dello SoTM.
E' un eseguibile compresso con una variante di UPX. Contiene delle stringhe, leggibili anche dal file compresso, che lo rendono facilmente identificabile, come "Malware" nella proprietà "Company Name" e l'icona del pesce palla.
L'eseguibile si autoinstalla ed inizia richieste di pagine web appositamente costruite dove, credo, trova istruzioni da eseguire, sotto forma di parole chiave o script VBS, come fa pensare la stringa "wscript" contenuta nell'eseguibile.
Ha alcune funzioni interessanti:
Da questo, sembra che sia pensato per trasformare il computer infetto in uno "zombi" in grado di lanciare attacchi ad altri computer nella rete. Ancora, sembra in grado di "rubare" informazioni e dati dal computer infetto, trasferendole ad un computer remoto. Inoltre la presenza di una stringa "screenshot" nell'eseguibile, fa pensare che sia in grado di prendere uno screenshot del computer infetto e spedirla ad un computer remoto.
Usa normale protocollo HTTP. Potrebbe essere molto difficile sviluppare una regola, dato che la stringa usata nel "get" può essere modificata per essere qualsiasi. Può essere utile se il malware parte con una connessione iniziale sempre verso lo stesso server e subito dopo cambia il target per le query successive. In questo caso può essere utile una regola per rilevare richieste HTTP al server 10.10.10.10 porta 80 e una richiesta GET all'URL RaDa/RaDa_commands.html, qualcosa come:
alert tcp $HOME_NET any -> any $HTTP_PORTS (msg:"Un PC infetto da RaDa Malware tenta di raggiungere un server per prendere comandi"; uricontent:"RaDa/RaDa_commands.html"; nocase; flow:from_client,established; classtype: misc-activity; rev:1;)
Ovviamente nel mondo reale un malware prova a connettersi con server aventi indirizzo IP pubblico, diverso da 10.x.x.x, 192.168.x.x e 172.16-31.x.x (indirizzi IP privati RFC1918), e si può allora cambiare la regola nella parte destinazione da "any $HTTP_PORTS" a "$EXTERNAL_NET $HTTP_PORTS" per una corretta rilevazione.
Il malware adotta un metodo ampiamente utilizzato da molti dei worms/trojans che infestano Internet al momento, come Gaobot, Agobot, SDbot e simili. Usa un compressore di eseguibili modificato, per evitare l'eventuale decompressione. In molti casi i malware usano due o più compressori in cascata per complicare la decompressione e l'analisi. In questo specifico caso, molti antivirus scanner identificano l'eseguibile RaDa come compresso con UPX, ma UPX stesso è incapace di decomprimerlo.
Penso che la categoria che meglio si adatta per questo malware possa essere backdoor/bot. Non è propriamente un virus, dato che non sembra possedere codice per replicarsi o infettare direttamente. Non è un worm, perché non usa direttamente la rete per propagarsi, non avendo proprio codice di replicazione. Non è nemmeno un trojan, dato che non ha apparenza di utilità all'utente, tale da indurre l'utente stesso a lanciarlo.
Può essere un punto di accesso al PC infetto, come appunto una backdoor, e può eseguire compiti semplici in modo automatico, controllato da un "proprietario" remoto, come appunto un bot. Il vantaggio per questo tipo di backdoor è che funzionano anche quando il PC infetto è dietro un firewall.
Questa è la mia prima partecipazione assoluta alla sfida, e non conosco precedenti "strumenti" analizzati. Ma guardando nel sito del Progetto Honeynet, ho trovato alcune somiglianze (poche) con il malware del "Reverse Challenge".
Ci sono vari metodi per rilevare l'infezione:
Sì, usando uno di questi comandi:
c:\rada\bin\rada --authors c:\rada\bin\rada --help
oppure sfruttando il comportamento di default con un argomento errato sulla riga di comando:
c:\rada\bin\rada wrongoption
che mostra una finestra di IExplorer con gli autori, oppure usando l'interfaccia GUI:
c:\rada\bin\rada --gui
dove gli autori sono in evidenza. Uno strano malware, indubbiamente...
Altro modo, usando il metodo descritto nel paragrafo Analisi, con l'estrazione di stringhe. Si possono vedere alcuni screenshots dei vari dialog e delle finestre di IExplorer seguendo questo link:
Alcuni dei possibili miglioramenti di questo tipo di malware sono già utilizzati in molti dei worm di Internet come SDbot, Spybot (il worm, non l'utility anti-spyware omonima), Gaobot e simili. Molti di essi usano strategie per evitare sia il rilevamento che la rimozione, come ad esempio:
Questi malware mostrano inoltre un buon numero di metodi per propagarsi su più computer possibile. Una variante di Gaobot usa sei differenti vulnerabilità di Windows, due di Internet Information Server, una di SQL Server ed infine se nessuno degli exploit funziona, tenta di copiarsi nelle condivisioni disco con password deboli.
Dopo l'infezione, il worm si connette ad un server IRC come bot ed attende istruzioni. Possiede la capacità di lanciare una gran varietà di attacchi DDoS sul network, contando anche sul gran numero di PC infetti, usati contemporaneamente. Inoltre prevedono la capacità di prelevare qualsiasi file dal PC infetto. Alcuni possono eseguire qualsiasi comando o fare un reboot del PC. Oppure hanno un server di posta interno per inviare messaggi a tutti gli indirizzi trovati all'interno del PC infetto. Hanno anche funzioni di network sniffer.
Questi malware sono progettati per eseguire molti compiti, tutti pericolosi e tutti agli ordini diretti del "creatore" del worm.
Penso che le ultime patch e Service Pack rilasciati aiuteranno a diminuire l'incidenza del rischio, ma troppi utenti sono ignari del pericolo.