|
@@ -7,9 +7,9 @@ traitement dynamique, créé au fur et à mesure de la lecture des flux multimé
|
|
|
Les différents éléments de ce pipeline seront créés éventuellement dans la même
|
|
|
zone de privilège, éventuellement dans une zone de privilège déjà existante ou
|
|
|
même donnera lieu à la création d'une nouvelle zone de privilège. Pour désigner
|
|
|
-cette nouvelle réalité du point de vue du client, on crée la notion d'étage, ou
|
|
|
-«stages», qui permet de ne pas forcément indiquer comment sera créé la partie du
|
|
|
-pipeline demandée par le client.
|
|
|
+ce concept du côté de l'API publique de la sandbox, on crée la notion d'étage,
|
|
|
+ou «stages», qui permet de ne pas forcément indiquer comment sera créée la
|
|
|
+partie du pipeline demandée par le client.
|
|
|
|
|
|
\section{Le modèle broker}
|
|
|
|
|
@@ -24,20 +24,21 @@ transmettre les ressources et faire la vérification d'accès. Il est également
|
|
|
utile pour vérifier que les processus workers sont encore en vie et signaler les
|
|
|
erreurs.
|
|
|
|
|
|
+% TODO: expliauer IPC
|
|
|
Les avantages du modèle broker sont qu'il est généralement le modèle le plus
|
|
|
simple à implémenter, et n'a pas besoin de fonctionnalité particulière du point
|
|
|
de vue du système, à part pour créer les IPC. Il est également bien plus simple
|
|
|
à comprendre, à développer, à isoler et à suivre étant donné que tous les
|
|
|
échanges passent par le broker avant d'être transmis au bon processus. Ce
|
|
|
modèle constitue ainsi un cadre privilégié pour développer la sandbox et
|
|
|
-l'amener sur tous les système, à condition de garder en tête les contraintes
|
|
|
+l'amener sur tous les systèmes, à condition de garder en tête les contraintes
|
|
|
des autres modèles.
|
|
|
|
|
|
Le processus broker sera initialisé dans le processus principal et sera donc
|
|
|
père de tous les autres processus de la sandbox. Cela permettra d'utiliser des
|
|
|
-techniques comme \texttt{ptrace} sous Linux ou d'avoir les droits sur les objets
|
|
|
-des autres processus sous Windows sans avoir à recourir à des droits de
|
|
|
-superutilisateur.
|
|
|
+techniques comme \texttt{ptrace} sous Linux ou de pouvoir créer des objets
|
|
|
+destinés aux processus fils et de leur associer des droits d'accès sous Windows
|
|
|
+sans avoir à recourir à des droits de superutilisateur.
|
|
|
|
|
|
\section{Le modèle orchestrateur}
|
|
|
|
|
@@ -47,7 +48,7 @@ mais permet d'initialiser les connexions entre deux workers qui vont ensuite
|
|
|
discuter directement. On doit donc s'attendre à de meilleures performances étant
|
|
|
donné qu'on diminue les changements de contexte et appels systèmes. On garde cet
|
|
|
«orchestrateur» pour initialiser chaque nouvel étage mais les modules peuvent
|
|
|
-fonctionner de façon indépendante après, du moment que tous les éléments qui
|
|
|
+fonctionner indépendamment après, du moment que tous les éléments qui
|
|
|
sont liés à l'étage ont été créés.
|
|
|
|
|
|
%TODO: schéma orchestrateur-worker
|
|
@@ -64,24 +65,26 @@ créer les nouveaux processus et permet un démarrage plus rapide en
|
|
|
préchargeant toutes les bibliothèques et préparant toutes les initialisations
|
|
|
au préalable.
|
|
|
|
|
|
+% TODO expliquer et détailler ASLR et android
|
|
|
Les nouveaux processus sont alors créés à partir d'un appel système
|
|
|
\inltype{fork} qui est moins coûteux que la création complète d'un processus
|
|
|
depuis rien. Mais n'est pas officiellement disponible sous Windows,
|
|
|
-officieusement disponible sur les versions Windows 10 professionnels via les
|
|
|
-détails internes liés à l'implémentation des pico-processus, et ne permet pas de
|
|
|
-pouvoir efficacement faire de l'ASLR entre les différents processus de
|
|
|
-l'application. Ce dernier point existe notamment sur Android, même si des
|
|
|
-mitigations existent.
|
|
|
+officieusement disponible sur les versions Windows 10 via les détails internes
|
|
|
+liés à l'implémentation des pico-processus, et ne permet pas de pouvoir
|
|
|
+efficacement faire de l'ASLR entre les différents processus de l'application. Ce
|
|
|
+dernier point existe notamment sur Android, même si des mitigations existent.
|
|
|
|
|
|
Le processus Zygote permet également d'efficacement cloisonner les descripteurs
|
|
|
de fichier à hériter. Mais cela peut être préférée à une méthode plus
|
|
|
-systématique de libération de tous les descripteurs associés au processus.
|
|
|
+systématique de libération de tous les descripteurs associés au processus si
|
|
|
+l'on ne souhaite pas utiliser ce processus pour des raisons de performances
|
|
|
+également.
|
|
|
|
|
|
Néanmoins, la partie la plus intéressante du Zygote concerne le débogage de la
|
|
|
sandbox. Sous Linux, \texttt{gdb} n'est capable de s'accrocher qu'à un seul
|
|
|
processus à la fois. Il faut alors choisir avec \texttt{set follow-fork-mode} si
|
|
|
l'on veut déboguer le processus parent ou bien le processus enfant lors d'un
|
|
|
-appel à \inltype{fork}. Dans l'architecture que l'on va construire, on sera
|
|
|
-suffisament dépendant de la bonne réalisation des opérations demandées pour
|
|
|
-pouvoir attacher des débogueurs au processus Zygote et basculer directement sur
|
|
|
-le processus enfant à chaque création de nouveau processus.
|
|
|
+appel à \inltype{fork}. Dans l'architecture que j'ai construite, nous réalisons
|
|
|
+les opérations de façon synchrone, même entre deux processus, ce qui permettra
|
|
|
+d'attacher des débogueurs au processus Zygote et basculer directement sur le
|
|
|
+processus enfant à chaque création de nouveau processus.
|