Seccomp

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
seccomp
Fondateur Andrea Arcangeli
Première version 08/03/2005
État du projet sur la branche principale
Écrit en C
Environnement LinuxVoir et modifier les données sur Wikidata
Type Sandboxing
Licence GNU General Public License
Site web code.google.com/archive/p/seccompsandbox/wikis/overview.wiki

seccomp (abréviation pour secure computing mode) est une fonctionnalité de sécurité informatique du noyau Linux. Elle a été intégré dans la branche principale du noyau Linux en version 2.6.12, qui est sorti le 8 mars 2005[1].

Seccomp permet a un processus d'effectuer une transition unidirectionnel vers un état de sécurité dans lequel il ne peut plus effectuer d'appel système excepté exit(), sigreturn(), read() and write() sur des descripteurs déjà ouvert. Si le processus essaie d'effectuer un autre appel système, le noyau terminera le processus avec le signal SIGKILL or SIGSYS[2],[3]. Ce mécanisme ne virtualise pas les ressources systèmes mais isole entièrement les processus les uns par rapport aux autres.

Le mode seccomp peut être active via l'appel système prctl en utilisant l'argument PR_SET_SECCOMP, ou (depuis le noyau Linux 3.17[4]) via l'appel système seccomp[5] le monde seccomp était habituellement active en écrivant dans le fichier /proc/self/seccomp, mais cette méthode a été supprime en faveur de prctl()[6].

Dans certaines versions du noyau, seccomp désactive l'instruction x86 RDTSC, qui retourne le nombre de cycles processeur écoulé depuis la mise sous tension. Utilisée pour la mesure du temps avec une grande précision[7], cette instruction peut être utilisée comme outil dans des attaques par race condition[8] ou dans des attaques par canal auxiliaire[9],[10].

seccomp-bpf est une extension de seccomp[11] permettant le filtrage des appels système en utilisant une politique de sécurité configurable, implémente grâce aux règles Berkeley Packet Filter. Elle est utilisée par OpenSSH et vsftpd mais également par le navigateur web Google Chrome sur Chrome OS et GNU/Linux[12]. (Dans ce cas, seccomp-bpf rempli le même objectif qui le plus ancien systrace— qui ne semble plus être maintenu sous Linux).

Logiciels utilisant seccomp et seccomp-bpf[modifier | modifier le code]

  • L'un des plus importants projets faisant usage de seccomp est Docker. Docker est un projet open source, principalement soutenu par Docker Inc., qui permet à un logiciel de tourner dans un environnement isole appelé conteneur. Quand un conteneur Docker est créé, en utilisant les sous-commandes docker run ou docker create, un profile seccomp peut être associe au conteneur en utilisant le paramètre --security-opt.
  • seccomp a été conçu par Andrea Arcangeli en janvier 2005 pour l'utiliser sur un grid computing public. L'objectif initial était de pouvoir lance de manière sécurisée des programmes non surs.
  • CPUShare de Arcangeli était le seul utilisateur connu utilisant cette fonctionnalité[13]. En février 2009, Linus Torvalds exprime des doutes quant à l'utilisation effective de seccomp par quiconque[14]. Pourtant, un ingénieur de Google répondra que Google explore actuellement les possibilités d'utilisation de seccomp pour du sandboxing dans son navigateur Chrome[15],[16].
  • Firejail est une sandbox open source sous Linux qui utilise les Namespaces Linux, Seccomp, et d'autres mécanismes de sécurité au niveau noyau pour les applications Wine[17].
  • À partir de la version 20 de Chrome, seccomp-bpf est utilisé pour isoler Adobe Flash Player[18].
  • À partir de la version 23 de Chrome, seccomp-bpf est utilisé pour isoler les renderers[19].
  • Snap spécifie la forme de leur application sandbox en utilisant des interfaces que snapd traduit vers seccomp. AppArmor et d'autres mesures de sécurité[20]
  • vsftpd utilise le cloisonnement seccomp-bpf depuis la version 3.0.0[21].
  • OpenSSH utilise seccomp-bpf depuis la version 6.0[22].
  • Mbox utilise ptrace avec seccomp-bpf pour créer des sandbox sécurisés avec une moindre taille qu'avec ptrace seul[23].
  • LXD, un hyperviseur de conteneurs sur Ubuntu[24],[25]
  • Firefox et Firefox OS, utilise seccomp-bpf[26],[27]
  • Cjdns utilise seccomp-bpf pour l'un de ses mécanismes d'isolation, il filtre les appels systèmes qu'il effectue sur un système Linux, et limite de manière stricte ses accès au monde extérieur[28].
  • Tor utilise seccomp depuis la version 0.2.5.1-alpha[29]
  • Lepton, un outil de compression JPEG développe par Dropbox utilise seccomp[30]
  • Kafel est un langage de configuration, qui convertit des politiques en bytecode seccompb-bpf[31]
  • Subgraph OS utilise seccomp-bpf[32],[33]
  • Flatpak utilise seccomp pour isoler des processus[34]
  • minijail utilise seccomp pour isoler des processus[35]

References[modifier | modifier le code]

  1. « [PATCH] seccomp: secure computing support », Linux kernel history, Kernel.org git repositories, (consulté le 2 août 2013)
  2. Jonathan Corbet, « A seccomp overview », lwn, (consulté le 5 octobre 2017)
  3. « Documentation/prctl/seccomp_filter.txt » (consulté le 5 octobre 2017)
  4. « Linux kernel 3.17, Section 11. Security », sur kernelnewbies.org, (consulté le 31 mars 2015)
  5. « seccomp: add "seccomp" syscall », kernel/git/torvalds/linux.git - Linux kernel source tree, kernel.org, (consulté le 22 août 2014)
  6. Andrea Arcangeli, « [PATCH 1 of 2] move seccomp from /proc to a prctl », (consulté le 2 août 2013)
  7. Julien Tinnes, « Time-stamp counter disabling oddities in the Linux kernel », cr0 blog, (consulté le 2 août 2013)
  8. « expand_stack SMP race local root exploit »
  9. « cache missing for fun and profit »
  10. « Cache attacks and Countermeasures: the Case of AES »
  11. Jonathan Corbet, « Yet another new approach to seccomp », lwn, (consulté le 2 août 2013)
  12. Julien Tinnes, « A safer playground for your Linux and Chrome OS renderers », The Chromium Blog, (consulté le 2 août 2013)
  13. Arjan van de Ven, « Re: [stable] [PATCH 2/2] x86-64: seccomp: fix 32/64 syscall hole », Linux Kernel Mailing List, (consulté le 2 août 2013)
  14. Linus Torvalds, « Re: [PATCH 2/2] x86-64: seccomp: fix 32/64 syscall hole », Linux Kernel Mailing List, (consulté le 2 août 2013)
  15. Markus Gutschke, « Re: [PATCH 2/2] x86-64: seccomp: fix 32/64 syscall hole », (consulté le 2 août 2013)
  16. Markus Gutschke, « Re: [PATCH 2/2] x86-64: seccomp: fix 32/64 syscall hole », Linux Kernel Mailing List, (consulté le 2 août 2013)
  17. (en) « Firejail », sur Firejail
  18. Chris Evans, « Chrome 20 on Linux and Flash sandboxing », (consulté le 2 août 2013)
  19. Julien Tinnes, « Introducing Chrome's next-generation Linux sandbox », cr0 blog, (consulté le 2 août 2013)
  20. « Snap security policy » (consulté le 3 février 2017)
  21. Chris Evans, « vsftpd-3.0.0 and seccomp filter sandboxing is here! », (consulté le 2 août 2013)
  22. « Openssh 6.0 release notes » (consulté le 14 octobre 2013)
  23. « MBOX » (consulté le 20 mai 2014)
  24. « LXD an "hypervisor" for containers (based on liblxc) » (consulté le 8 novembre 2014)
  25. « Where We're Going With LXD » (consulté le 8 novembre 2014)
  26. Guillaume Destuynder, « Firefox Seccomp sandbox », Mozilla Bugzilla, (consulté le 13 janvier 2015)
  27. Guillaume Destuynder, « Firefox Seccomp sandbox », Mozilla Wiki, (consulté le 13 janvier 2015)
  28. Caleb James DeLisle, « Added SECCOMP sandboxing and new admin API call to check if permissions are properly dropped », Github, (consulté le 24 septembre 2015)
  29. « Tor ChangeLog »
  30. « Lepton image compression: saving 22% losslessly from images at 15MB/s », sur Dropbox Tech Blog
  31. « Kafel: A language and library for specifying syscall filtering policies »
  32. « Subgraph OS », sur Subgraph
  33. « LoganCIJ16: Future of OS », sur YouTube
  34. « The flatpak security model – part 1: The basics » (consulté le 21 janvier 2017)
  35. « Minijail [LWN.net] », sur lwn.net

(en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « seccomp » (voir la liste des auteurs).

Liens externes[modifier | modifier le code]