Sicherheit 26.07.2018, 08:13 Uhr

Wie WebAssemblies für Sicherheit sorgen

Sie sollen die nächste große Sache werden: Code, der in beliebigen Sprachen wie C/C++, C# oder PHP geschrieben ist, wird in ein Modul übersetzt, das im Browser ausgeführt wird.
Die entscheidende Frage, die sich dabei stellt, ist: Wie wird sichergestellt, dass nicht schädlicher Code ausgeführt wird? Hierzu gibt es mehrere Mechanismen, die auf der Website webassembly.org genau spezifiziert sind:
  • Funktionsaufrufe müssen den Index eines Ziels angeben, der einem gültigen Eintrag im Funktionsindexraum oder Tabellenindexraum entspricht.
  • Indirekte Funktionsaufrufe werden zur Laufzeit einer Typ-Signaturprüfung unterzogen; die Typ-Signatur der ausgewählten indirekten Funktion muss mit der am Aufrufort angegebenen Typ-Signatur übereinstimmen.
  • Ein geschützter Aufrufstapel, der für Pufferüberläufe im Modul-Heap unverwundbar ist, sorgt für sichere Funktionsrückgaben.
  • Zweige müssen auf gültige Ziele innerhalb der umschließenden Funktion zeigen.
Der Zugriff auf den Speicher ist ein möglicher Angriffsvektor. Zwar können im linearen Speicher die Daten benachbarter Objekte überschrieben werden. Doch verhindert wohl die Control-Flow-Integrität und geschützte Call-Stacks direkte Code-Injection-Angriffe.


Das könnte Sie auch interessieren