Dissezione del RaDa malware

Mario Pascucci <mpascucci (a) gmail com> http://ismprofessional.net/pascucci

22 settembre 2004
Analisi del malware denominato RaDa per la sfida "Scan of the Month" n.32 del Progetto Honeynet

1. Preparazione

2. Analisi

3. Risposte


1. Preparazione

In questa sezione sono elencati gli strumenti e le procedure di preparazione per l'analisi del malware.

1.1 Strumenti utilizzati

Bochs

un emulatore di PC multipiattaforma http://bochs.sourceforge.net/

Ethereal

LO SNIFFER per antonomasia, parte dell'installazione di default di molte distribuzioni Linux

Gvim

versione GUI in GTK+ di VI Improved, parte dell'installazione di default di molte distribuzioni Linux

hexdump

semplice dump esadecimale di file, parte dell'installazione di default di molte distribuzioni Linux

strings

estrazione di stringhe ASCII da file, parte dell'installazione di default di molte distribuzioni Linux

upx

compressore/decompressore di eseguibili http://upx.sourceforge.net/

Clamav

antivirus scanner Open Source http://clamav.sourceforge.net/

1.2 Preparazione dell'ambiente controllato

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.

1.3 Vantaggi di questo metodo

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.

2. Analisi

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:

--noinstall

non installa né le chiavi di registro né l'eseguibile nella directory c:\RaDa directory.

--gui

avvia RaDa in modo GUI.

--tmpdir path

accetta un argomento com path alla directory temporanea (Default c:\RaDa\tmp)

--installdir path

accetta un argomento come path di intallazione dell'eseguibile

--uninstall

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

--help

mostra una finestra di IExplorer con un messaggio di aiuto (solo una specie di About al momento)

--visible

rende visibile la finestra di IExplorer con la pagina HTML scaricata da http://10.10.10.10/RaDa/RaDa_commands.html

--commands file.html

cambia il nome del documento HTML dal default RaDa_commands.html

--server http://new.server.or.ip/directory/

cambia sia il server che la directory nel web server dal default http://10.10.10.10/RaDa

--authors

mostra un dialog di tipo MessageBox con i nomi degli autori (RAul e DAvid, le prime lettere usate per dare il nome all'eseguibile)

--period int

tempo in secondi fra tentativi di lettura del file comandi dal server

--cycles int

numero di cicli download/esecuzione da ripetere(default per sempre=0)

--cgipath string

imposta il path per i cgi script sul server (Default cgi-bin)

--cgiput string

nome dello script di upload (default upload.cgi)

--cgiget string

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

3. Risposte

Non ho potuto ottenere molte altre informazioni con questo metodo. Ma provo comunque a rispondere alle domande dello SoTM.

1. Indentifica e fornisci una panoramica dell'eseguibile, comprendendo le informazioni di base che possono aiutare nell'identificazione di oggetti simili.

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.

2. Identifica e spiega lo scopo dell'eseguibile.

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.

3. Identifica e spiega le differenti funzioni dell'eseguibile. Quali sono le sue capacità?

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.

4. Identifica e spiega il metodo di comunicazione dell'eseguibile. Definisci una regola per Snort per rilevare questo tipo di malware cercando di essere più generico possibilie, in modo da rilevare malware simili, senza avere eccessivi falsi positivi.

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.

5. Identifica e spiega ogni tecnica usata nell'eseguibile per proteggerlo dall'analisi o dal reverse engineering.

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.

6. Classifica questo tipo di malware (virus, worm...) e giustifica la tua scelta.

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.

7. Identifica uno strumento che nel passato ha avuto funzionalità simili.

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".

8. Suggerisci metodi di rilevamento e protezione per contrastare i rischi introdotti da questo eseguibile.

Ci sono vari metodi per rilevare l'infezione:

3.1 Domande Bonus

E' possibile interrogare l'eseguibile sulle persone che lo hanno sviluppato? In quali circostanze e in quali condizioni?

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:

sotm32.html.

Quali potenziamenti possiamo aspettarci in strumenti con simili scopi nell'immediato futuro?

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.