Coevoluzione di malware e anti malware con algoritmi genetici
1. Coevoluzione di malware e anti-malware su mobile
1. INTRODUZIONE
I dispositivi mobili sono diventati parte integrante della vita quotidiana. Tuttavia, la
popolarità e l’utilizzo di questi dispositivi attrae i creatori di malware affinchè ne sviluppino
per attaccarli. Secondo un report di Kaspersky, 884.774 nuovi malware sono stati creati
nel 2015, tre volte tanto quelli del 2014. Symantec ha anche riportato che nel 2015 c’è
stato uno zero-day attack a settimana.
Dunque, affinchè si possano proteggere i dispositivi mobili da queste minacce, i ricercatori e
le società di sicurezza, stanno lavorando allo sviluppo di sistemi anti-malware efficaci ed
efficienti.
Ci sono alcune tecniche per l’analisi e il rilevamento dei malware con efficacia diversa. Due
tipi di tecniche di rilevamento, secondo come il codice viene analizzato, sono l’analisi
dinamica e l’analisi statica. Dato che l’analisi dinamica non può essere eseguita sui
dispositivi mobili a causa di limitazioni in termini di batteria, la stragrande maggioranza
dei metodi proposti nella letteratura si basano sull’analisi statica. Proprio per questo, negli
ultimi anni, gli attaccanti si sono focalizzati sullo sfruttamento delle vulnerabilità
degli strumenti di analisi statica.
La ricerca del perché gli anti-malware siano efficaci contro gli attacchi conosciuti e
sconosciuti, richiede comunque uno studio ulteriore e costituite il primo obiettivo del corrente
documento. Secondariamente, si vuole esplorare lo sviluppo automatico di un anti-
malware, che sia robusto sia contro gli attacchi noti, che con le loro varianti.
È possibile, dunque, suddividere il flusso dello studio in tre sezioni principali:
• evoluzione dei malware mobile
• evoluzione degli anti-malware mobile
• coevoluzione di malware e anti-malware
I ricercatori hanno creato nuovi malware e varianti di malware noti usando il Genetic
Programming (GP) affinché si possa emulare l’evoluzione dei malware mobile e dunque
valutare le prestazioni degli strumenti di analisi già esistenti.
2. L’obiettivo è generare automaticamente dei nuovi malware che possano essere
usati per rafforzare gli strumenti di analisi.
Gli scrittori dei malware puntano al loro obiettivo in modo che non possano essere rilevati,
usando efficaci strategie evasive come l’offuscamento e la cifratura. Con l’introduzione
di nuovi anti-malware, gli scrittori di malware cercano di evaderli, andando a costruire un
loop. Questo ciclo definisce esattamente il meccanismo di coevoluzione tra malware e
anti-malware, con uno che compete e supera l’altro.
Tipicamente, si richiede un esperto in sicurezza per analizzare il codice ed estrarre i
parametri che possano determinare delle varianti del malware, quindi attraverso il
GP si può creare una rappresentazione del problema. Inoltre, attraverso delle tecniche
di elaborazione coevoluzionale, si sono generati dei sistemi di rilevamento più robusti, che a
loro volta hanno generato sistemi evasivi più sofisticati. Questo approccio ha generato un
malware altamente evasivo, rispetto ai risultati ottenuto con Zelix KlassMaster, un
noto Java Bytecode Obfuscator.
2. MALWARE EVOLUTION: APPROCCIO
Ci sono diversi studi che valutano un anti-malware contro le tecniche di
offuscamento su piattaforme Android. Sono presentate di seguito:
• un sistema di nome ADAM che valuta l’efficacia di sistemi anti-malware contro
campioni malware generati usando tecniche di offuscamento ma preservandone
le funzioni originali [Zheng]
• un sistema di nome DroidCharmeleon che valuta un anti-malware contro
l’offuscamento andando a mutare automaticamente le applicazioni Android
usando tecniche polimorfiche e metamorfiche [Rastogi]
• tecnica basata sulla trasformazione del codice sorgente per creare dei campioni di test
per sistemi di rilevamento di malware su desktop; questa tecnica valuta la resilienza
dell’anti-malware rispetto a varie tecniche di offuscamento [Christodorescu]
• valutazione e testing su come l’anti-malware protegge i dispositivi contro minacce
note; i risultati indicano che tutti i quattro sistemi anti-malware testati producono
un alto tasso di falsi negativi dovuti ai semplici algoritmi di firma impiegati
nei sistemi di rilevamento [Morales]
• malware detector basato su firme semantiche con l’uso di un model checking per il
rilevamento; questo metodo ha dimostrato che l’analisi statica, da sola, non basta
a rilevare i malware e dovrebbe essere accompagnate dalle tecniche
dinamiche [Moser]
3. 3. ANTI-MALWARE EVOLUTION: APPROCCIO
Al fine di coprire il rapido aumento dei malware mobile, molte compagnie hanno introdotto
le loro soluzioni di sicurezza, basate principalmente sull’analisi statica. Tipicamente le
tecniche usate sono:
• rilevamento di app sovraprivilegiate analizzando le chiamate alle API [Felt]
• rilevamento di malware adottando una analisi statica basata sui permessi [Kirin]
• utilizzo di permessi, chiamate API, indirizzi di rete per differenziare software
benigni da software maligni, attraverso tecniche di machine learning [Drebin]
Le applicazioni ad alto e medio rischio sono determinate in una analisi di primo ordine e le
applicazioni che usano offuscamento, cifratura o tecniche di loading dinamico
delle classi vengono estratte da quelle a rischio, in un’analisi di secondo ordine.
Vengono impiegate diverse tecniche di machine learning per la rilevazione dei malware. Un
recente studio sul tema ha impiegato la programmazione genetica assieme a tecniche ben
note quali Support Vector Machine, Bayesian Network, Decision Tree e Artificial
Neural Network. Ciononostante, allo stato attuale esistono solo tre studi che propongo un
sistema di rilevamento delle intrusioni usando l’elaborazione coevoluzionale
(coevolutionary computation).
4. MALWARE EVOLUTION
Lo studio attuale utilizzate la GP per generare malware nuovi e ogni a partire da quelli già
presenti. La figura mostra lo schema di malware evolution.
4. Inizialmente, i file apk vengono convertiti nei loro codici sorgenti. Vengono usati file smali,
in quanto permettono la conversione di file sorgenti modificati. Effettivamente, Smali può
essere visto come l’Assembly di Dalvix, la Java VM di Android. Va fatto notare
che la conversione in apk è essenziale per valutare i malware generati sugli emulatori dei
dispositivi.
I file Smali sono simili alle classi Java e si compongono di metodi. I Call Graph (CG) di
Smali sono estratti tramite un convertitore. I CG sono grafi di controllo che
rappresentano tutti i cammini che possono essere attraversati durante
l’esecuzione. Ogni CG corrisponde a un albero, ogni metodo è rappresentato da un nodo e
gli archi indicano il flusso tra ogni metodo. Ogni applicazione è rappresentata da un
individuo nel GP e ogni individuo ha alberi di diverse dimensioni in quanto ogni
apk ha un numero variabile di funzioni.
La Genetic Programming è un algoritmo di ricerca population-based ispirata
all’evoluzione naturale. Comincia con una generica popolazione di individui random, che
rappresentano i candidati per la soluzione del problema. Quindi, ogni individuo viene
valutato e riceve un fitness value, che indica quanto sia efficace nel risolvere il
problema e quanto sia vicino alla soluzione. Finchè non viene soddisfatto un criterio
di stop, viene generata nuova popolazione iterativamente usando selezione, crossover e
mutation.
Ogni individuo rappresenta una applicazione Android nel GP. La popolazione iniziale
consiste di malware generici. Il principale obiettivo è quello di creare malware più evasivi
ad ogni generazione applicando gli operatori genetici su di essi. Questi vengono
applicati ai CG, quindi vengono ricreati i file smali e apk.
Dopodichè, gli apk vengono firmati con keyytool e jarsigner, quindi inviati all’emulatore
per calcolare il fitness value, che mostra il grado di evasività del nuovo malware
generato. Per valutarlo nella sua totalità, vengono usati sei diversi emulatori con diversi
sistemi anti-malware basati su tecniche di ML. Mentre gli anti-malware lavorano sugli
attributi statici dell’applicazione, i sistemi basati su ML estraggono le feature dinamiche
dell’applicazione eseguendole su un emulatore per un tempo di dieci minuti.
Un nuovo malware viene eseguito su ogni emulatore separatamente e etichettato come
benigno o maligno dal sistema. L’obiettivo di questo processo è generare un malware che
evada tutti gli anti-malware andando a decrementare il fitness value ad ogni
generazione. Il fitness value è calcolato come il rapporto tra il numero di sistemi che
identificano il software generato come malware e il numero di sistemi totali.
Dato che è difficile ottenere un valore ideale in questo approccio, il GP termina quando si
raggiunge una generazione predeterminata.
5. 4.1 OPERATORI GENETICI
CROSSOVER: Questa operazione scambia gli individui dei sottoalberi. Per ottenere degli
eseguibili, i subtree devono essere compatibili tra di loro. Pertanto, si scambiano solo
metodi che hanno la stessa dichiarazione, lo stesso numero di parametri e lo
stesso tipo ritornato. Questo permette la creazione di nuovi malware a partire da quelli
già esistenti.
Tuttavia, dato che un alto crossover rate incrementa il numero di individui non eseguibili,
questa operazione viene effettuata a un basso rate (0.1). Il crossover, inoltre, garantisce
cambiamenti nelle firme dei malware attraverso lo scambio di codice e ciò
contribuisce al miglioramento dell’evasività.
Sebben il metodo sviluppato abbia un alto grado di accuratezza (97,61%), potrebbe non
rilevare malware lanciato durante i dieci minuti di tempo. Se l’applicazione non è né
eseguibile né malevola, viene assegnato il peggior fitness value (1.0) in modo da
eliminarla dalla prossima generazione.
MUTATION: Questo operatore cambia degli individui selezionati per introdurre della
diversità nella popolazione. Vengono adottate sei tecniche di offuscamento sui subtree di
indivui scelti casualmente. Tali tecniche hanno lo scopo di generare malware diversi
preservandone le funzionalità originali:
• Rename Local Identifier
• junk Code Insertion
• Data Encryption
• Two-fold Code Reordering
• Three-fold Code Reordering
• Register Realignment
4.2 FITNESS FUNCTION
Dato che la fitness function definisce quanto un individuo sia vicino alla soluzione del
problema, definire una buona funzione è molto importante per il GP. Innanzitutto, si effettua
una valutazione per accertarsi che il malware sia eseguibile e presenti
comportamenti malevoli secondo il sistema di rilevamento ML-Based. Se ciò non
è verificato, viene assegnato il peggior fitness value all’individuo.
Quindi, la fitness function usa gli output dei sei sistemi anti-malware.
La tabella mostra gli anti-malware usati. Ognuno di essi è eseguito su un emulatore diverso.
Ogni individuo viene eseguito per un minuto, tempo necessario ad avere dei risultati.
6. Se un output non può essere ottenuto per un individuo, allora l’anti-malware che non ha
generato il risultato, non viene preso in considerazione nella fitness function per
quell’individuo di quella generazione.
Il fitness value è definito come segue:
𝐹𝐹𝐹𝐹 =
#𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 𝑎𝑎𝑎𝑎𝑎𝑎 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑡𝑡ℎ𝑒𝑒 𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚𝑚
𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡𝑡 # 𝑜𝑜𝑜𝑜 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠
Il valore è compreso tra 0 e 1, con 0 miglior valore che indica che il malware ha eluso
tutti i controlli di tutti i sistemi. Quando il valore è 1, invece, significa che il malware
è stato rilevato da ogni sistema, non è eseguibile o non è malevolo.
5. ANTI-MALWARE EVOLUTION
Inizialmente, sono state usate delle tecniche di Reverse Engineering sulle applicazioni di
Google Play e MalGenome Project. Esse sono state analizzate per estrapolare delle
feature distinguibili, sulla cui base si è effettuata l’evoluzione dell’anti-malware, tramite GP.
7. 5.1 FEATURES
Innanzitutto, sono state estratte le chiamate API e i permessi per ogni applicazione, in
quanto sono gli elementi principali considerati in una analisi statica.
Successivamente, è stata determinata la differenza tra il numero di applicazioni lecite e
malevole che usano quelle API, e se ne sono selezionate le prime 100, in ordine decrescente.
I 40 permessi più discriminativi sono stati selezionati nello stesso modo.
Allo stesso tempo, sono state considerate sei ulteriori feature:
• numero di chiamate API legate al DexClassLoader usato per caricare il codice
a runtime
• numero di chiamate API legati a Crypto, per cifrare il codice
• numero di classi
• numero di goto
• numero di metodi
• numero di permessi
Un individuo, in questo caso, è un albero con le 146 feature sopracitate come nodi terminali
e alcuni operatori come nodi non terminali. Ogni individuo produce un costrutto if, nel
determinare la pericolosità di una applicazione che sta venendo analizzata.
Nella fase di crossover, si creano nuovi costrutti if e nella fase di mutation, si genera un
ultimo nuovo costrutto if andando a mutare una parte casuale dell’albero.
5.2 FITNESS
Il fitness value è calcolato in base al rate di falsi positivi e veri positivi. Il true positive
rate è il rapporto tra le applicazioni denotate come malevoli rispetto a tutte le applicazioni
malevoli; il false positive rate, invece, è il rapporto di tutte le applicazioni classificate
come malevoli, rispetto a tutte le applicazioni lecite.
Dato che il malware evoluto ha ottenuto dei risultati di detection rate del 100%, con un
elevato tasso di false positive, si è incrementato il peso dei falsi positivi nella fitness function.
8. 6. MOBILE MALWARE/ANTI-MALWARE COEVOLUTION
La coevoluzione è la migliore evoluzione degli individui tra diverse specie che si
influenzano a vicenda. Quando una specie evolve, cambia anche la relazione con l’altra
specie. Questa mutua relazione si evolve a sua volta, lungo le diverse generazioni.
Quando questa filosofia è applicata all’informatica, la coevoluzione è usata in quei
problemi che puntano a migliorare diversi sistemi contemporaneamente. Questi
problemi possono essere cooperativi o competitivi: molti problemi nel campo della sicurezza
sono competitivi e sono noti come arms race. Ci sono risorse limitate in ambienti
competitivi e le specie competono tra loro per accaparrarsele.
In un problema competitivo, mentre il fitness value di una specie aumenta, quello
dell’altra specie diminuisce, e viceversa. In questo studio, mentre il malware cerca di
sopravvivere all’anti-malware, quest’ultimo cerca di rilevarlo. L’algoritmo di elaborazione
coevoluzionale viene eseguito finchè non viene ottenuto il miglior individuo oppure si
raggiunge il massimo numero di generazioni consentite (200 generazioni al massimo).
9. 7. PRESTAZIONI DEL MALWARE COEVOLUTO
La tabella mostra i detection rate degli anti-malware commerciali sul malware coevoluto.
Dato che alcuni aspetti evoluzionistici sono stocastici, l’algoritmo viene tipicamente
eseguito un numero di volte n e viene restituito il miglior individuo in output.
Per questo, viene considerato il miglior individuo per ogni famiglia di malware e si può notare
come esso sia capace di sfuggire ai controlli delle soluzioni commerciali.
La tabella seguente, mostra il miglior individuo per ogni famiglia:
• O: malware originale
• C: malware coevoluto
• V : malware rilevato
I risultati mostrano che le soluzioni commerciali sono robuste a diverse famiglie e le
differenze sono imputabili principalmente ai loro metodi di firma e ai loro
database, non disponibili pubblicamente.
Dato che il malware coevoluto è stato valuto sia rispetto alle soluzioni commerciali che
rispetto all’anti-malware coevoluto, si può dire che il meccanismo di coevoluzione ha il
potenziale di sviluppare un malware molto più evasivo rispetto al metodo
evolutivo tradizionale. È necessario far presente che gli anti-malware coevoluti sono stati
testati solo sui malware coevoluti (e che non si sono coevoluti insieme).
È difficile avere un sistema di rilevamento con un perfetto detection rate e un perfetto
false positive rate ed è pertanto necessario impostare un trade-off.
10. 8. PRESTAZIONI DELL’ANTI-MALWARE COEVOLUTO
Il sistema proposto è stato testato anche su nuove varianti di malware già esistenti. Ci sono
tecniche ovvie che funzionano solo sulle stringhe ma altre non banali che funzionano sia sulle
stringhe che sui bytecode degli eseguibili.
L’anti-malware coevoluto rileva la maggior parte dei malware offuscati, anche quello
attraverso la Class Encryption, che cifra e comprime ogni classe ed è la tecnica di
offuscamento più avanzata.