Seccomp

Un article de Wikipédia, l'encyclopédie libre.
seccomp

Informations
Créateur Andrea Arcangeli
Première version
État du projet sur la branche principale
Écrit en C
Système d'exploitation LinuxVoir et modifier les données sur Wikidata
Environnement Linux
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.

Description[modifier | modifier le code]

Elle a été intégrée dans la branche principale du noyau Linux en version 2.6.12, qui est sorti le [1].

Seccomp permet à un processus d'effectuer une transition unidirectionnelle vers un état de sécurité dans lequel il ne peut plus effectuer d'appel système excepté exit(), sigreturn(), read() et write() sur des descripteurs déjà ouverts. Si le processus essaie d'effectuer un autre appel système, le noyau terminera le processus avec le signal SIGKILL ou 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 activé 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 mode seccomp était auparavant activé en écrivant dans le fichier /proc/self/seccomp, mais cette méthode a été supprimée 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émenté 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 remplit le même objectif que 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 profil seccomp peut être associe au conteneur en utilisant le paramètre --security-opt.
  • seccomp a été conçu par Andrea Arcangeli en pour l'utiliser sur un grid computing public. L'objectif initial était de pouvoir lancer de manière sécurisée des programmes non sûrs.
  • CPUShare de Arcangeli était le seul utilisateur connu utilisant cette fonctionnalité[13]. En , 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 ou autres[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, utilisent 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éveloppé 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]

Notes et références[modifier | modifier le code]

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