# Seccomp

seccomp (abréviation pour secure computing mode) est une fonctionnalité de sécurité informatique du noyau Linux.

## Description

Elle a été intégrée dans la branche principale du noyau Linux en version 2.6.12, qui est sorti le 8 mars 2005.
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$^,$. 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) via l'appel système seccomp. 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.
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, cette instruction peut être utilisée comme outil dans des attaques par race condition ou dans des attaques par canal auxiliaire$^,$.
seccomp-bpf est une extension de seccomp 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. (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

* 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 janvier 2005 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é. En février 2009, Linus Torvalds exprime des doutes quant à l'utilisation effective de seccomp par quiconque. 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$^,$.
* 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.
* À partir de la version 20 de Chrome, seccomp-bpf est utilisé pour isoler Adobe Flash Player.
* À partir de la version 23 de Chrome, seccomp-bpf est utilisé pour isoler les renderers.
* 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é
* vsftpd utilise le cloisonnement seccomp-bpf depuis la version 3.0.0.
* OpenSSH utilise seccomp-bpf depuis la version 6.0.
* Mbox utilise ptrace avec seccomp-bpf pour créer des sandbox sécurisés avec une moindre taille qu'avec ptrace seul.
* LXD, un hyperviseur de conteneurs sur Ubuntu$^,$
* Firefox et Firefox OS, utilisent seccomp-bpf$^,$
* 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.
* Tor utilise seccomp depuis la version 0.2.5.1-alpha
* Lepton, un outil de compression JPEG développé par Dropbox utilise seccomp
* Kafel est un langage de configuration, qui convertit des politiques en bytecode seccompb-bpf
* Subgraph OS utilise seccomp-bpf$^,$
* Flatpak utilise seccomp pour isoler des processus
* minijail utilise seccomp pour isoler des processus