why_sandboxing.tex 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. \section{Objectifs}
  2. Dans la partie précédente, nous avons détaillé ce qu'était le sandboxing,
  3. apparaissant comme dernière mesure une fois l'application corrompue par une
  4. attaque. On peut alors se demander s'il ne vaut pas mieux concentrer ses efforts
  5. sur l'audit et le renforcement du reste du code. On pourrait par exemple
  6. imaginer la réécriture de l'ensemble du code de VLC dans un langage apportant
  7. plus de garanties de sécurité. Après tout, s'il n'y a pas de faille possible, il
  8. n'y a pas besoin de se protéger de ses failles.
  9. Dans le monde réel, ces deux objectifs de sécurité, le sandboxing et la
  10. réduction des failles, sont totalement orthogonaux et les deux efforts doivent
  11. être réalisés en même temps. Corriger des brêches dans la sécurité de
  12. l'application permet de s'assurer que le samdboxing fonctionne plus
  13. efficacement, tandis qu'isoler les différentes parties de l'application permet
  14. de limiter l'impact d'une faille potentielle avant qu'elle soit corrigée.
  15. Le sandboxing joue ici le rôle de réduction de la surface d'attaque, qui est un
  16. mécanisme classique. Le code en lui-même de la sandbox est censé être plus
  17. facilement auditable, beaucoup plus court et moins dépendant du domaine lié à la
  18. solution qu'apporte le logiciel, c'est-à-dire ne pas forcément saisir les
  19. spécificités liées au multimédia dans notre cas. C'est donc particulièrement
  20. intéressant dans le cadre de logiciels comme VLC ou Chromium qui demande une
  21. palette de compétences assez large.
  22. Il faut néanmoins ne pas oublier qu'il ne s'agit pas d'un patch magique. Une
  23. sandbox intrusive introduit du nouveau code et de nouvelles interactions avec le
  24. système sous-jacent. De nouvelles failles peuvent donc apparaître, liées soit au
  25. noyau du système et des API de sandboxing, soit parce que le code n'est pas
  26. suffisamment robuste ou suffisamment découplé de l'application. Il faut donc
  27. mettre une attention particulière à la vérification des mesures mises en place.
  28. \section{Dans VLC}
  29. % TODO expliquer ce qu'est une CVE
  30. Le sandboxing apporte particulièrement une plus grande confiance dans VLC qui a
  31. déjà subit plusieurs CVE. Ces CVE touchent en grande partie les modules de
  32. demux, qui permettent de récupérer les différents flux, audio, vidéo et
  33. sous-titre d'un flux multimédia.
  34. VLC étant programmé majoritairement en C et C++, est particulièrement sensible à
  35. une grande classe de défauts exploitable, comptant par exemple les use after
  36. free, buffer overflow, double free, corruption mémoire, etc. Ces défauts
  37. arrivent la majorité du temps dans des chemins d'exécution impliquant de la
  38. manipulation de blocs de données et son interprétation, donc impliquant en
  39. particulier ces modules demux.
  40. Or on peut noter que la plupart des demux n'ont pas besoin d'accès ou de\
  41. permissions en particulier : ce sont des parseurs de données. Ils doivent
  42. seulement avoir accès à certains blocs mémoires en entrées et générer de
  43. nouveaux blocs mémoires en sortie.
  44. Les isoler du reste de l'application permet donc de fortement limiter l'impact
  45. de ces modules, laissant à l'exécution de code arbitraire la nécessité
  46. d'exploiter également des failles de sandboxing et plus seulement des failles
  47. lié au travail multimédia réalisé par VLC.
  48. C'est d'autant plus vrai lorsque la libvlc, qui utilise directement ces
  49. modules, peut être utilisée dans d'autres applications potentiellement plus
  50. critiques.
  51. \section{Exemples d'attaques}
  52. Si les objectifs et besoins décrits au dessus paraissemt trop théorique, il est
  53. possible de prendre des exemples de la vraie vie pour se convaincre d'avoir
  54. besoin de ces mesures. L'exemple le plus connu de sandbox intrusive est celle
  55. de Chromium, qui s'appelle lui-même «The Most Secure Browser.» Le développement
  56. de Chromium est basé depuis ses commencements sur un modèle de sandbox.
  57. L'application a donc dès le départ été écrite avec l'isolation des modules en
  58. tête. Plusieurs exemples d'attaques ont été montrées, comme celle de TODO:Xxxx
  59. utilisant des techniques de fuzzing pour trouver un déréférencement de pointeur
  60. invalide dans l'optimisation Just-In-Time du moteur javascript qui tourne dans
  61. un processus «Renderer» plus ou moins dédié à l'onglet. Les failles peuvent
  62. ainsi toujours exister, mais restent confinées au contenu apportant leur
  63. exploitation.
  64. TODO: lien
  65. Malheureusement tout n'est pas complètement pensé pour la sécurité et une des
  66. fonctionnalités qui était activée par défaut sur quelques distributions Linux
  67. permettait à un site de faire télécharger un fichier sans l'accord de la
  68. personne. Or, pour les personnes utilisant Gnome ou KDE, un tracker de fichier
  69. tourne en tâche de fond afin d'indexer les métadonnées des fichiers, en
  70. particulier des images et vidéos. Ces trackers utilisent la plupart du temps
  71. directement GStreamer ou ImageMagik pour pouvoir parser les fichiers et extraire
  72. les métadonnées.