Alexandre Janniaux 6 lat temu
rodzic
commit
3e1aec58bf

+ 12 - 3
chapters/torrent.tex

@@ -92,14 +92,23 @@ appartient bien au réseau, en plus de chiffrer très faiblement les données av
 un algorithme RC4.
 
 % TODO décrire BEP
-Libtorrent supporte la BEP 35 qui est une extension au protocole apportant cette
+Libtorrent supporte\cite{SSLlibtorrent} la BEP 35\cite{BEP35} qui est une extension au protocole apportant cette
 fonctionnalité. En interne, libtorrent utilise OpenSSL.\@ Or, la licence
 d'OpenSSL n'est pas compatible avec les applications sous licence GPL.\@
 L'objectif de cette mission était donc d'essayer d'intégrer GnuTLS dans
 Libtorrent en parallèle du support pour OpenSSL.\@
 
-% https://blog.libtorrent.org/2012/01/bittorrent-over-ssl/
-% http://www.bittorrent.org/beps/bep_0035.html
+Après discussion avec le développeur principal de Libtorrent, le projet s'est
+transformé en l'intégration de GnuTLS dans boost::asio, la bibliothèque réseau
+utilisée par Libtorrent. Quelques tentatives d'intégration ont néanmoins été
+faites directement dans libtorrent pour modifier d'autres parties dépendant
+directement d'OpenSSL.
+
+A la suite d'une autre discussion avec des développeurs souhaitant aussi
+l'arrivée de cette fonctionnalité, évoquant la difficulté de faire accepter une
+pull request sur le dépôt officiel, et devant la quantité de travail à effectuer
+pour cette intégration, le projet a été mis en pause pour donner la priorité au
+reste du stage.
 
 \section{Projet subsidiaire, support du WebTorrent}
 

+ 7 - 7
chapters/vlc_explanations.tex

@@ -112,6 +112,7 @@ typedef struct vlc_plugin_t
 \inltype{vlc_plugin_t} contient ainsi les informations pour charger et décharger
 les modules.
 
+\clearpage
 \begin{code}{c}{Structure d'un module}
 struct module_t
 {
@@ -170,7 +171,7 @@ module_t *module_need(vlc_object_t *obj, const char *cap, const char *name,
 
 Ces fonctions sont généralement appelées après avoir créé un objet correspondant
 au type du module en question. Si dessous, on peut voir un exemple au sein de
-l'api de gestion des documents XML.\@
+l'API de gestion des documents XML.\@
 
 \begin{code}{c}{Création d'objet VLC puis chargement de modules}
     /* from src/misc/xml.c */
@@ -184,10 +185,9 @@ l'api de gestion des documents XML.\@
 Par exemple, nous avons ici la création d'un objet représentant un module
 d'analyse syntaxique XML. Le module est ensuite chargé dans l'objet. Puis un
 autre couple d'objet et module est chargé, cette fois-ci pour une \inltype{i_capability}
-de type \inltype{xml_reader}.
-
-% TODO: décrire module_need en détail et comment on peut vouloir la patcher pour
-% prendre en compte la sandbox.
-
-% TODO: parler de libvlc et vlc_object
+de type \inltype{xml_reader}. 
 
+Cela montre en particulier que l'application ne va pas manipuler directement le
+module, mais un objet lié à ce module. Ce pattern va nous permettre de concevoir
+une façon simple de sandboxer ces modules en patchant la fonction module_need,
+qui sera rapidement décrite dans la suite.

+ 2 - 2
chapters/vlc_introduction.tex

@@ -17,7 +17,7 @@ applications d'aujourd'hui.
 
 En second lieu, je ferai une présentation technique simple du fonctionnement
 interne de VLC pour couvrir les besoins des autres parties tout en mentionnant
-des points d'attentions pour l'implémentation de la sandbox.
+des points d'intérets pour l'implémentation de la sandbox.
 
 En troisème partie, je mettrai en avant mes recherches et les mécanismes que
 j'ai mis en place pour intégrer incrémentalement une architecture
@@ -37,6 +37,6 @@ réellement l'architecture multi-processus fonctionnelle et en place.
 En cinquième partie, j'ajouterai les missions supplémentaires auxquelles j'ai
 participé en détaillant leurs spécificités. Trois gros projets indépendants se
 détachent en particulier: l'écriture d'un encodeur matériel pour Android et la
-finalisation d'un projet de cinéma virtuel ainsi que d'un client bittorrent
+finalisation d'un projet de cinéma virtuel ainsi que d'un client BitTorrent
 pour VLC comprenant des travaux liés à ses dépendences. À cela s'ajoutent en
 outre des résolutions de bogues et des rajouts de fonctionnalités.

+ 13 - 11
chapters/why_sandboxing.tex

@@ -38,14 +38,15 @@ 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.
+tête. Plusieurs exemples d'attaques ont été montrées.
 
-TODO: lien
+Un exemple est celle de Jordan Rabet, présenté dans sa conférence à la BlueHat
+IL\cite{JRabetBrowserSecurity}.
+Il utilise notamment des techniques de fuzzing pour trouver «facilement» un
+déréférencement de pointeur invalide \footnote{dans l'optimisation Just-In-Time
+du moteur javascript} dans un des processus «renderer» de Chromium. Les
+renderers étant plus ou moins confinés à l'onglet, l'attaque est confinée au
+contenu même qui lui permet d'exister et n'apporte donc plus de valeur ajoutée.
 
 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
@@ -53,16 +54,17 @@ 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
+directement GStreamer ou ImageMagick pour pouvoir parser les fichiers et extraire
 les métadonnées.
 
 \section{Dans VLC}
 
 % TODO expliquer ce qu'est une CVE
 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. 
+déjà subit plusieurs failles qui ont été exposées publiquement dans des CVE
+\footnote{Common Vulnerabilities and Exposures}. Ces failles 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