Publikation von Christoph Puppe

Kubernetes absichern mit Capabilities, SECCOMP und SELinux

2022 · iX 12/2022, S. 60–65 · 29.11.2022 · Christoph Puppe, Jan Walther

Capabilities sind seit Kernel 2.2 die Antwort von Linux auf die Frage, warum ein Prozess Root sein muss, nur um Pakete zu verschicken. Der gemeinsam mit Jan Walther verfasste Artikel erklärt sie am Beispiel von ping und CAP_NET_RAW: Wo früher das setuid-Bit herhalten musste, genügt heute eine einzelne der gut 40 Fähigkeiten des Kernels. Docker und containerd erlauben Containern standardmäßig unter anderem CHOWN, KILL, MKNOD und SETUID, wofür es bei Anwendungsdiensten meist keinen Grund gibt. SECCOMP filtert eine Ebene tiefer die Syscalls selbst: Von über 300 verbietet das Docker-Standardprofil gerade 44, ein Apache braucht sechs, rund 250 bleiben einem Angreifer offen. Beim Auditor lässt sich damit ein Ja ankreuzen, viel Sicherheit ist so nicht gewonnen. Der Artikel führt vor, wie Kubernetes die Mechanismen über den securityContext einbindet; Werkzeuge wie udica, capable und strace helfen beim Erstellen restriktiver Profile, verlangen aber Testsuiten, die wirklich jeden Syscall einmal auslösen. Kommerzielle Produkte lernen Profile durch Beobachtung, kosten dafür Geld und binden an den Hersteller. Wer die Schutzfunktionen ausreizen will, kommt an einer Automatisierung in der CI/CD nicht vorbei. Das Fazit fällt eindeutig aus: Zusammen mit cgroups ermöglicht dieses Triumvirat eine Absicherung weit über das sonst Übliche hinaus. Ohne präzise Profile bringen die Mechanismen allerdings keinen Nutzen, und Fehler gehen schnell zulasten der Verfügbarkeit.

← Alle Publikationen von Christoph Puppe