Ultima modifica da un moderatore:
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...
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:- Primo articolo: Malware analysis cosa è, come funziona e perché è importante conoscerla
- Secondo articolo: Malware Analysis e analisi blackbox su Window
- Terzo articolo: Malware Analysis - Reversing e Strumenti per Windows
- Quarto articolo: Malware Analysis - Laboratorio di pratica con CTF
- Tutti gli strumenti necessari per il Reverse Engineering