Analisi Comparativa di "Large Language Models" per la Generazione di Malware Polimorfico
Il progetto definito da questa tesi appunta uno specifico obiettivo da raggiungere, ovvero determinare la fattibilità di utilizzare un modello di linguaggio per generare configurazioni o variabili da utilizzare all’interno di una configurazione. In particolare, per questa tesi, si considera come obiettivo la generazione di configurazioni dette “Malleable C2 Profile” per il tool di red teaming “Cobalt Strike”. Tali configurazioni determinano una variazione nel malware generato dal software in base al valore dei parametri utilizzati, determinando quindi la generazione di malware polimorfico.
Per raggiungere questo obiettivo, sono stati identificati i passaggi principali necessari da seguire, da una prima selezione di modelli di linguaggio sulla base di ipotetiche risorse hardware e conoscenze, al fine tuning dei modelli selezionati per introdurre le informazioni necessarie, concludendo con un’analisi e un test sul campo delle configurazioni ottenute interrogando i modelli di linguaggio generativi.
Scenario
Per affrontare il quesito sono stati ipotizzati diversi scenari, differenziati principalmente dall’esperienza di un ipotetico utente e le risorse hardware a disposizione. La differenza di esperienza mira a delineare due casi d’uso dove un utente inesperto non avrà le conoscenze necessarie per collaborare e correggere il modello di linguaggio, dunque dipendendo quasi completamente dal suo output. L’utente esperto, al contrario, sarà capace di analizzare e correggere dove necessario l’output generato, valutandone la funzionalità.
La differenza di risorse hardware mira a differenziare due casi dove l’utente ha a disposizione risorse limitate, come un comune computer ad alte prestazioni, oppure risorse ben più estese, e costose. Questa differenza permetterà di confrontare l’utilizzo di modelli di linguaggio con una quantità di parametri da una parte ridotta, dall’altra relativamente estesa.
Modelli di Linguaggio
I modelli di linguaggio selezionati per questa tesi includono modelli derivati da Llama e Llama 2 come WizardCoder e WizardLM, con un numero crescente di parametri disponibili, da un miliardo a 70 miliardi. Per limitazioni riguardanti le risorse a disposizione dello scenario ipotizzato, i modelli di linguaggio dal 7B al 70B sono stati utilizzati nella loro variante quantizzata tramite GPTQ, così da ridurre la memoria video richiesta per utilizzare il modello.
Inoltre, sono stati selezionati anche i modelli di linguaggio di OpenAI, GPT-3.5 e GPT-4 Turbo, per includere lo scenario di un utilizzo in cloud di modelli di linguaggio allo stato dell’arte.
Dataset e Fine Tuning
Per introdurre le informazioni necessarie a generare un output nel formato corretto e con le informazioni corrette, è stata utilizzata la documentazione ufficiale di Cobalt Strike, disponibile pubblicamente, come fonte di informazioni. Utilizzando GPT-4 Turbo come assistente, le informazioni contenute nella documentazione sono state trasformate in una collezione di oltre 750 coppie domanda/risposta in formato JSON, strutturate poi in un singolo file che, dopo una review umana, è stato utilizzato come dataset per il fine tuning dei modelli di linguaggio.
L’attività di fine tuning è stata eseguita seguendo un processo iterativo, gestito da uno script in python, che ha permesso di generare una serie di Low-Rank Adapter per i modelli utilizzati, da WizardCoder 1B a WizardLM 30B. I modelli di OpenAI, GPT-3.5 e GPT-4 Turbo, non sono stati soggetti al fine tuning poiché contenevano già le informazioni necessarie. WizardLM 70B non è stato soggetto al fine tuning a causa delle risorse insufficienti per tale operazione, considerata la dimensione del modello.
Inferenza - Comparazione prestazioni
Per analizzare l’efficacia del fine tuning, sono state eseguite 5 prove di conversazione con ciascun modello, prima e dopo l’applicazione del LoRA generato, collezionando le statistiche di generazione come la velocità di output dei token, T/s, e la quantità totale di token.
MODELLO | WizardCoder 1B | WizardCoder 3B | WizardLM 7B | WizardLM 13B | WizardLM 30B |
---|---|---|---|---|---|
Chat Utente T/s (%) | - 9.36 | - 14 | - 24.71 | - 1.02 | - 12.57 |
Chat Utente T (%) | 50.54 | 9.26 | - 10.68 | 8.16 | - 3.38 |
Pr.Eng 0.5 T/s (%) | - 17.26 | - 8.70 | - 23.48 | - 24.07 | - 7.34 |
Pr.Eng 0.5 T (%) | - 14.52 | 30.35 | - 8.51 | - 53.10 | 43.48 |
Pr.Eng 0.7 T/s (%) | 2.00 | - 3.08 | - 29.28 | - 16.40 | 12.30 |
Pr.Eng 0.7 T (%) | 141.36 | 104 | - 45.48 | 41.68 | - 17.30 |
Pr.Eng 1.0 T/s (%) | - 10.06 | - 10.22 | - 27.53 | - 26.92 | - 10.43 |
Pr.Eng 1.0 T (%) | 18.77 | 9.27 | - 34.76 | - 38.90 | - 19.12 |
Config 0.5 T/s (%) | - 11.54 | - 15.84 | - 24.39 | 1.29 | - 14.55 |
Config 0.5 T (%) | 24.94 | 9.03 | - 28.93 | 484.26 | - 52.73 |
Nella tabella sono stati raccolti i dati che raffigurano la percentuale di miglioramento, o peggioramento delle prestazioni per ciascun tipo di prova.
Le prove sono state:
Chat utente, dove è stata simulata una conversazione tra l’utente e il modello, richiedendo informazioni di contesto su Cobalt Strike e il Malleable C2 Profile
Prompt Engineering, dove sono state simulate conversazioni tra l’utente e il modello utilizzando tecniche di prompt engineering per indirizzare l’output verso un formato desiderato e con informazioni più precise. 3 prove con tre parametri di temperatura diversi, dove la temperatura definisce il grado di “creatività” del modello
Configurazioni, dove sono state fornite richieste dirette di modifiche a un estratto di configurazione fornito direttamente in input
Rimane da notare che una diminuzione delle prestazioni generative non implica una risposta di qualità inferiore, ma in diversi casi, come si vedrà successivamente, una riduzione delle prestazioni ha comportato un miglioramento della precisione nella risposta.
Generalmente l’applicazione del LoRA ha comportato una riduzione nella velocità di output dei token, ma in diversi casi la lunghezza della risposta è aumentata notevolmente.
Inferenza - Valutazione Risposte
Per determinare la correttezza delle risposte, a prescindere dalla variazione nelle prestazioni precedentemente descritta, è stata eseguita una valutazione umana di ciascuna risposta fornita da ciascun modello, prima e dopo l’applicazione del LoRA. L’insieme di coppie domanda/risposta è stato randomizzato e sottoposto alla valutazione umana senza esplicitare quale modello di linguaggio ha generato la risposta e a quale test questa coppia facesse parte.
La valutazione è stata eseguita con un punteggio da 0 a 5 determinato, soggettivamente, su parametri di completezza, correttezza, coerenza, rilevanza e varianza.
Nel grafico qua mostrato vengono messi a confronto i risultati calcolati per ciascun modello, visualizzando i miglioramenti nei punteggi a seguito dell’applicazione dei rispettivi LoRA.
Si nota come i modelli GPT abbiano comunque ottenuto risultati migliori di tutti gli altri, anche senza il fine tuning. WizardLM 30B si è dimostrato il più portato al miglioramento a seguito del fine tuning, mentre WizardCoder 1B ha dimostrato il miglioramento più ridotto, nonostante abbia superato il 30B senza LoRA.
WizardLM 13B e 30B, a seguito di questa valutazione, si sono dimostrati i più promettenti per raggiungere l’obiettivo.
Inferenza - Valutazione Configurazioni
Una ulteriore valutazione è stata eseguita su un nuovo set di istruzioni specifico al raggiungimento dell’obiettivo posto dalla tesi. In questo caso è stato sottoposto ai vari modelli di alterare direttamente i valori dei parametri contenuti in diversi estratti di configurazione, valutandone successivamente la validità dell’output con un punteggio di 0 in caso di fallimento o 1 in caso di successo.
I risultati, come in precedenza, vengono messi a confronto nel presente grafico, distinguendo i punteggi ottenuti prima e dopo l’applicazione del LoRA.
Anche in questo caso WizardLM 13B e 30B si dimostrano promettenti a seguito del fine tuning, dopo un rispettivo miglioramento del 700% e 100%.
WizardLM 7B, senza fine tuning, ha fallito in tutti i casi, ma ha dimostrato un forte miglioramento a seguito del fine tuning. GPT-3.5 invece si è dimostrato leggermente inferiore a WizardLM 70B, mentre GPT-4 Turbo ancora una volta mostra risultati che superano tutti gli altri modelli a prescindere dal fine tuning.
Test sul Campo delle Configurazioni
Come ultima fase dell’esperimento, a tutti i modelli è stata sottoposta una serie di istruzioni contenenti estratti di una configurazione template da alterare con valori nuovi e validi. I risultati per ciascun modello, differenziando per applicazione del LoRA, sono stati uniti in un singolo file di configurazione a sua volta sottoposto a validazione tramite lo strumento ufficiale di linting c2lint, incluso nel pacchetto di Cobalt Strike.
A questo punto è importante sottolineare che nessuno dei modelli considerati, incluso GPT-4 Turbo, ha generato risposte tali da permettere di costruire un file di configurazione corretto senza interventi umani. Nonostante ciò, lo strumento di linting restituisce suggerimenti di correzioni nei casi in cui gli errori sono sufficientemente semplici, come singoli valori fuori da predefinite limitazioni o mancanza di punteggiatura corretta.
Nei casi in cui il linter ha fornito chiare e semplici correzioni, è stato concesso l’intervento umano anche negli scenari di un utente inesperto. Nei casi in cui gli errori non erano accompagnati da suggerimenti di correzioni, la prova è stata considerata un fallimento.
A seguito di queste correzioni, con il linter che non restituiva più errori, le configurazioni sono state applicate e testate direttamente con Cobalt Strike all’interno dell’ambiente di laboratorio fornito dall’azienda per cui lavoro, Axitea, dove solitamente eseguiamo analisi di malware e vari test affini.
Per superare questo test, il malware generato da Cobalt Strike deve correttamente comunicare con il server C2 superando il riconoscimento da parte di Suricata, uno strumento IDS, sia durante il download del payload iniziale sia durante successive comunicazioni.
WizardCoder 1B | WizardCoder 3B | WizardLM 7B | WizardLM 13B | WizardLM 30B | WizardLM 70B | GPT-3.5 | GPT-4 Turbo | |
---|---|---|---|---|---|---|---|---|
No LoRA | ✘ | ✘ | ✘ | ✘ | ✘ | ✘ | ✔ | ✔ |
LoRA | ✘ | ✘ | ✘ | ✔ | ✔ | ~ | ~ | ~ |
Nella tabella qua riportata vengono mostrati i risultati del test, dove solo WizardLM 13B e 30B, a seguito del fine tuning, hanno generato configurazioni che superano il test, oltre ai due modelli GPT-3.5 e GPT-4 Turbo, che hanno ottenuto lo stesso risultato positivo.
Conclusioni
A seguito di queste analisi e test sul campo, è stato determinato che un utente inesperto senza risorse sufficienti non potrà facilmente utilizzare modelli di linguaggio come assistente per attività potenzialmente malevole con Cobalt Strike.
Avendo invece a disposizione risorse sufficienti per utilizzare un modello come WizardLM 13B o migliori, oltre ad avere accesso ad un dataset di fine tuning adatto, le possibilità di abuso da parte di un utente inesperto migliorano notevolmente, specialmente nel caso di fondi economici sufficienti all’utilizzo illimitato di GPT-4 Turbo, sia come assistente alla generazione di configurazioni, sia come strumento per ottenere spiegazioni e informazioni riguardanti Cobalt Strike e le relative attività.