seccomp
![]() | This article needs to be updated.(May 2012) |
Original author(s) | Andrea Arcangeli |
---|---|
Initial release | March 8, 2005 |
Written in | C |
Operating system | Linux |
Type | Sandboxing |
License | GNU General Public License |
Website | code |
seccomp (short for secure computing mode) is a computer security facility in the Linux kernel. seccomp allows a process to make a one-way transition into a "secure" state where it cannot make any system calls except exit()
, sigreturn()
, read()
and write()
to already-open file descriptors. Should it attempt any other system calls, the kernel will either just log the event or terminate the process with SIGKILL or SIGSYS.[1][2] In this sense, it does not virtualize the system's resources but isolates the process from them entirely.
seccomp mode is enabled via the PR_SET_SECCOMP
argument, or (since Linux kernel 3.17[3]) via the system call.[4] seccomp mode used to be enabled by writing to a file, /proc/self/seccomp
, but this method was removed in favor of prctl()
.[5] In some kernel versions, seccomp disables the RDTSC
x86 instruction, which returns the number of elapsed processor cycles since power-on, used for high-precision timing.[6]
seccomp-bpf is an extension to seccomp[7] that allows filtering of system calls using a configurable policy implemented using Berkeley Packet Filter rules. It is used by OpenSSH and vsftpd as well as the Google Chrome/Chromium web browsers on Chrome OS and Linux.[8] (In this regard seccomp-bpf achieves similar functionality, but with more flexibility and higher performance, to the older systrace—which seems to be no longer supported for Linux.)
Some consider seccomp comparable to OpenBSD pledge(2) and FreeBSD capsicum(4).
History[edit]
seccomp was first devised by Andrea Arcangeli in January 2005 for use in public grid computing and was originally intended as a means of safely running untrusted compute-bound programs. It was merged into the Linux kernel mainline in kernel version 2.6.12, which was released on March 8, 2005.[9]
Software using seccomp or seccomp-bpf[edit]
- Android uses a seccomp-bpf filter in the zygote since Android 8.0 Oreo.[10]
- systemd's sandboxing options are based on seccomp.[11]
- QEMU, the Quick Emulator, the core component to the modern virtualization together with KVM uses seccomp on the parameter
--sandbox
[12] - Docker – software that allows applications to run inside of isolated containers. Docker can associate a seccomp profile with the container using the
--security-opt
parameter. - Arcangeli's CPUShare was the only known user of seccomp for a while.[13] Writing in February 2009, Linus Torvalds expresses doubt whether seccomp is actually used by anyone.[14] However, a Google engineer replied that Google is exploring using seccomp for sandboxing its Chrome web browser.[15][16]
- Firejail is an open source Linux sandbox program that utilizes Linux namespaces, Seccomp, and other kernel-level security features to sandbox Linux and Wine applications.[17]
- As of Chrome version 20, seccomp-bpf is used to sandbox Adobe Flash Player.[18]
- As of Chrome version 23, seccomp-bpf is used to sandbox the renderers.[19]
- Snap specify the shape of their application sandbox using "interfaces" which snapd translates to seccomp, AppArmor and other security constructs[20]
- vsftpd uses seccomp-bpf sandboxing as of version 3.0.0.[21]
- OpenSSH has supported seccomp-bpf since version 6.0.[22]
- Mbox uses ptrace along with seccomp-bpf to create a secure sandbox with less overhead than ptrace alone.[23]
- LXD, a Ubuntu "hypervisor" for containers[24][25]
- Firefox and Firefox OS, which use seccomp-bpf[26][27]
- Tor supports seccomp since 0.2.5.1-alpha[28]
- Lepton, a JPEG compression tool developed by Dropbox uses seccomp[29]
- Kafel is a configuration language, which converts readable policies into seccompb-bpf bytecode[30]
- Subgraph OS uses seccomp-bpf[31][32]
- Flatpak uses seccomp for process isolation[33]
- Bubblewrap is a lightweight sandbox application developed from Flatpak[34]
- minijail[35] uses seccomp for process isolation[36]
- SydBox[37][38][39][40] uses seccomp-bpf[41][42][43][44][45] to improve the runtime and security of the ptrace sandboxing used to sandbox package builds on Exherbo[46] Linux distribution to prevent unwanted process access to filesystem and network resources. Pandora[47] is a helper for SydBox, a ptrace and seccomp based sandbox to make sandboxing practical. This makes it easy for the end user to use secure computing for practical purposes. SydBox git repository has an example to sandbox Firefox.[48] The ptrace functionality is provided by the library PinkTrace[49][50][51][52] which is a wrapper around ptrace system call. It provides a robust API for tracing processes. PinkTrace has been borrowing code from Strace and submitting back as necessary over the years.[53][54] Sydbox-2.0.1[55][56] does not use ptrace anymore and relies solely on seccomp's newer
SECCOMP_USER_NOTIF_FLAG_CONTINUE
[57][58][59] flag to trace programs under the secure computing filters defined by the user. The user may choose to filter completely in kernel space or filter partly in user space with SydBox dereferencing string and network address arguments matching allow and deny lists specified by the user using pathnames or UNIX socket addresses including wildcard characters, IPv4 or IPv6 address in CIDR notation.
References[edit]
- ^ Corbet, Jonathan (2015-09-02). "A seccomp overview". lwn. Retrieved 2017-10-05.
- ^ "Documentation/prctl/seccomp_filter.txt". Retrieved 2017-10-05.
- ^ "Linux kernel 3.17, Section 11. Security". kernelnewbies.org. 2013-10-05. Retrieved 2015-03-31.
- ^ "seccomp: add "seccomp" syscall". kernel/git/torvalds/linux.git - Linux kernel source tree. kernel.org. 2014-06-25. Retrieved 2014-08-22.
- ^ Arcangeli, Andrea (2007-06-14). "[PATCH 1 of 2] move seccomp from /proc to a prctl". Retrieved 2013-08-02.
- ^ Tinnes, Julien (2009-05-28). "Time-stamp counter disabling oddities in the Linux kernel". cr0 blog. Retrieved 2013-08-02.
- ^ Corbet, Jonathan (2012-01-11). "Yet another new approach to seccomp". lwn. Retrieved 2013-08-02.
- ^ Tinnes, Julien (2012-11-19). "A safer playground for your Linux and Chrome OS renderers". The Chromium Blog. Retrieved 2013-08-02.
- ^ "[PATCH] seccomp: secure computing support". Linux kernel history. Kernel.org git repositories. 2005-03-08. Archived from the original on 2013-04-15. Retrieved 2013-08-02.
- ^ "Seccomp filter in Android O". Android Developers Blog.
- ^ "systemd.exec — Execution environment configuration". freedesktop.org. Retrieved 2017-10-14.
- ^ Otubo, Eduardo (2017-09-15). "QEMU Sandboxing new model pull request". qemu-devel mailing list archive.
- ^ van de Ven, Arjan (2009-02-28). "Re: [stable] [PATCH 2/2] x86-64: seccomp: fix 32/64 syscall hole". Linux Kernel Mailing List. Retrieved 2013-08-02.
- ^ Torvalds, Linus (2009-02-28). "Re: [PATCH 2/2] x86-64: seccomp: fix 32/64 syscall hole". Linux Kernel Mailing List. Retrieved 2013-08-02.
- ^ Gutschke, Markus (2009-05-06). "Re: [PATCH 2/2] x86-64: seccomp: fix 32/64 syscall hole". Retrieved 2013-08-02.
- ^ Gutschke, Markus (2009-05-06). "Re: [PATCH 2/2] x86-64: seccomp: fix 32/64 syscall hole". Linux Kernel Mailing List. Retrieved 2013-08-02.
- ^ "Firejail". Firejail. Retrieved 2016-11-26.
- ^ Evans, Chris (2012-07-04). "Chrome 20 on Linux and Flash sandboxing". Retrieved 2013-08-02.
- ^ Tinnes, Julien (2012-09-06). "Introducing Chrome's next-generation Linux sandbox". cr0 blog. Retrieved 2013-08-02.
- ^ "Snap security policy". Archived from the original on 2017-02-04. Retrieved 2017-02-03.
- ^ Evans, Chris (2012-04-09). "vsftpd-3.0.0 and seccomp filter sandboxing is here!". Retrieved 2013-08-02.
- ^ "Openssh 6.0 release notes". Retrieved 2013-10-14.
- ^ "MBOX". Retrieved 2014-05-20.
- ^ "LXD an "hypervisor" for containers (based on liblxc)". Retrieved 2014-11-08.
- ^ "Where We're Going With LXD". Retrieved 2014-11-08.
- ^ Destuynder, Guillaume (2012-09-13). "Firefox Seccomp sandbox". Mozilla Bugzilla. Retrieved 2015-01-13.
- ^ Destuynder, Guillaume (2012-09-13). "Firefox Seccomp sandbox". Mozilla Wiki. Retrieved 2015-01-13.
- ^ "Tor ChangeLog".
- ^ "Lepton image compression: saving 22% losslessly from images at 15MB/s". Dropbox Tech Blog. Retrieved 2016-07-15.
- ^ "Kafel: A language and library for specifying syscall filtering policies".
- ^ "Subgraph OS". Subgraph. Retrieved 2016-12-18.
- ^ "LoganCIJ16: Future of OS". YouTube. Archived from the original on 2021-12-21. Retrieved 2016-12-18.
- ^ "The flatpak security model – part 1: The basics". Retrieved 2017-01-21.
- ^ "bubblewrap". Retrieved 2018-04-14.
- ^ "Chromium OS Sandboxing - the Chromium Projects".
- ^ "Minijail [LWN.net]". lwn.net. Retrieved 2017-04-11.
- ^ "ptrace and seccomp based sandbox". dev.exherbo.org. Retrieved 2021-05-31.
- ^ "index: sydbox-1.git - Ptrace based Sandbox". git.exherbo.org. Retrieved 2021-05-31.
- ^ "path: root/packages/sys-apps/sydbox/sydbox.exlib". Retrieved 2021-05-31.
- ^ "path: root/packages/sys-apps/sydbox/sydbox.exheres-0". Retrieved 2021-05-31.
- ^ "core/trace/use_seccomp". dev.exherbo.org. Retrieved 2021-05-31.
- ^ "Specifying Magic Commands:Commands:core/restrict/file_control". dev.exherbo.org. Retrieved 2021-05-31.
- ^ "Specifying Magic Commands:Commands:core/restrict/shared_memory_writable". dev.exherbo.org. Retrieved 2021-05-31.
- ^ "improve seccomp for read only open calls". git.exherbo.org. Retrieved 2021-05-31.
- ^ "new functionality core/restrict/shared_memory_writable". git.exherbo.org. Retrieved 2021-05-31.
- ^ "Exherbo - Welcome". exherbo.org. Retrieved 2021-05-31.
- ^ "crates.io: Rust Package Registry: Pandora's Box: A helper for SydBox, a ptrace & seccomp based sandbox to make sandboxing practical". crates.io. Retrieved 2021-05-31.
- ^ "SydBox Profile for Mozilla Firefox 88.0.1". git.exherbo.org. Retrieved 2021-05-31.
- ^ "pinktrace Version 0.9.5". dev.exherbo.org. Retrieved 2021-05-31.
- ^ "index: pinktrace-1.git - pink's tracing library". git.exherbo.org. Retrieved 2021-05-31.
- ^ "path: root/packages/dev-libs/pinktrace/pinktrace.exlib". git.exherbo.org. Retrieved 2021-05-31.
- ^ "path: root/packages/dev-libs/pinktrace/pinktrace.exlib". git.exherbo.org. Retrieved 2021-05-31.
- ^ "path: root/pinktrace/read.c -- Based in part upon strace". git.exherbo.org. Retrieved 2021-05-31.
- ^ "Work around conflict between <sys/ptrace.h> and <linux/ptrace.h>". gitlab.com. Retrieved 2021-05-31.
- ^ "Sydbox v2.0.1: This release is noticably faster than Sydbox-1.2.1 in that it does not ptrace stop the processes anymore. The benchmark at the end of this post has the details. This release also fixes a multithreaded execve race condition which caused hangs". pink.exherbo.org. Retrieved 2021-06-15.
- ^ "Pandora v0.5.2: This version of Pandora updates configuration format to Sydbox API Version 2 and only works with SydBox v2.0.1 or newer". pink.exherbo.org. Retrieved 2021-06-15.
- ^ "seccomp: add SECCOMP_USER_NOTIF_FLAG_CONTINUE". git.kernel.org. Retrieved 2021-06-15.
- ^ "seccomp: avoid overflow in implicit constant conversion". git.kernel.org. Retrieved 2021-06-15.
- ^ "seccomp: test SECCOMP_USER_NOTIF_FLAG_CONTINUE". git.kernel.org. Retrieved 2021-06-15.
External links[edit]
- Official website[dead link]
- Google's Chromium sandbox, LWN.net, August 2009, by Jake Edge
- seccomp-nurse, a sandboxing framework based on seccomp
- Documentation/prctl/seccomp_filter.txt, part of the Linux kernel documentation
- Security In-Depth for Linux Software: Preventing and Mitigating Security Bugs