Forscher der Stanford-Universität, der University of California San Diego und der University of Texas in Austin ein Toolset , das als zusätzlicher Isolationsgrad verwendet werden kann, um Schwachstellen in Funktionsbibliotheken zu blockieren. RLBox zielt darauf ab, Sicherheitsprobleme mit nicht vertrauenswürdigen Drittanbieter-Bibliotheken zu lösen, die nicht von Entwicklern kontrolliert werden, deren Schwachstellen aber das Hauptprojekt gefährden können.
Die Mozilla Corporation RLBox in den Linux-Bauversionen von Firefox 74 und den macOS-Bauversionen von Firefox 75 zur Isolierung der Ausführung der Bibliothek einzusetzen, , 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 eingesetzt werden. RLBox unter der MIT-Lizenz. Derzeit unterstützt RLBox die Nutzung auf Linux- und macOS-Plattformen, während die Unterstützung für Windows später erwartet wird.
Die Funktionsweise von RLBox besteht darin, C/C++-Code aus einer isolierten Bibliothek in einen niedrigstufigen Zwischen-Code (WebAssembly) zu kompilieren, der dann als WebAssembly-Modul bereitgestellt wird. Die Berechtigungen dieses Moduls sind ausschließlich auf dieses Modul beschränkt (zum Beispiel kann eine Bibliothek zur Verarbeitung von Zeichenfolgen keinen Netzwerk-Socket oder eine Datei öffnen). Die Umwandlung von C/C++-Code in WebAssembly erfolgt mithilfe von .
Um WebAssembly direkt auszuführen, wird das Modul mit einem Compiler in Maschinencode kompiliert und wird in einem separaten „Nano-Prozess“ ausgeführt, der von dem Rest des Anwendungsprogramms isoliert ist. Der Compiler Lucet basiert auf dem gleichen Code wie die JIT-Engine , die in Firefox zur Ausführung von WebAssembly verwendet wird.
Das kompiliertes Modul arbeitet in einem separaten Speicherbereich und hat keinen Zugriff auf den restlichen Adressraum. Im Falle einer Ausnutzung einer Schwachstelle in der Bibliothek ist der Angreifer eingeschränkt und kann nicht auf den Speicherbereich des Hauptprozesses zugreifen oder die Kontrolle außerhalb der isolierten Umgebung übertragen.
Für Entwickler steht eine hochgradig abstrahierte , der es ermöglicht, Bibliotheksfunktionen in einem isolierten Modus aufzurufen. WebAssembly-Handler benötigen fast keine zusätzlichen Ressourcen, und die Interaktion mit ihnen ist nicht viel langsamer als der Aufruf gewöhnlicher Funktionen (Bibliotheksfunktionen werden in Form von nativem Code ausgeführt, und es entstehen nur geringe Overheadkosten beim Kopieren und Überprüfen von Daten während der Interaktion mit der isolierten Umgebung). Isolierte Bibliotheksfunktionen können nicht direkt aufgerufen werden, und um auf sie zuzugreifen, muss
der invoke_sandbox_function() Wrapper verwendet werden.
Wenn aus der Bibliothek externe Funktionen aufgerufen werden sollen, müssen diese Funktionen explizit mit der Methode register_callback definiert werden (standardmäßig gewährt RLBox Zugriff auf Funktionen ). Um die sichere Arbeit mit dem Speicher (memory safety) zu gewährleisten, reicht die Isolierung der Codeausführung nicht aus; es muss auch eine Überprüfung der zurückgegebenen Datenströme sichergestellt werden.
Die in der isolierten Umgebung erzeugten Werte werden als vertrauenswürdig markiert, durch beschränkt und erfordern zur „Reinigung“ und Kopieren in den Anwendungs-Speicher.
Ohne Bereinigung führt der Versuch, mit tainted-Daten in einem Kontext zu arbeiten, 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 übertragen. Für große Datensätze wird im isolierten Umfeld Speicher reserviert, während dem Hauptprozess ein direkter Zeiger auf die „Sandbox-Referenz“ zurückgegeben wird.
Quelle: opennet.ru
