DEF-03 · Verteidigung & Härtung

Agenten-Tool-Sandboxing: seccomp, gVisor, WASM und MicroVM als Eindämmungsschichten

seccomp, gVisor, WASM und MicroVM im Vergleich: Wie Sie KI-Agenten-Tools isolieren, die unvertrauenswürdige Daten verarbeiten, und den Schadensradius wirksam eindämmen.

Defense in Depth: Ein Angriff wird durch mehrere Kontrollschichten abgeschwächt, bevor er eine privilegierte Aktion erreichtAngriffEingabefilterL1MindestrechteL2SandboxL3FreigabeL4jede Schicht geht davon aus, dass die vorherige versagt hat — der Schadensradius schrumpft von links nach rechts

Ein KI-Agent ist nur so sicher wie das schwächste Werkzeug, das er aufrufen darf. Sobald ein Agent Code ausführt, Webseiten abruft oder Dateien Dritter verarbeitet, betreten unvertrauenswürdige Daten das System – und mit ihnen das Risiko, dass eine Prompt Injection das Tool zweckentfremdet. Sandboxing entscheidet darüber, ob ein kompromittiertes Werkzeug ein isolierter Zwischenfall bleibt oder zum Einfallstor für das gesamte Hostsystem wird.

Was bedeutet Agenten-Tool-Sandboxing konkret?

Agenten-Tool-Sandboxing ist das gezielte Einsperren einzelner Agenten-Werkzeuge in eine Umgebung mit minimalen Rechten, sodass selbst ein vollständig übernommenes Tool weder auf den Host noch auf andere Komponenten übergreifen kann. Die zentrale Frage lautet nicht „Wie verhindere ich den Angriff?“, sondern „Was kann der Angreifer anrichten, wenn er bereits drin ist?”. Die Antwort liefern vier Eindämmungsschichten, die sich kombinieren lassen: seccomp (Syscall-Filterung), gVisor (Anwendungs-Kernel im Userspace), WASM (speichersichere Sprach-Sandbox) und MicroVM (leichtgewichtige Hardware-Virtualisierung).

Der Grundgedanke heißt Eindämmung (Containment) statt Vertrauen. Sie gehen davon aus, dass ein Tool, das eine fremde PDF parst oder vom Modell generierten Code ausführt, früher oder später feindselige Daten verarbeitet. Statt auf perfekte Eingabevalidierung zu hoffen, begrenzen Sie vorab den Schadensradius: kein Netzwerkzugriff, kein Dateisystem außerhalb eines Scratch-Verzeichnisses, keine Syscalls, die das Tool für seine Aufgabe nicht braucht. Das ist das Prinzip der minimalen Rechte (Least Privilege), übersetzt in die Laufzeitumgebung des Agenten.

Warum reicht ein normaler Container nicht aus?

Ein Standard-Docker-Container teilt sich den Kernel mit dem Host. Alle Prozesse im Container sprechen direkt mit demselben Linux-Kernel wie alle anderen Dienste auf der Maschine. Eine einzige Kernel-Lücke – ein verwundbarer Syscall, ein Bug in der Container-Runtime – genügt, und der Angreifer steht auf dem Host. Namespaces und cgroups regeln Sichtbarkeit und Ressourcen, sie sind aber keine Sicherheitsgrenze gegen einen entschlossenen Angreifer im selben Kernel.

Genau hier setzt die Eindämmung an. Die vier Schichten unterscheiden sich darin, wo sie die Grenze ziehen:

  • seccomp verkleinert die Angriffsfläche des Host-Kernels, indem es die erlaubten Syscalls drastisch reduziert – das Tool läuft weiter direkt auf dem Host-Kernel, kann ihn aber nur über eine schmale, geprüfte Schnittstelle erreichen.
  • gVisor schiebt einen in Go geschriebenen Anwendungs-Kernel (Sentry) zwischen Tool und Host-Kernel; die meisten Syscalls erreichen den echten Kernel nie.
  • WASM sperrt den Code in eine speichersichere virtuelle Maschine, die standardmäßig gar nichts darf – kein Dateisystem, kein Netzwerk, außer was explizit übergeben wird.
  • MicroVM gibt dem Tool einen eigenen Gast-Kernel in einer echten, hardwaregestützten virtuellen Maschine; die Grenze ist die CPU-Virtualisierung selbst.

Wie funktioniert seccomp als erste Verteidigungslinie?

seccomp-BPF (Secure Computing mit Berkeley Packet Filter) ist ein Mechanismus des Linux-Kernels, mit dem ein Prozess festlegt, welche Syscalls er noch absetzen darf. Ein BPF-Programm prüft jeden eingehenden Syscall anhand seiner Nummer und Argumente und entscheidet: zulassen, blockieren oder den Prozess beenden. Der Linux-Kernel kennt über 350 Syscalls – die allermeisten braucht ein Tool, das nur eine Datei einliest und JSON zurückgibt, schlicht nie.

Wie konsequent sich das durchziehen lässt, zeigt AWS Firecracker: Die MicroVM-Runtime beschränkt sich im Betrieb auf rund 35 erlaubte Syscalls, bei fortgeschrittener Filterung sogar auf eine Handvoll, die zusätzlich nach Argumenten geprüft werden. Jeder blockierte Syscall ist ein Stück Kernel-Angriffsfläche, das einem kompromittierten Tool nicht mehr zur Verfügung steht.

seccomp ist günstig, fast ohne Laufzeit-Overhead und nahezu überall verfügbar. Sein Nachteil: Es ist eine Negativ- bzw. Positivliste auf Syscall-Ebene, kein vollwertiger Isolationslayer. Ein gut gewähltes seccomp-Profil reduziert das Risiko erheblich, ersetzt aber keine echte Kernel-Trennung. Deshalb gehört seccomp in der Praxis als Grundschicht unter die stärkeren Verfahren – und nicht als alleinige Maßnahme.

Wann lohnt sich gVisor?

gVisor zieht eine deutlich härtere Grenze, ohne gleich eine volle VM zu starten. Der Kern ist Sentry – ein Anwendungs-Kernel in Go, der einen großen Teil der Linux-Syscall-Schnittstelle im Userspace nachbildet. Ruft das Tool einen Syscall auf, fängt gVisor ihn ab und bearbeitet ihn in Sentry; nur ein kleiner, streng kontrollierter Satz an Operationen wird an den Host-Kernel durchgereicht – und das ebenfalls hinter einem seccomp-Filter. Die Folge: Eine Schwachstelle im Host-Kernel ist für das Tool kaum noch erreichbar, weil die meisten Syscalls den echten Kernel nie berühren.

Das Abfangen kostet Leistung. Historisch nutzte gVisor die ptrace-Plattform mit hohem Kontextwechsel-Aufwand; seit 2023 ist Systrap (signalbasiert) die Standardplattform und deutlich schneller, alternativ steht die KVM-Plattform bereit. Je nach Last müssen Sie mit spürbarem Overhead rechnen – I/O- und syscall-lastige Tools zahlen am meisten, CPU-gebundene Arbeit am wenigsten. Für ein Werkzeug, das fremden Code ausführt oder unvertrauenswürdige Dokumente verarbeitet, ist dieser Preis meist gerechtfertigt: Sie tauschen einen Teil der Geschwindigkeit gegen eine erheblich kleinere Kernel-Angriffsfläche.

gVisor ist die naheliegende Wahl, wenn Sie Container-Ergonomie behalten wollen (OCI-kompatibel, läuft unter Kubernetes via RuntimeClass), aber die geteilte Kernel-Grenze nicht akzeptieren können.

Welche Rolle spielt WASM bei der Tool-Isolation?

WebAssembly (WASM) verfolgt einen anderen Ansatz: Statt einen Kernel abzuschotten, sperrt es den Code in eine speichersichere virtuelle Maschine mit linearem Speicher und einem strikten Default-deny-Modell. Ein WASM-Modul hat von sich aus keinen Zugriff auf Dateisystem, Netzwerk, Uhr oder Umgebungsvariablen. Jede Fähigkeit muss der Host über das Capability-basierte WASI-Interface ausdrücklich hineinreichen. Was Sie nicht übergeben, existiert für das Modul nicht.

Das macht WASM ideal für eine bestimmte Klasse von Agenten-Tools: deterministische, rechenlastige Funktionen, die unvertrauenswürdige Daten transformieren – Parser, Validatoren, Datenkonverter, vom Modell generierte Auswertungslogik. Der Start erfolgt nahezu sofort (Millisekunden statt Container-Sekunden), der Speicherbedarf bleibt winzig, und dieselbe Sandbox läuft serverseitig wie am Edge.

Die Grenze ist klar zu benennen: WASM isoliert Code, nicht ganze Betriebssystemprozesse. Ein Tool, das ein beliebiges Linux-Binary, eine fremde Shell oder ein vollständiges Dateisystem braucht, passt nicht ins WASM-Modell. Außerdem ist die Sandbox nur so dicht wie der Host-Wrapper, der die Capabilities vergibt – eine zu großzügig konfigurierte WASI-Schnittstelle hebt den Sicherheitsgewinn wieder auf.

Wann brauchen Sie eine MicroVM?

Eine MicroVM ist die stärkste der vier Schichten. Werkzeuge wie AWS Firecracker starten eine echte, hardwaregestützte virtuelle Maschine mit eigenem Gast-Kernel, aber ohne den Ballast klassischer VMs: ein minimales Gerätemodell, abgespeckte Emulation, Startzeiten im Bereich von Sekundenbruchteilen. Die Isolationsgrenze ist nicht mehr ein Userspace-Kernel oder ein Syscall-Filter, sondern die CPU-Virtualisierung über KVM selbst – dieselbe Schicht, auf die sich öffentliche Cloud-Anbieter zur Trennung fremder Mandanten verlassen.

Firecracker kombiniert dabei die Schichten: KVM-Virtualisierung plus ein minimales Gerätemodell plus die bereits erwähnte strikte seccomp-Filterung der Runtime selbst, idealerweise zusätzlich abgesichert durch den Jailer-Prozess mit cgroups und Namespaces. Genau diese Verteidigung in der Tiefe (Defense in Depth) macht den Ansatz für hochsensible Agenten-Werkzeuge attraktiv: Selbst wenn der Gast-Kernel fällt, steht der Angreifer noch vor der Virtualisierungsgrenze und einer minimalen Host-Schnittstelle.

Der Preis ist mehr Komplexität im Betrieb und ein größerer Ressourcenbedarf als bei seccomp oder WASM. Für Tools, die wirklich beliebigen, vom Modell oder von Nutzern stammenden Code ausführen, ist die MicroVM dennoch oft die einzige Schicht, die starke Mandantentrennung glaubwürdig garantiert.

Wie unterscheiden sich die vier Schichten im Vergleich?

Schicht Isolationsgrenze Overhead Start Stärke Typischer Einsatz
seccomp Syscall-Filter (Host-Kernel) minimal sofort Angriffsfläche verkleinern Grundschicht unter allem
gVisor Anwendungs-Kernel (Userspace) mittel schnell Kernel-Lücken entschärfen Code-/Dokumenten-Tools
WASM Sprach-VM, Default-deny sehr gering Millisekunden Capability-Kontrolle Parser, Konverter, Logik
MicroVM Hardware-Virtualisierung (KVM) höher Sekundenbruchteil starke Mandantentrennung beliebiger fremder Code

Die Schichten sind keine Konkurrenten, sondern ergänzen sich. seccomp gehört unter praktisch jedes Tool. WASM eignet sich für reine Rechenlogik, gVisor für Tools mit OS-Bedarf bei vertretbarem Overhead, die MicroVM für die maximale Isolation. Ein robustes Agentensystem mischt sie nach Risikoprofil des jeweiligen Werkzeugs.

Wie isolieren Sie Tools, die unvertrauenswürdige Daten verarbeiten?

Der Schlüssel ist, das Risiko am Datenfluss festzumachen, nicht am Werkzeugnamen. Jedes Tool, das Daten außerhalb Ihrer Kontrolle berührt – Webinhalte, hochgeladene Dateien, fremde APIs, vom Modell generierter Code – ist ein Kandidat für die strengste Eindämmung. Diese Prinzipien haben sich bewährt:

  • Netzwerk standardmäßig zu. Ein Parser braucht kein Internet. Erlauben Sie ausgehende Verbindungen nur explizit und am besten nur zu einer Positivliste – so kann ein kompromittiertes Tool keine Daten exfiltrieren.
  • Dateisystem auf ein Scratch-Verzeichnis begrenzen. Read-only-Root plus ein temporäres Arbeitsverzeichnis, das nach jedem Lauf verworfen wird. Keine Mounts ins Host-Dateisystem.
  • Ephemere Laufzeit. Eine Sandbox pro Aufruf, danach restlos verwerfen. Persistenz ist der Hebel, mit dem aus einem Einzelvorfall ein dauerhafter Brückenkopf wird.
  • Trennung von vertrauenswürdig und unvertrauenswürdig. Das Tool, das fremde Daten verarbeitet, läuft niemals im selben Sandbox-Kontext wie das Tool mit Zugriff auf Geheimnisse oder produktive Systeme.
  • Ressourcenlimits gegen Denial-of-Service. CPU-, Speicher- und Laufzeitgrenzen verhindern, dass ein bösartiges Werkzeug die Maschine lahmlegt.

Diese Maßnahmen wirken unabhängig von der gewählten Isolationstechnik. Sie sind die Politik; seccomp, gVisor, WASM und MicroVM sind die Mechanik, die sie durchsetzt.

Wie begrenzen Sie den Schadensradius über die Sandbox hinaus?

Sandboxing dämmt die Ausführung ein – doch der gefährlichste Vermögenswert eines Agenten sind oft seine Berechtigungen und Geheimnisse, nicht der Code. Übergeben Sie einem Sandbox-Tool niemals langlebige Zugangsdaten. Nutzen Sie kurzlebige, eng begrenzte Token (Least Privilege auf API-Ebene), die nur für den konkreten Aufruf gelten und schnell ablaufen. Selbst eine perfekt durchbrochene Sandbox liefert dann nur ein wertloses, abgelaufenes Token.

Ergänzen Sie die technische Eindämmung um Beobachtbarkeit: Protokollieren Sie jeden Tool-Aufruf, jeden Netzwerkversuch und jeden Syscall-Verstoß. Ein seccomp-Filter, der einen unerwarteten Syscall blockiert, ist nicht nur Schutz, sondern auch ein Alarmsignal – ein Hinweis, dass ein Werkzeug etwas tut, was es nie tun sollte. So wird die Sandbox vom passiven Käfig zum aktiven Sensor.

Letztlich ist Agenten-Tool-Sandboxing eine Anwendung des Annahme-eines-Bruchs-Prinzips (Assume Breach): Sie planen nicht für den Fall, dass ein Tool kompromittiert wird, sondern für den Zeitpunkt. Die Frage ist nur, wie klein Sie den Radius ziehen, in dem der Schaden dann bleibt.

Häufige Fragen

Ist ein Docker-Container als Sandbox für Agenten-Tools ausreichend?

Für die meisten sicherheitskritischen Fälle nicht. Ein Standard-Container teilt sich den Kernel mit dem Host, sodass eine einzige Kernel-Lücke zum Ausbruch genügt. Namespaces und cgroups regeln Sichtbarkeit und Ressourcen, sind aber keine harte Sicherheitsgrenze. Für Tools, die unvertrauenswürdige Daten oder fremden Code verarbeiten, ergänzen Sie den Container um seccomp und greifen besser zu gVisor oder einer MicroVM.

Was ist der Unterschied zwischen gVisor und einer MicroVM?

gVisor schiebt einen Anwendungs-Kernel im Userspace zwischen Tool und Host-Kernel; die Isolation bleibt prozessbasiert und ist leichtgewichtiger. Eine MicroVM wie Firecracker startet eine echte, hardwaregestützte VM mit eigenem Gast-Kernel und zieht die Grenze auf der CPU-Virtualisierung über KVM. Die MicroVM isoliert stärker, kostet aber mehr Ressourcen und Betriebskomplexität.

Wann sollte ich WASM statt eines Containers für ein Agenten-Tool wählen?

WASM passt für deterministische, rechenlastige Funktionen, die unvertrauenswürdigen Input transformieren — etwa Parser, Validatoren oder vom Modell generierte Auswertungslogik. Es startet in Millisekunden, hat einen winzigen Fußabdruck und folgt einem Default-deny-Modell. Sobald ein Tool ein vollständiges Linux-Binary, eine Shell oder ein echtes Dateisystem braucht, ist WASM ungeeignet.

Bremst seccomp die Performance meiner Tools aus?

Praktisch nicht. seccomp-BPF prüft Syscalls direkt im Kernel mit vernachlässigbarem Laufzeit-Overhead. Es ist deshalb sinnvoll, ein restriktives seccomp-Profil als Grundschicht unter praktisch jedes Agenten-Tool zu legen — auch zusätzlich zu gVisor oder einer MicroVM.

Wie schütze ich ein Tool, das fremde Webseiten oder Uploads verarbeitet?

Behandeln Sie es als unvertrauenswürdig: Netzwerk per Default zu (ausgehend nur per Allowlist), Dateisystem auf ein verwerfbares Scratch-Verzeichnis begrenzen, ephemere Laufzeit pro Aufruf, strikte Ressourcenlimits und keine Vermischung mit Tools, die Zugriff auf Geheimnisse haben. Als Isolationstechnik eignet sich gVisor oder eine MicroVM.

Reicht Sandboxing allein gegen Prompt Injection?

Nein. Sandboxing verhindert die Injection nicht, sondern begrenzt deren Wirkung. Wenn eine Prompt Injection ein Tool zweckentfremdet, sorgt die Eindämmung dafür, dass kein Netzwerkzugriff, kein Host-Dateisystem und keine langlebigen Token zur Verfügung stehen. Ergänzen Sie Sandboxing daher um kurzlebige Berechtigungen und Protokollierung jedes Tool-Aufrufs.