Rafforzare la sicurezza di WebAssembly tramite offuscamento
Un nuovo framework migliora la protezione dei binari WebAssembly contro il reverse engineering.
― 6 leggere min
Indice
WebAssembly (Wasm) è un nuovo tipo di formato binario che sta diventando popolare, soprattutto nelle applicazioni web. Permette agli sviluppatori di eseguire codice a velocità quasi nativa su vari dispositivi e piattaforme, rendendolo una buona alternativa ai linguaggi di programmazione web tradizionali come JavaScript. L'idea principale dietro Wasm è di compilare linguaggi di alto livello come C, C++, Rust e altri in un formato che può essere eseguito sul web, migliorando le prestazioni per compiti che richiedono pesanti calcoli, come i giochi e l'elaborazione grafica.
Nonostante i suoi vantaggi, i binari Wasm non sono ben protetti. Possono essere facilmente letti e modificati da attaccanti che possono usare strumenti disponibili per analizzare i binari compilati. Questo significa che individui malintenzionati possono ingegnerizzare a ritroso il codice Wasm per trovare vulnerabilità ed esplorarle, il che rappresenta un rischio significativo per la sicurezza.
Perché c'è bisogno di offuscamento
Data la vulnerabilità di Wasm, c'è un urgente bisogno di tecniche di offuscamento. L'offuscamento si riferisce alla pratica di rendere il codice difficile da capire mantenendo la sua funzionalità originale. Questo è cruciale per proteggere informazioni sensibili e prevenire accessi non autorizzati alla logica sottostante del software.
Attualmente, non ci sono strumenti di offuscamento dedicati specificamente progettati per i binari Wasm. La mancanza di tali strumenti lascia i binari esposti a potenziali minacce da parte di attaccanti che potrebbero cercare di analizzarli e sfruttarli.
Introduzione a un nuovo framework di offuscamento
Per affrontare il divario nella protezione dei binari Wasm, proponiamo un nuovo framework di offuscamento che funziona specificamente per Wasm. Il nostro framework si concentra su due aree principali di offuscamento: Offuscamento dei dati e Offuscamento del codice.
Offuscamento dei dati
L'offuscamento dei dati mira a proteggere informazioni sensibili all'interno del codice, come nomi di funzioni e stringhe letterali. Sostituendo dati leggibili con stringhe casuali o valori crittografati, diventa molto più difficile per gli attaccanti capire il funzionamento del programma originale.
Ad esempio, i nomi delle funzioni possono essere sostituiti con identificatori casuali, rendendo difficile per un attaccante determinare lo scopo di ogni funzione. Allo stesso modo, le stringhe letterali contenenti informazioni importanti possono essere crittografate e decrittografate solo durante l'esecuzione, minimizzando le possibilità di esposizione.
Offuscamento del codice
L'offuscamento del codice si concentra sull'alterazione delle istruzioni effettive e del flusso di controllo del programma. Questo tipo di offuscamento può rendere significativamente più difficile per un attaccante analizzare il programma con strumenti comuni di ingegneria inversa.
Nel nostro framework, introduciamo tecniche come il "control flow flattening", che riorganizza l'ordine di esecuzione in un modo che non influisce sull'output ma rende più complesso per chiunque cerchi di capire la logica sottostante. Complicando il flusso delle istruzioni e aggiungendo livelli di astrazione, possiamo oscurare efficacemente l'intento originale del codice.
Sfide nell'implementazione dell'offuscamento
Implementare l'offuscamento per i binari Wasm comporta le sue sfide:
Sovraccarico: Qualsiasi tecnica di offuscamento non deve rallentare significativamente l'esecuzione dei binari o aumentare le loro dimensioni. Gli utenti si aspettano che le applicazioni funzionino in modo efficiente, quindi un sovraccarico aggiuntivo potrebbe portare a frustrazione.
Flusso di controllo strutturato: Wasm ha una struttura di flusso di controllo unica che manca di istruzioni di salto tradizionali come "goto". Questo significa che le tecniche di offuscamento devono essere progettate specificamente tenendo conto della struttura di Wasm.
Resistenza all'analisi statica: Molti strumenti possono analizzare i binari Wasm per recuperarne la semantica. Un'efficace offuscamento deve garantire che questi strumenti non possano facilmente estrarre informazioni significative dal codice offuscato.
Tecniche proposte per l'offuscamento
Per superare queste sfide, il nostro framework adotta diverse tecniche che mirano sia all'offuscamento dei dati che all'offuscamento del codice:
1. Decrittografia on-demand
Quando si tratta di dati in memoria, proponiamo un metodo di decrittografia on-demand. Invece di decrittografare tutti i dati all'avvio del programma, che può consumare risorse e tempo, il framework decrittografa le informazioni solo quando sono necessarie durante l'esecuzione. Questo minimizza il sovraccarico pur proteggendo i dati sensibili.
2. Suddivisione dei blocchi di codice
La suddivisione dei blocchi di codice ci consente di spezzare un blocco di codice complesso in sezioni più piccole e gestibili. Ogni sezione può essere riorganizzata, contribuendo a un flusso di controllo più complicato. Questa tecnica mantiene intatta la semantica del programma rendendo il codice più difficile da seguire.
3. Control flow flattening
Il "control flow flattening" implica prendere una serie di istruzioni e strutturarle in modo tale che il loro ordine di esecuzione diventi meno ovvio. Questo può essere ottenuto attraverso tecniche come le istruzioni switch-case avvolte in cicli che vengono eseguiti in sequenza ma appaiono casuali, complicando gli sforzi di ingegneria inversa.
4. Disruption degli alias
Questa tecnica sostituisce le chiamate dirette alle funzioni con chiamate indirette, che si basano sui dati a runtime per determinare quale funzione chiamare. Questo aggiunge incertezza per gli attaccanti, che non possono facilmente prevedere il percorso di esecuzione del programma, rendendo più difficile l'analisi.
5. Predicati opachi
I predicati opachi sono espressioni che producono sempre lo stesso risultato, indipendentemente dall'input. Incorporando questi nel flusso di controllo, possiamo oscurare ulteriormente la semantica del programma. Gli attaccanti faranno fatica a determinare il significato di questi predicati, creando ulteriori ostacoli per l'analisi statica.
Valutazione del framework di offuscamento
Per valutare l'efficacia del nostro framework di offuscamento, abbiamo condotto test approfonditi utilizzando diversi set di binari Wasm. La valutazione si è concentrata su tre criteri principali:
Coerenza semantica: Abbiamo assicurato che i binari offuscati producessero ancora lo stesso output dei loro corrispondenti originali, confermando che l'offuscamento non ha compromesso la funzionalità.
Resistenza all'ingegneria inversa: Abbiamo valutato quanto fosse difficile per gli attaccanti analizzare i binari offuscati, utilizzando sia analisi manuali che strumenti di analisi statica.
Sovraccarico di prestazioni: Abbiamo misurato l'impatto delle nostre tecniche di offuscamento sul tempo di esecuzione e sulla dimensione del binario. Il nostro obiettivo era mantenere il sovraccarico il più basso possibile garantendo al contempo una protezione adeguata.
Risultati dei test
I risultati della nostra valutazione hanno mostrato esiti promettenti:
Tutti i binari testati hanno mantenuto la loro funzionalità originale, confermando che i nostri metodi di offuscamento hanno preservato la coerenza semantica.
Le tecniche hanno aumentato effettivamente la difficoltà dell'ingegneria inversa manuale. Gli attaccanti hanno trovato difficile interpretare il codice offuscato, che è diventato significativamente meno leggibile.
Sebbene alcune tecniche abbiano introdotto sovraccarico, siamo riusciti a mantenerlo sotto il 20% sia nel tempo di esecuzione che nella dimensione del binario, garantendo che i binari offuscati rimanessero pratici per l'uso nel mondo reale.
Conclusione
Il nostro framework di offuscamento proposto per i binari WebAssembly rappresenta un passo importante verso la sicurezza di questa tecnologia emergente. Affrontando le vulnerabilità specifiche di Wasm, forniamo una soluzione robusta che protegge i dati sensibili e complica gli sforzi di ingegneria inversa.
Con questo framework, gli sviluppatori possono proteggere le loro applicazioni senza sacrificare le prestazioni. Le tecniche incorporate nel nostro approccio di offuscamento non solo nascondono l'intento originale del codice, ma resistono anche agli strumenti moderni di analisi statica, garantendo una continua protezione in un panorama in evoluzione di minacce alla cybersicurezza.
Man mano che WebAssembly continua a guadagnare terreno sul web, la necessità di un'efficace offuscamento binario crescerà solo. La nostra ricerca apre la strada a ulteriori esplorazioni e sviluppi in quest'area vitale, incoraggiando progressi continui nelle strategie di protezione dei binari Wasm.
Titolo: WASMixer: Binary Obfuscation for WebAssembly
Estratto: WebAssembly (Wasm) is an emerging binary format that draws great attention from our community. However, Wasm binaries are weakly protected, as they can be read, edited, and manipulated by adversaries using either the officially provided readable text format (i.e., wat) or some advanced binary analysis tools. Reverse engineering of Wasm binaries is often used for nefarious intentions, e.g., identifying and exploiting both classic vulnerabilities and Wasm specific vulnerabilities exposed in the binaries. However, no Wasm-specific obfuscator is available in our community to secure the Wasm binaries. To fill the gap, in this paper, we present WASMixer, the first general-purpose Wasm binary obfuscator, enforcing data-level (string literals and function names) and code-level (control flow and instructions) obfuscation for Wasm binaries. We propose a series of key techniques to overcome challenges during Wasm binary rewriting, including an on-demand decryption method to minimize the impact brought by decrypting the data in memory area, and code splitting/reconstructing algorithms to handle structured control flow in Wasm. Extensive experiments demonstrate the correctness, effectiveness and efficiency of WASMixer. Our research has shed light on the promising direction of Wasm binary research, including Wasm code protection, Wasm binary diversification, and the attack-defense arm race of Wasm binaries.
Autori: Shangtong Cao, Ningyu He, Yao Guo, Haoyu Wang
Ultimo aggiornamento: 2023-08-06 00:00:00
Lingua: English
URL di origine: https://arxiv.org/abs/2308.03123
Fonte PDF: https://arxiv.org/pdf/2308.03123
Licenza: https://creativecommons.org/licenses/by/4.0/
Modifiche: Questa sintesi è stata creata con l'assistenza di AI e potrebbe presentare delle imprecisioni. Per informazioni accurate, consultare i documenti originali collegati qui.
Si ringrazia arxiv per l'utilizzo della sua interoperabilità ad accesso aperto.