Deceptive bytes: An in-depth evaluation of WebAssembly obfuscation for evading crypto mining detection
Abstract
WebAssembly er et lavnivå bytekode-språk som lar høyere nivå språk som C, C++ og Rust kjøre i nettleseren med høy ytelse. Det brukes allerede i stor grad og støttes i alle moderne nettlesere. Men WebAssembly introduserer også nye utfordringer innen sikkerhet. En av de mest bemerkelsesverdige er såkalte “drive-by mining” angrep, hvor nettsider utnytter brukernes maskinvare for å utvinne kryptovaluta uten deres kjennskap eller samtykke. Det er utviklet en rekke metoder for å oppdage drive-by mining, men det er foreløpig lite forskning på hvordan disse metodene kan omgås.
Denne oppgaven utfører en grundig evaluering av kodeobfuskasjon for WebAssembly, et lite utforsket område i forskningslitteraturen. Målet er å undersøke til hvilken grad kodeobfuskasjon kan skjule den underliggende hensikten til koden og dermed omgå drive-by mining deteksjon. Vi gjennomfører den mest omfattende studien av kodeobfuskasjon for WebAssembly til nå, og anvender obfuskasjon på flere abstraksjonsnivåer -- inkludert C kildekode, LLVM bitkode, og WebAssembly binærfiler.I denne prosessen tar vi i bruk en rekke eksisterende verktøy og utvikler også nye. Vi evaluerer effekten av obfuskasjon på WebAssembly binærfiler og hvordan den resulterende maskinkoden påvirkes etter kompilering i nettleseren. Videre undersøker vi, for første gang i litteraturen, i hvilken grad obfuskasjon som anvendes på WebAssembly kan reverseres gjennom automatisk de-obfuskasjon og hvordan deteksjonsevnen påvirkes av dette. Avslutningsvis ser vi på i hvilken grad obfuskasjon reduserer ytelsen, både når det gjelder plass- og tidskompleksitet.
Resultatene viser at obfuskasjon kan omgå state-of-the-art drive-by mining detektorer. Imidlertid er effektiviteten i stor grad avhengig av den spesifikke obfuskasjonstransformasjonen, deteksjonsmetoden og kryptovaluta-utvinningsalgoritmen. Videre finner vi at obfuskasjon kan delvis reverseres gjennom automatisk de-obfuskasjon, men graden av suksess er avhengig av den spesifikke obfuskasjonstransformasjonen. Maskinkoden som produseres av de obfuskerte WebAssembly binærfilene har en tendens til å øke i størrelse og oppnår også dårligere ytelse. Selv om reduksjonen i ytelse er betydelig for enkelte transformasjoner, viser vi hvordan obfuskasjon kan brukes i praksis for å omgå drive-by mining deteksjon med minimal ytelsesreduksjon.
Disse resultatene gir innsikt i hvordan forskere kan utvikle deteksjonsmetoder som er resistente mot obfuskasjon, og dermed adressere begrensningene ved eksisterende metoder. I tillegg har vi utviklet nye metoder for obfuskasjon og de-obfuskasjon, samt et omfattende datasett med nesten 50 000 obfuskerte WebAssembly binærfiler som kan anvendes i videre forskning. WebAssembly is a low-level bytecode language that allows high-level languages like C, C++, and Rust to be executed in the browser at near-native performance. It has already seen extensive adoption and is now natively supported in all modern browsers. However, its adoption also presents new challenges in security. One of the most notable is drive-by mining attacks, where websites use the computing resources of their visitors to mine cryptocurrency without their knowledge or consent. A plethora of approaches have been proposed to detect drive-by mining, yet there is a lack of research on how these detection methods can be sidestepped.
This thesis provides an in-depth evaluation of code obfuscation for WebAssembly, a largely unexplored topic. The objective is to evaluate how well code obfuscation can disguise the underlying nature of the code and evade drive-by mining detection. We perform the most comprehensive evaluation of WebAssembly obfuscation to date, applying obfuscation at multiple abstraction levels -- including source code, LLVM bitcode, and WebAssembly binaries. In this evaluation, we leverage existing obfuscation methods as well as develop novel ones. We not only evaluate the impact of obfuscation on the WebAssembly binaries but also how the resulting native code produced after compilation in the browser is affected. Moreover, we, for the first time in the literature, investigate to what extent obfuscation applied to WebAssembly can be reversed through automatic de-obfuscation and how this affects the detection capabilities.Lastly, we evaluate the overhead introduced by obfuscation, measuring the space and time overhead.
The results suggest that obfuscation can successfully evade state-of-the-art drive-by mining detectors. However, the effectiveness largely depends on the specific obfuscation transformation, detection method, and crypto mining algorithm. Moreover, we find that obfuscation can be partially reversed through automatic de-obfuscation, but the degree of success varies depending on the specific transformation. The native code generated from the obfuscated WebAssembly binaries tends to increase in size and, as a result, decrease in performance. Despite the significant performance overhead for some transformations, we show how obfuscation can be used for evading detection with minimal overhead in real-world scenarios.
These results offer insights into how researchers can develop obfuscation-resilient detection methods, thereby addressing the limitations of current methods. Moreover, we provide novel obfuscation and de-obfuscation methods, as well as an extensive dataset of nearly 50 000 obfuscated WebAssembly binaries for researchers to extend and explore.