WebAssembly ermöglicht es, komplexe Anwendungen, die ursprünglich in systemnahen Programmiersprachen wie C oder Rust geschrieben wurden, in ein portables Binärformat zu übersetzen, das in allen modernen Browsern ausgeführt werden kann. Dabei werden jedoch auch Schwachstellen aus dem ursprünglichen Quellcode in das WebAssembly-Modul übernommen.
Obwohl WebAssembly über Mechanismen verfügt, die den Kontrollfluss weitestgehend absichern, ist das sogenannte "Linear Memory", in dem alle Daten eines Moduls gespeichert werden, nur begrenzt geschützt. Insbesondere ist das Speicherlayout eines Moduls deterministisch: Bei jeder Ausführung liegen alle Daten an denselben Positionen im Linear Memory. Diese Vorhersehbarkeit erleichtert sogenannte Data-only Angriffe, bei denen Daten gezielt manipuliert werden, um das Verhalten eines Programms zu beeinflussen, ohne dessen Kontrollfluss direkt zu verändern.
Betriebssysteme erschweren solche Angriffe auf native Programme unter anderem durch Address Space Layout Randomization (ASLR), die Speicherbereiche bei jedem Programmstart an zufälligen Adressen platziert. Auf WebAssembly lässt sich dieser Ansatz jedoch nicht direkt übertragen, da dessen Linear Memory anders organisiert ist und die für ASLR benötigten Abstraktionen, wie virtuellen Speicher, nicht unterstützt.
Aus diesem Grund haben wir WASLR entwickelt, einen Ansatz zur feingranularen Speicherrandomisierung speziell für WebAssembly. WASLR verändert das Speicherlayout bei jeder Ausführung, indem es einzelne Speicherobjekte statt ganzer Speicherbereiche randomisiert. Dadurch wird es Angreifern erschwert, die Positionen einzelner Objekte zuverlässig vorherzusagen, selbst wenn ihnen bereits eine Speicheradresse aus demselben Bereich bekannt ist.
Die Arbeit wurde Anfang Oktober auf der RAID Konferenz in Lancaster präsentiert.
Link zur Publikation: TBD