|
@@ -0,0 +1,80 @@
|
|
|
+# Pourquoi faire du sandboxing est important
|
|
|
+
|
|
|
+## Objectifs
|
|
|
+
|
|
|
+Dans la partie précédente, nous avons détaillé ce qu'était le sandboxing,
|
|
|
+apparaissant comme dernière mesure une fois l'application corrompue par une
|
|
|
+attaque. On peut alors se demander s'il ne vaut pas mieux concentrer ses efforts
|
|
|
+sur l'audit et le renforcement du reste du code. On pourrait par exemple
|
|
|
+imaginer la réécriture de l'ensemble du code de VLC dans un langage apportant
|
|
|
+plus de garanties de sécurité. Après tout, s'il n'y a pas de faille possible, il
|
|
|
+n'y a pas besoin de se protéger de ses failles.
|
|
|
+
|
|
|
+Dans le monde réel, ces deux objectifs de sécurité, le sandboxing et la
|
|
|
+réduction des failles, sont totalement orthogonal et les deux efforts doivent
|
|
|
+être réalisés en même temps. Corriger des brêches dans la sécurité de
|
|
|
+l'application permet de s'assurer que le samdboxing fonctionne plus
|
|
|
+efficacement, tandis qu'isoler les différentes parties de l'application permet
|
|
|
+de limiter l'impact d'une faille potentielle avant qu'elle soit corrigée.
|
|
|
+
|
|
|
+Le sandboxing joue ici le rôle de réduction de la surface d'attaque, qui est un
|
|
|
+mécanisme classique. Le code en lui-même de la sandbox est censé être plus
|
|
|
+facilement auditable, beaucoup plus court et moins dépendant du domaine lié à la
|
|
|
+solution qu'apporte le logiciel. C'est donc particulièrement intéressant dans le
|
|
|
+cas du multimédia qui demande une palette de compétences assez large.
|
|
|
+
|
|
|
+Il faut néanmoins ne pas oublier qu'il ne s'agit pas d'un patch magique. Une
|
|
|
+sandbox intrusive introduit du nouveau code et de nouvelles interactions avec le
|
|
|
+système sous-jacent. De nouvelles failles peuvent donc apparaître, liées soit au
|
|
|
+noyau du système et des API de sandboxing, soit parce que le code n'est pas
|
|
|
+suffisamment robuste ou suffisamment découplé de l'application. Il faut donc
|
|
|
+mettre une attention particulière à la vérification des mesures mises en place.
|
|
|
+
|
|
|
+## Dans VLC
|
|
|
+
|
|
|
+Le sandboxing apporte particulièrement une plus grande confiance dans VLC qui a
|
|
|
+déjà subit plusieurs CVE. Ces CVE touchent en grande partie les modules de
|
|
|
+demux, qui permettent de récupérer les différents flux, audio, vidéo et
|
|
|
+sous-titre d'un flux multimédia.
|
|
|
+
|
|
|
+VLC étant programmé majoritairement en C et C++, est particulièrement sensible à
|
|
|
+une grande classe de défauts exploitable, comptant par exemple les use after
|
|
|
+free, buffer overflow, double free, corruption mémoire, etc. Ces défauts
|
|
|
+arrivent la majorité du temps dans des chemins d'exécution impliquant de la
|
|
|
+manipulation de blocs de données et son interprétation, donc impliquant en
|
|
|
+particulier ces modules demux.
|
|
|
+
|
|
|
+Or on peut noter que la plupart des demux n'ont pas besoin d'accès ou de\
|
|
|
+permissions en particulier : ce sont des parseurs de données. Ils doivent
|
|
|
+seulement avoir accès à certains blocs mémoires en entrées et générer de
|
|
|
+nouveaux blocs mémoires en sortie.
|
|
|
+
|
|
|
+Les isoler du reste de l'application permet donc de fortement limiter l'impact
|
|
|
+de ces modules, laissant à l'exécution de code arbitraire la nécessité
|
|
|
+d'exploiter également des failles de sandboxing et plus seulement des failles
|
|
|
+lié au travail multimédia réalisé par VLC.
|
|
|
+
|
|
|
+## Dans la vraie vie
|
|
|
+
|
|
|
+Si les objectifs et besoin décrits au dessus ne suffisent pas à convaincre,
|
|
|
+prendre des exemples de la vraie vie permet de se persuader d'avoir besoin de
|
|
|
+ces mesures. L'exemple le plus connu de sandbox intrusive est celle de Chromium,
|
|
|
+qui s'appelle lui-même «The Most Secure Browser.» Le développement de Chromium
|
|
|
+est basé depuis ses commencements sur un modèle de sandbox. L'application a donc
|
|
|
+dès le départ été écrite avec l'isolation des modules en tête. Plusieurs
|
|
|
+exemples d'attaques ont été montrées, comme celle de TODO:Xxxx utilisant des
|
|
|
+techniques de fuzzing pour trouver un déréférencement de pointeur invalide dans
|
|
|
+l'optimisation Just-In-Time du moteur javascript qui tourne dans un processus
|
|
|
+«Renderer» plus ou moins dédié à l'onglet. Les failles peuvent ainsi toujours
|
|
|
+exister, mais restent confinées au contenu apportant leur exploitation.
|
|
|
+
|
|
|
+TODO: lien
|
|
|
+
|
|
|
+Malheureusement tout n'est pas complètement pensé pour la sécurité et une des
|
|
|
+fonctionnalités qui était activée par défaut sur quelques distributions Linux
|
|
|
+permettait à un site de faire télécharger un fichier sans l'accord de la
|
|
|
+personne. Or, pour les personnes utilisant Gnome ou KDE, un tracker de fichier
|
|
|
+tourne en tâche de fond afin d'indexer les métadonnées des fichiers, en
|
|
|
+particulier des images et vidéos. Ces trackers utilisent la plupart du temps
|
|
|
+directement GStreamer ou ImageMagik pour pouvoir parser les fichiers et extraire
|
|
|
+les métadonnées.
|