Seccomp
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Seccomp, was für Secure Computing Mode steht, ist eine Sicherheitsfunktion des Linux-Kernels, die dazu dient, Systemaufrufe zu filtern. Es beschränkt Prozesse auf eine begrenzte Anzahl von Systemaufrufen (exit()
, sigreturn()
, read()
und write()
für bereits geöffnete Dateideskriptoren). Wenn ein Prozess versucht, etwas anderes aufzurufen, wird er vom Kernel mit SIGKILL oder SIGSYS beendet. Dieser Mechanismus virtualisiert keine Ressourcen, sondern isoliert den Prozess von ihnen.
Es gibt zwei Möglichkeiten, seccomp zu aktivieren: über den Systemaufruf prctl(2)
mit PR_SET_SECCOMP
oder für Linux-Kernel 3.17 und höher den Systemaufruf seccomp(2)
. Die ältere Methode zur Aktivierung von seccomp durch Schreiben in /proc/self/seccomp
wurde zugunsten von prctl()
eingestellt.
Eine Erweiterung, seccomp-bpf, fügt die Fähigkeit hinzu, Systemaufrufe mit einer anpassbaren Richtlinie zu filtern, die Berkeley Packet Filter (BPF)-Regeln verwendet. Diese Erweiterung wird von Software wie OpenSSH, vsftpd und den Chrome/Chromium-Browsern auf Chrome OS und Linux für flexibles und effizientes Syscall-Filtering genutzt und bietet eine Alternative zu dem mittlerweile nicht mehr unterstützten Systrace für Linux.
In diesem Modus erlaubt Seccomp nur die Syscalls exit()
, sigreturn()
, read()
und write()
für bereits geöffnete Dateideskriptoren. Wenn ein anderer Syscall gemacht wird, wird der Prozess mit SIGKILL beendet.
Dieser Modus ermöglicht die Filterung von Systemaufrufen mithilfe einer konfigurierbaren Richtlinie, die mit Berkeley Packet Filter-Regeln implementiert ist.
Seccomp-bpf wird von Docker unterstützt, um die syscalls der Container einzuschränken und somit die Angriffsfläche effektiv zu verringern. Die standardmäßig blockierten syscalls finden Sie unter https://docs.docker.com/engine/security/seccomp/ und das Standard-Seccomp-Profil finden Sie hier https://github.com/moby/moby/blob/master/profiles/seccomp/default.json. Sie können einen Docker-Container mit einer anderen Seccomp-Richtlinie ausführen mit:
Wenn Sie beispielsweise einen Container daran hindern möchten, einen bestimmten syscall wie uname
auszuführen, könnten Sie das Standardprofil von https://github.com/moby/moby/blob/master/profiles/seccomp/default.json herunterladen und einfach den uname
-String aus der Liste entfernen.
Wenn Sie sicherstellen möchten, dass einige Binaries nicht innerhalb eines Docker-Containers funktionieren, könnten Sie strace verwenden, um die syscalls aufzulisten, die die Binary verwendet, und diese dann verbieten.
Im folgenden Beispiel werden die syscalls von uname
entdeckt:
Wenn Sie Docker nur zum Starten einer Anwendung verwenden, können Sie es mit strace
profilieren und nur die Syscalls zulassen, die es benötigt.
Um die Seccomp-Funktion zu veranschaulichen, erstellen wir ein Seccomp-Profil, das den Systemaufruf „chmod“ wie unten gezeigt deaktiviert.
Im obigen Profil haben wir die Standardaktion auf "erlauben" gesetzt und eine schwarze Liste erstellt, um "chmod" zu deaktivieren. Um sicherer zu sein, können wir die Standardaktion auf "fallen lassen" setzen und eine weiße Liste erstellen, um Systemaufrufe selektiv zu aktivieren. Die folgende Ausgabe zeigt, dass der "chmod"-Aufruf einen Fehler zurückgibt, da er im seccomp-Profil deaktiviert ist.
Folgender Output zeigt das “docker inspect”, das das Profil anzeigt:
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)