Les chercheurs de l'Université de Stanford, de l'Université de Californie à San Diego et de l'Université du Texas à Austin outils , qui peut être utilisé comme un niveau supplémentaire d'isolation pour bloquer les vulnérabilités dans les bibliothèques de fonctions. RLBox vise à résoudre le problème de sécurité des bibliothèques tierces non fiables, qui échappent au contrôle des développeurs, mais dont les vulnérabilités peuvent compromettre le projet principal.
Entreprise Mozilla implémenter RLBox dans les versions Linux de Firefox 74 et dans les versions macOS de Firefox 75 pour isoler l'exécution de la bibliothèque , responsable du rendu des polices. RLBox n'est pas spécifique à Firefox et peut être utilisé pour isoler n'importe quelle bibliothèque dans des projets arbitraires. RLBox sont sous licence MIT. Actuellement, RLBox prend en charge les plateformes Linux et macOS, avec un support Windows attendu plus tard.
de fonctionnement de RLBox consiste à compiler le code C/C++ de la bibliothèque isolée en code intermédiaire bas niveau WebAssembly, qui est ensuite empaqueté sous forme de module WebAssembly, dont les permissions sont restreintes uniquement à ce module (par exemple, une bibliothèque de traitement de chaînes ne pourra pas ouvrir de socket réseau ou de fichier). La transformation du code C/C++ en WebAssembly est effectuée à l'aide de .
Pour une exécution directe, le module WebAssembly est compilé en code machine à l'aide du compilateur et s'exécute dans un « nanoprocessus » distinct, isolé du reste de la mémoire de l'application. Le compilateur Lucet est basé sur le même code que le moteur JIT , utilisé dans Firefox pour l'exécution de WebAssembly.
Le module compilé fonctionne dans une zone de mémoire séparée et n'a pas accès au reste de l'espace d'adressage. En cas d'exploitation d'une vulnérabilité dans la bibliothèque, un attaquant sera limité et ne pourra pas accéder aux zones mémoire du processus principal ou transmettre le contrôle en dehors de l'environnement isolé.
Un haut niveau d'abstraction est fourni aux développeurs , qui permet d'appeler des fonctions de la bibliothèque en mode isolé. Les gestionnaires WebAssembly nécessitent presque aucune ressource supplémentaire et leur interaction n'est pas beaucoup plus lente que l'appel de fonctions ordinaires (les fonctions de la bibliothèque s'exécutent sous forme de code natif, et les frais généraux ne surviennent qu'au moment de la copie et de la vérification des données lors de l'interaction avec l'environnement isolé). Les fonctions de la bibliothèque isolée ne peuvent pas être appelées directement et doivent être invoquées par
la couche invoke_sandbox_function().
D'autre part, si la bibliothèque doit appeler des fonctions externes, ces fonctions doivent être explicitement définies à l'aide de la méthode register_callback (par défaut, RLBox donne accès aux fonctions ). Pour garantir un travail sécurisé avec la mémoire (memory safety), l'isolation de l'exécution du code ne suffit pas, il est également nécessaire d'assurer la vérification des flux de données retournés.
Les valeurs formées dans l'environnement isolé sont marquées comme non dignes de confiance, limitées par et requièrent une "purification" Sans purification, toute tentative d'utilisation de données tainted dans un contexte nécessitant des données ordinaires (et vice versa) entraîne des erreurs à l'étape de la compilation. Les petits arguments de fonction, les valeurs retournées et les structures sont transférés par copie entre la mémoire du processus et celle de l'environnement isolé. Pour de grands ensembles de données, la mémoire est allouée dans l'environnement isolé, et un pointeur direct "sandbox-reference" est renvoyé au processus principal.
QtProtobuf 0.2.0
Source : opennet.ru
