Guida Malware Reversing Malware analysis cosa è, come funziona e perché è importante conoscerla

JunkCoder

Moderatore
5 Giugno 2020
1,676
25
1,489
603
Ultima modifica da un moderatore:

1 hdxauMAzNwmg34NfPBejmA.jpeg


Malware Analysis - Introduzione - Parte 1​







1    Il corso


In questo breve corso affronteremo diversi argomenti sul funzionamento e l'analisi di virus informatici, insieme alle contromisure attualmente più diffuse.
Sarà diviso in 4 articoli che puntano a fornire una base di conoscenza e di strumenti per permettere al lettore di capire se un determinato programma è pericoloso e per quale motivo, fermo restando che non sarà mai possibile essere sicuri al 100% della sicurezza di un software, specialmente per quanto riguarda malware che impiegano tattiche elusive avanzate (fortunatamente una minoranza). Inoltre una volta terminati gli articoli contenenti la "teoria", metterò a vostra disposizione dei finti sample di malware creati ad hoc da aprire in macchina virtuale per permettervi di cimentarvi nella pratica senza rischiare alcun danno.

2    Cosa è un malware


Ma cominciamo dalle basi: cos'è davvero un malware? Come viene creato e da cosa è composto?
Ormai sempre più utenti sono a conoscenza delle più diffuse categorie di malware, soprattutto in seguito ad hack su larga scala menzionati sui media mainstream, come Ransomware e Spyware. Ma cosa sono effettivamente?

Un malware non è nient'altro che un programma, una serie di istruzioni di codice che vengono eseguiti dal vostro sistema, con la sola differenza che il suo scopo è malevolo. Come gli altri programmi può essere scritto in uno o più linguaggi di programmazione a scelta dell'autore e il programma generato è in uno dei seguenti formati:
  • Compilati: un file eseguibile con istruzioni in linguaggio macchina, scritto ad esempio in C, C++, Pascal...
  • Semi-compilati: il cui codice è sotto forma di un bytecode intermedio, software scritto in .NET, Java...
  • Script: file di codice testuale che viene eseguito da un interprete, come Python, Powershell, Ruby...
È bene ricordare che un malware può essere composto da più componenti di tipo differente tra loro.
Queste differenze sono fondamentali e cambiano del tutto il processo di ingegneria inversa che verrà illustrato in un successivo articolo.
Nel caso dei programmi compilati, il codice macchina prodotto viene poi sottoposto al passaggio di linking generando il file eseguibile effettivo (unisce codice, librerie statiche, dati... in un unico file). Quest'ultimo è strutturato secondo specifiche standard: su Windows abbiamo il formato PE (Portable Executable, comunemente riconosciuto dalle estensioni .exe, .com, .sys o .dll), su Unix (BSD, MacOS e *nix, tra cui Linux, iOS, Android...) abbiamo invece il formato ELF (Executable and Linkable Format).

In questo corso tratteremo maggiormente l'aspetto Desktop per via della maggiore libertà e facilità di analisi, ma una nota su Android è che più spesso si trovano applicazioni semi-compilate essendo Java e Kotlin i linguaggi "ufficiali" ma è possibile avere eseguibili ELF compilati, in ogni caso sia per quest'ultimo che per iOS i programmi vengono incapsulati in degli archivi con formato standard, rispettivamente apk e ipa.

È importante sottolineare che, una volta eseguiti, anche gli script e i linguaggi semi-compilati vengono in un certo senso "trasformati" in memoria in linguaggio macchina (da un componente esterno come un interprete o JIT) in quanto il vostro processore capisce solo quello. È così importante proprio perché pensando di voler creare una protezione ad ampio spettro per tutti e 3 i tipi di programmi abbiamo un campo comune su cui operare, è infatti la strategia usata dagli Anti-Virus.

Capire come opera un Anti-Virus è molto utile per conoscere le dinamiche comuni di un virus e come rilevarle, in modo automatico.

3    Antivirus: Analisi Statica


I primi Anti-Virus, ed in realtà anche quelli moderni, utilizzano le cosiddette "firme": consistono nel catalogare "pezzi" di malware conosciuto per poterlo rilevare in seguito, la forma più elementare consiste in un hash del file. Per evitare che la più banale ed inutile modifica faccia saltare il riconoscimento vengono spesso considerate solo specifiche parti che vengono considerate uniche al virus (per evitare falsi positivi) e meno soggette a un possibile cambiamento. Questo tipo di analisi si è successivamente evoluto con l'introduzione delle regole YARA, che sono adesso un must per chi fa il malware analyst. Questo strumento è in grado di trovare dei pattern conosciuti all'interno dei file utilizzando regole assai flessibili. L'analisi statica si può anche basare su stringhe, icone o metadati (header del PE, data di creazione...), tramite regole YARA o controlli specifici.

4    Antivirus: Analisi Euristica


Passiamo a sistemi più moderni: mentre l'analisi statica può controllare il file ancora prima che venga aperto, l'analisi euristica (anche chiamata comportamentale o behavior-based) invece entra in gioco solo nel momento in cui il programma va in esecuzione. L'obiettivo di questo tipo di analisi è osservare il comportamento e determinare se è pericoloso oppure no. L'arma principale per l'Anti-Virus è l'API Hooking, oltre a qualche funzionalità fornita dal Sistema Operativo al driver dell'AV (si applica anche a sistemi HIPS - Host-based Intrusion Prevention System ed HIDS - Host-based Intrusion Detection System).

5    API Hooking


Questa tecnica consiste nell'intercettare le chiamate che il programma cerca di fare all'OS tramite dei "trampolini" (in inglese detour, hook user-mode): un istruzione JUMP per deviare il normale flusso verso il codice inettato dell'antivirus oppure tramite hook in kernel-mode, infatti per accedere a qualunque risorsa fuori dal processo è necessario ricorrere alle API dell'OS (es. per aprire un file serve chiamare CreateFile su Windows, fopen su POSIX...). Intercettando tali chiamate l'AV può tener traccia di ogni operazione fatta dai programmi che osserva, inoltre può alterare la risposta di una API, interromperla, ritornare un errore o terminare direttamente il processo. Se il programma fa operazioni ritenute sospette, l'AV valuta se terminarlo e segnalarlo come virus immediatamente oppure se incrementare un punteggio di "sospettosità", che superata una certa soglia fa scattare la detection.

Possiamo utilizzare le informazioni apprese per fare controlli manuali alternativi, alcuni esempi: tramite le regole YARA potremmo identificare all'interno del codice o delle costanti la presenza di funzioni ben conosciute come operazioni o tabelle crittografiche ed enumerare le capabilities del programma, tramite l'API Hooking potremmo invece tenere traccia di tutte le operazioni per farci un idea di cosa sta cercando di fare esattamente nel sistema.

Con questo termina l'articolo di introduzione all'analisi di malware, il prossimo permetterà di entrare nel vivo, fornendo alcuni strumenti per monitorare il comportamento di un programma.

6    Risorse aggiuntive

Di seguito sono elencati tutti i capitoli del corso ed ulteriori risorse utili per comprendere al meglio l'arte dell'analisi di malware e gli strumenti necessari:
 
Molto interessante! Mi chiedevo: l'API Hooking è la tecnica principale che utilizzano anche gli EDR per riconoscere eventuali azioni sospette, oppure questi si appoggiano ad altre tecniche di riconoscimento oltre all'API Hooking?
 
  • Mi piace
Reazioni: JunkCoder
Molto interessante! Mi chiedevo: l'API Hooking è la tecnica principale che utilizzano anche gli EDR per riconoscere eventuali azioni sospette, oppure questi si appoggiano ad altre tecniche di riconoscimento oltre all'API Hooking?

Sì, gli EDR usano l'API Hooking in user-mode ed anche driver e minifilter per avere una visione sul filesystem e sul traffico di rete da una posizione privilegiata. Su Linux usano principalmente moduli del kernel da cui fanno hooking sulla syscall table, l'equivalente degli hook user-mode è fare detour sulle API di glibc. Per tutti i software di protezione è indispensabile l'hooking, anche per la feature di self-protection: se non lo facessero qualunque processo con adeguati privilegi potrebbe terminarli o iniettarsi al loro interno.
 
Sì, gli EDR usano l'API Hooking in user-mode ed anche driver e minifilter per avere una visione sul filesystem e sul traffico di rete da una posizione privilegiata. Su Linux usano principalmente moduli del kernel da cui fanno hooking sulla syscall table, l'equivalente degli hook user-mode è fare detour sulle API di glibc. Per tutti i software di protezione è indispensabile l'hooking, anche per la feature di self-protection: se non lo facessero qualunque processo con adeguati privilegi potrebbe terminarli o iniettarsi al loro interno.
Ciao, una domanda da newbie.
Il mondo degli EDR mi interessa molto per motivi di lavoro. Ne sto valutando uno, che fa parte della suite N-Able. Questo EDR, per garantire una funzione di disaster recovery, fa affidamento sul volume shadow copy. Quello che mi chiedo è: ma non è la prima cosa che un malware tenta di bloccare? Viene gestito da utente dell'OS diverso?
Grazie
 
Ciao, una domanda da newbie.
Il mondo degli EDR mi interessa molto per motivi di lavoro. Ne sto valutando uno, che fa parte della suite N-Able. Questo EDR, per garantire una funzione di disaster recovery, fa affidamento sul volume shadow copy. Quello che mi chiedo è: ma non è la prima cosa che un malware tenta di bloccare? Viene gestito da utente dell'OS diverso?
Grazie

I ransomware comuni tentano sempre di eliminare le shadow copy, per farlo servono i privilegi di amministratore. L'EDR potrebbe avere un sistema per rilevare e bloccare la cancellazione delle shadow copy ma a seconda del metodo usato dal malware potrebbe non riuscire. Un metodo più efficace che AV ed EDR hanno è quello di piazzare dei file "sentinella" in cartelle come Documenti in modo da identificare se e quale programma sta sovrascrivendo file che non dovrebbe. Questo è più efficace perché se fatto bene blocca l'infezione ben prima che finisca di cifrare tutto ed eliminare le shadow copy.

Ma elf è solo linux, Macintosh usa .macho se non erro
Comunque ottima guida, sempre grande boss

Corretto, MacOS usa Mach-O, avevo scritto ELF per tutti gli Unix ma Apple ovviamente doveva inventarsi la sua roba :asd:
 
Un approfondimento sulla story-line degli antivirus dagli albori a oggi mi garberebbe davvero tanto !! in ogni caso ottimo lavoro , come sempre :myeah: :myeah: