Pagine

Visualizzazioni totali

lunedì 14 settembre 2009

Malware 2.0: l'evoluzione della specie


L'evoluzione del malware è un tema che sta sollevando, negli ultimi tempi, enormi dibattiti. Lo scenario a livello gloAggiungi immaginebale è mutato drasticamente rispetto agli inizi del millennio, e le previsioni future non sono semplici. In questo articolo analizzeremo i cambiamenti filosofici e strutturali dei software nocivi, vedendo quanto e come sono cambiati in termini di scopo e tecnologie adottate; verrà spiegato come funzionano i malware moderni, anche per mezzo di un esempio pratico: la recente analisi del bot Bootkit presentata da Kaspersky Lab. Prima però è bene fare un po' di chiarezza nell'uso della terminologia.
I termini virus e worm indicano malware pensato per replicarsi lungo la rete, nel primo caso infettando un eseguibile già presente nel sistema e nel secondo caso in modo del tutto indipendente e spesso trasparente, ad esempio mediante un exploit di una vulnerabilità nota. È evidente che i virus per propagarsi dipendono dalla diffusione dell'eseguibile infetto, mentre i worm sono in questo del tutto autonomi, e anche per questa ragione sicuramente più efficienti e diffusi oggigiorno.
I termini trojan, rootkit e backdoor definiscono invece malware in grado, rispettivamente, di insediarsi nel sistema camuffandosi in un'applicazione legittima, di nascondere la propria presenza e quella di altri processi o file dannosi nel sistema e di garantire una via d'accesso alla macchina che aggiri le regolari procedure di autenticazione e autorizzazione.
Infine, ricordiamo che una botnet è una rete di computer infettati da un malware (bot) comandabile da remoto, solitamente per mezzo di un cosiddetto server di command and control (C&C), il cui scopo è sia consentire l'ulteriore propagazione del malware sia recapitare i comandi ai singoli bot - solitamente indicazioni per ingenti operazioni di spamming o denial of service.

Un mondo che cambia
Negli ultimi anni invece le cose sono mutate radicalmente: Internet è divenuta un terreno sempre più a diretto contatto con gli interessi di piccole e grandi aziende, sempre più ricco di informazioni sensibili. In parole povere, è nata e cresciuta una vera e propria scena del cybercrimine, finalizzato ai puri e semplici ritorni economici: commercio di exploit, di account, di botnet, tutto può essere venduto o affittato a cifre nel complesso considerevoli. Questo ha portato all'evoluzione del vecchio malware nel cosiddetto Malware 2.0.
In questo nuovo modello di malware, che ha avuto i primi timidi vagiti nel 2006 e si è sempre più perfezionato, abbiamo un'infezione e una propagazione che tendono alla trasparenza: meno polvere si solleva, più sarà semplice insediarsi e rimanere insediati. Lo scopo non è più un danno diretto, evidente e fondamentalmente incontrollato, quanto una silente compromissione dei sistemi vittima: i worm sono solo il primo passo per l'installazione di una backdoor che consenta il controllo remoto di un bot. Il codice nocivo dev'essere difficile da riconoscere ed analizzare, e il controllo delle stesse botnet dev'essere il meno tracciabile possibile. I vettori d'infezione si spostano, anch'essi, da ambienti plateali (i classici allegati nelle email) a luoghi più insospettabili (ad esempio, iframe infetti in siti Web fidati). Alle complessità tecniche sono inoltre affiancati meccanismi di social engineering per spingere sempre più utenti a compiere le azioni necessarie per essere infettati o per inserire dati confidenziali in form malevole.

Parlando di antivirus...
Un importante argomento è il funzionamento dei software utilizzati per contrastare le infezioni, in particolare gli antivirus. Per il riconoscimento di un file potenzialmente dannoso esistono due grandi categorie di possibilità: sfruttare una conoscenza a priori oppure analizzare dinamicamente il comportamento di un applicativo.
Fino a pochi anni fa, con lo scenario descritto in precedenza e caratterizzato da worm statici e ben noti, oltretutto sviluppati in modo non eccessivamente sofisticato e attento, il primo approccio non dava grossi problemi. In sostanza il classico antivirus lavora su un archivio di firme (una sorta di "impronte digitali", una per ogni malware noto), e confrontando i programmi eseguiti con ciascuna firma è in grado di rilevare una corrispondenza: se un programma si rivela essere - o contenere - un malware noto, l'esecuzione viene interrotta e con essa l'infezione della macchina.
A patto di aggiornare spesso il database di firme, il rischio di contrarre un'infezione era relativamente basso. Ovviamente rimane il problema della finestra temporale seguente il rilascio del malware ma antecedente l'aggiornamento dell'antivirus: in questo caso si possono utilizzare ad esempio tecniche euristiche, che analizzano il contenuto del file e calcolano la probabilità che si tratti di un file nocivo.
L'analisi comportamentale, invece, monitora in tempo reale le azioni svolte da un applicativo per stimare le probabilità che si tratti di un malware: se il software esegue azioni potenzialmente dannose, viene identificato come rischio per il sistema. Il grosso vantaggio di questo approccio è che esso non dipende da informazioni già collezionate, ma agisce dinamicamente: questo consente di rilevare e bloccare software pericolosi anche se non corrispondono a una entry nel database di firme e anche se il loro contenuto e la loro struttura non è analizzabile staticamente.
Nell'attuale panorama del malware, l'efficacia degli antivirus basati su conoscenza a priori (firme e euristiche) è di molto ridimensionata rispetto al passato, come vedremo fra poco, mentre l'analisi comportamentale sembra essere l'unica possibilità per il futuro. Il rovescio della medaglia di questa tecnologia è l'enorme difficoltà implementativa, che costringe a formulare modelli sufficientemente accurati da raggiungere il giusto compromesso tra la sicurezza e il proliferare di falsi positivi (che rappresentano un fastidio per l'utente e un deterrente a prendere sul serio gli alert).

Malware 2.0: i dettagli
Abbiamo visto il trend evolutivo del malware negli ultimi anni e capito come funzionano i principali metodi di rilevamento adottabili contro di esso, è ora il momento di analizzare più in dettaglio le caratteristiche del Malware 2.0 e alcune delle tecniche utilizzate per ottenerle.

Passare inosservati
Partiamo proprio dagli antivirus: lo scopo è quello di passare inosservati ai loro controlli, riuscendo quindi ad infettare anche le vittime che dispongano di programmi antivirus correttamente aggiornati. L'aggiornamento delle firme è innanzitutto uno dei punti deboli degli strumenti di difesa classici: il database di firme dev'essere costantemente modificato per aggiungere i nuovi malware e le relative varianti; questo non era un problema quando si parlava di numeri relativamente bassi, ma negli ultimi tempi il ritmo con cui compaiono nuove minacce è ben più preoccupante e difficile da seguire. Inoltre i virus-writer hanno affinato diverse tecniche per eludere del tutto i controlli: è possibile per un malware riconoscere e arrestare i processi relativi ai più conosciuti antivirus, impedirne l'aggiornamento, oppure cancellare la propria firma dall'archivio, ad esempio facendo in modo di entrare in esecuzione al riavvio della macchina, prima dell'antivirus stesso, con un hook nel registro di sistema.

Il packing
Più interessante ancora è il caso delle tecniche di autodifesa del malware, come ad esempio il packing. Lo scopo di un packer è, in questo caso, rendere un file eseguibile difficile da analizzare; gli analisti di malware fanno uso di tecniche di reverse engineering per riconoscere e classificare i file nocivi, e rallentare, rendendole difficoltose, queste analisi consente di avere una più ampia finestra temporale in cui il malware è in circolazione senza poter essere riconosciuto adeguatamente. Si è anche parlato delle tecniche di controllo degli antivirus basata sulla conoscenza a priori (le firme degli antivirus si basano, ovviamente, sul codice analizzato) o sull'analisi statica del codice dei file (metodi euristici): un packer è in grado di comprimere e cifrare il codice del malware, in modo tale che esso riesca ad infettare la macchina eludendo i controlli antivirus. In questo caso la distribuzione del malware comprende una parte cifrata e un modulo per la decrittazione della stessa: le funzionalità non cambiano, ma una normale scansione viene elusa perché il corpo (payload) dell'eseguibile è crittato, solitamente con una chiave diversa ad ogni infezione, il che impedisce di accedere al codice vero e proprio riconoscendolo come nocivo. Tra i packer più utilizzati segnaliamo ad esempio UPX e Themida; è importante sottolineare come questo tipo di strumenti non sia pensato esplicitamente per nascondere software nocivo, ma possa essere usato anche in modo perfettamente lecito, per comprimere eseguibili in modo trasparente o per tentare di proteggerli dal cracking. Nel mondo del malware, si stima che l'80% dei malware moderni sfruttino tecniche di packing.

L'unpacking
Riassumendo brevemente, il packing consente di rendere più difficoltosa l'analisi dei malware analyst e permette di passare inosservato ai controlli antivirus, perchè occulta il codice dell'eseguibile senza modificarne le funzionalità. Ci sono, ovviamente, delle contromisure nei confronti di entrambi i problemi: esistono tool di unpacking, pensati proprio per analizzare anche i file compressi con i più famosi packer: possono essere usati software per il reverse engineering con funzionalità di unpacking, come CFF Explorer, oppure tool per il debugging, come OllyDbg. Tuttavia questa soluzione dipende dall'insieme limitato di packer previsti dallo strumento utilizzato, e bisogna considerare che i malware più evoluti contengono controlli in grado di rilevare attività di emulazione e debugging, e agiscono di conseguenza limitando le proprie funzionalità nocive quando riconoscono di essere preda di un'analisi. Per questo la ricerca punta verso nuove soluzioni, in grado di superare queste problematiche.Per quanto riguarda gli antivirus, esistono suite che consentono di riconoscere file compressi con i packer più noti, ma la cosa va a scapito delle performance e ovviamente non è garantita la stessa percentuale di successo offerta da una coppia composta da un malware non cifrato e la sua firma già presente nel database dell'antivirus.

Il polimorfismo
Concettualmente simili al packing, vi sono le tecniche di polimorfismo: lo scopo è ancora quello di offuscare il codice del malware per sfuggire ai controlli basati sulle firme. Ad ogni infezione, il malware cambierà parte del proprio codice, riuscendo così ad eludere i controlli pur eseguendo sempre le medesime funzionalità. Il metamorfismo è un approccio ancora più complesso e radicale: in questo caso è l'intero software ad essere riscritto ad ogni nuova infezione, e non viene mai realmente decifrato in memoria, come accade invece nel caso del polimorfismo. Gli antivirus possono utilizzare tecniche euristiche per riconoscere codice nocivo in grado di mutare così spesso il proprio payload.

Infezione e propagazione
Passiamo ora ad analizzare le tecniche di infezione e propagazione dei malware moderni. I worm di mass mailing, che si propagano via email, stanno rapidamente lasciando spazio ai mondi del file sharing e del Web. Se nel primo caso i metodi di infezione sono facilmente immaginabili (condividere file nocivi, camuffandoli da qualcosa di interessante per gli utenti dei programmi di file sharing), il secondo caso è senz'altro più sofisticato. Il vettore d'attacco è una pagina Web, che può essere costruita e pubblicata ad hoc oppure ottenuta attaccando un sito Web potenzialmente molto visitato; al primo approccio viene affiancata una campagna di spam atta a linkare la pagina Web nociva, in modo tale che l'ignaro utente ci arrivi cliccando un collegamento su un'email forgiata appositamente per ingannarlo - facendogli credere ad esempio che andrà ad acquistare prodotti farmaceutici incredibilmente performanti.
Il secondo approccio prevede invece di "iniettare" codice all'interno di una pagina già esistente, sfruttando le tecniche di Cross-Site Scripting o SQL Injection o, più raramente, violando il server che ospita l'applicazione Web. Successivamente, quando l'utente visiterà la pagina - che ricordiamo appartenere a un sito fidato, ma compromesso - si ritroverà con un malware che tenterà di fare breccia nel suo sistema attraverso lo sfruttamento di vulnerabilità note nei più diffusi software utilizzati durante la navigazione Web (browser, lettori di file pdf, Flash player, ...) o nello stesso sistema operativo. Quindi, ad esempio, mentre la vittima sta semplicemente leggendo una notizia, nella stessa pagina Web è presente un iframe o uno script che lancia sulla sua macchina, in automatico e quindi senza bisogno di interazione o conferme (drive-by download), del codice che, se trova un applicativo vulnerabile, infetterà la macchina stessa in modo del tutto trasparente.
Per questo motivo, mantenere aggiornati i software e il sistema operativo, installando prontamente le ultime patch, è oggi tanto importante quanto l'aggiornamento dell'antivirus lo era a inizio millennio. Senza una vulnerabilità non patchata su cui appoggiarsi, una propagazione via drive-by download è resa molto più difficile.

Le funzionalità
Dopo aver visto alcune delle tecniche usate dai malware più sofisticati per eludere le difese e riuscire a propagarsi, infettando quante più macchine possibile, possiamo chiederci: qual è, ad oggi, lo scopo del codice maligno? Quali sono, cioè, le funzionalità di questi malware?
Gli ambiti in cui lavorano sono essenzialmente due: il furto di credenziali e la costituzione di botnet. Insediare su una macchina un malware in grado di monitorare le attività dell'utente dà la possibilità di ricevere a intervalli regolari i dati rubati, quali account bancari, account email o altro; tali dati vengono depositati in delle cosiddette dropzone, server adibiti a contenere le informazioni sottratte. Le dropzone possono essere molteplici e dinamiche, ovviamente allo scopo di essere il meno tracciabili possibile. Il furto di credenziali può avvenire in vari modi: attraverso l'installazione di keylogger o screen grabber, ossia software in grado di registrare i dati digitati dall'utente o di prendere un'instantanea dello schermo (tecnica utile nel caso i siti bancari utilizzino tecniche anti-keylogger, come le tastiere virtuali); oppure modificando i resolver sulla macchina vittima, e indirizzandola quindi verso siti forgiati appositamente per apparire identici al reale sito Web della banca, ma facenti capo a tutt'altra organizzazione; ancora, mediante il phishing più semplice, attraverso campagne di spam che spingano l'utente ad inserire le proprie credenziali in siti anche in questo caso forgiati sulle sembianze dell'originale ma con un URL diverso, facente quindi capo a un diverso server, ovviamente nocivo. I dati così recuperati possono poi essere rivenduti sul mercato nero (fino a 1000 dollari per un account bancario).
L'installazione di trojan, rootkit e backdoor per la costituzione di un bot consente di ottenere un computer zombie, ossia facente parte di una rete di computer tutti sotto il controllo di agenti esterni all'insaputa dei legittimi proprietari; il bot può scaricare dal C&C server (che, come per le dropzone, è spesso indirizzato in modo da cambiare spesso e risultare difficile da rintracciare) sia degli aggiornamenti, ossia ulteriore codice nocivo, sia dei comandi specifici, in modo tale che il botmaster abbia a disposizione una enorme rete al suo completo servizio. I bot potranno quindi cercare di propagarsi infettando altre macchine, rubare credenziali o essere usati per attacchi DDoS o, più spesso, per campagne di spam... Finalizzate ovviamente all'invio di mail di phishing per il furto di account e l'installazione di altro malware, chiudendo il cerchio. Le botnet possono ovviamente essere utilizzate anche da persone diverse rispetto a chi le ha costituite: possono cioè essere affittate, a tariffa mensile (migliaia di dollari al mese).

Un esempio reale di malware 2.0
Analizziamo ora, per concludere, un caso reale esaminato nei primi mesi del 2009 nei laboratori di Kaspersky Lab: il cosiddetto Bootkit, ritenuto uno dei malware più evoluti al tempo attuale.
La propagazione avviene con l'iniezione di codice su pagine Web esterne; in questo caso non si tratta di script o iframe (metodi più efficienti ma anche più tracciabili), ma di una sostituzione del parametro href dei link. Per l'infezione è richiesto quindi di cliccare su uno dei link modificati: in questo modo inizia una procedura che registra alcune informazioni sull'utente (referrer, indirizzo IP, nomi e versioni dei plugin installati sul browser) e le utilizza per creare un ID unico e per scaricare un exploit personalizzato; ad esempio, se viene rilevato un plug-in per i pdf non aggiornato, viene predisposto un exploit per sfruttarne la vulnerabilità. L'exploit viene eseguito, senza ovviamente che l'utente possa accorgersene, e scarica un trojan dropper sulla macchina della vittima, dopodiché reindirizza l'utente sulla reale pagina che voleva visitare: un procedimento del tutto trasparente che avviene nel tempo di un click su un link e dell'attesa di apertura della pagina richiesta. A questo punto, il trojan dropper entra in esecuzione e rilascia l'installer del bootkit sulla macchina, contrassegnandolo con l'ID personalizzato dell'utente. L'installer viene avviato e installa su disco il payload del malware, dopodichè viene lanciato un reboot: al riavvio, il bootkit entra in esecuzione con un hook, nasconde la propria presenza e inizia a funzionare come bot. Il C&C server della botnet risulta variabile: il suo nome di dominio può cambiare anche più volte in un solo giorno, rendendolo difficile da tracciare. Il bot contiene un algoritmo per la generazione di nomi di dominio, in modo tale da poter tentare la connessione diverse volte verso nuovi C&C server se l'indirizzo attuale venisse rifiutato.
Una volta stabilita una connessione con un corretto C&C server, il bot può scaricare moduli aggiuntivi e iniziare a inviare informazioni sull'utente infetto. In particolare, il modulo aggiuntivo scaricato (una DLL) viene caricato unicamente in memoria e non viene mai tenuto su disco, rendendolo non rilevabile dalle scansioni antivirus su filesystem; ovviamente al riavvio della macchina sarà cancellato dalla memoria centrale, ma prontamente riscaricato dalla Rete e ricaricato in memoria. Questo modulo si occupa di collezionare dati, come password presenti nel sistema e traffico di rete diretto verso i siti di banking, e inviarlo prontamente al server dell'attaccante, ma contiene anche più o meno tutte le funzionalità viste in precedenza nell'articolo: keylogging, redirect verso siti di phishing, e così via.
Abbiamo quindi visto un esempio reale e pratico del funzionamento di un sofisticato malware moderno, in grado di infettare le vittime in modo silenzioso e personalizzato, e capace di nascondere la propria presenza sul sistema vittima, pur continuando a comunicare con un sistema centralizzato ma in costante movimento, cui invia dati confidenziali di ogni tipo appartenenti all'utente vittima, che rimane all'oscuro di tutto.

Come difendersi?
È evidente che i tempi delle semplici scansioni basate su firme sono finiti, e che per difendersi dalle minacce informatiche quest'oggi sia necessario qualche strumento in più. Posto che il buon senso e una conoscenza di base sono sempre fondamentali, almeno per distinguere una form fasulla da una genuina, tecnicamente parlando, alla luce di quanto visto in questo articolo, cosa si può fare?
Installare sempre patch e aggiornamenti, una procedura magari tediosa ma che, come abbiamo visto, assicura robustezza contro i drive-by download, una delle minacce più serie visto che la procedura di infezione è automatizzata anzichè passare per la conferma dell'utente; utilizzare un firewall che filtri le connessioni in ingresso e quelle in uscita, per rilevare e bloccare eventuali tentativi di connessione da parte di bot insediatisi sulla macchina; ricorrere a suite di sicurezza sempre aggiornate e il più possibile complete, che integrino cioè non solo la verifica basata su firme, ma anche controlli proattivi basati su euristiche, ricerca delle vulnerabilità, unpacking, anti-rootkit, blacklist di siti malevoli e così via; alcuni esempi sono le soluzioni "Internet Security" di Kaspersky, Norton, AVG, Panda, F-Secure, McAfee, Avira, Nod32 e altri ancora. Nel caso voleste sperimentare l'analisi comportamentale, da affiancare ai tradizionali antivirus, potreste provare prodotti come NovaShield o ThreatFire. Per i più smaliziati, l'uso di ambienti sandbox, come macchine virtuali, per l'esecuzione delle attività più a rischio può essere un'utile aggiunta ai propri layer di sicurezza.