Tecniche di rilevazione del codice malevolo



Documenti analoghi
Che cosa è un VIRUS?

ALLEGATO Esempio di questionario per la comprensione e valutazione del sistema IT

INFORMATION TECNOLOGY. a cura di Alessandro Padovani padoale@libero.it

Antivirus. Lezione 07. A cosa serve un antivirus

Identità e autenticazione

Tipologie e metodi di attacco

Introduzione alla Virtualizzazione

Symantec Insight e SONAR

Domande e risposte su Avira ProActiv Community

Ata_NiAg02. Modulo Gestione Agenti

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

Virus informatici Approfondimenti tecnici per giuristi

SICUREZZA INFORMATICA MINACCE

Al termine del lavoro ad uno dei componenti del gruppo verrà affidato l incarico di relazionare a nome di tutto il gruppo.

e quindi di navigare in rete. line può essere limitato a due persone o coinvolgere un ampio numero

BASI DI DATI per la gestione dell informazione. Angelo Chianese Vincenzo Moscato Antonio Picariello Lucio Sansone

In questa pagina si descrivono le modalità di gestione del sito in riferimento al trattamento dei dati personali degli utenti che lo consultano.

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

Internet Banking per le imprese. Guida all utilizzo sicuro

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

Riepilogo delle modifiche di PA-DSS dalla versione 2.0 alla 3.0

Introduzione Ai Data Bases. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San giovanni

La gestione di un calcolatore. Sistemi Operativi primo modulo Introduzione. Sistema operativo (2) Sistema operativo (1)

- la possibilità di monitorare lo stato attuale della macchina - fornire una reportistica sulla base di alcune variabili

NOTE OPERATIVE. Prodotto Inaz Download Manager. Release 1.3.0

Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste

3. Introduzione all'internetworking

SOMMARIO... 3 INTRODUZIONE...

Titolare del trattamento dei dati innanzi descritto è tsnpalombara.it

Client - Server. Client Web: il BROWSER

La VPN con il FRITZ!Box Parte I. La VPN con il FRITZ!Box Parte I

Approccio stratificato

Worm I worm arrivano come allegato di posta. Se si clicca su allegato il worm inizierà a replicarsi e ad inviarsi a tutta la vostra rubrica.

PIATTAFORMA DOCUMENTALE CRG

INFORMATIVA SUL DIRITTO ALLA PRIVACY PER LA CONSULTAZIONE DEL SITO WEB

I casi d uso corrispondono ai compiti che l attore (che può essere una persona fisica e non) può svolgere.

Introduzione. Coordinazione Distribuita. Ordinamento degli eventi. Realizzazione di. Mutua Esclusione Distribuita (DME)

CitySoftware PROTOCOLLO. Info-Mark srl

Introduzione a Internet e cenni di sicurezza. Dott. Paolo Righetto 1

Soluzione dell esercizio del 2 Febbraio 2004

Scopo della lezione. Informatica. Informatica - def. 1. Informatica

IT Security 3 LA SICUREZZA IN RETE

Sicurezza Aziendale: gestione del rischio IT (Penetration Test )

IDENTIFICAZIONE DEI BISOGNI DEL CLIENTE

Il seguente Syllabus è relativo al Modulo 7, Reti informatiche, e fornisce i fondamenti per il test di tipo pratico relativo a questo modulo

Guida alla registrazione on-line di un NovaSun Log

Creare una Rete Locale Lezione n. 1

marketing highlights Google Analytics A cura di: dott. Fabio Pinello

Firewall, Proxy e VPN. L' accesso sicuro da e verso Internet

SISTEMI OPERATIVI. Prof. Enrico Terrone A. S: 2008/09

IL CONTATORE ELETTRONICO Istruzioni per l uso.

Sistema operativo: Gestione della memoria

LICENZA USO SOFTWARE on line So.Ge.R. PRO interoperabile SISTRI

Come rimuovere un Malware dal vostro sito web o blog Che cos è un Malware

Progettazione di un Database

Pronto Esecuzione Attesa Terminazione

Si applica a: Windows Server 2008

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Protocollo Informatico (D.p.r. 445/2000)

Database. Si ringrazia Marco Bertini per le slides

Il nuovo browser italiano dedicato alla navigazione e comunicazione sicura in internet per bambini

Agenti Mobili Intelligenti e Sicurezza Informatica Utilizzare un nuovo paradigma applicativo per la realizzazione di sistemi informatici sicuri.

Comunicazione tra Computer. Protocolli. Astrazione di Sottosistema di Comunicazione. Modello di un Sottosistema di Comunicazione

Corso di Amministrazione di Reti A.A. 2002/2003

Sistemi di Antivirus CEFRIEL. Politecnico di Milano. Consorzio per la Formazione e la Ricerca in Ingegneria dell Informazione. Politecnico di Milano

Manuale Utente. Gestione Richieste supporto Data Warehouse. Della Ragioneria Generale dello Stato. Versione 1.0. Roma, Ottobre 2015

Internet e posta elettronica. A cura di Massimiliano Buschi

Sicurezza informatica. malware. Facoltà di Lettere e Filosofia anno accademico 2008/2009 secondo semestre

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Manuale Utente. Gestione Richieste supporto BDAP. Versione 1.0

Novità di Access 2010

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

Modalità e luogo del trattamento dei Dati raccolti Modalità di trattamento


Coordinazione Distribuita

Provincia Autonoma di Bolzano Disciplinare organizzativo per l utilizzo dei servizi informatici, in particolare di internet e della posta

INFORMATIVA SULLA PRIVACY

Manuale Utente Albo Pretorio GA

Stampe in rete Implementazione corretta

Archivi e database. Prof. Michele Batocchi A.S. 2013/2014

Il sistema C.R.M. / E.R.M.

Servizi di Sicurezza Informatica. Antivirus Centralizzato per Intranet CEI-Diocesi

Ti consente di ricevere velocemente tutte le informazioni inviate dal personale, in maniera assolutamente puntuale, controllata ed organizzata.

Introduzione alle tecnologie informatiche. Strumenti mentali per il futuro

Sistemi Operativi STRUTTURA DEI SISTEMI OPERATIVI 3.1. Sistemi Operativi. D. Talia - UNICAL

Appunti sulla Macchina di Turing. Macchina di Turing

L APP PER IPHONE E ANDROID

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino

Privacy Policy di

Windows Vista, il nuovo sistema operativo Microsoft che cerca le giuste risposte ai quesiti di sicurezza

Capitolo 4 Pianificazione e Sviluppo di Web Part

Troppe Informazioni = Poca Sicurezza?

Mac Application Manager 1.3 (SOLO PER TIGER)

STAMPA DI UNA PAGINA SEMPLICE

Il contatore elettronico

Autorità per l'informatica nella pubblica amministrazione Deliberazione n. 42/2001

Hub-PA Versione Manuale utente

Guida Compilazione Piani di Studio on-line

Transcript:

Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica Elaborato finale in Sistemi Operativi Tecniche di rilevazione del codice malevolo Anno Accademico 2011/12 Candidato: La Marca Rosa Maria matr. N46000580

Indice Introduzione 4 Capitolo 1. Cosa è il codice malevolo 7 1.1 Tipi di malware 8 1.2 Vettori di infezione: diffusione del codice malevolo 9 1.2.1 Social Engineering 10 Capitolo 2. Tecniche di rilevazione del codice malevolo 11 2.1 Analisi statica 13 2.1.1 Limiti dell analisi statica 14 2.2 Analisi dinamica 15 2.2.1 Monitoraggio delle chiamate di sistema:funzioni di hooking 16 2.2.2 Analisi dei parametri 16 2.2.3 Monitoraggio del flusso di informazioni 17 2.2.4 Tracciamento delle funzioni 17 Capitolo 3. Strategie di implementazione dell analisi dinamica 18 3.1 Analisi in un emulatore 18 3.2 Analisi in una macchina virtuale 19 3.3 Simulazione della rete Internet 20 3.4 Limiti dell analisi dinamica: tempo di analisi 20 Capitolo 4. Confronto tra le tecniche di rilevazione 23 4.1 Programmi anti-virus 24 Conclusioni 26 Bibliografia 27 III

Introduzione Internet è il mezzo di comunicazione più diffuso al mondo. Esso consiste in una rete di computer che possono scambiarsi informazioni e dati reciprocamente; oggi viene utilizzato da tantissimi utenti che usufruiscono dei servizi commerciali,lavorativi e scientifici che vengono offerti dalla rete;questo ha contribuito alla diffusione di Internet ovunque e tante persone la utilizzano ormai per fare qualsiasi cosa dal comprare abiti o oggetti e ad usarla come deposito di dati personali e riservati. Per questo motivo si è diffusa tra alcuni utenti l idea di poter approfittare delle persone utilizzando questo mezzo così potente. Tali utenti hanno pensato di creare del codice malevolo che si diffondesse utilizzando la rete Internet e infettasse i computers degli utenti più ingenui prelevando loro dati e informazioni importanti come numeri di carte di credito o password di ogni genere. Gli scopi che portano un utente alla creazione di tali codici sono differenti, principalmente economici dato che oggi la rete internet viene utilizzata come deposito di importanti informazioni personali degli utenti che la utilizzano. In questo modo è venuta a mancare una delle principali caratteristiche dei sistemi che sono l affidabilità e la riservatezza dei dati quindi il fornire ad un utente la possibilità di inserire dei dati riservati che non siano leggibili da tutti e modificabili. La sicurezza è diventata una parte fondamentale nello sviluppo della rete internet in modo da garantire l autenticità e l integrità dei dati. La capillare diffusione della rete utilizzata come mezzo di comunicazione, come sorgente 4

di informazioni e spazio commerciale e la conseguente nascita dei malware, hanno portato alla ricerca di tecniche che garantissero la sicurezza della rete e tenessero i dati degli utenti al sicuro, delle tecniche che siano in grado di rilevare un codice malevolo e limitarne la diffusione sul sistema. L arma principale per combattere la diffusione di tale codice sono i rilevatori di malware, come i virus scanner o antivirus, che mettono a disposizione degli utenti dei software che permettono al sistema operativo di rilevare delle minacce, cioè del codice ritenuto malevolo;questi programmi sono in continua evoluzione e necessitano di un aggiornamento costante data la nascita di nuovi codici che riescono a superare le barriere imposte da tali software diventando sempre più sofisticati. Lo scopo principale delle tecniche di rilevazione del codice malevolo è comprendere la funzionalità del codice,capire come esso infetta un sistema e come agisce, di conseguenza creare delle firme di tale codice che ne permettano l identificazione in qualsiasi sistema esso cerchi di infettare,inserire tali firme in dei database di cui i vari programmi di scansione devono essere forniti. La battaglia contro il malware quindi si basa sul confronto tra codice ritenuto malevolo e i codici inseriti nel database del programma anti-virus. Esistono diverse tecniche che permettono di prelevare informazioni su di un malware rapidamente per capirne il funzionamento. 5

Capitolo 1 Cosa è il codice malevolo Tra tutti i tipi di minacce che possono indebolire un sistema informatico,quella più sofisticata è il codice malevolo che sfrutta le vulnerabilità del sistema e si diffonde principalmente utilizzando la rete Internet. Si definisce codice malevolo o malware un software che deliberatamente svolge l intento dannoso di un utente malizioso.[1]. Quindi un codice malevolo è un programma che riesce ad infiltrarsi nel sistema operativo di un computer utilizzando la rete e ciò consente all utente malizioso, l intruso, di accedere al sistema prelevando informazioni e diventando una minaccia per gli utenti, per la sicurezza e la privacy dei loro dati. Un malware (un altro modo di indicare un codice malevolo che viene dalla fusione delle parole malicious e software ) presenta differenti versioni simili tra loro che rendono ulteriormente difficile la rilevazione e di conseguenza non fermano la diffusione da un utente all altro. Virus,cavalli di troia e worms sono delle differenti classi di codice malizioso che si sviluppano ognuno in modo diverso agendo in maniera differente. I malware sono programmi che penetrano nel computer bersaglio e una volta che vengono mandati in esecuzione,svolgono il proprio compito mettendo in pericolo la correttezza e la riservatezza dei dati in esso contenuti. Possiamo dividerli in due gruppi :quelli che richiedono un programma ospite e quelli indipendenti. I primi sono detti parassiti e sono frammenti di programmi che necessitano di qualche applicazione o utility per svilupparsi. Gli altri sono programmi autonomi che vengono schedulati dal sistema operativo. Alcuni 6

malware,inoltre, sono in grado di replicarsi e una volta infettato il sistema, utilizzano degli strumenti da esso forniti per diffondersi altrove come le e-mail. [4] 1.1 Tipi di malware Vediamo di seguito le principali classi di malware, anche se una specifica istanza di una di queste classi può esibire un comportamento comune ad altre,rendendo la rilevazione ulteriormente difficile. -VIRUS I virus sono parti di codice che necessitano di un programma host che li ospiti per poter funzionare. Come suggerisce il loro nome,questi sono in grado di replicarsi ossia si propagano infettando ogni host vulnerabile che essi trovano. Un virus si attacca ad un altro programma e va in esecuzione di nascosto quando il programma host viene eseguito. Una volta che il virus è in esecuzione, è possibile eseguire qualsiasi funzione consentita dai privilegi dell'utente corrente, come ad esempio la cancellazione di file e dei programmi. Un virus informatico,inoltre, contiene nel suo codice delle istruzioni per fare copie di se stesso,quindi appena il computer infetto viene a contatto con pezzi di software non infetto passa una copia del virus al nuovo programma infettando anche quello. In questo modo un virus riesce a diffondersi da un computer ad un altro di utenti del tutto ignari di ciò. [4] -WORM I worm sono simili ai virus quindi sono in grado si replicarsi ma non necessitano di un programma per poter funzionare. Il loro principale mezzo di diffusione sono le e-mail. -TROJAN HORSE I cavalli di troia sono programmi ingannevoli che appaiono utili all utente ma risultano dannosi. Essi si travestono da programmi quali sfondi,giochi scaricabili o plug-in e una volta installati mostrano il loro comportamento dannoso modificando ad esempio le impostazioni di sistema o scaricando altro malware. Un esempio di un cavallo di troia difficile da rilevare è un compilatore che è stato modificato in modo da inserire del codice addizionale in certi programmi quando vengono compilati, come ad esempio un programma di accesso al sistema. Il codice crea una 7

backdoor nel programma di login che permette all'utente malevolo di accedere al sistema utilizzando una password speciale. Questo cavallo di Troia non potrà mai essere scoperto leggendo il codice sorgente del programma di login. [4] -SPYWARE Gli spyware sono software che prelevano informazioni dal sistema della vittima come le credenziali di accesso bancarie o il contenuto di documenti e trasferiscono tali informazioni all attaccante.[1] -BOT I bot sono parti di malware controllabili in remoto da un utente, cioè una volta infettato il sistema consentono ad un utente di controllarlo a distanza da un bot-master. Essi si diffondono tra più sistemi tramite e-mail spam che portano all istallazione di spyware nel sistema della vittima. Ogni classe di malware può avere anche numerose istanze tra loro differenti,per questo la rilevazione del codice malevolo risulta difficile inoltre è importante fornire di ogni malware un modello o un campione che ne permetta l'identificazione. Le tecniche di rilevazione del codice malevolo si basano sul confronto tra il codice ottenuto e il modello del malware che è stato ricavato. Pertanto è necessario creare delle SIGNATURE cioè delle firme dei campioni di codice malevolo che possano essere utilizzate nella ricerca di eventuali minacce in un sistema operativo. Gli attuali software antivirus che vengono installati sui computers dei vari utenti non sono altro che dei database di signature che necessitano di essere continuamente aggiornati. Il loro funzionamento si basa sul confronto di un campione di codice ritenuto dannoso e quello contenuto nel database; se viene rilevata una somiglianza allora si tratta di un codice già analizzato altrimenti sarà un nuovo codice da analizzare per capirne il funzionamento e inserirlo di conseguenza nel database. Diversi campioni di codice malevolo possono derivare da un'unica classe quindi essere delle semplici varianti di alcuni già noti, in questo modo il loro rilevamento richiede dell ulteriore tempo per poter diversificare le varie versioni di quel malware. 8

Pertanto ogni volta che si rileva una possibile minaccia, essa deve essere analizzata per verificare se si tratta di un nuovo codice malevolo che quindi deve essere inserito o di una nuova versione di uno già esistente e pertanto deve essere aggiornato. Lo scopo di un analista è quello di determinare, partendo da una minaccia, una firma del codice che lo caratterizzi in maniera univoca, lo può fare prima isolando il codice malevolo, poi capendo il suo funzionamento e quali sono i meccanismi di infezione utilizzati. 1.2 Vettori di infezione:diffusione del codice malevolo Il malware per diventare dannoso deve inserirsi in un sistema di una vittima,passando inosservato, essere mandato in esecuzione e una volta infettato il sistema svolgere il suo compito;quindi tralasciando la funzionalità di ogni malware o il loro modo di agire per infettare il sistema, è importante capire in che modo essi riescono ad infilarsi in un sistema e danneggiarlo,quale mezzo essi utilizzano. I vettori di infezione rappresentano tutto il meccanismo seguito dal codice malevolo per infettare il sistema e permettere alla minaccia di diffondersi. Il mezzo principale di diffusione è la rete internet con gli strumenti che esso offre quali e-mail, download o web server. Quindi un utente malizioso sfrutta le vulnerabilità presenti sulla rete internet per diffondere il proprio codice ma soprattutto sfrutta l ingenuità degli utenti che non consapevoli, usano e istallano programmi infetti diventando essi stessi dei mezzi di diffusione. Molti software presentano numerosi bug che possono essere sfruttati per far compiere operazioni impreviste dal programma come l esecuzione di codice estraneo al programma stesso. Questo meccanismo di infezione è il più difficile perché richiede una buona conoscenza della programmazione. I servizi di rete forniscono agli utenti delle risorse condivise e dei servizi ai clienti in rete tramite dei sistemi operativi o delle macchine(ad esempio il servizio offerto dal DNS di risoluzione degli indirizzi IP). Questi servizi di rete presentano numerose debolezze che un utente malintenzionato potrebbe sfruttare per far svolgere a tali sistemi i loro programmi facendo eseguire il loro codice sulla macchina che fornisce il servizio. In 9

questo modo ogni cliente che richiederà successivamente quel servizio verrà automaticamente infettato.[1] Un altro meccanismo di diffusione dei malware è attraverso il drive-by download o download guidato. Molti browser web presenti nei sistemi degli utenti presentano delle vulnerabilità che possono portare un applicazione a scaricare del codice malevolo ed eseguirlo automaticamente sul sistema della vittima senza che egli se ne accorga. In questo modo sembra che l utente stesso scarichi il codice e lo esegua e questo rende ancora più difficile la rilevazione in quanto sembra che sia l utente stesso ad autorizzare il sistema ad eseguire quel codice, rendendo inefficace qualsiasi blocco imposto dai firewall che bloccano l eventuale esecuzione non autorizzata di codice. Il passo più importante quindi è entrare in un sistema di un utente vittima e per fare questo basta approfittare delle vulnerabilità della rete e soprattutto dell ingenuità degli utenti che senza preoccupazioni aprono siti web poco sicuri o scaricano allegati o e-mail infette. Quindi aggiungendo dei collegamenti a siti web non sicuri,si può portare l utente a scaricare inconsapevolmente del codice malevolo. 1.2.1 Social engineering I meccanismi di infezione seguiti da un codice malevolo per diffondersi si basano soprattutto sul Social engineering. Tutto ciò che porta un utente ad eseguire del codice malevolo sul suo computer con l inganno viene definito social engineering.[1] Il social engineer raccoglie informazioni sulla vittima e basandosi sui dati raccolti gli fa delle offerte allettanti in modo da poter accedere al suo sistema. Tali offerte possono essere delle soluzioni a problemi richiesti o l istallazione di programmi necessari per vedere dei video o delle foto ricercate dall utente. In questo modo è la vittima che svolge gran parte del lavoro permettendo all utente malizioso di accedere al suo sistema con estrema facilità. 10

Capitolo 2 Tecniche di rilevazione del codice malevolo I danni causati dal codice malevolo aumentano di anno in anno in quanto tali codici evolvono diventando sempre più sofisticati e difficili da rilevare. Inoltre la diffusione di internet e l aumento di sistemi deboli da utilizzare come vittime, aiuta la loro diffusione. La ricerca di tecniche di rilevazione del codice malevolo è diventata fondamentale. Gran parte dei meccanismi di analisi si basano sul confronto con delle firme (signature) dei malware. Gli attuali antivirus,i sistemi utilizzati nella lotto contro i malware,hanno dei database di signature, espressioni che specificano sequenze di byte o di istruzioni che sono considerate dannose. Un programma viene dichiarato malware quando nel codice di un programma si identifica una signature presente nel database.[3] Il compito principale degli sviluppatori di anti-virus è capire se un campione di codice sconosciuto può rappresentare una minaccia e se deve essere inserito nel database. Ogni volta che viene trovato un campione di malware sconosciuto è necessario,quindi, dopo averlo analizzato, aggiornare il database delle signature, in modo che questo nuovo pezzo di malware possa essere rilevato dal motore di scansione. A tal fine, è molto importante essere in grado di analizzare rapidamente un campione sconosciuto e comprendere il comportamento e l'effetto sul sistema. La conoscenza della funzionalità di malware è importante per la sua rimozione. [2] Per rimuovere completamente un malware da un sistema infetto non è necessario eliminarne semplicemente il codice ma anche tutti i suoi residui ed annullare le modifiche 11

ai file da esso apportate. Per poter fare ciò è necessario conoscere bene il codice malevolo e il suo funzionamento per sapere quali file può infettare e modificare. Diverse tecniche di analisi del malware consentono all'analista di capire rapidamente e nei dettagli il rischio e le funzionalità di un determinato campione di codice. Questa intuizione permette all'analista di reagire alle nuove tendenze nello sviluppo dei malware o perfezionare le tecniche di rilevamento esistenti per attenuare la minaccia proveniente da quel campione. Il desiderio degli analisti di comprendere il comportamento di un determinato campione di codice malevolo e l'intenzione opposta degli autori di malware di mascherare i loro intenti maligni, porta a una corsa agli armamenti tra le due parti.[1] Quanto più le tecniche di rilevamento diventano sofisticate tanto più gli utenti maliziosi elaborano tecniche di evasione per far si che i loro malware non vengano scoperti. Per questo creano codici automodificanti o che si generano dinamicamente oppure rendono tali codici trasparenti in caso si trovi un sistema di rilevazione inibendo il loro comportamento. Una volta identificata una minaccia, l'analista tenta di trovare un modello che permetta di identificare questo campione (la firma). Questo modello dovrebbe essere abbastanza generico da permettere la rilevazione anche di varianti della stessa minaccia. L'analisi del malware e la costruzione successiva di firme, sono spesso soggette ad errori. Allo stesso tempo, gli autori di malware generano automaticamente una moltitudine di differenti campioni dannosi derivati da una singola istanza di malware. La maggior parte degli antivirus hanno database di firme sintattiche dei malware e le loro tecniche di rilevazione si basano sul confronto; tali software di scansione non possono utilizzare le firme sintattiche in quanto non riescono a cogliere la semantica del codice. E stata introdotta,infatti, una nuova classe di rilevatori di malware che si basa su modelli astratti di codice malevolo quindi, sul loro comportamento, più che sul loro codice statico, ignorando le proprietà sintattiche. Alcune tecniche di analisi consistono nell esecuzione del codice binario in un ambiente ristretto e nell osservare le sue azioni ad esempio utilizzando un debugger in cui la persona imposta manualmente il codice da controllare. Il problema è che le aziende di 12

antivirus ricevono centinaia di campioni di codice, ritenuto dannoso da analizzare,pertanto, l analisi non può essere svolta manualmente perché richiederebbe troppo tempo. Questo richiede un approccio automatizzato per distinguere rapidamente tra i campioni che meritano un analisi più stretta e quelli che sono una variazione di minacce già note. Questa analisi automatica può essere eseguita in due modi: analisi statica e dinamica. L analisi dinamica si riferisce alle tecniche che eseguono il campione di codice e verificano le azioni eseguite da questo campione in pratica, mentre l'analisi statica svolge il suo compito senza eseguire effettivamente il codice campione. Lo scopo principale delle tecniche di analisi è rilevare il funzionamento di un codice malevolo,ottenerne una conoscenza dettagliata per capire quali sono i danni da esso apportati ed eventualmente porvi rimedio. 2.1 Analisi statica L analisi statica si basa sull ispezione del codice senza eseguirlo. In particolare essa è utile nel caso in cui sia disponibile il codice sorgente in modo da ottenere un eseguibile binario del codice stesso da cui ricavare un codice in istruzioni assembler e verificare se ci sono difetti. Quindi studiando il codice sorgente, si estrae da esso il comportamento nella pratica. Attraverso gli strumenti forniti dall analisi statica si possono ottenere informazioni utili sul programma ritenuto una possibile minaccia: quali funzioni esso può evocare e da dove nel codice, i valori dei possibili parametri. Tali informazioni si possono utilizzare per comprenderne il comportamento e quindi per trovare dei meccanismi di difesa avanzati. Il problema è che compilando il codice sorgente alcune informazioni vengono perse ad esempio la dimensione delle strutture dati,pertanto non si può verificare totalmente la sicurezza di tale codice. Inoltre il codice sorgente di un campione di malware non è sempre disponibile di conseguenza si riduce l utilità dell analisi statica. Un ulteriore problema è dato dal fatto che i malware utilizzano valori che non possono essere determinati staticamente come dati di sistema o istruzioni di salto e molti utilizzano 13

delle tecniche di auto-modifica del codice. Questo indica che gli autori di codice malevolo conoscono i limiti dell analisi statica rendendola inutile; pertanto risulta necessario sviluppare tecniche che prevedano tali modifiche e che risultino utili alla rilevazione del codice malevolo. 2.1.2 Limiti dell analisi statica:offuscamento codice Le proprietà semantiche di un codice malevolo sono difficili da rilevare in modo automatico ma allo stesso tempo risulta difficile per un malintenzionato generare del codice semanticamente diverso automaticamente. In compenso essi hanno creato una tecnica di offuscamento del codice binario che rende difficile per un rilevatore di malware basato sulla semantica, determinare correttamente il comportamento di un pezzo di codice. Questo processo di offuscamento utilizza una primitiva nota come costante opaca, che trasforma una sequenza di codice in una più difficile da comprendere. Sulla base delle costanti opache, si costruiscono una serie di trasformazioni di offuscamento come salvare nei registri del processore delle informazioni che sono difficili da analizzare staticamente.[3] Queste trasformazioni lavorano direttamente sul codice sorgente del programma aggiungendo delle funzioni che,però, non modificano il comportamento oppure sostituendo parti di codice con frammenti difficili da analizzare staticamente che rendono l interpretazione del codice binario impossibile. Un altro limite nel funzionamento delle tecniche di analisi statica,come scritto sopra, è che il codice sorgente dei malware non è sempre disponibile. Una soluzione ai problemi di questo tipo di analisi sono le tecniche di analisi dinamica che completano quelle statiche superando i loro limiti in quanto eseguono il codice effettivamente e riescono a cogliere maggiori informazioni sul funzionamento del codice eseguito. Il motivo è che le tecniche dinamiche possono monitorare le istruzioni che sono effettivamente eseguite da un programma, e quindi, sono immuni da trasformazioni di offuscamento del codice. 14

2.2 Analisi dinamica L analisi dinamica si basa sull esecuzione del codice per analizzarlo e rilevarne il comportamento quindi, anche se non permette un analisi completa del codice, questa tecnica ha il vantaggio di studiare solo le istruzioni effettivamente eseguite dal codice malevolo. Inoltre le tecniche di offuscamento del codice o di auto-modifica del codice sono del tutto inutili per questo tipo di analisi. Il codice è costituito solitamente da funzioni cioè frammenti di codice che eseguono un compito specifico,per questo le funzioni sono importanti per l analisi del programma e sono usate per astrarre dei dettagli di implementazione. Quando si analizza il codice,tali informazioni sono utili per ottenere una panoramica del comportamento del programma. Le funzioni che ricoprono un ruolo fondamentale,sono le API o application programming interface che raggruppano una serie di funzionalità,come la comunicazione con la rete o la manipolazione dei file, utili per l espletamento di un compito all interno di un programma. Esse sono applicazioni fornite dal sistema operativo che si occupano di varie categorie di servizi,dalla sicurezza ai servizi di sistema. L API più importante fornita dal sistema operativo è la chiamata di sistema meglio nota come system call necessaria affinché un applicazione in modalità utente richieda l intervento del sistema operativo per ottenere i permessi necessari per svolgere dei compiti, in quanto a differenza della modalità kernel essa non ha il permesso di accedere allo stato del sistema. Pertanto la system call è l unico modo per un applicazione per poter ottenere i diritti di accesso al sistema,sufficienti per svolgere un operazione. Le applicazioni in modalità utente che utilizzano le chiamate di sistema per interagire con l'ambiente meritano una particolare attenzione in quanto stanno richiedendo dei permessi speciali per accedere a parti del sistema. Vediamo di seguito le principali funzionalità offerte dall analisi dinamica del codice, utili per ottenere delle informazioni importanti sul codice. 2.2.1 Monitoraggio delle chiamate di sistema: funzioni di hooking Anche il codice malevolo si esegue in modalità utente ed ha bisogno di invocare una chiamata di sistema per comunicare con il sistema e svolgere il suo compito. Per questo 15

motivo l analisi dinamica risulta utile nella rilevazione di tale codice e nello studio del suo comportamento in quanto fornisce degli strumenti per rilevare le chiamate a funzioni o a sistema presenti nel codice che si sta eseguendo attraverso le funzioni dette di HOOKING. Queste funzioni permettono di registrare le chiamate di sistema o le chiamate di funzioni quando un programma viene mandato in esecuzione, manipolandolo in modo che, oltre alla funzione prevista, viene invocata una cosiddetta funzione hook. Questa funzione di hook è responsabile dell implementazione della funzionalità di analisi necessaria, come la registrazione della sua invocazione in un file di log o l analisi dei parametri di input.[1] Pertanto le funzioni di hook per le API risultano particolarmente utili soprattutto perchè permettono di evidenziare le chiamate di sistema di un programma e quindi studiarne meglio il comportamento;in aggiunta servono a monitorare le funzioni,controllare dove vengono chiamate tali funzioni, cosa fanno e quindi capire il funzionamento del codice. Quando viene eseguito un codice nell analisi dinamica bisogna inserire in corrispondenza delle chiamate di funzioni, le funzioni di hooking corrispondenti in modo che all invocazione della funzione anche esse vengano invocate riuscendo a tenere sotto controllo il programma in esecuzione. Tuttavia ci sono dei campioni di malware che riescono ad ottenere dei privilegi della modalità kernel e non utilizzano le chiamate di sistema, rendendo così inutile l analisi dinamica. Pertanto questo vale solo per il malware in esecuzione in modalità utente in quanto quello in esecuzione in modalità kernel può invocare direttamente le funzioni desiderate senza passare attraverso l'interfaccia di chiamata di sistema. 2.2.2 Analisi dei parametri Oltre alle chiamate di funzioni, per capire il comportamento di un programma, bisogna analizzare i parametri che tali funzioni utilizzano. Nell analisi statica si vedono i tipi o il set di valori di tali parametri,in quella dinamica invece si vedono i valori reali utilizzati quando vengono invocate le funzioni nell esecuzione del codice. Controllando i parametri o i valori restituiti dalle funzioni si possono collegare funzioni differenti che operano sugli stessi oggetti in modo da ottenere informazioni sul 16

comportamento del programma visto da un punto di vista differente, quello incentrato sugli oggetti.[1] 2.2.3 Monitoraggio del flusso di informazioni Un altro passo fondamentale nell analisi di un codice è capire come vengono processati i dati nell esecuzione del programma. Utilizzando dei marcatori si possono seguire dei dati importanti durante l esecuzione del programma. In particolare con l utilizzo di delle label associate al dato,se tale dato viene processato dal programma anche la sua label o etichetta viene invocata e si propaga.[1] 2.2.4 Tracciamento delle istruzioni Una preziosa fonte di informazioni per un analista per capire il comportamento di un campione analizzato, è il tracciamento delle istruzioni. Cioè, la sequenza di istruzioni macchina che il campione esegue mentre viene analizzato. [1] L analisi dinamica è una tecnica di analisi automatizzata che permette di eseguire il codice malevolo in un ambiente virtuale o simulato per poter monitorare il codice in quanto ne controlla le parti fondamentali quali le chiamate di sistema,le chiamate di funzioni, le variabili,i parametri e il flusso di dati. Durante l esecuzione del programma,tutte le sue interazioni con il sistema operativo vengono salvate in modo che l analista possa cogliere informazioni utili alla comprensione delle funzionalità del codice e ottenere una firma di quel codice, evitando un analisi manuale che richiede troppo tempo. 17

Capitolo 3 Strategie di implementazione dell analisi dinamica Per comprendere il comportamento di un codice malevolo si utilizzano delle tecniche di analisi dinamica che consentono di eseguire il codice dopo averlo caricato su una macchina virtuale o un emulatore di CPU. In questo modo il malware svolgerà il suo compito, la componente di analisi verrà nascosta e potranno essere registrare le funzioni invocate o le chiamate alle API permettendo ad un analista di comprendere se quel determinato campione di codice è dannoso. Pertanto mentre il programma è in esecuzione, viene registrata la sua interazione con il sistema operativo quindi le chiamate di sistema e i loro parametri. Il risultato dell'analisi sarà un report che mostra quali risorse del sistema operativo ha creato il programma o a quali ha avuto accesso. Alcuni strumenti permettono anche al sistema di connettersi ad una rete e monitorare il traffico di rete. Questo report consente agli analisti del codice di comprenderne il comportamento e di agire di conseguenza. L esecuzione del codice in un emulatore o una macchina virtuale permette di controllare ogni aspetto dell esecuzione di tale programma e in base alla parte dell ambiente che viene emulato si può fare una differente analisi del codice stesso. 3.1 Analisi in un emulatore Emulando la memoria e la CPU in una sandbox,si può eseguire il codice ritenuto malevolo senza che esso abbia effetti negativi sul sitema reale in quanto questi vengono 18

tutti contenuti nella sandbox.[1] Con questa tecnica si può risolvere il problema dell offuscamento del codice in quanto la macchina virtuale che esegue il codice, se vede delle parti non scompattate, pone delle firme sulle parti della memoria non codificata della memoria virtuale. Il problema è che un campione di codice malevolo può capire se viene eseguito su un ambiente emulato in quanto quest ambiente non fornisce componenti allo stesso modo del sistema reale perché non vengono del tutto emulati. Emulando il sistema totale si può ricreare una copia del sistema reale fornendo tutte le funzionalità da esso svolte,oltre alla memoria e al processore. Il sistema operativo che viene eseguito nell'emulatore, viene indicato come l'ospite, mentre il computer che esegue l'emulatore stesso, è chiamato host. Un emulatore consente alle architetture host e guest di essere diverse. In questo modo la componente che analizza il codice viene implementata come parte del sistema emulato permettendo di controllare il sistema operativo ospite e quindi il suo comportamento in caso di attacco da parte del malware eseguito. Tuttavia un campione di codice potrebbe accorgersi se viene analizzato in un emulatore ad esempio controllando le specifiche caratteristiche della CPU e in questo caso potrbbe fermare la propria esecuzione. Inoltre l esecuzione del codice e la sua analisi potrebbero rallentare il sistema concedendo un altra possibilità al malware di rilevare se è sottoposto ad analisi in un emulatore. Un altro problema di questo tipo di analisi è l'inconveniente del cosiddetto gap semantico. L emulatore ha accesso completo al sistema emulato a livello fisico tuttavia, le informazioni desiderate sono composte di concetti astratti di livello superiore del sistema operativo ospite ad esempio le chiamate di sitstema. Così, per avere accesso a queste informazioni, lo strumento di analisi deve dedurle da quelle del sistema interpretando lo stato della CPU e il contenuto della memoria in modo che siano simili a quelle del sistema operativo ospite. [1] [In un architettura x86,ad esempio, viene associato ad ogni processo un registro delle tabelle delle pagine detto CR3; conoscendo il valore della CR3 si può sapere qual è il processo sotto analisi e tracciare il suo flusso di istruzioni in quanto ogni istruzione di tale 19

processo è associata a quello stesso valore della CR3. Monitorando le API che creano i nuovi processi, un sistema di analisi può correlare il campione analizzato con un determinato valore del registro CR3 e vedendo il valore della CR3 si può capire quella istruzione a quale processo è associata.] Per ridurre l'impatto del gap semantico,esistono approcci ibridi che consentono di effettuare l'analisi nell'emulatore e raccogliere informazioni di livello superiore con l'ausilio di un ulteriore componente in esecuzione nel sistema ospite. [1] 3.2 Analisi in una macchina virtuale La macchina virtuale consente di creare un duplicato della macchina reale al suo interno,quindi non si ha più un sistema operativo ospite e uno host ma essi sono identici ed esiste il VMM o virtual machine monitor che deve gestire il doppio sistema per i programmi e assegnare l hardware a una macchina virtuale. Quindi l idea della virtualizzazione è creare uno stato fisico privilegiato a cui non tutte le macchina virtuali hanno acceso ma solo una specifica. Il sistema ospite della macchina virtuale può svolgere delle istruzioni non privilegiate senza che esse vengano modificate consentendo un miglioramento nelle prestazioni rispetto ad un emulatore inoltre una componente di analisi, necessaria per analizzare un programma, può essere inserita direttamente nella macchina virtuale e non essere scoperta dal programma in esecuzione. Ma come per l emulatore anche la macchina virtuale può accedere solo allo stato della macchina pertanto bisogna riempire il gap che esiste tra tale stato e le informazioni di alto livello del sistema operativo necessarie nell analisi del codice. In una macchina virtuale non è facile tenere traccia delle istruzioni eseguite in un codice in quanto le istruzioni non privilegiate vengono eseguite direttamente sull harware senza richiedere l intervento del VMM. In un architettura x86,ad esempio,un modo per poter registrare le istruzioni o il flusso di informazioni, è sfruttare le strutture di debug della CPU, utilizzando un flag particolare cioè una variabile che può assumere solo due stati e che segnala, con il suo valore, se un dato evento si è verificato oppure no, o se il sistema è 20

in un certo stato oppure no, nel registro EFLAGS che viene associato al processo. In questo modo quando si arriva a quell istruzione durante l esecuzione del codice,si avrà un eccezione nel debugging in modo che il componente di analisi può prendere questa eccezione di debug ed eseguire le operazioni necessarie aggiungendo il tracciamento delle istruzioni; quest eccezione viene catturata all interno della macchina virtuale,dal VMM prima che raggiunga il sistema operativo.[1] 3.3 Simulazione della rete Internet Molti malware necessitano dell accesso alla rete per poter funzionare correttamente pertanto è necessario che durante l analisi di un codice malevolo venga assicurato l accesso alla rete per poter comprendere meglio il comportamento di tale programma. Il problema può essere risolto in due modi: simulando la rete, in modo che il programma creda di aver accesso alla rete Internet ma in realtà è una rete simulata con tutti i servizi che vengono da essa offerti; oppure fornire l accesso controllato in modo da limitare il volume di traffico generato dal malware riducendo i danni da esso provocati, ad esempio filtrando il flusso di mail in uscita. 3.4 Limiti dell analisi dinamica: tempo di analisi In ogni simulazione,l'emulatore interpreta le istruzioni del codice, una alla volta. Pertanto, se il codice include una routine di decifratura che decifra e quindi espone il malware, anche questo codice verrà interpretato. Periodicamente, la componente di controllo interrompe l'interpretazione per la scansione del codice ed ottenere le firme dei malware. Durante l'interpretazione, il codice di destinazione non può causare alcun danno al sistema, perché viene interpretato in un ambiente completamente controllato diverso dal sistema reale. Il problema più difficile di tale analisi è quello di determinare il tempo in cui eseguire ogni interpretazione. Più a lungo viene emulato un particolare programma, più è probabile catturare dei malware nascosti. Inoltre per ottenere un risultato migliore è importante eseguire il codice più volte nello stesso identico ambiente pertanto è necessario ripristinare le informazioni di partenza ogni volta che viene eseguito, il che toglie altro tempo. 21

Una soluzione a tale problema potrebbe essere quella di creare un sistema base e reindirizzare tutte le modifiche ad un dispositivo diverso o ad un area di lavoro creata per tale scopo. 22

Capitolo 4 Confronto tra le tecniche di rilevazione Attraverso le tecniche di rilevazione di un codice malevolo è possibile riuscire ad identificare se un programma potenzialmente dannoso lo è veramente. Il problema principale delle tecniche di rilvazione è che quanto più esse evolvono tanto più i codici diventando complicati e difficili da identificare. Infatti gli autori di malware escogitano sempre nuove tecniche per poter superare l identificazione da parte degli strumenti di rilevazione, rendendo i loro codici sempre più potenti. L analisi statica che può coprire ogni flusso di esecuzione del codice analizzato, viene battuta da un codice auto-modificante. Infatti attraverso strumenti di compressione il codice eseguibile,sul cui uso si basa l analisi statica,viene trasformato in un nuovo codice il cui significato semantico è lo stesso,oscurando il codice binario di base. Per contrastare l analisi dinamica invece, sono state creati dei meccanismi che permettono ad un programma di capire l ambiente in cui viene eseguito e quindi se si tratta di un ambiente di analisi guardando, ad esempio, il tempo di esecuzione che per un emulatore è più lento. Inoltre alcuni codici maligni possono alterare il loro comportamento, rendendo i risultati di tali analisi del tutto inefficaci. Nonostante qualche piccola debolezza,le tecniche di rilevazione del codice malevolo risultano utili nella battaglia contro la diffusione di tali codici, fornendo agli utenti una sicurezza maggiore per i loro dati. Un ruolo importante in tal senso è svolto dai software antivirus o dai firewall che 23

permettono una scansione attiva del sistema e dei programmi che vengono eseguiti. Pertanto è importante munire un sistema operativo di un software antivirus che riesca a tenere sotto controllo i programmi in esecuzione e i dati che vengono inseriti e aggiornati continuamente su un computer. 4.1 Programmi anti-virus I software antivirus sono degli strumenti che attraverso l applicazione delle tecniche viste in precedenza riescono ad analizzare campioni di codice sconosciuto e potenzialmente malevolo, rilevarne il comportamento e fermarne la diffusione. Questi programmi,come già detto in precedenza, non sono altro che dei database di signature dei malware in grado di rilevare un istanza di un codice malevolo e nel caso ne venga rilevata una nuova, permettono di creare la sua firma e aggiornare di conseguenza le informazioni presenti sul database, diffondendole a tutti i sistemi che lo utilizzano. Pertanto essi svolgono un ruolo fondamentale nella rilevazione dei codici malevoli sui sistemi garantendone una maggiore sicurezza. 4.2 Sistemi digitali immunitari Per contrastare l aumento della complessità del codice malevolo e la conseguente nascita di nuovi modelli sempre più difficili da rilevare sono state sviluppati vari strumenti che utilizzando le tecniche viste, permettono di ottenere dei campioni di codice potenzialmente malevolo direttamente dai sistemi,appena essi rilevano la minaccia come avviene per i sistemi digitali immunitari creati dalla IBM e successivamente sviluppati dalla Symantec. L'obiettivo di questi sistemi è quello di fornire un tempo di risposta rapido, in modo che i virus possono essere abbattuti non appena vengono introdotti. Quando un nuovo virus entra in una organizzazione, il sistema immunitario lo acquisisce automaticamente,lo analizza, aggiunge la modalità di rilevamento, lo rimuove dal sistema infettato e trasmette le informazioni su tale malware ai sistemi che eseguono IBM antivirus in modo che possa essere rilevato prima che sia eseguito altrove.[4] Questo è uno degli approcci utilizzati per effettuare un rilevamento efficace di un codice malevolo che consente non solo di trovare un modo per bloccare un determinato codice ma di trovarne nuovi. Molti altri strumenti e approcci sono stati creati per analizzare i 24

codici sconosciuti potenzilamente maligni e ognuno di essi restituisce un report di analisi che consente agli analisti di cogliere preziose informazioni sui campioni e sviluppare le contromisure necessarie. Lo scopo principale delle tecniche di analisi è capire come un frammento di codice malevolo funziona in modo da porre un freno alla sua diffusione e mettere di conseguenza la rete al sicuro. Se invece un sistema viene infettato, la conoscenza delle funzionalità del malware permettono non solo di eliminarlo dall applicazione ma anche di eliminare i suoi residui e le alterazioni che esso ha causato. 25

Conclusioni Il codice malevolo rappresenta una delle principali minacce alla sicurezza dei moderni computer che mina l affidabilità e la riservatezza dei dati in esso contenuti. Le tecniche di rilevazione di tali codici servono quindi a contrastarne la diffusione e la nascita di nuovi codici sempre più complessi e dannosi, rendendo più sicuri e affidabili i sistemi. Conoscere il funzionamento di un malware,capire come esso agisce e di conseguenza riuscire a trovarne una firma, sono le armi utili per questo scopo. Con la creazione di programmi antivirus o di rilevamento è possibile identificare un malware ed evitare che infetti il sistema vittima. Purtroppo questo problema sta diventando sempre più complesso a causa degli interessi finanziari che esso sta coinvolgendo. Una prova di questo è data dal fatto che anche i sistemi più sicuri sono spesso oggetto di tali attacchi. Inoltre la maggior parte degli sviluppatori di software anti-virus sono gli stessi che creano i codici malevoli con il solo scopo di vendere i loro prodotti. Quindi anche se le tecniche di rilevazione esistenti e tutte quelle che verranno ideate, sono un utile strumento per combattere la diffusione del codice, il vero problema è capire chi c è dietro un determinato codice,l individuo che lo sviluppa, e fermarlo direttamente. 26

Bibliografia [1] [M.Egele,T.Scholte,E.Kirda,C.Kruegel] [Febbraio 2012] A survey on automated dynamic malware analysis techniques and tools [2] [A.Moser,C.Kruegel,E.Kirda] [2007] Exploring multiple execution paths for malware analysis [3] [A.Moser,C.Kruegel,E.Kirda] [2007] Limits of static analysis of malware detection [4] [W.Stalling] [2005] Cryptography and Network security principles and practices 27