why_sandboxing.tex 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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{Exemples d'attaques}
  29. Si les objectifs et besoins décrits au dessus paraissemt trop théorique, il est
  30. possible de prendre des exemples de la vraie vie pour se convaincre d'avoir
  31. besoin de ces mesures. L'exemple le plus connu de sandbox intrusive est celle
  32. de Chromium, qui s'appelle lui-même \og{}The Most Secure Browser.\fg{} Le développement
  33. de Chromium est basé depuis ses commencements sur un modèle de sandbox.
  34. L'application a donc dès le départ été écrite avec l'isolation des modules en
  35. tête. Plusieurs exemples d'attaques ont été montrées.
  36. Un exemple est celle de Jordan Rabet, présenté dans sa conférence à la BlueHat
  37. IL\cite{JRabetBrowserSecurity}.
  38. Il utilise notamment des techniques de fuzzing pour trouver \og{}facilement\fg{} un
  39. déréférencement de pointeur invalide \footnote{dans l'optimisation Just-In-Time
  40. du moteur javascript} dans un des processus \og{}renderer\fg{} de Chromium. Les
  41. renderers étant plus ou moins confinés à l'onglet, l'attaque est confinée au
  42. contenu même qui lui permet d'exister et n'apporte donc plus de valeur ajoutée.
  43. Malheureusement tout n'est pas complètement pensé pour la sécurité. L'exemple d'une
  44. fonctionnalités qui était activée par défaut dans chromium sur quelques distributions Linux
  45. permettait à un site de faire télécharger un fichier sans l'accord de la
  46. personne montre les failles liés à l'expérience utilisateur.
  47. Pour les personnes utilisant Gnome ou KDE, un tracker de fichier tourne en tâche
  48. de fond afin d'indexer les métadonnées des fichiers, en particulier des images
  49. et vidéos. Ces trackers utilisent la plupart du temps directement GStreamer ou
  50. ImageMagick pour pouvoir parser les fichiers et extraire les métadonnées, et il
  51. était alors possible d'écrire une attaque pour exploiter ces bibliothèques
  52. depuis un site web\cite{GstreamerSecuIssue}.
  53. \section{Dans VLC}
  54. % TODO expliquer ce qu'est une CVE
  55. Le sandboxing apporte particulièrement une plus grande confiance dans VLC qui a
  56. déjà subit plusieurs failles qui ont été exposées publiquement dans des CVE
  57. \footnote{Common Vulnerabilities and Exposures}. Ces failles touchent en grande
  58. partie les modules de demux, qui permettent de récupérer les différents flux,
  59. audio, vidéo et sous-titre d'un flux multimédia.
  60. VLC étant programmé majoritairement en C et C++, est particulièrement sensible à
  61. une grande classe de défauts exploitable, comptant par exemple les use after
  62. free, buffer overflow, double free, corruption mémoire, etc. Ces défauts
  63. arrivent la majorité du temps dans des chemins d'exécution impliquant de la
  64. manipulation de blocs de données et son interprétation, donc impliquant en
  65. particulier ces modules demux.
  66. Or on peut noter que la plupart des demux n'ont pas besoin d'accès ou de\
  67. permissions en particulier : ce sont des parseurs de données. Ils doivent
  68. seulement avoir accès à certains blocs mémoires en entrées et générer de
  69. nouveaux blocs mémoires en sortie.
  70. Les isoler du reste de l'application permet donc de fortement limiter l'impact
  71. de ces modules, laissant à l'exécution de code arbitraire la nécessité
  72. d'exploiter également des failles de sandboxing et plus seulement des failles
  73. lié au travail multimédia réalisé par VLC.
  74. C'est d'autant plus vrai lorsque la libvlc, qui utilise directement ces
  75. modules, peut être utilisée dans d'autres applications potentiellement plus
  76. critiques.