Seccomp Profiling: Eigene Profile erstellen und testen

Seccomp (Secure Computing Mode) ist ein zentrales Werkzeug für die Absicherung von Containern unter Linux. Es ermöglicht die Kontrolle, welche Systemaufrufe ein Prozess ausführen darf. Standardmäßig nutzt Docker ein vordefiniertes Seccomp-Profil, das die meisten kritischen Syscalls blockiert, aber noch genügend Funktionen für typische Container-Workloads erlaubt. Eigene Seccomp-Profile bieten die Möglichkeit, diese Kontrolle feingranular an spezifische Anwendungen anzupassen und die Angriffsfläche weiter zu reduzieren.

1. Grundlagen von Seccomp

Seccomp ist ein Kernel-Feature, das Prozesse in eine eingeschränkte Umgebung zwingt. Es erlaubt die Definition von Filterregeln, die Systemaufrufe erlauben oder blockieren. Jeder Syscall kann entweder allow, deny oder errno zurückgeben.

Funktionsweise

  • Ein Prozess wird unter Seccomp gestartet.
  • Jeder Systemaufruf wird mit dem Profil abgeglichen.
  • Unerlaubte Syscalls führen zu einem Fehler oder Termination.
  • Docker nutzt standardmäßig default.json als Default-Profil.

2. Eigenes Seccomp-Profil erstellen

Eigene Profile werden als JSON-Dateien definiert. Ein Profil enthält die folgenden Hauptabschnitte:

  • defaultAction: Standardaktion für nicht explizit definierte Syscalls.
  • architectures: CPU-Architekturen, z. B. SCMP_ARCH_X86_64.
  • syscalls: Liste von Syscalls mit Aktionen.

Beispiel für ein minimalistisches Profil

{
  "defaultAction": "SCMP_ACT_ERRNO",
  "architectures": ["SCMP_ARCH_X86_64"],
  "syscalls": [
    {
      "names": ["read","write","exit","futex","rt_sigreturn"],
      "action": "SCMP_ACT_ALLOW"
    }
  ]
}

Dieses Profil erlaubt nur grundlegende Syscalls für einen simplen Prozess. Alle anderen Syscalls werden mit EPERM abgelehnt.

3. Anwendung des Profils in Docker

Ein eigenes Seccomp-Profil kann beim Start eines Containers übergeben werden:

docker run --rm --security-opt seccomp=./my-seccomp.json alpine:latest sh

Docker lädt das JSON-Profil und erzwingt die definierten Regeln innerhalb des Containers. Fehlgeschlagene oder blockierte Syscalls werden protokolliert.

Integration in Docker Compose

version: "3.8"
services:
  app:
    image: myapp:latest
    security_opt:
      - seccomp: ./my-seccomp.json

So lässt sich das Profil standardisiert für alle Container im Stack anwenden.

4. Testen von Seccomp-Profilen

Das Testen eigener Profile ist entscheidend, um funktionale Anwendungen sicher zu betreiben.

Interaktives Debugging

  • Starten Sie den Container mit Profil im interaktiven Modus:
  • docker run --rm -it --security-opt seccomp=./my-seccomp.json alpine sh
    
  • Führen Sie typische Anwendungsszenarien durch und prüfen Sie auf Fehler.
  • Unerwartete Operation not permitted Fehler weisen auf fehlende erlaubte Syscalls hin.

Logging und Syscall-Überwachung

  • Aktivieren Sie Audit-Logs des Kernels (auditd) oder strace im Container.
  • Vergleichen Sie ausgeführte Syscalls mit dem Profil.
  • Passen Sie das Profil iterativ an.

5. Best Practices

  • Beginnen Sie mit dem Docker Default-Profil und entfernen nur spezifisch nicht benötigte Syscalls.
  • Testen Sie jede Anwendung gründlich in einer Staging-Umgebung.
  • Kombinieren Sie Seccomp mit read-only Root Filesystem, AppArmor oder SELinux für maximale Isolation.
  • Dokumentieren Sie die erlaubten Syscalls pro Service, um zukünftige Updates leichter anzupassen.
  • Verwenden Sie minimale defaultAction wie SCMP_ACT_ERRNO oder SCMP_ACT_KILL für unautorisierte Syscalls.

6. Erweiterte Profile

Fortgeschrittene Profile erlauben konditionale Regeln, z. B. Argument-Werte prüfen:

{
  "names": ["open"],
  "action": "SCMP_ACT_ALLOW",
  "args": [
    {
      "index": 1,
      "value": 0,
      "op": "SCMP_CMP_EQ"
    }
  ]
}

Damit können bestimmte Systemaufrufe nur für bestimmte Dateien oder Modi erlaubt werden, was die Sicherheit weiter erhöht.

7. Fazit

Seccomp ist ein mächtiges Werkzeug, um Container auf Syscall-Ebene zu isolieren. Eigene Profile ermöglichen die Anpassung auf spezifische Anwendungsszenarien und reduzieren die Angriffsfläche erheblich. Durch iterative Tests, Logging und die Kombination mit anderen Sicherheitsmechanismen entsteht eine robuste Container-Sicherheitsarchitektur. Best Practices wie minimaler Default-Action, schrittweise Erweiterung der erlaubten Syscalls und Staging-Tests sichern sowohl Funktionalität als auch Sicherheit.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles