Pattern Recognition and Applications Lab
Università di Cagliari, Italia
Dipartimento di Ingegneria Elettrica
ed Elettronica
Strumenti per l’Analisi Statica e Dinamica di Eseguibili
Strumenti per l’Analisi Statica e Dinamica di Eseguibili
Dott. Ing. Davide Maiorca
Corso di Sicurezza Informatica – A.A. 2014/2015
http://pralab.diee.unica.it
Sommario Sommario
• Strumenti per Linux
– Strings
– EDB-Debugger
– VirusTotal
• Strumenti Per Windows
– Introduzione al Portable Executable
– PEId
– Packing
– OllyDBG
– Anubis
http://pralab.diee.unica.it
Introduzione Introduzione
• Nelle precedenti lezioni, abbiamo analizzato a fondo diversi eseguibili
• L’analisi era volta a capire come potevano essere sfruttate delle vulnerabilità – Anche effettuando degli attacchi complessi
• Per svolgere al meglio queste analisi, esistono tanti altri strumenti oltre a quelli che abbiamo visto in precedenza
• Questa lezione vuole fornire una panoramica di alcuni di questi
• Ci concentreremo su Linux ma anche, e soprattutto, su Windows
• Il numero di malware per Windows è, infatti, molto più elevato rispetto a Linux! – E’, quindi, importante illustrare gli strumenti essenziali per l’analisi di eseguibili
Windows …
– …e mostrarne anche la loro struttura base!
• Vedremo sia esempi di analisi statica che dinamica
http://pralab.diee.unica.it
Strumenti per Linux Strumenti per Linux
http://pralab.diee.unica.it
Strings Strings
• Abbiamo visto a fondo readelf, objdump e gdb – Sono gli strumenti principali per analizzare un eseguibile Linux!
• strings è un comando che vi consente di ispezionare le stringhe di un eseguibile
• Funziona su Linux e su OSX – Windows ha delle varianti apposite
• Questo strumento è utile per iniziare ad avere una «idea» sull’eseguibile che andate ad analizzare
• Alle volte, potreste immediatamente visualizzare delle stringhe sospette… – Per esempio, che si riferiscono all’utilizzo di shellcode…
– Oppure che richiamano ad un sito malevolo
• Per eseguirlo scrivete da terminale strings «eseguibile»
http://pralab.diee.unica.it
EDB-Debugger EDB-Debugger
• EDB-Debugger è un debugger che dispone di una interfaccia grafica
• Simile a GDB, ma potete sfruttare i vantaggi dell’interfaccia grafica!
• Lo trovate sulla distribuzione kali
• Aprite uno degli eseguibili delle lezioni precedenti con edb debugger
• debug -> run
• Vi porterà all’inizio del main (quando possibile)
• La sintassi di assembly è un po’ diversa, ma…
• …potete controllare, nello stesso momento, tutto lo stack e tutti i registri
• Inoltre, per ogni istruzione assembly vi viene riportata una «sintesi» delle modifiche dell’istruzione stessa
• Potete procedere istruzione per istruzione e decidere se entrare nelle «call» o saltarle
http://pralab.diee.unica.it
EDB-Debugger (2) EDB-Debugger (2)
• EDB-Debugger ha altre funzionalità interessanti
• Può ricercare i ROP gadgets in memoria in maniera automatica…
• Può anche individuare delle funzioni all’interno di una zona di memoria
• L’utilizzo è leggermente meno intuitivo, per certi aspetti, rispetto a GDB
• E’ anche una questione dello stile che preferite usare!
• Normalmente, si usa una combinazione fra objdump ed un debugger, oppure fra più debuggers (funzionalità diverse)
http://pralab.diee.unica.it
Virus Total Virus Total
• VirusTotal è un servizio online per l’analisi automatica di malware
• Racchiude, in sostanza, più di 50 antivirus…
• Ogni antivirus analizza il file e stabilisce se è un malware o meno…
• Il servizio fornisce anche delle analisi aggiuntive – Ad esempio, nel caso di un elf, vi mostra le sezioni ed i segmenti del file
– Vi mostra se usate librerie statiche o dinamiche…
• Alla fine dell’analisi, il servizio vi fornirà un punteggio
• Il punteggio viene incrementato di 1 ogni volta che un Antivirus ritiene che il campione sia un malware
• NORMALMENTE i file con punteggio 0 sono benigni… – Ma non è sempre così!
– Potrebbe anche essere un malware particolarmente evasivo
• Invece, i campioni con un punteggio superiore a 10-20 sono ragionevolmente dei malware…
• http://www.virustotal.com
http://pralab.diee.unica.it
Strumenti per Windows Strumenti per Windows
http://pralab.diee.unica.it
Windows – Portable Executable (PE) Windows – Portable Executable (PE)
• Come ben sapete, la maggior parte dei malware colpisce macchine Windows
• E’ quindi importante dare una descrizione di alcuni strumenti di analisi per eseguibili Windows
• Il formato utilizzato da Windows si chiama Portable Executable (PE)
• Ha qualche piccolo punto in comune con ELF…
• Ad esempio, anche qui è presente un header che descrive le sezioni di un eseguibile – E le sezioni più importanti sono sempre .text e .data, che vengono copiate in memoria!
• Ci sono anche parecchie differenze! – L’header principale è chiamato MZ Header
– Il file header ed il section header sono contenuti dentro un header più grande, chiamato PE Header
– Le librerie caricate dinamicamente prendono il nome di DLL (Dynamic-Link Library)
http://pralab.diee.unica.it
Windows – Portable Executable (PE) Windows – Portable Executable (PE)
http://pralab.diee.unica.it
PEID PEID
• E’ qualcosa di molto simile a readelf, ma per eseguibili Windows
• Vi fornisce delle indicazioni sulla struttura dell’eseuguibile – In termini di sezioni…
– …ma anche di stringhe! Ha funzionalità simili a strings
– Potete anche vedere diverse istruzioni macchina
• Sicuramente, però, la funzionalità più interessante è l’individuazione di packers
http://pralab.diee.unica.it
Packers Packers
• Gli Antivirus (come quelli di VirusTotal) si basano su un sistema di firme per individuare un malware
• Il problema è che questi possono essere evasi facilmente se qualcosa, nella struttura dell’eseguibile, cambia…
• Il packing è una tecnica per «nascondere» un eseguibile dentro un altro eseguibile – Solitamente attraverso una compressione
• L’eseguibile nascosto viene decompresso a runtime e caricato in memoria – Vengono usate delle routines speciali
• In questo modo, un’analisi statica non può accorgersi che il malware è stato «nascosto»
• La dimensione dell’eseguibile in memoria è, naturalmente, ora molto maggiore
• Ovviamente, questi packers possono essere individuati se le loro «routines» di decompressione sono note
http://pralab.diee.unica.it
OllyDBG OllyDBG
• Uno degli strumenti principali per l’analisi di eseguibili Windows
• Open Source
• Molto simile a EDB-Debugger come struttura
• Potete visualizzare contemporaneamente i registri, lo stack, l’hex-dump
• Potete ovviamente anche muovervi istruzione per istruzione
• Presente anche una versione a 64 bit
http://pralab.diee.unica.it
OllyDBG OllyDBG
http://pralab.diee.unica.it
IDAPro IDAPro
• Il «disassemblatore» per eccellenza di eseguibili – Commerciale
• Consente di effettuare una miriade di operazioni – Analisi statica e dinamica
• In particolar modo, consente di vedere graficamente come le varie funzioni sono collegate fra loro – Il codice viene rappresentato come un insieme di blocchi collegati fra loro
– Attraverso il collegamento fra questi blocchi, è possibile comprendere il flusso del programma
• Consente, inoltre, di apportare delle modifiche all’eseguibile e di creare delle patch – Ad esempio, se vogliamo correggere specifici bug…
• Supporta molti tipi di eseguibili… – Windows, Linux, Android…
• …e di architetture – X86, X64, ARM…
http://pralab.diee.unica.it
IDAPro IDAPro
http://pralab.diee.unica.it
Anubis Anubis
• Servizio online per l’analisi dinamica di eseguibili – Gratuito
• Sfrutta il Sandboxing
• La Sandbox è un ambiente virtualizzato (solitamente modificato ad-hoc) nel quale un eseguibile viene lanciato
• La Sandbox tiene traccia di varie operazioni svolte dall’eseguibile – Ad esempio, se vengono modificati files
– Se ci si collega ad un sito malevolo
– Se vengono creati files aggiuntivi
– E molto altro!
• Alla fine viene creato un report completo nel quale è possibile visualizzare tali operazioni
• http://anubis.iseclab.org
http://pralab.diee.unica.it
Evasione di Analisi Dinamica Evasione di Analisi Dinamica
• L’analisi dinamica è uno strumento molto potente per l’analisi di eseguibili
• La domanda fondamentale è: può essere evasa?
• Per attaccarla, non si possono usare le stesse tecniche per evadere l’analisi statica – Ad esempio, i packers sono poco efficaci
• Un primo modo per evadere potrebbe essere quello di controllare la differenza fra un ambiente virtualizzato ed uno reale – Non tutte le istruzioni del processore sono perfettamente «virtualizzate»
– L’ambiente virtualizzato può avere delle mancanze a livello hardware
• Un secondo modo è quello di ritardare l’analisi – Si manda in sleep il programma…
– La Sandbox, solitamente, analizza l’eseguibile per diversi minuti (ipotizzando che le operazioni vengano fatte in un certo intervallo di tempo)
– Attraverso lo sleep, la Sanbox può credere che il programma non faccia nulla!
http://pralab.diee.unica.it
Conclusioni Conclusioni
• Questa lezione conclude la parte di analisi di eseguibili
• In generale, avete visto come è strutturato un eseguibile Linux e avete imparato i principi dell’analisi a basso livello
• Avete visto delle tecniche, anche avanzate, per sfruttare delle vulnerabilità in modo da compromettere la sicurezza di un sistema
• E avete realizzato degli exploit, anche di grande efficacia
• In quest’ultima lezione avete infine visto una panoramica dei principali strumenti di analisi di eseguibili
• Come detto nelle prime lezioni, l’analisi di eseguibili è una disciplina molto complessa – Quasi un’arte!
• Le tecniche di attacco e di difesa si sono evolute nel corso degli anni e continueranno a farlo, in una «corsa alle armi» di cui non si vede ancora la fine!