Fallstudie · Sicherheits-Engineering
Wie ein zweistufiges KI-Agenten-System, deterministische Guardrails und klassische Unix-Sensorik zusammen ein Reisegerät überwachen — ohne dass die KI je selbst etwas ausführt.
Ein Laptop, der zwischen Hotel-WLANs, Cafés und dem Heimnetz wechselt, hat kein Unternehmens-SOC im Rücken, das Traffic korreliert, Anomalien einordnet und im Ernstfall reagiert. Klassische Endpoint-Antivirensoftware deckt Signaturen ab, aber nicht Netzwerk-Manipulation, Rogue-Access-Points oder stille Persistenz-Versuche. Die Frage war: wie viel echte SOC-Praxis lässt sich auf ein einzelnes Gerät herunterskalieren — mit Werkzeugen, die es auf jedem Linux-System schon gibt, plus einer KI-Schicht für die Einordnung?
Die Antwort sollte kein Prototyp bleiben, der beim ersten Fehlalarm ignoriert wird — sondern etwas, das man tatsächlich tagelang mitlaufen lässt.
Jede LLM-gestützte Sicherheitsautomatisierung hat ein strukturelles Risiko: ein Modell, das Logs fehlinterpretiert — oder durch präparierte Log-Inhalte manipuliert wird — und dabei Werkzeuggewalt besitzt, kann selbst zum Sicherheitsproblem werden. Deshalb gilt für dieses System eine einzige, nicht verhandelbare Regel:
Die KI bewertet und empfiehlt. Ausgeführt wird ausschliesslich nach expliziter, manueller Bestätigung durch einen Menschen — und erst nach einer zweiten, rein deterministischen Prüfung derselben Empfehlung.
Das reduziert die KI-Komponente auf das, was sie gut kann — Muster in unstrukturierten Daten erkennen und einordnen — und hält sie von dem fern, was bei einer Fehleinschätzung teuer wird: tatsächlich etwas am System zu verändern.
Sieben Stationen, jede mit einer klaren Zuständigkeit. Nichts überspringt eine Stufe.
Passive Netzwerk-Beobachtung, Datei-/Log-Überwachung, USB-Ereignisse — nichts sendet aktiv Pakete an fremde Geräte.
Ein gemeinsames JSON-Schema für alle Quellen: Zeitstempel, Stufe, Kategorie, Nachricht.
Günstig, häufig getaktet. Stuft Kritikalität ein, nur bei echtem Signal.
Nur bei Bedarf. Tieferer Kontext, genau eine strukturierte Empfehlung.
Deterministische Regeln prüfen jede Empfehlung — vor Anzeige und erneut vor Ausführung.
Dialog oder Terminal, mit Klartext-Vorschau des exakten Befehls.
Genau der geprüfte Befehl — nie ein vom Modell frei generierter String.
Alle Sensoren, beide Agenten und der Freigabe-Status laufen in einer lokalen, ausschliesslich auf 127.0.0.1 gebundenen Weboberfläche zusammen. Nachbau des tatsächlichen Layouts — Adressen, MAC-Adressen und Netzwerknamen sind frei erfunden (RFC-5737-Dokumentationsbereiche).
Nachgebaute Ansicht mit synthetischen Werten — Layout, Farblogik und Datenfelder entsprechen dem produktiven Dashboard. Die beiden Analyse-Texte zeigen das reale Format der Triage-Ausgabe; Inhalte anonymisiert.
Alles rein passiv oder auf lokale, bereits vorhandene Standard-Anfragen beschränkt — dazu mehr im Abschnitt zur ethischen Leitplanke weiter unten. Jede Zeile in der Tabelle mündet über das gemeinsame Event-Schema in dieselbe Agenten-Pipeline.
| Quelle | Liefert | Fliesst ein in |
|---|---|---|
| net.recon (passiv) | Geräte- und ARP-Tabelle, Netzwerk-Topologie | Event-Log → Triage |
| ip neigh | Neue Hosts, ARP-Konflikte (Spoofing-Verdacht) | Event-Log → Triage |
| avahi-browse (mDNS) | Geräteklasse: Drucker, Kamera, IoT, Lautsprecher … | Event-Log → Triage |
| nmcli (WLAN) | SSID/BSSID-Historie, Verschlüsselungsstärke | Evil-Twin-Erkennung |
| p0f | Passives OS-Fingerprinting pro IP | Eskalations-Kontext |
| psad | Portscan-Muster aus Firewall-/Kernel-Log | Event-Log (eigener Traffic vorgefiltert) |
| ClamAV / rkhunter | Signatur- und Heuristik-Funde | Direkt an Eskalations-Agent |
| auth.log / journalctl | Login-Fehlversuche, sudo, neue Nutzer, USB/VPN/WLAN-Warnungen | Event-Log → Triage |
| SHA256-Baseline | Abweichung an den eigenen Sicherheits-Skripten | Direkt an Eskalations-Agent |
| ufw / VPN-Status | Firewall- und Kill-Switch-Zustand | Kontext für beide Agenten |
Gekürzt — die vollständige Pipeline verarbeitet zusätzliche Quellen wie Verbindungs- und Prozesslisten.
Ein einzelner, immer gleich teurer Agent wäre entweder zu langsam für ständige Beobachtung oder zu teuer für seltene Tiefenanalyse. Die Lösung: zwei Stufen mit unterschiedlichem Budget.
Anonymisiertes Beispiel aus dem strukturierten Event-Schema — Adressen durch RFC-5737-Dokumentationsbereiche ersetzt. Log-Text bewusst im Original (Deutsch) belassen.
Der Eskalations-Agent schreibt bei einer echten Empfehlung eine einzelne Datei — keinen ausführbaren Befehl, nur strukturierte Felder:
Das erreicht mich über vier parallele Kanäle: Desktop-Benachrichtigung, E-Mail, ein Ja/Nein-Dialog (läuft als eigenständige systemd-Einheit, unabhängig vom Timer-Dienst, der ihn ausgelöst hat) und als Terminal-Fallback jederzeit per Befehl, der Ziel, Begründung, Konfidenz und die exakte Befehlsvorschau nochmal anzeigt, bevor ich bestätige. Reagiere ich nicht, verfällt die Empfehlung nach 30 Minuten automatisch — ohne Aktion.
Das Modell liefert ausschliesslich action
und target als kurze Strings — nie einen
fertigen Befehl. Der ausführende Teil baut die echte Aktion selbst aus einem festen
Template pro Typ:
| Empfehlung | Tatsächlich ausgeführter Befehl | Harte Grenze |
|---|---|---|
| prozess_killen | kill -TERM <PID> | Denylist (systemd, sshd, NetworkManager, eigene Toolchain, Terminal …), PID 1 nie |
| netz_trennen | nmcli device disconnect <Interface> | Nur das überwachte Interface, kein anderes |
| user_sperren | usermod -L <User> | Nie eigener Account oder root, nur reguläre UID≥1000 |
| key_entfernen | Exakte Zeile aus authorized_keys löschen (Backup vorher) | Zeile muss wortwörtlich vorhanden sein |
| datei_quarantänieren | Datei nach /var/quarantine/, chmod 000 (kein Löschen) | Nur unter definierten, unkritischen Pfaden — Skripte/SSH-Verzeichnis ausgeschlossen |
| keine | — | — |
Alles ausserhalb dieser fünf Zeilen fällt im ausführenden Skript in einen Default-Zweig, der nichts tut. Es gibt keinen sechsten Weg.
Jede Empfehlung durchläuft dieselbe Guardrail-Prüfung aus der Tabelle oben zweimal — einmal direkt nach der Analyse, ein zweites Mal unmittelbar vor der Ausführung, falls sich der Zustand in der Zwischenzeit geändert hat (der Prozess etwa schon von selbst beendet wurde). Eine abgelehnte Empfehlung wird protokolliert, aber nie zu einer Freigabe-Anfrage.
Ausserdem: Log-Inhalte sind teils von aussen beeinflussbar — ein SSH-Benutzername in einem Login-Fehlversuch etwa. Jeder Prompt trennt deshalb explizit zwischen «zu bewertenden Daten» und «Anweisungen an das Modell» und wurde gegen wörtlich eingebettete Injection-Versuche getestet.
Eine frühe Version enthielt ein Modul, das aktiv unbekannte Geräte im Netz anspricht, um die Topologie schneller und vollständiger zu kartieren.
Das wurde wieder entfernt. Aktives Anstupsen fremder Geräte in einem Netz, das man nicht selbst betreibt — etwa in einem Hotel-WLAN — ist eine Grenze, die ein Einzelgerät-Werkzeug nicht überschreiten sollte, unabhängig davon, wie harmlos die Absicht ist. Seither gilt: ausschliesslich Mithören von Broadcast-/Multicast-Verkehr und höchstens eine einzelne, für jedes Gerät ohnehin übliche Standardanfrage (etwa ein mDNS-Browse, wie ihn jeder Druck-Dialog selbst auslöst).
Ein Sicherheitssystem, das selbst unbemerkt ausfallen oder manipuliert werden kann, ist keine Verbesserung. Drei Massnahmen adressieren genau das:
Dieses System ersetzt kein Team, keine Korrelation über hunderte Hosts, keine forensische Tiefe eines echten SOC. Es ist bewusst für genau einen Anwendungsfall gebaut: ein Gerät, ein Nutzer, wechselnde, nicht vertrauenswürdige Netze.
Übertragbar ist dagegen das Grundmuster dahinter — eine KI-Komponente, die bewertet statt zu handeln, deren Vorschläge doppelt deterministisch geprüft werden, und deren Entscheidungswege nachvollziehbar bleiben. Genau diese drei Eigenschaften — menschliche Aufsicht, Nachvollziehbarkeit, Eingriffsmöglichkeit — sind auch der Kern dessen, was regulierte KI-Systeme unter EU AI Act und ISO 42001 verlangen. In diesem Projekt ging es zuerst um ein privates Sicherheitsproblem; das Architekturmuster dahinter ist dasselbe, das auch in professionellem Kontext für vertrauenswürdige KI-Automatisierung trägt.