Forscher der Stanford University, der University of California, San Diego und der University of Texas in Austin Toolkit , die als zusätzliche Isolationsschicht zum Blockieren von Schwachstellen in Funktionsbibliotheken verwendet werden kann. RLBox zielt darauf ab, das Sicherheitsproblem von nicht vertrauenswürdigen Drittanbieterbibliotheken zu lösen, die nicht unter der Kontrolle der Entwickler stehen, jedoch Schwachstellen enthalten, die das Hauptprojekt gefährden können.
Das Unternehmen Mozilla RLBox in Linux-Versionen von Firefox 74 und macOS-Versionen von Firefox 75 zu implementieren, um die Ausführung der Bibliothek zu isolieren , die für das Rendering von Schriftarten verantwortlich ist. Dabei ist RLBox nicht spezifisch für Firefox und kann zur Isolierung beliebiger Bibliotheken in beliebigen Projekten verwendet werden. RLBox unter der MIT-Lizenz. Derzeit unterstützt RLBox die Verwendung auf den Plattformen Linux und macOS, während die Unterstützung für Windows später erwartet wird.
RLBox besteht darin, C/C++-Code der isolierten Bibliothek in niedrigleveligen Zwischencode in WebAssembly zu kompilieren, der dann als WebAssembly-Modul verpackt wird, dessen Berechtigungen nur an dieses Modul gebunden sind (zum Beispiel kann eine Bibliothek zur Verarbeitung von Strings keinen Netzwerk-Socket oder eine Datei öffnen). Die Umwandlung von C/C++-Code in WebAssembly erfolgt mit Hilfe von .
Für die direkte Ausführung wird das WebAssembly-Modul mit Hilfe des Compilers in Maschinencode kompiliert und in einem separaten "Nano-Prozess" ausgeführt, der vom restlichen Speicher der Anwendung isoliert ist. Der Lucet-Compiler basiert auf demselben Code wie die JIT-Engine , die in Firefox zur Ausführung von WebAssembly verwendet wird.
Das compilierte Modul arbeitet in einem separaten Speicherbereich und hat keinen Zugriff auf den restlichen Adressraum. Im Falle einer Ausnutzung einer Schwachstelle in der Bibliothek wäre der Angreifer eingeschränkt und könnte nicht auf die Speicherbereiche des Hauptprozesses zugreifen oder die Kontrolle außerhalb der isolierten Umgebung übertragen.
Für Entwickler wird eine hochgradige , der es ermöglicht, Funktionen der Bibliothek im isolierten Modus aufzurufen. WebAssembly-Handler benötigen nahezu keine zusätzlichen Ressourcen, und die Interaktion mit ihnen ist nicht viel langsamer als der Aufruf normaler Funktionen (Bibliotheksfunktionen werden in Form von nativem Code ausgeführt, und die Überheadkosten entstehen lediglich beim Kopieren und Überprüfen der Daten während der Interaktion mit der isolierten Umgebung). Funktionen der isolierten Bibliothek können nicht direkt aufgerufen werden, und um auf sie zuzugreifen, ist es notwendig,
den Zwischenschritt invoke_sandbox_function() zu verwenden.
Wenn von der Bibliothek aus externe Funktionen aufgerufen werden müssen, müssen diese Funktionen explizit mit der Methode register_callback definiert werden (standardmäßig bietet RLBox Zugriff auf Funktionen ). Um eine sichere Handhabung des Speichers (memory safety) zu gewährleisten, reicht die Isolation der Codeausführung nicht aus; es muss auch eine Überprüfung der zurückgegebenen Datenströme erfolgen.
Die in der isolierten Umgebung gebildeten Werte werden als nicht vertrauenswürdig markiert, eingeschränkt durch und erfordern zur 'Bereinigung' eine und das Kopieren in den Anwendungs-Speicher.
Ohne Bereinigung führt der Versuch, tainted-Daten in einem Kontext zu verwenden, der normale Daten erfordert (und umgekehrt), zu Kompilierungsfehlern. Kleine Funktionsargumente, Rückgabewerte und Strukturen werden durch Kopieren zwischen dem Speicher des Prozesses und dem Speicher der isolierten Umgebung übergeben. Für große Datensätze wird der Speicher in der isolierten Umgebung zugewiesen, während dem Hauptprozess ein direkter Zeiger 'sandbox-reference' zurückgegeben wird.
Quelle: opennet.ru
