web-dev-qa-db-fra.com

Qu'est-ce que Sandboxing?

Dans des discussions sur la sécurité, le sujet de Sandboxing se présente souvent. Qu'est-ce que l'application Sandboxing d'application? Comment ça marche et quelles vulnérabilités de sécurité empêche-t-elle?

12
jrdioko

Un "sandbox" est une zone de jeux pour les jeunes enfants: il est censé être sans danger pour eux (ils ne peuvent pas se faire mal à eux-mêmes) et de sécurité de . est le sable, ils ne peuvent pas le casser). Dans le contexte de la sécurité informatique, "Sandboxing" signifie isoler un peu de logiciel de telle sorte que tout ce qu'il fait, il ne se propagera pas de ravages ailleurs.

Une manière commune Unix de Sandboxing est la chroot Commande (qui utilise l'appel chroot() Système). Un processus lancé avec cette commande ne voit que un sous-répertoire (ce qu'il considère comme la racine du système de fichiers, le '/', est ce sous-répertoire). Le système FreeBSD a une version version améliorée . Des solutions plus modernes et approfondies utilisent des machines virtuelles (comme in VMware ). Ce type de sandboxing est destiné au confinement de dommages: vous mettez un processus donné dans une prison car au cas où il est piraté, disons, un débordement tampon, l'attaquant est toujours dans la prison et ne pourra pas avoir d'impact sur d'autres applications fonctionnant sur le même système.

Un autre type de sandboxing est celui qui se situe au cœur des langages de programmation comme Java ou C # (confusion également appelé "machine virtuelle"): le code de l'application s'exécute sur une CPU virtuelle dans laquelle chaque Un seul opcode est vérifié pour les violations (débordements de tampons et méflages, de type inadaptation ...). La structure des langues et VM ont été conçues de manière à ce que ces chèques ne soient pas trop chers. Là encore, C'est le confinement des dommages, mais avec une granularité plus fine.

Sandboxing ne supprime pas les vulnérabilités; Cela réduit simplement les conséquences de ces vulnérabilités (par exemple transformant une coquille distante dans un crash distant). Un débordement de tampon est un bug, que ce soit un VM le piège ou non.

13
Thomas Pornin

Sandboxing est un mécanisme de contrôle de flux d'informations. En exécutant un code dans un bac à sable, vous obtenez un contrôle supplémentaire sur les entrées et les sorties du programme. Cela signifie que vous pouvez refuser/médier l'accès à des données externes ou à d'autres ressources au cas où le programme Sandboxed est compromis ou lui-même malveillant.

Souvent, un environnement d'exécution complexe est inclus dans la bac à sable, par exemple Java et Java Bibliothèques dans le cas de bacs à sable basés sur JVM. Ou vous pouvez exécuter une application à l'intérieur d'une machine virtuelle dédiée, ce qui en fait un bac à sable pour vous avec un système de système d'exploitation Terminé en tant qu'enregisance.

À ma connaissance, la technologie de sandbox à la pointe de la technologie de l'exécution de X86 est décrite dans le client natif de Google's Java: http://research.google.com/pubs/pub34913.html

Le concept de contrôle de flux d'informations est essentiel à la conception de la sécurité. Le tout à propos des privilèges et Mac sous Linux est tout sur le contrôle des flux d'informations. Par conséquent, DJB note dans son document "Quelques réflexions sur la sécurité après dix ans de qmail 1.0" que les flux d'informations et les interfaces sont substantiels et "moins de privilège" n'est qu'une distraction. Cependant, il n'a pas utilisé de sandbox explicites telles qu'un JVM complet, il a utilisé la fonctionnalité standard du système d'exploitation pour diviser Qmail en plusieurs petits programmes avec des interfaces explicites et bien définies. Et en fait, des boîtes à sable sont de la conception pas beaucoup plus qu'une réplication/un réglage fin/amélioration de ce que le système d'exploitation (devrait) vous donner.

2
pepe