Lafine Systems Design · Technisches Dokument

RoamSwitch für Linux
Whitepaper zu Architektur und Sicherheit

Ein technisches Dokument, das erklärt, was RoamSwitch für Linux an seiner Berechtigungsgrenze tut. Es vermeidet Marketingsprache; Die Ansprüche können anhand des tatsächlichen Verhaltens des verteilten Pakets und des Selbsttests im Anhang überprüft werden.

Version v1.6.0 Geltungsbereich RoamSwitch for Linux 1.1.0 (Kernel-LPE-Härtung / eBPF-Laufzeitschutz / Millisekunden-SIGSTOP-Einfrieren angreifender Prozesse / Falco-Low-Overhead-Optimierung) Voraussetzungen systemd + nftables Veröffentlicht 2026-09-06

§1

RoamSwitch für Linux ist eine residente Netzwerksicherheits- und Systemdiagnoseanwendung, die das Zero-Trust-Netzwerkverteidigungsmodell von macOS RoamSwitch auf Linux (systemd + nftables-Umgebungen) bringt.

Diese Edition zielt auf Client-Maschinen (Workstations, Laptops, Einplatinencomputer) ab und setzt autonomes Verhalten voraus, das der Maschine folgt, wenn sie sich zwischen Netzwerken bewegt. Eine gehärtete Server-/Headless-Infrastruktur-Edition (RoamSwitch Server Edition – Always-on-Default-Deny, Critical-Path-FIM-Integrität, Remote-Webhooks und statische Richtliniendurchsetzung) wird als dedizierter Server-Build bereitgestellt.

Es identifiziert das verbundene WLAN/kabelgebundene Netzwerk anhand seiner Gateway-MAC-Adresse und schaltet selbstständig das aktive nftables-Firewallprofil um. Darüber hinaus bietet es drei Ebenen der Man-in-the-Middle-Verteidigung in nicht vertrauenswürdigen Netzwerken – einen VPN-Tunnel + Kill-Switch (WireGuard oder Tailscale, die primäre Verteidigung), eine präventive ARP/NDP-Sperre und ARP-Spoof-Erkennung – plus verhaltensbasierte Ransomware-Erkennung (Fanotify + Shannon-Entropie + Kanarienvögel), eine passive Link Guard, der Phishing-Verbindungen kennzeichnet oder blockiert (NFQUEUE + SNI), ein Port Anomaly Guard, BadUSB-Abwehr, Kernel Local Privilege Escalation (LPE) Preemption (Frag Gap CVE-2026-53362 Abschwächung), eBPF-Laufzeit-Bedrohungssensor-Integration (Falco/Tetragon) mit Sub-Second-Process-Freezing (SIGSTOP) und Air-Gap-Netzwerk isolation, eine 24-Punkte-Bewertung des Sicherheitszustands und ein integrierter Model Context Protocol (MCP)-Server.

Dieses Whitepaper beschreibt die Architektur, das Bedrohungsmodell und das Design jedes Abwehrmechanismus – und insbesondere, wie das Prinzip der „vollständig lokalen Verarbeitung; das Einzige, was von der Maschine gesendet wird, ist eine Anfrage nach signierten Erkennungsdaten, die nichts über Sie enthalten“, auf Codeebene garantiert wird. Es vermeidet Marketingsprache; Die Ansprüche können anhand des tatsächlichen Verhaltens des verteilten Pakets (Binärdatei) und der Selbstprüfung im Anhang überprüft werden. RoamSwitch für Linux ist proprietäre Freeware und sein Quellcode wird nicht veröffentlicht (§11).

Gestaltungsprinzipien
PrinzipDetailliert
Null-TelemetrieDas Produkt sendet nichts über Sie oder Ihre Maschine an irgendjemanden. Es gibt keine Telemetrie, Analyse, Absturzberichte, Nutzungsmetriken, Remote-Konfiguration oder Lizenzaktivierungsserver.
Nur Updates empfangenDie einzige ausgehende Anfrage, die das Produkt stellt, ist einmal täglich GET eines festen, signierten Manifests von lafine.net/updates/v1 – der Scam-Site-Liste für den Link Guard, der ClamAV-Signaturversion, der neuesten App-Version, den Paket-CVE-Maps (Homebrew/npm/PyPI/crates.io/RubyGems/Packagist/Go/Maven), der CVE-Map der aktiven Schwachstellenprüfung sowie der Liste beliebter npm-Paketnamen für die Typosquatting-Erkennung. Es enthält keine Abfragezeichenfolge, keine Cookies, keine identifizierenden Header und keine Informationen über Sie. updates.enabled = false schaltet es vollständig aus; Das Produkt läuft dann mit gebündelten Daten ohne externen Kontakt.
Vollständig lokale VerarbeitungJede Bewertung, Erkennung und Prüfung wird vollständig auf dem lokalen Computer ausgeführt. URL-Sicherheitsanalysen und geheime Scans werten ihre Eingaben heuristisch aus, ohne sie irgendwohin zu übertragen.
Geringeste BerechtigungPrivilegierte Vorgänge sind auf einen Root-Daemon beschränkt; Die Benutzeroberfläche, die CLI und der MCP-Server fordern sie über einen Unix-Domain-Socket-IPC an. Der Daemon öffnet keinen TCP/UDP-Socket; Der Link Guard verwendet nur den AF_NETLINK NFQUEUE-Urteilskanal (Kernel ↔ Userspace, kein Paketausgang).
Fehler geschlossenAir-Gap (Notfallisolierung) überlebt einen Daemon-Neustart und wird innerhalb von Sekunden wieder aktiviert, wenn seine Regeln extern gelöscht werden.
Offline-LizenzierungPro-/Business-Lizenzen werden ausschließlich durch die Ed25519-Signaturprüfung überprüft. Es erfolgt kein Aufruf an einen Aktivierungsserver.

§2

RoamSwitch für Linux zielt hauptsächlich auf Laptops/mobile Workstations ab, die zwischen nicht vertrauenswürdigen Netzwerken wechseln.

Angreifer im Visier

  • ___
  • Bösartige USB-Geräte (BadUSB) – Vortäuschen einer Tastatur und Einschleusen von Tastenanschlägen, bevor der Bildschirm gesperrt wird; unregistrierter USB-Massenspeicher zur Datenexfiltration oder zum Einschleusen von Schadsoftware.
  • Ransomware/dateilose Malware – Eindringen über eine heruntergeladene Datei und Massenverschlüsselung der Dokumente des Benutzers.
  • DNS-basiertes C2 und Phishing – Malware, die Namensauflösung nutzt, um einen C2-Server oder eine Phishing-Site zu erreichen.

Außerhalb des Gültigkeitsbereichs

  • Ein Angreifer, der bereits Wurzeln schlägt; Rootkits auf Kernel- oder Firmware-Ebene.
  • Angriffe, die die Festplatte physisch entfernen (die Domäne der vollständigen Festplattenverschlüsselung; RoamSwitch diagnostiziert, ob eine Verschlüsselung vorhanden ist, führt jedoch keine Verschlüsselung durch).
  • Proximity Wireless Sharing-Steuerung im AirDrop-Stil (kein Betriebssystem-nativer Mechanismus unter Linux; nicht unterstützt).

§3

RoamSwitch für Linux ist in Rust in sieben Kisten implementiert. Die gesamte Kommunikation mit dem Daemon erfolgt über /run/roamswitch/roamswitch.sock (einen Unix-Domänen-Socket). Es gibt keinen überwachenden TCP/UDP-Socket im Daemon, in der App oder im MCP-Server. Das Einzige, was die App binds hat, ist ein einzelner Unix-Socket, um eine zweite Instanz zu verhindern.

# Userspace (unprivilegiert)
roamswitch-app      GTK3 + AppIndicator-Tray
roamswitch (CLI)    Schlankes Shell-Frontend
roamswitch-mcp      stdio JSON-RPC (von AI-Clients gestartet)
      │
      │  AF_UNIX  /run/roamswitch/roamswitch.sock  (nur lokales IPC)
      ▼
roamswitch-daemon   root / systemd Type=notify + WatchdogSec=30
  · nftables-Profilsteuerung (inet roamswitch-Tabelle)
  · Sentinel-Schleife (Netzwerkerkennung & Profildurchsetzung)
  · VPN-Tunnel + Kill-Switch (WireGuard: wg-quick / roamswitch_vpn, Tailscale: roamswitch_ts)
  · Präventive ARP/NDP-Sperre (Neigh-Tabellen-Pin) / Erkennung
  · Port-Anomalie-Wächter (roamswitch_dev_guard)
  · fanotify-Wächter (Ransomware / Malware)
  · Link-Guard (NFQUEUE — inet roamswitch_linkguard)
  · Canary-Engine / Quarantäne-Vault
  · Kernel-LPE-Härtung (userns-Deaktivierung, Yama LSM)
  · eBPF-Laufzeitintegration (/var/run/roamswitch/events.sock)
  · Millisekunden-SIGSTOP-Einfrieren angreifender Prozesse & Air-Gap-Kopplung
  · USB-Überwachung (evdev EVIOCGRAB — BadUSB) / Freigabe-Warteschlange
  · Ed25519-Lizenzprüfung

roamswitch-updater  Ein eigenständiger systemd-Timer-Helfer. Das einzige Crate
                    mit HTTP/TLS-Stack (täglicher signierter Manifest-GET)
roamswitch-core     Reine Logikbibliothek (von allen Crates geteilt)
roamswitchkit       MCP-Client-SDK
Privilegientrennung
KomponentePrivilegRolle
roamswitch-daemonroot (systemd, Type=notify + WatchdogSec=30)Alle privilegierten Operationen. Steuert als einzelner Autor nftables, DNS und systemd-Einheiten.
Roamswitch-AppLogin-BenutzerGTK3 GUI + AppIndicator-Fach. Nur Konfigurationsbearbeitung und -visualisierung; Jede privilegierte Aktion durchläuft IPC.
Roamswitch (CLI)Login-BenutzerDünnes Shell-Frontend mit demselben IPC-Sockel.
roamswitch-mcpVom KI-Client erzeugter Prozessstdio JSON-RPC. Stellt schreibgeschützte Diagnoseinformationen bereit.

Die gesamte Kommunikation mit dem Daemon erfolgt über /run/roamswitch/roamswitch.sock (ein Verzeichnis mit 0700-äquivalenten Berechtigungen). Die Benutzerkonfiguration wird als Klartext-JSON unter ~/.config/roamswitch/config.json gespeichert. Der Daemon liest /home/*/.config/roamswitch/config.json mit Root-Rechten (er läuft mit HOME=/root). Die Konfiguration verlässt nie die Maschine; Es gibt keine Kontoregistrierung und keine Cloud-Synchronisierung.

§4

Die Sentinel-Schleife (standardmäßig 5-Sekunden-Zyklus) liest den MAC des Standard-Gateways von /proc/net/arp und ip neigh und gleicht ihn mit den registrierten MACs in config.json ab. MAC wird anstelle von SSID verwendet, da eine SSID auf einfache Weise gefälscht wird. Die beim Profilwechsel angezeigte Desktop-Benachrichtigung gibt den Grund für den Wechsel an („ein nicht registriertes Netzwerk“ / „Ihre Einstellung für das registrierte Netzwerk X“ / „keine Netzwerkverbindung“).

Profile
ProfilSituationnftables-Verhalten
offen (vertrauenswürdig)Ein registriertes Heim- oder Firmennetzwerkpolicy accept. Lokaler Verkehr erlaubt.
ausgeglichenNicht registriert, aber als relativ sicher konfiguriertEingehender Anruf standardmäßig verweigert. Nur etablierte Verbindungen und lo erlaubt; Exposition des exponierten Ports überwacht.
lockdown (Auswärtsschutz)Öffentliches WLAN / nicht registriertes NetzwerkAlle eingehenden Pakete wurden heimlich verworfen. Sharing-Dienste werden automatisch gestoppt (Opt-in).

Alle Regeln sind in einer dedizierten nftables-Tabelle mit dem Namen inet roamswitch isoliert und kollidieren nie mit anderen Firewall-Konfigurationen (ufw/firewalld). Der Ablauf der manuellen Überschreibung (1 Stunde / 2 Stunden / 4 Stunden / bis Mitternacht / bis zur Löschung / bis zur nächsten Trennung) wird vom Daemon als einzigem Autor erzwungen. Die GUI schreibt niemals einen Ablauf; Es liest den config.json, den der Daemon beim nächsten Tick neu geschrieben hat, erneut und spiegelt ihn in der Benutzeroberfläche wider (wodurch ein Konflikt vermieden wird).

Air-Gap (Notfall-Netzwerkisolierung)

Ein vollständiger Isolationsmodus, der policy drop (Priorität -100) sowohl für die Eingabe- als auch für die Ausgabe-Hooks der Tabelle inet roamswitch festlegt und nur lo zulässt.

  • Fail close – Beim Neustart des Daemons wird durch die Erkennung der Markierungsdatei (/run/roamswitch/airgap.active) die Isolation erneut sichergestellt.
  • Selbstheilend – Wenn ein externer Prozess die Regeln mit nft delete table löscht, wird die Sentinel-Schleife innerhalb von Sekunden erneut angewendet.
  • Automatischer Ablauf – 600 Sekunden nach der Aktivierung (identisch mit macOS maxAirGapDuration) wird die Isolation automatisch aufgehoben und verhindert so einen dauerhaften Verbindungsverlust durch einen Fehlklick.
table inet roamswitch {
    chain input {
        type filter hook input priority -100; policy <accept|drop>;
        iif "lo" accept
        ct state established,related accept
        # balanced/lockdown: alles andere droppen
    }
    chain output {
        type filter hook output priority -100; policy <accept|drop>;
        # policy drop nur während Air-Gap; nur lo und ct established sind erlaubt
    }
}

Passiver Link Guard (Erkennung von Phishing-Verbindungen)

Der Daemon überwacht, wohin ausgehende Verbindungen gehen, und markiert bzw. blockiert Verbindungen zu gefährlichen Hosts, wenn es sich um die eng gefasste Gruppe „eindeutig Phishing“ handelt. Es ersetzt den älteren Paste-a-URL-Checker, der ein Eingreifen des Benutzers erforderte.

  • Interception – eine dedizierte nftables-Tabelle inet roamswitch_linkguard bindet den Pfad output ein und stellt DNS-Fragen und neue/frühe Webverbindungen über NFQUEUE in die Warteschlange für einen Userspace-Worker. NFQUEUE ist ein Kernel↔Userspace-Urteilskanal über AF_NETLINK; Der Daemon bindet keinen Socket und generiert kein Paket. Die Warteschlangenregeln tragen bypass, sodass der Datenverkehr ungehindert durchläuft, wenn der Worker nicht ausgeführt wird (Air-Gap bleibt der separate harte Stopp).
  • Hostname-Quellen – der DNS-Fragename, der TLS-ClientHello SNI (damit ein Browser, der DoH verwendet, immer noch durch den Hostnamen abgedeckt wird) und der Klartext-HTTP-Header Host. Encrypted ClientHello (ECH), sobald es weit verbreitet ist, ist ein bekannter blinder Fleck.
  • Verdict (roamswitch-core, reine Logik) – ein Host wird anhand des lokalen Phishing-/Bedrohungs-Feeds und einer Reihe von Offline-Heuristiken überprüft: IDN/verwechselbares Homograph einer geschützten Marke, Markentoken in einer nicht offiziellen Domäne, Raw-IP-Host, TLD mit hohem Risiko.
Modus (linkGuard.mode)Feed-Hit oder MarkenhomografAndere verdächtige Signale
offnicht geprüftnicht geprüft
warnVerbindung hielt bis zu 8 s + eine Aufforderung zur Genehmigung/BlockierungNur Benachrichtigung
block (Standard)Verbindung getrennt + ein Zulassungsdialog (einmal pro Host)Nur Benachrichtigung

Nur ein Feed-Hit oder ein Markenhomograph-Host wird jemals hart blockiert; Alles, was die Heuristik allein kennzeichnet, ist eine Warnung. warn-Modus hält die Verbindung zu einem gefährlichen Host bis zu 8 Sekunden lang, während der Benutzer gefragt wird; Wenn die Sperre ohne Antwort abläuft, ist sie fail-closed (die Pakete werden verworfen und das Urteil wird nicht zwischengespeichert) – es erfolgt keine Antwort auf „Ist diese Site in Ordnung?“ darf nicht „Ja“ bedeuten und wird beim nächsten Versuch erneut aufgefordert. Im block-Modus werden eine Benachrichtigung und ein Zulassungsdialog pro Host angezeigt (ein Browser, der viele Verbindungen zum gleichen blockierten Host öffnet, überflutet keine Benachrichtigungen mehr). In einem gefährlichen Genehmigungsdialog ist die Standardschaltfläche „Weiter blockieren“ und „Zulassen“ ist die stille, nicht standardmäßige Option. Ein blockierter Host kann dauerhaft oder für fünf Minuten ab der Benachrichtigung (linkGuard.allowlist) zugelassen werden.

DNS wird überprüft, nie gefälscht: Eine DNS-Frage auf der Blockliste erzeugt nur eine Benachrichtigung; Die Durchsetzung erfolgt auf der nachfolgenden TCP-Verbindung, sodass RoamSwitch niemals eine synthetische DNS-Antwort einfügt. Der feed ist eine zusammengestellte Liste von Phishing-/Betrugsdomänen, die im Paket geliefert und vom täglichen Updater aktualisiert wird (§11). Auch wenn kein Feed vorhanden ist, werden die Offline-Heuristiken weiterhin ausgeführt. Die Ed25519-Signatur der Feeddatei wird vor dem Laden überprüft. Ein fehlerhafter oder fehlender Feed scheitert nur an der „Heuristik“ und niemals daran, „alles zuzulassen“.

VPN-Tunnel + Kill-Switch (die primäre MITM-Verteidigung)

Anti-MITM-Schutz, der nicht von der Integrität der Schicht 2 abhängt. In einem nicht vertrauenswürdigen Netzwerk macht ein ständig aktiver verschlüsselter Tunnel zu einem vertrauenswürdigen Endpunkt lokales ARP/NDP-Spoofing, Rogue-DHCP und passives Sniffing irrelevant – der Angreifer sieht nur Chiffretext. Die ARP/NDP-Sperre und die folgende Erkennung sind für diese Funktion zweitrangig.

Zwei Backends zur Auswahl – „WireGuard (Konfigurationsdatei)“ oder „Tailscale (Ausgangsknoten)“. RoamSwitch implementiert keine eigene Kryptografie und ist kein VPN-Anbieter. Beide Backends sind optionale Abhängigkeiten; Wenn nicht, zeigt die GUI den Installationsbefehl an.

(A) WireGuard-Backend

  • Es wird kein VPN-Server bereitgestellt – verwendet eine WireGuard-Konfiguration, die der Benutzer bereitstellt: eine .conf von einem Anbieter wie Mullvad, IVPN oder Proton VPN oder den eigenen WireGuard-Server des Benutzers (ein VPS oder ein Heimserver). Es wird keine Standardkonfiguration ausgeliefert.
  • Config – der Daemon validiert den .conf und speichert ihn unter /etc/wireguard/roamswitch.conf (0600, Schnittstelle roamswitch). Es kann nicht anderswo leben: Das AppArmor wg-quick-Profil unter Ubuntu 24.04+ / Debian 13 verweigert wg-quick das Lesen eines .conf außerhalb von /etc/wireguard/ – selbst als Root. Eine Split-Tunnel-Konfiguration (AllowedIPs, nicht 0.0.0.0/0 / ::/0) wird als „nicht der gesamte Datenverkehr ist geschützt“ gekennzeichnet.
  • Kill-switch – eine dedizierte nftables-Tabelle inet roamswitch_vpn (policy drop, beide Hooks) verwirft alles außer Loopback, der Tunnelschnittstelle (roamswitch, passend zu oifname), UDP zur angehefteten Endpunkt-IP, DHCP und ICMP. Es wird vor installiert, bevor der Tunnel eingerichtet wird (der Endpunkt wird zuerst über getent ahosts in feste IPs aufgelöst), sodass es kein Leckfenster gibt. Wenn wg-quick up fehlschlägt, bleibt der Kill-Switch aktiv.

(B) Tailscale-Backend

  • Für Benutzer, die Tailscale bereits ausführen. RoamSwitch führt nicht aus, führt tailscale up / login / install tailscaled aus – es liest tailscale status --json und führt tailscale set --exit-node=<node> / --exit-node= aus (klar).
  • Ein Exit-Knoten ist erforderlich – Anti-MITM-Schutz gilt nur bei einem Exit-Knoten, der den gesamten Datenverkehr weiterleitet. Wenn „Keine“ konfiguriert ist, ist der Schutz nicht aktiviert und die Benutzeroberfläche warnt „nicht geschützt“. Wenn der ausgewählte Knoten offline geht, wird der Schutz automatisch deaktiviert und der Benutzer benachrichtigt (die Weiterleitung aller Daten über einen toten Knoten würde die Verbindung blockieren).
  • Kill-switch (inet roamswitch_ts, policy drop) – Der Transport von Tailscale kann nicht an eine einzelne Endpunkt-IP (DERP-Relays + Roaming-Peers) angeheftet werden, daher ist dieser lockerer als der von WireGuard. Es ermöglicht: Loopback, die Tunnelschnittstelle (tailscale0), die CGNAT-Bereiche 100.64.0.0/10 und fd7a:115c:a1e0::/48, STUN (udp/3478), DERP (tcp/443), udp/41641, DHCP, ICMP, MagicDNS (100.100.100.100:53), aufgebaute Verbindungen. Alles andere – beliebiges UDP, DNS zu einem lokalen Resolver, SMB, mDNS, Klartext-HTTP, beliebiges TCP – wird gelöscht.
  • Kill-Switch-Vorbehalte – (1) breitere Zulassungsliste als das WireGuard-Backend (udp/3478, tcp/443, das gesamte CGNAT /10). (2) Ein On-Path-Angreifer sieht immer noch Metadaten (dass Tailscale verwendet wird, DERP-Region, Timing) und kann sie löschen/verzögern – kann die getunnelte Nutzlast jedoch nicht lesen. (3) Wenn direktes UDP blockiert ist, beruht die Vertraulichkeit auf Tailscales eigenem DERP TLS mit festem Zertifikat. (4) Wenn MagicDNS ausgeschaltet ist und ein lokaler Resolver vorhanden ist, bricht DNS im aktivierten Zustand ab (UI-Warnung). (5) Captive-Portale müssen vor der Aktivierung angemeldet sein.

Common – nur aktiviert, wenn vpn_on_untrusted_enabled und das Netzwerk nicht vertrauenswürdig ist (level != open). In einem vertrauenswürdigen Netzwerk wird der Exit-Knoten gelöscht und der Kill-Switch entfernt (niemals tailscale down). Standardmäßig deaktiviert, Opt-in. Der WireGuard-Tunnel/Tailscale-Transport geht an den eigenen VPN-Endpunkt/Tailnet des Benutzers und hat nichts mit der Infrastruktur von lafine zu tun (§9).

Präventive ARP/NDP-Sperre

Sobald ein nicht vertrauenswürdiges Netzwerk beitritt, werden die MAC-Adressen der On-Link-Infrastruktur, die ein MITM-Angreifer nachahmen müsste, in der Kernel-Nachbartabelle als PERMANENT (statische) Einträge verankert. Nach dem Fixieren ignoriert der Kernel gefälschte ARP-Antworten/Nachbar-Ankündigungen.

  • ___ IPv6-Nachbarn werden mit ip -6 neigh replace ... nud permanent gepinnt.
  • Vertrauenswürdige Netzwerke werden nie angeheftet – ein Neustart des Heimrouters kann also nicht dazu führen, dass der Benutzer ins Schwarze getroffen wird. Auf jedem Netzwerk-Switch neu angepinnt (TOFU); Bei der nächsten Wiederherstellung der Verbindung wird ein legitimes Failover erkannt. Angepinnte Einträge werden in /var/lib/roamswitch/arp_lock.json aufgezeichnet.
  • Standardmäßig aktiviert (Community Edition-Richtlinie; gleiche Aufschlüsselung wie beim macOS Pro-Build). Umschalten: gateway_arp_lock_enabled.

ARP-Spoof-Erkennung (notify-first)

Überwacht /proc/net/arp auf eine IP-Zuordnung zu mehreren MACs und auf eine verdächtige plötzliche Änderung des Gateway-MAC. Im Lockdown: Den gesamten Verkehr unterbrechen (Air-Gap) + benachrichtigen. Auf ausgeglichenen/vertrauenswürdigen Netzwerken: benachrichtigen ohne zu schneiden; Der Benutzer löst den Notfall-Air-Gap über RoamSwitch aus. Dies (a) verhindert, dass ein Angreifer ein einzelnes gefälschtes ARP-Paket als Waffe für einen selbstverschuldeten Ausfall nutzt, und (b) verhindert, dass ein Router-Neustart oder ein Access-Point-Roaming diesen versehentlich auslöst. Umschalten: arp_spoof_guard_enabled.

Port Anomaly Guard

Enthält automatisch einen Überwachungsport, der neu dem externen LAN zugänglich gemacht wird (eine Hintertür, C2 oder ein Entwicklungsserver/eine lokale LLM-API, die versehentlich an 0.0.0.0 gebunden ist). Das Urteil lautet baseline-relative, nicht „gefährliche Portnummer“. Bei der Aktivierung werden die aktuell verfügbar gemachten ausführbaren Dateien als „bekannt“ erlernt; Danach wird nur eine neu erschienene verfügbar gemachte ausführbare Datei markiert (Identität = der ausführbare Pfad, Snapshots normalisiert auf snap:<name>). Systemdämonen liegen außerhalb des Gültigkeitsbereichs. Die Eindämmung erfolgt über die Tabelle inet roamswitch_dev_guard: Legen Sie TCP von einem beliebigen Ort außer lo auf diesen Port ab – die Maschine selbst verwendet ihn weiterhin. Bei der automatischen Eindämmung wird sofort ein Desktop-Benachrichtigungs- und Bestätigungsdialogfeld („Diesen Port zulassen“/„Blockiert halten“) angezeigt, der eine permanente Whitelist mit einem Klick ermöglicht. Über den Port-Diagnosebildschirm kann jeder Port auch einzeln zugelassen und die Baseline neu erfasst werden. Standardmäßig aktiviert. Umschalten: port_anomaly_guard_enabled. Portiert von macOS.

Docker-Risikoerkennung & Firewall-Umgehungsschutz

Von Docker veröffentlichte Ports (-p) sind bekanntermaßen in der Lage, die Standard-Firewall des Hosts zu umgehen. Daher werden dauerhaft Prüfregeln in die DOCKER-USER-Chain eingefügt, die jeglichen nicht ausdrücklich erlaubten externen Datenverkehr blockieren (keine Konfiguration nötig, standardmäßig aktiv). Zusätzlich wird docker events in Echtzeit überwacht, um den Moment zu erkennen, in dem ein --privileged-Container startet oder /var/run/docker.sock eingebunden wird – ein Risiko für einen Container-Ausbruch – und Sie sofort zu benachrichtigen. Da dies eine riskante Konfiguration und keine bestätigte Kompromittierung anzeigt, erfolgt nur eine Benachrichtigung ohne automatische Blockierung.

Scanner für Geheimnisse & API-Schlüssel-Lecks

Erkennt API-Schlüssel (OpenAI, Anthropic, AWS, GitHub, Slack, Stripe u. a.) und SSH-Private-Keys mittels Shannon-Entropie und Mustererkennung. roamswitch audit-secrets <text|Datei|Verzeichnis> durchsucht Text und Dateien sowie rekursiv ein ganzes Verzeichnis (überspringt .git, node_modules u. Ä.; Dateien über 2 MB oder die binär wirken, werden übersprungen). Dieselbe Funktion steht auch über das MCP-Tool audit_secrets und die Python-SDK-Methode audit_secrets_directory() zur Verfügung. Inhalte werden niemals irgendwohin übertragen.

Erstmaliger Setup-Assistent und Bestätigungs-Benutzeroberfläche

Das Paket wird mit /etc/xdg/autostart/roamswitch.desktop geliefert, sodass der Setup-Assistent bei der ersten Anmeldung nach der Installation gestartet wird (danach ist er nur noch in der Taskleiste vorhanden). Beim Aktivieren/Deaktivieren eines Sicherheitswächters wird ein Bestätigungsdialogfeld für dieselben Wächter wie beim macOS-Build angezeigt (Portanomalie, ARP-Auto-Containment, USB-Speicher, BadUSB-Tastatur, Bluetooth). Entscheidungen zum Ereigniszeitpunkt (eine unbekannte USB-Tastatur, ein nicht registriertes USB-Laufwerk, ein unbekannter automatisch blockierter Port, ein Notfall-Air-Gap) werden als modale Dialoge dargestellt.

§5

Shannon-Entropie-Burst-Erkennung · YARA-Scanning

Schreibereignisse werden per PID verfolgt. Wenn ein einzelner Prozess innerhalb von 5 Sekunden 20 oder mehr distinct Dateien mit einer Entropie ≥ 7,92 erstellt, wird dies als Ransomware-Massenverschlüsselung behandelt: Der Prozess wird mit SIGSTOP eingefroren und Air-Gap wird ausgelöst.

  • Vollständige Trennung von YARA-Scanning und Entropie-Tracking – Die YARA-Malware-Inspektion wird ausnahmslos auf alle geschriebenen Dateien angewendet (Zero Bypass, Scanning ~/.cache/, node_modules/, /tmp/ und Archive). Unterdessen schließt die Ransomware-Entropie-Burst-Analyse natürlich komprimierte Formate (.zip, .tgz, .tar.gz, .gz, .png, .jpg, .mp4, .wasm) und verifizierte Paketmanager (npm, npx, cargo, rustc, dpkg, apt, tar), der in Build-/Cache-Bäumen arbeitet, um falsch positive SIGSTOP-Einfrierungen zu verhindern.
  • Wiederholte Überschreibungen derselben Datei (z. B. die drei Durchläufe von shred) zählen als ein Ereignis.
  • ___

Kanarienvögel (Köderdateien)

Decoy-Dateien werden in den Ordnern „Dokumente“, „Desktop“, „Downloads“ und „Bilder“ des Benutzers sowie in einem speziellen Verzeichnis abgelegt und in einem 3-Sekunden-Zyklus mit einer SHA-256-Basislinie verglichen. Jede Umbenennung, Löschung, Kürzung oder Inhaltsänderung löst Air-Gap sofort aus. Da der Daemon als Root ausgeführt wird, zählt er /home/* auf und stellt Canaries in den Verzeichnissen jedes echten Benutzers bereit.

Fanotify-Überwachung · Quarantäne-Tresor · ClamAV

  • Der Daemon überwacht /home, /var/tmp, /dev/shm auf Mount-Ebene und / auf Dateisystemebene über FAN_CLASS_CONTENT (Fallback FAN_CLASS_NOTIF).
  • Notify-first, keine stille Quarantäne. Ein bloßer YARA-/ClamAV-Treffer wird nie stillschweigend unter Quarantäne gestellt oder FAN_DENY'd. Eine echte Signatur löst eine modale Anfrage in /run/roamswitch/approvals.json (Quarantäne/Zulassen/Später) aus; Nichts gelangt in den Tresor, bis der Benutzer dies bestätigt. Nur ein tatsächlicher execve ist FAN_DENY und nur, wenn pre_exec_blocking_enabled aktiviert ist. Die Genehmigung läuft bei Fail-Open ab.
  • Testsignaturen wie EICAR werden nur im Verlauf erfasst – die branchenübliche Testzeichenfolge löst keine Benachrichtigung aus, sondern erzeugt nur einen Eintrag im Benachrichtigungsverlauf, und wird weder im Fanotify-Guard noch im Download-Guard unter Quarantäne gestellt oder blockiert.
  • Eine vom Benutzer konfigurierte scan_exclusions-Pfadliste (absolute Pfade, rekursiv angewendet; sie fasst das alte clamav_exclusions zusammen) wird sowohl von den YARA- als auch den ClamAV-Scannern berücksichtigt. „Zulassen“ in der Eingabeaufforderung und „Wiederherstellen“ in der Registerkarte „Quarantäne“ werden beide daran angehängt, sodass dieselbe Datei nicht erneut markiert wird.
  • Erkannte und bestätigte echte Malware wird nach ~/.local/share/roamswitch/quarantine/ verschoben. Der Tresor ist 0700; Jedes Beispiel ist 0400 (schreibgeschützt, nicht ausführbar). Bei der Wiederherstellung kehrt die Datei zu 0644 zurück und wird an den Eigentümer des Zielverzeichnisses übertragen.
  • Die Berechtigungsereignisschleife führt keine Dateisystem-E/A durch – die Konfiguration wird von einem dedizierten Hintergrundthread in einen Mutex<GuardConfig>-Snapshot gelesen; Hot-Path-Accessoren sperren und kopieren einfach. Dies ist eine Designinvariante: Das Blockieren auf FAN_OPEN_PERM würde die Maschine einfrieren.
  • Wenn ClamAV vorhanden ist, werden neu heruntergeladene ausführbare Dateien (.sh, .deb, .elf, …) und gefährliche KI-Modelle (.pkl, .pt) anhand der lokalen Datenbank gescannt. ClamAV ist eine optionale Abhängigkeit; Die anderen Abwehrmechanismen funktionieren auch ohne. Bei der Installation ruft der tägliche Updater (§11) freshclam auf, damit die Signaturdatenbank aktuell bleibt.

Kernel Local Privilege Escalation (LPE) Preemption & Hardening

Wenn ein Angreifer oder eine Schadsoftware unprivilegierten Benutzern Zugang verschafft, verhindert die Tiefenverteidigung, dass Schwachstellen im Linux-Kernel ausgenutzt werden, um Root-Rechte zu erlangen.

  • ___ RoamSwitch bewertet und erzwingt user.max_user_namespaces = 0 (oder kernel.unprivileged_userns_clone = 0) über einen One-Click-Hardening- oder Setup-Assistenten. Dies schließt die Angriffsfläche für unprivilegierte Prozesse ab, selbst bei ungepatchten Kernel-Zero-Days.
  • Yama LSM-Speicherschutz – Durch die Durchsetzung von kernel.yama.ptrace_scope = 1 (oder 2) wird verhindert, dass nicht autorisierte Prozesse über ptrace eine Verbindung herstellen oder über /proc/$pid/mem den Speicher lesen, wodurch Browsersitzungen und private GPG/SSH-Schlüssel geschützt werden.
  • Core Dump Suppression – Die Einstellung fs.suid_dumpable = 0 verhindert, dass abstürzende sensible Prozesse Klartext-Speicherauszüge auf die Festplatte schreiben.
  • __

eBPF-Laufzeit-Bedrohungssensor und autonomes Einfrieren von Prozessen (Desktop eBPF Guard)

Der RoamSwitch-Client-Daemon umfasst eine native Integration mit modernen eBPF-Sensoren im Kernel (Falco / Tetragon / BTF).

# eBPF-Laufzeit-Bedrohungserkennung & autonomer Abwehrfluss
[Bösartiger Prozess (LPE/Malware)]
    │ Illegale Syscall-Ausführung (Frag-Gap-Ausnutzungsversuch)
    ▼
[Linux-Kernel (eBPF-Sonde)]
    │ eBPF-Ringpuffer (kompaktes 2-MB-Design)
    ▼
[Falco (RoamSwitch Optimized)]
    │ Direkter UNIX-Socket im Arbeitsspeicher (/var/run/roamswitch/events.sock)
    ▼
[roamswitch-daemon (root)]
    ├─► ① Millisekunden-Einfrieren des angreifenden Prozesses: kill(pid, SIGSTOP) [Zustand: Ts]
    ├─► ② Vollständige Netzwerktrennung: nftables input/output drop [Air-Gap aktiviert]
    └─► ③ Desktop-Notfallwarnung: GTK3-Modal & libnotify-Benachrichtigung
  • Direct UNIX Domain Socket IPC (/var/run/roamswitch/events.sock) – Warnungen von Falco oder anderen eBPF-Sensoren werden direkt über einen speicherinternen UNIX-Socket empfangen, ohne in Festplattenprotokolle zu schreiben, wodurch Festplatten-E/A-Latenz vermieden wird und Antwortübergaben in weniger als einer Sekunde möglich sind.
  • ___ löst eine sofortige Desktop-Benachrichtigung aus.
  • Overhead-arme Desktop-Abstimmung & Schutz vor Log-Aufblähung (RoamSwitch Optimized) — um Akkuverbrauch, CPU-Last und Speicherplatzerschöpfung auf Laptops und Workstations einzudämmen, liegt ein optimiertes Profil (99-roamswitch-optimized.yaml) bei:
    • Schweregradfilterung (priority: warning) – Filtert 95 % der routinemäßigen Hinweis-/Infoereignisse heraus.
    • Kernel Early Drop (drop_failed_exit: true) – Verwirft fehlgeschlagene Systemaufruf-Exits direkt im Kernel-Treiber, wodurch Kontextwechsel und CPU-Last halbiert werden.
    • Kompakter Ringpuffer (cpus_for_each_buffer: 2) – Reduziert die Größe des Ringpuffers auf 2 MB, wobei der residente RAM bei 30–50 MB und die CPU-Auslastung bei <1 % bleibt.
    • Obligatorische Protokollrotationsobergrenze (/etc/logrotate.d/roamswitch-falco) – Erzwingt eine strikte Obergrenze von 50 MB mit komprimierter Rotation der 7. Generation.
  • Hybrid Resilience (Standalone vs. eBPF-Modus) – Ohne Falco schützt RoamSwitch das System über Kernel sysctl (user.max_user_namespaces = 0), nftables-Roaming-Profile, Fanotify-Entropie-Tracking und Canaries. Mit Falco fängt die tief im Kernel integrierte Verhaltenstelemetrie fortgeschrittene Zero-Day-Exploits ab und friert Angreiferprozesse in Echtzeit ein.

§6

USB-Ereignisse werden überwacht; Tastaturgeräte (HID) und USB-Massenspeicher werden verfolgt. Standardmäßig deaktiviert (Auslieferung isEnabled = false, passend zu macOS USBKeyboardGuard / USBStorageGuard). Melden Sie sich über den Erstausführungsassistenten oder die Registerkarte „USB“ an. Beim Aktivieren wird ein Bestätigungsdialog angezeigt.

Rogue-USB-Tastatur (Tastenanschlag-Injektion)

  • Keine Deautorisierung physischer Ports auf Kernel-Ebene (wichtig). Die alte Implementierung (≤1.0.6) schrieb 0 bis /sys/bus/usb/devices/*/authorized für eine nicht registrierte Tastatur und trennte sie physisch. Bei einem kombinierten Tastatur- und Mausempfänger (üblich bei einem Raspberry Pi oder einem Mini-PC) wird dadurch auch die Maus getrennt, wodurch ein Computer ohne eingebauten Eingang gesperrt wird. RoamSwitch verweigert jetzt strikt das Schreiben von authorized=0 auf ein Gerät, das eine HID-Schnittstelle (bInterfaceClass 03) bereitstellt, und der Daemon autorisiert jedes authorized==0 HID-Gerät beim Start erneut, um Maschinen selbst zu reparieren, die durch eine frühere Version blockiert wurden.
  • ___ Der Mausknoten bleibt unberührt. Dies ist das Linux-Äquivalent von macOS CGEventTap; Das Gerät bleibt mit Strom versorgt.
  • Sicherheit – Der Zugriff erfolgt nur, wenn eine andere Tastatur zum Tippen vorhanden ist (eine integrierte oder eine zugelassene und angeschlossene USB-Tastatur), sodass ein Computer mit einer einzigen neuen Tastatur niemals gesperrt wird.
  • Genehmigungsdialog – neben der Übernahme wird eine Genehmigungsanfrage in /run/roamswitch/approvals.json in die Warteschlange gestellt und die GUI zeigt ein Modal (Zulassen/Verweigern) an. Zulassen, setzt das Gerät auf die Whitelist und gibt den Zugriff frei. Fail-open nach 3 Minuten.

Schurken-USB-Massenspeicher

Wenn ein nicht registriertes USB-Massenspeichergerät (keine HID-Schnittstelle) eingesteckt wird, der Schutz aktiviert ist und das Netzwerk nicht vertrauenswürdig bzw. gesperrt ist, wird es mit authorized=0 (sicher für ein Nicht-HID-Gerät) gehalten und ein Genehmigungsdialog angezeigt. Erneute Autorisierungen und Whitelists zulassen; Deny hält es aufrecht. Der macOS-Build wurde in 1.7.4 an dieses Modell „Schreibgeschützt halten + Genehmigungsaufforderung“ angepasst.

Identifikation und Bestandsschutz

HID wird aus bInterfaceClass == "03" und der Zeile Handlers= in /proc/bus/input/devices ermittelt. Ein Kombinationsempfänger (ein VID:PID mit sowohl einem kbd- als auch einem Mausabschnitt) wird durch VID:PID zusammengeführt. Eine nicht registrierte Tastatur, die beim Daemon-Start vorhanden ist, ist Großvaterschutz; Geschnappt wird lediglich eine nachträglich hot-plugged Tastatur.

§7

Der LinuxHealthChecker in roamswitch-core bewertet 24 Elemente und ergibt eine Punktzahl von 0–100, eine A–F-Note und Ratschläge pro Element. Im GTK-Dashboard, der CLI (roamswitch status) und dem MCP (get_security_report), werden Titel, Details und Empfehlung aller 24 Elemente in der Sprache des Benutzers (10 Sprachen) angezeigt.

Bewertungskategorien
KategorieBeispielartikel
Festplatte / BootLUKS/dm-crypt-Verschlüsselung, UEFI Secure Boot
ZugangskontrolleLSM (AppArmor / SELinux), SSH / Sudo-Konfigurationsprüfung
Kernhärtungsysctl-Härtung, Deaktivierung unprivilegierter Benutzer-Namespaces (Frag Gap-Mitigation), Core-Dump-Kontrolle, Noexec auf /tmp und /dev/shm
AktualisierungenAutomatische Konfiguration von Sicherheitsupdates
NetzwerkARP-Spoofing-Überwachung, Gateway-ARP/NDP-Sperrstatus, Prüfung exponierter Ports, Stärke der WLAN-Verschlüsselung
SchadsoftwareClamAV / fanotify (überprüft auch, dass der Guard tatsächlich läuft) / Entropieüberwachung / noexec
BrowserFirefox / Chrome / Chromium Safe Browsing-Einstellungen
DNS / USBBedrohungsschutz-DNS, Zero-Trust-Status des USB-Busses

Jede Prüfung basiert auf dem Lesen lokaler Dateien und der Befehlsausgabe (getenforce, mokutil, resolvectl, ss, …). Es gibt keinerlei externe Abfrage.

Vertrauensbewusste Einstufung. Die Härtung, die RoamSwitch absichtlich nicht in einem vertrauenswürdigen (Heim-)Netzwerk anwendet – Fixierung des Gateway-MAC als PERMANENT (was das LAN bei einem Neustart des Routers blockieren würde), erneutes Mounten von /tmp und /dev/shm noexec (was Paket-Builds und einige Installationsprogramme unterbricht) und Bedrohungsschutz-DNS im Standardbereich – wird grün mit angezeigt eine Erklärung anstelle eines roten „nicht gehärtet“ und weist darauf hin, dass es automatisch auf ein nicht vertrauenswürdiges Netzwerk angewendet wird. Die Laufzeitwahrheit kommt von /run/roamswitch/state.json (active_level / network_trusted / fanotify_ready), die in jedem Zyklus vom Daemon geschrieben wird. Das Fanotify-Element prüft, ob der Guard tatsächlich markiert ist und ausgeführt wird (/run/roamswitch/fanotify.ready), und nicht nur, ob der Kernel ihn unterstützt. Das Element „exponierte Ports“ liest das Live-Profil des Daemons (der MCP-Hardcode ist weg).

___ Der Daemon wird als Root ausgeführt, sodass bis auf den Daemon-Neustart kein pkexec erforderlich ist.

§8

roamswitch-mcp spricht JSON-RPC über stdio und wird von KI-Clients wie Claude Desktop, Cursor und Antigravity erzeugt. Jedes Tool ist schreibgeschützt und vollständig lokal.

Freiliegende Werkzeuge
WerkzeugZweck
get_security_report24-Punkte-Bewertung, Punktzahl, Empfehlungen
get_exposed_portsexponierte Ports und deren Firewall-Blockierungsstatus
get_guard_statusaktuelle Schutzstufe und Status des Verteidigungsmoduls
audit_url_safetyHeuristische URL-Sicherheitsanalyse (ruft das Ziel nicht ab)
audit_secretsErkennung von API-Schlüsseln/Geheimnissen im Text (übermittelt den Text nicht)
audit_security_logsAggregation lokaler Journal-/Authentifizierungsprotokolle
get_quarantine_status / get_canary_statusQuarantäne und Kanarienstaat
get_app_helpSuche in der integrierten Wissensdatenbank
run_active_vuln_scanNicht-destruktive, ausschließlich auf 127.0.0.1 beschränkte aktive Schwachstellenprüfung. Das einzige Tool, das das Netzwerk nutzt — standardmäßig deaktiviert und nur nach Zustimmung in den Einstellungen.
run_package_cve_scanGleicht installierte Pakete (Mac: Homebrew / Linux: dpkg, dnf, zypper, pacman) mit einer lokalen CVE-Zuordnung ab. Es findet überhaupt keine Netzwerkkommunikation statt.
run_package_cve_scan_languagesGleicht Abhängigkeits-Lockfiles für npm, PyPI, crates.io, RubyGems, Packagist, Go und Maven mit derselben lokalen CVE-Zuordnung ab. Es findet überhaupt keine Netzwerkkommunikation statt.
verify_fimBerechnet die Hashes von rund 150 kritischen Systemdateien neu und vergleicht sie mit der gespeicherten Baseline.
get_file_scan_guard_statusLiefert die Konfiguration des File Scan Guard (ClamAV) und den Zustand des zugehörigen Quarantäne-Tresors.
get_port_anomaly_incidentsLiefert den Baseline-Zustand des Port-Anomalie-Schutzes, aktuell automatisch blockierte Ports und bis zu die 50 jüngsten Vorfälle. Die Antwort weist ausdrücklich darauf hin, dass die aktuell blockierten Ports eine zeitstempellose Momentaufnahme sind, die sich von der zeitgestempelten Vorfallshistorie unterscheidet.
get_ebpf_incidentsLiefert den aktuellen Isolationsstatus des eBPF-Runtime-Guards und die Vorfallshistorie dahinter.
get_resource_guard_incidentsLiefert die Historie des Ressourcen- und Prozessanomalie-Schutzes (Speicherlecks, Crash-Loops) samt Konfidenzstufe.
get_notification_historyGibt den Verlauf der von RoamSwitch gesendeten Benachrichtigungen (Sicherheitslog-Auffälligkeiten, ClickFix-Erkennungen u. a.) der letzten 7 Tage zurück, neueste zuerst.
get_incident_timelineFührt die Erkennungen aller Schutzmodule zu einer chronologischen Zeitleiste zusammen — mit Prozessabstammung und MITRE-ATT&CK-Tags (experimentell).

Der MCP-Server öffnet selbst kein Netzwerk; er verbindet sich über roamswitchkit mit dem Unix-Socket des Daemons oder ruft die Logik von roamswitch-core direkt auf. Die einzige Ausnahme ist das standardmäßig deaktivierte run_active_vuln_scan, das nicht-destruktive Prüfanfragen an 127.0.0.1 — also an den Host selbst — sendet.

Eine bei einer Fire-Drill-Übung mit einem lokalen LLM entdeckte und behobene Fehlzuordnung
Im September 2026 führten wir mit diesem MCP-Server eine Übung durch, bei der ein lokales LLM (Qwen 3.8 27B) einen Vorfall untersuchen sollte, und entdeckten dabei einen Fall, in dem das Modell die von get_port_anomaly_incidents zurückgegebenen Daten falsch interpretierte und eine unabhängige, ältere Portsperrung in die Erzählung eines laufenden Vorfalls einflocht. Die Ursache: Eine zeitstempellose Momentaufnahme der aktuell blockierten Ports wurde in derselben Antwort wie die echte, zeitgestempelte Vorfallshistorie zurückgegeben, ohne dass etwas zwischen beiden unterschied. Die Korrektur fügt explizite Hinweisfelder hinzu, die kennzeichnen, welches Feld eine Zeitleiste und welches eine Momentaufnahme ist. Beim erneuten Ausführen desselben Szenarios mit demselben Modell zitierte dieses den Wortlaut des Hinweises und lehnte es ausdrücklich ab, den alten Port dem aktuellen Vorfall zuzuordnen. Die Wirksamkeit der Korrektur wurde sowohl durch einen automatisierten Regressionstest als auch durch die erneute Ausführung mit dem echten lokalen LLM bestätigt.

§9

RoamSwitch für Linux stellt genau eine Art ausgehender Anfrage dar: die GET eines signierten Manifests des täglichen Updaters (§11). Alles andere – jede Bewertung, Erkennung und jedes Audit – wird lokal abgeschlossen. RoamSwitch für Linux ist proprietäre Freeware und seine Quelle ist nicht veröffentlicht, daher wurden die folgenden Inspektionen von lafine durchgeführt; Die Ergebnisse sind in 9.2 enthalten und die Schritte in Anhang C sind allein aus dem verteilten Paket reproduzierbar.

9.1 Prüfmethode

  1. Crate-Isolation – ein HTTP/TLS-Stack ist nur in einer Kiste, roamswitch-updater zulässig, der die eigenständige, zeitgesteuerte Updater-Binärdatei erstellt. scripts/audit_no_network.sh (in CI ausgeführt, Gating) schlägt beim Build fehl, wenn roamswitch-core, roamswitch-daemon, roamswitch-app, roamswitch-mcp oder roamswitchkit reqwest / hyper / ureq / rustls / native-tls / openssl einzieht oder wenn eine .rs-Datei außerhalb von roamswitch-updater TcpStream / verwendet TcpListener / UdpSocket / to_socket_addrs / lookup_host.
  2. Abhängigkeitsbauminspektion – der vollständige Cargo.lock wurde nach Telemetrie-/Analyse-/Absturzberichts-SDKs durchsucht (sentry, opentelemetry, …).
  3. __
  4. Subprocess enumeration – jede Command::new(...)-Aufrufseite wurde überprüft.

9.2 Ergebnisse

Auditergebnisse
PrüfungselementErgebnis
HTTP/TLS-StackNur in roamswitch-updater (ureq + rustls) vorhanden. Nicht in core / daemon / app / mcp / kit
Telemetrie-/Analyse-/Absturzberichts-SDKNicht vorhanden nirgendwo
TcpStream / TcpListener / UdpSocketKein einziges Vorkommen außerhalb von roamswitch-updater
Verwendete Socket-APIsAF_UNIX (lokaler IPC); AF_NETLINK (NFQUEUE-Urteilskanal, nftables und ip neigh-Steuerung – kein Ausgang); AF_INET nur in roamswitch-updater. Der VPN-Tunnel (§4) ist, wenn er aktiviert ist, wg-quick (WireGuard-Backend) oder tailscaled (Tailscale-Backend) – ein Unterprozess, nicht der Daemon – und sendet Datenverkehr an den eigenen Endpunkt/Tailnet des Benutzers
Täglicher UpdaterEin GET https://lafine.net/updates/v1/manifest pro ~24 Stunden. Keine Abfragezeichenfolge, keine Cookies, generischer Benutzeragent, keine Kennungen. Alle Nutzlasten Ed25519-verifiziert. updates.enabled = false deaktiviert es vollständig
VPN-Tunnel (§4)Standardmäßig deaktiviert. Wenn diese Option aktiviert ist, erstellt wg-quick einen WireGuard-Tunnel zum Endpunkt im eigenen .conf des Benutzers – ohne Bezug zu lafine. Auflösung des Endpunkt-Hostnamens über getent ahosts (glibc NSS), nicht über eine Rust-Socket-API
LizenzaktivierungOffline-Ed25519-Signaturüberprüfung. Keine Kommunikation mit einem Aktivierungsserver
Fazit

RoamSwitch für Linux initiiert genau eine Art ausgehender Anfrage – einen täglichen, reinen Empfangs-Download signierter Erkennungsdaten, der keine Informationen über den Benutzer oder die Maschine enthält. Nichts anderes im Produkt kontaktiert jemals einen externen Server.

9.3 Vollständige Liste der nach außen gerichteten Operationen

Jeder Vorgang, der dazu führen könnte, dass ein Paket direkt oder indirekt den lokalen Computer verlässt:

#BetriebZielAuslöserWas wird gesendet?
1Daily updaterGET /v1/manifest und die Feed-Datei, wenn sich ihre Version geändert hatlafine.net/updates/v1 (CDN)systemd Timer, einmal alle ~24 Stunden mit einer zufälligen Verzögerung. Aus, wenn updates.enabled = false oder roamswitch-update.timer deaktiviert istein einfaches HTTPS-GET: keine Abfragezeichenfolge, keine Cookies, generisch User-Agent, nichts über den Benutzer oder die Maschine. Erhält ein signiertes Manifest + Feed
1afreshclam (ClamAVs eigener Updater), der vom täglichen Updater aufgerufen wird, wenn ClamAV installiert wirdDas CDN des ClamAV-Projektsals Teil von #1Verkehr von ClamAV selbst (ein separates Projekt); RoamSwitch startet es nur
2ping -c1 -W1 das LAN-Standard-Gateway (link-local)um den ARP-Cache während der ARP-Spoofing-Erkennung zu aktualisierenNur ICMP-Echo-Anfrage. Keine DNS-Auflösung, keine Nutzlast
3Starten des Systembrowsers (xdg-open)https://lafine.net/... (Produktseite)nur wenn der Benutzer auf eine Schaltfläche wie „Versionshinweise öffnen“ klicktder RoamSwitch-Prozess öffnet keinen Socket; Es übergibt die URL an den Betriebssystembrowser
4lösenctl dns — (es findet keine Kommunikation statt)Bedrohungsschutz-DNS in einem nicht vertrauenswürdigen Netzwerk (Opt-in). <iface> ist jede physische Netzwerkkarte, die eine Standardroute trägt (kabelgebunden und drahtlos gleichzeitig; lo / tailscale* / wg* / docker* / veth* ausgeschlossen); wird auch auf ein vertrauenswürdiges Netzwerk angewendet, wenn dns_scope = always_on; jeden Sentinel-Zyklus in Einklang gebrachtes ändert nur die OS-Resolver-Einstellung; RoamSwitch selbst sendet keine DNS-Anfrage
5Paketmanager-Updatesdie apt/dnf/zypper-Repositorys der Distributionwenn der Benutzer apt upgrade usw. ausführt oder auf die GUI-Schaltfläche „Jetzt aktualisieren“ klickt (wodurch apt-get / dnf / zypper über pkexec ausgeführt wird)RoamSwitch liest die lokale apt-cache policy-Ausgabe und startet den Paketmanager; hat nichts mit lafine zu tun
6VPN-Tunnel (§4) – WireGuard-Backend: Der Tunnel wg-quick baut / Tailscale-Backend: tailscale set --exit-node leitet den gesamten Datenverkehr über den Ausgangsknotender eigene VPN-Endpunkt/Tailnet des Benutzers (WireGuard: der Endpunkt im .conf; Tailscale: der ausgewählte Exit-Knoten und die DERP-Relays)wenn vpn_on_untrusted_enabled und das Netzwerk nicht vertrauenswürdig ist. Standardmäßig deaktiviertverschlüsselter WireGuard/Tailscale-Verkehr; Das Ziel ist der eigene VPN-Server/Tailnet des Benutzers, unabhängig von Lafine. WireGuard-Endpunktauflösung über getent ahosts (glibc NSS); Tailscale wird von tailscaled gesteuert (ein separater Prozess)

Alle anderen RoamSwitch-Funktionen – nftables-Steuerung, ARP/NDP-Pinning der Nachbartabelle (ip neigh, kein Paketausgang), Link Guard (NFQUEUE, nur AF_NETLINK), Port-Scanning (Parsen der ss-Ausgabe), ARP-Überwachung, Zustandsbewertung, Entropieüberwachung, Kanarienvögel, Fanotify, USB-Überwachung (evdev grab), Quarantäne, Protokollprüfung, URL- und geheime Prüfung – werden nur mit lokaler Datei abgeschlossen Lesevorgänge und Analyse der Unterprozessausgabe. Der §4-VPN-Tunnel ist die einzige „ausgehende Kommunikation, die der Benutzer explizit konfiguriert hat“, und sein Ziel ist der eigene VPN-Server des Benutzers – es fließen keine Daten zur Lafine-Infrastruktur.

§10

  • Kein Konto – keine Benutzerregistrierung, kein Login, keine E-Mail-Adresse jemals angefordert.
  • Konfiguration ist nur lokal – wird im Klartext unter ~/.config/roamswitch/config.json gespeichert und verlässt den Computer nie. Es gibt keine Cloud-Synchronisierung.
  • Bewertungsergebnisse sind nur lokal – Sicherheitsberichte und Protokollprüfungsergebnisse werden nur auf dem Bildschirm angezeigt und, wenn der Benutzer dies wünscht, in eine lokale Datei exportiert.
  • Lizenzschlüssel werden offline überprüft – Pro-/Business-Lizenztoken enthalten eine Ed25519-Signatur und werden mit einem öffentlichen Schlüssel überprüft. Es erfolgt keine Abfrage an einen Lafine-Server.
  • Keine Absturzmeldung – im Panikfall wird nirgendwo ein Stack-Trace gesendet.
  • Der tägliche Updater sendet nichts über Sie – keine Abfragezeichenfolge, keine Cookies, keine Geräte- oder Installationskennung, ein generisches User-Agent. Es handelt sich um einen Download, nicht um einen Bericht. Link-Guard-Urteile, blockierte Hosts und Scan-Ergebnisse werden nur in die lokale Aktivitätsansicht/das Journal geschrieben und niemals übertragen.

§11

Editionen
AuflageFürPreisLizenz
Community EditionPrivater Linux-GebrauchKostenlosProprietäre Freeware (gebündelte EULA)
Business (geplant)Flottenmanagement, Richtlinienverteilung, unterzeichnete interne Vereinbarung, SLA für OrganisationenBezahltKommerzielle Lizenz. Gleiches binäres + Tier-Gate

Käufer von macOS RoamSwitch Pro Lifetime erhalten Business-Funktionen kostenlos auf ihren eigenen Linux-Rechnern.

Vertrieb und Lieferkette

KanalDetailliert
APThttps://lafine.net/apt (stable main). Release signiert mit einem RSA-4096-Schlüssel
U/minhttps://lafine.net/rpm (getrenntes Fedora / openSUSE). repomd.xml GPG-signiert
AURroamswitch-bin (ruft den GitHub Releases-Tarball ab und überprüft sha256)
Tarballamd64 / aarch64 .tar.gz + .sha256 auf GitHub-Releases
  • Pinned glibc floor – Release-Binärdateien werden in einem Debian 12-Container (Bookworm, Glibc 2.36) erstellt. Dies verhindert Nichtübereinstimmungen der Symbolversionen unter Debian 12 / Ubuntu 22.04 und höher. Ein CI-Schritt „Verify glibc floor“ schlägt beim Build fehl, wenn eine Abhängigkeit eingeführt wird, die mehr als 2.36 erfordert.
  • Signierungsschlüsselverwaltung – der private Schlüssel für die Signierung des apt/rpm-Repositorys ist nur in einem verschlüsselten GitHub Actions-Geheimnis vorhanden; nur der öffentliche Schlüssel wird an das Repository übergeben.

11.3 Der tägliche Updater

roamswitch-updater ist eine eigenständige Binärdatei, die von einem systemd-Timer ausgeführt wird (roamswitch-update.timer, OnCalendar=daily mit einer zufälligen Verzögerung von 3 Stunden und Persistent=true). Es ist die einzige Komponente, die das Netzwerk erreicht. Jeder Lauf:

  1. GET https://lafine.net/updates/v1/manifest und seine abgetrennte Signatur.
  2. Überprüfen Sie die Ed25519-Signatur des Manifests mit einem dedizierten Bedrohungs-Feed-Signaturschlüssel – getrennt vom Sparkle-App-Update-Schlüssel. Der Feed wird täglich vom serverseitigen CI neu signiert, sodass der private Schlüssel in einem CI-Geheimnis gespeichert ist. Wenn man es auf den Feed beschränkt, bedeutet ein Leck, dass ein Angreifer nur eine fehlerhafte Blocklist bereitstellen kann (Sinkhole/Warnung – kein Codepfad, kein App-Update-Pfad). Der App-Update-Signaturschlüssel verlässt niemals den macOS-Schlüsselbund. Ein Manifest, das nicht überprüft wird, wird verworfen – der Updater greift niemals auf nicht signierte Daten zurück.
  3. Wenn sich die Bedrohungs-Feed-Version geändert hat, laden Sie den Feed herunter, überprüfen Sie seine SHA-256- und Ed25519-Signatur und installieren Sie ihn atomar für den Link Guard (§4).
  4. Wenn ClamAV installiert ist, rufen Sie freshclam auf.
  5. Notieren Sie die neueste App-Version für eine Benachrichtigung (der Updater never installiert die App; unter Linux führt der Benutzer apt upgrade aus).

Das Scheitern eines Schritts – offline, eine fehlerhafte Signatur, freshclam fehlt – wird als updates.lastError aufgezeichnet und der Prozess endet immer noch mit 0, sodass ein Timer-Lauf nie eine systemd-Fehlerbenachrichtigung generiert. Der gesamte Mechanismus wird durch updates.enabled = false in updates.json oder durch systemctl disable --now roamswitch-update.timer deaktiviert; Das Produkt läuft dann mit den im Paket gebündelten Daten. Der Bedrohungs-Feed wird auch im Paket ausgeliefert, sodass eine Neuinstallation über einen funktionierenden Feed verfügt, bevor der Updater überhaupt ausgeführt wurde, und apt upgrade ihn auch dann aktualisiert, wenn der Updater deaktiviert ist.

§12

  • OS: Ubuntu 22.04 / 24.04 und höher, Debian 12 und höher, Linux Mint / Pop!_OS / elementary / Zorin, Raspberry Pi OS 64-bit (Bookworm), Ubuntu für Raspberry Pi
  • Architecture: x86_64 / aarch64
  • Erforderlich: systemd, nftables, iproute2 (ip neigh – die ARP/NDP-Sperre) (wird automatisch von den .deb / .rpm-Abhängigkeiten eingezogen)
  • Optional: clamav (Malware-Scan), nmcli (Wi-Fi-Verschlüsselungserkennung), libnotify (Desktop-Benachrichtigungen), wireguard-tools (das WireGuard-Backend des VPN-Tunnels + Kill-Switch, §4), tailscale (sein Tailscale-Backend, §4), polkit / pkexec (Ausführen eines Upgrades über die GUI)
  • Nicht unterstützt: Nicht-Systemd-Distributionen (Alpine / Void / Devuan)
  • Display: 1280×720 oder größer (Fenster und Schriftart passen sich automatisch der Bildschirmgröße an und unterstützen kleine Raspberry Pi-Displays)

Anhang A

KisteZweckNetzwerk
serde / serde_jsonSerialisierung von Konfiguration und IPCkeine
Tokioasynchrone Laufzeit (features = ["full"], es werden jedoch nur Unix-Sockets verwendet)keine (kein TCP)
Tracing / Tracing-AbonnentProtokollierung (lokal / journalistisch)keine
dieser Fehler / jedenfallsFehlerbehandlungkeine
RegexString-Parsing (Diagnose, CSS-Skalierung)keine
URLURL-Analyse (audit_url_safety-Heuristik)none (wird nicht abgerufen)
ChronoDatums-/Uhrzeitverarbeitungkeine
ed25519-dalekOffline-Überprüfung von Lizenzsignaturenkeine
base64 / sha2Lizenz-Tokens, Canary-Hasheskeine
libcchown / kill / Systemaufrufekeine
idnaDekodierung von IDN/Punycode-Hosts zur Homographenerkennungkeine
nfq (nur Daemon)NFQUEUE-Bindungen für den Link Guard – reines Rust, AF_NETLINKkeine (Urteilskanal, kein Ausgang)
offenruft xdg-open für „Versionshinweise öffnen“ aufDer Prozess selbst kommuniziert nicht
GTK3 / ksni (nur App)GUI und Fachkeine
ureq + rustls (roamswitch-updater only)der tägliche Updater ist ein HTTPS-GETder einzige HTTP/TLS-Stack im Baum; auf die Updater-Binärdatei beschränkt
Kernpunkt

In roamswitch-core, roamswitch-daemon, roamswitch-app, roamswitch-mcp oder roamswitchkit wird kein HTTP-Client, TLS-Stack oder Telemetrie-SDK angezeigt. ureq + rustls sind nur in roamswitch-updater vorhanden (scripts/audit_no_network.sh erzwingt dies in CI). Es gibt nirgendwo ein Telemetrie-SDK.

Anhang B

table inet roamswitch {                 # Profil-Firewall (Air-Gap / balanced / lockdown)
    chain input {
        type filter hook input priority -100; policy <accept|drop>;
        iif "lo" accept
        ct state established,related accept
        # balanced/lockdown: alles andere droppen
    }
    chain output {
        type filter hook output priority -100; policy <accept|drop>;
        # policy drop nur während Air-Gap; nur lo und ct established sind erlaubt
    }
}

table inet roamswitch_linkguard {        # §4.5 — unabhängig von der Profiltabelle
    chain output {
        type filter hook output priority 0; policy accept;
        udp dport 53                       queue num 92 bypass
        tcp dport 53                       queue num 92 bypass
        tcp dport { 80, 443 } ct state new,established queue num 92 bypass
    }
}

table inet roamswitch_dev_guard {        # §4 Port-Anomalie-Wächter / manuelle Port-Isolierung, separate Tabelle
    chain input {
        type filter hook input priority -10; policy accept;
        iif != "lo" tcp dport { … } drop
    }
}

table inet roamswitch_vpn {              # §4 Kill-Switch für das WireGuard-Backend
    chain output {
        type filter hook output priority -150; policy drop;
        oifname "lo" accept
        oifname "roamswitch" accept
        meta l4proto { icmp, ipv6-icmp } accept
        udp sport 68 udp dport 67 accept          # DHCP
        ip  daddr { <endpoint v4> } udp dport <port> accept
        ip6 daddr { <endpoint v6> } udp dport <port> accept
        ct state established,related accept
    }
    chain input  { type filter hook input priority -150; policy drop; … }  # symmetrisch
}

table inet roamswitch_ts {               # §4 Kill-Switch für das Tailscale-Backend (weniger streng)
    chain output {
        type filter hook output priority -150; policy drop;
        oifname "lo" accept
        oifname "tailscale0" accept
        meta l4proto { icmp, ipv6-icmp } accept
        udp sport 68 udp dport 67 accept          # DHCP (v6-Seite ist ebenfalls symmetrisch)
        ip  daddr 100.64.0.0/10 accept            # tailnet CGNAT
        ip6 daddr fd7a:115c:a1e0::/48 accept
        ip  daddr 100.100.100.100 udp dport 53 accept   # MagicDNS
        ip  daddr 100.100.100.100 tcp dport 53 accept
        udp dport 3478 accept                     # STUN
        udp dport 41641 accept                    # Direkte WireGuard-Verbindung
        tcp dport 443 accept                      # DERP-Fallback
        ct state established,related accept
    }
    chain input  { type filter hook input priority -150; policy drop; … }  # symmetrisch
}

Das ARP/NDP-Pinning des Gateways/IPv6-Routers/DNS-Resolvers (§4) erfolgt in der Kernel-Nachbartabelle (ip neigh replace … nud permanent), nicht in nftables. Angepinnte Einträge werden in /var/lib/roamswitch/arp_lock.json aufgezeichnet.

Anhang C

Jeder Anspruch in diesem Dokument kann auf Ihrem eigenen Computer überprüft werden. Die folgenden Befehle werden auf einem Host ausgeführt, auf dem das Paket roamswitch installiert ist.

C.1 Überprüfung des ausgehenden Datenverkehrs

Die Daemon-/App-/MCP-Binärdateien verknüpfen keine HTTP-/TLS-Bibliothek:

for b in roamswitch-daemon roamswitch-app roamswitch-mcp; do
  ldd "$(command -v $b)" | grep -iE 'ssl|crypto|nghttp|curl' && echo "  ^ in $b"
done
# → Keine Ausgabe. Der HTTP/TLS-Stack ist nur statisch in roamswitch-updater eingebunden.

Der laufende Daemon enthält keinen Internet-Socket:

sudo lsof -p "$(pgrep -x roamswitch-daemon)" -a -i
# → Keine Ausgabe = null TCP/UDP-Internetverbindungen
sudo lsof -p "$(pgrep -x roamswitch-daemon)" -a -U | grep roamswitch
# → Nur /run/roamswitch/roamswitch.sock (der Link-Guard fügt einen AF_NETLINK-Socket hinzu,
#   aber das ist ein Kernel-Kanal, kein Internet-Socket)

Der einzige RoamSwitch-zuordenbare ausgehende Datenverkehr ist der tägliche Updater:

watch -n 5 'sudo ss -tupn | grep -E "roamswitch-(daemon|app|mcp)" || echo "(none)"'
# → Immer "(none)". Keiner dieser drei öffnet jemals einen Internet-Socket.
systemctl list-timers roamswitch-update.timer
sudo systemctl start roamswitch-update.service
journalctl -u roamswitch-update.service -n 20 --no-pager
# → Ein einziger HTTPS-GET an lafine.net/updates/v1, danach wird beendet.

Deaktivieren Sie es und bestätigen Sie die völlige Stille:

sudo systemctl disable --now roamswitch-update.timer
# oder /var/lib/roamswitch/updates.json auf "enabled": false setzen
sudo strace -f -e trace=network -p "$(pgrep -x roamswitch-daemon)" 2>&1 | grep -i 'connect('
# → Verbindet sich nur mit AF_UNIX / AF_NETLINK. AF_INET / AF_INET6 tauchen nie auf.

C.2 Reproduzierbare Verteidigungsüberprüfung (Docker Test Suite)

Alle Erkennungs-, Kontroll- und Abwehrmechanismen von RoamSwitch (Air-Gap-Durchsetzung, Selbstheilung nach Firewall-Übergriffen, Ransomware-Canary-Manipulation, /tmp Noexec, Yama LSM, Homograph Phishing Interception und Credential Leak Detection – insgesamt 17 Elemente) können sicher reproduziert und zu 100 % in einem isolierten Container verifiziert werden, ohne Host-Netzwerke oder Dateien zu beeinträchtigen, mithilfe der offiziellen Docker-Testsuite, die in bereitgestellt wird das öffentliche Support-Repository (roamswitch-support

# Testsuite abrufen und reproduzieren (automatisierte Verifikation in einem isolierten Container mit dem offiziellen Distributionspaket)
git clone https://github.com/lafine1211/roamswitch-support.git
cd roamswitch-support/test/docker
docker build -t roamswitch-test .
docker run --rm --privileged roamswitch-test

Der Testcontainer ruft automatisch das offizielle Distributionspaket aus dem APT-Repository (lafine.net/apt) ab und wertet jedes der folgenden systematischen Testelemente (SP-1–11, PENT-1–7) innerhalb eines isolierten Netzwerks und Mount-Namespace aus.

(1) Autonome Netzwerkverteidigung und Luftspalt-Selbstheilung

AusweisSzenarioVerifizierungsmethodeBestehenskriterium
SP-3Air-Gap-Aktivierung → AustrittsabfallSenden Sie enable_air_gap IPCpolicy drop wird auf den Ausgabe-Hook angewendet; Der gesamte ausgehende Datenverkehr wurde blockiert
SP-3bErzwungene Bereinigung und Selbstheilung der FirewallLöschregeln über nft delete table inet roamswitchDie Anti-Clobber-Selbstheilung stellt die Drop-Regeln innerhalb von 5 Sekunden wieder her
SP-3cBeim Daemon-Neustart fehlgeschlagenDaemon (SIGKILL) mitten in der Luftlücke hart töten und neu startenDie Egress-Drop-Richtlinie bleibt auch nach dem Neustart nahtlos bestehen
SP-3dAutorisierte Air-Gap-WiederherstellungAutorisierten disable_air_gap IPC sendenDrop-Richtlinie aufgehoben, alle Markierungsdateien entfernt, Austritt wiederhergestellt
SP-8Präventives ARP/NDP-PinningIn isolierter NetNS-Gateway-Umgebung aktivieren → gefälschtes Gratis-ARP sendenGateway-Nachbareintrag bleibt PERMANENT; gefälschtes ARP ignoriert
SP-9VPN-Kill-Switch (WireGuard)Live WireGuard-Server in separaten Netzen, Import .confvpn_upHandshake wird bis inet roamswitch_vpn abgeschlossen; Null Lecks beim Tunneltod
SP-10VPN-Kill-Switch (Tailscale)Stub tailscale CLI + separate Netze, tailscale0 IFOff-Tunnel-Klartext-TCP/80 und lokales DNS blockiert; DERP und MagicDNS erlaubt

(2) Kernel- und Mount-Hardening

AusweisSzenarioVerifizierungsmethodeBestehenskriterium
SP-11aHärtung des NetzwerksystemsFühren Sie apply_kernel_sysctl_hardening IPC ausrp_filter=1, tcp_syncookies=1, accept_redirects=0 erreichen Zielwerte
SP-11bSpeicherschutz und Yama LSMÜberprüfen Sie ptrace_scope und suid_dumpablekernel.yama.ptrace_scope=1 (blockiert Snooping), fs.suid_dumpable=0 (kein Core-Dump)
SP-11c/tmp & /dev/shm noexec-VerteidigungFühren Sie apply_mount_hardening IPC aus/tmp und /dev/shm erneut gemountet noexec,nosuid,nodev; Hinrichtung verweigert
SP-11dLegitime Benutzerausführung bleibt erhaltenSkripte im Standard-Home-Verzeichnis (~/) ausführenLäuft ungehindert, ohne legitime Entwickler-/Administrator-Workflows zu unterbrechen

(3) Mehrschichtige Malware- und Ransomware-Abwehr und Canaries

AusweisSzenarioVerifizierungsmethodeBestehenskriterium
SP-1Canary-ManipulationserkennungDecoy-Canary-Datei (.xlsx) in ~/Documents/ abschneiden oder umbenennenManipulationen werden innerhalb von Sekunden erkannt und lösen einen sofortigen Air-Gap aus
SP-2Ransomware-Massenverschlüsselungs-Burst-ErkennungEin einzelner Prozess generiert schnell mehrere Dateien mit hoher EntropieBeleidigender Arbeitsprozess mit SIGSTOP eingefroren; Luftspalt ausgelöst
SP-2bKein falsch positives Ergebnis am shredFühren Sie shred -n 3 -u über Testdateien hinweg ausDie Übereinstimmung mit der Zulassungsliste verhindert die Erkennung falsch positiver Ergebnisse oder das Einfrieren
SP-2cKritische Prozesse sind nie eingefrorenValidieren Sie die Logik des Einfrierens des Ziels während der Burst-ErkennungKritische Daemons (dockerd, systemd, containerd) werden nie eingefroren
SP-4Die EICAR-Testzeichenfolge dient nur der BenachrichtigungSchreiben Sie die EICAR-Testzeichenfolge in ~/Downloads/Keine Benachrichtigung, nur ein Eintrag im Benachrichtigungsverlauf; die Datei wird niemals automatisch unter Quarantäne gestellt
SP-4bEchte Malware-Signatur zuerst bestätigenSchreiben Sie eine echte Signatur außerhalb überwachter OrdnerRuft den modalen Genehmigungsdialog auf; Quarantäne erfolgt nur nach Bestätigung durch den Benutzer
SP-4cHärtung der Quarantäne-Vault-BerechtigungenÜberprüfen Sie die Berechtigungen des Tresorverzeichnisses und der BeispieldateienVault-Verzeichnis auf 0700 festgelegt, unter Quarantäne gestellte Proben auf 0400 festgelegt
SP-4dPrivilegierte IPC-sichere Wiederherstellung der OriginaldateiSenden Sie restore_quarantine_file IPCDatei mit Benutzerberechtigungen (0644) im ursprünglichen Pfad wiederhergestellt und zu Ausschlüssen hinzugefügt

(4) Passiver Link Guard und Phishing-Abwehr

AusweisSzenarioVerifizierungsmethodeBestehenskriterium
SP-7mode = block harte DurchsetzungStellen Sie eine Verbindung zu in der Feedliste aufgeführten oder blocklistExtra-Hosts herAuf der TLS-Ebene abgelegt (SNI-Analyse); Nicht gelistete sichere Hosts erreichen HTTP 200
SP-7bmode = warn Fail-Closed HoldOhne Benutzerreaktion eine Verbindung zum Warnhost herstellen (Zeitüberschreitung 8 Sekunden)Verwirft Pakete bei Zeitüberschreitung (fail-closed); nur mit ausdrücklicher Genehmigung gestattet
SP-7cmode = off Kompletter AbrissLinkschutz deaktivierenDie Tabelle inet roamswitch_linkguard ist vollständig deinstalliert

(5) BadUSB-Mitigation und Gerätekontrolle

AusweisSzenarioVerifizierungsmethodeBestehenskriterium
SP-6Bestandsschutz für verbundene TastaturenÜberprüfen Sie die angeschlossenen Tastaturen beim Start des DaemonsBestandsschutz für bestehende Geräte; nur nachfolgende Hot-Plugs griffen

(6) Penetration Testing Suite in der Docker-Umgebung (17 Prüfungen)

AusweisAngriffsvektorSimulationsdetailsVerteidigungs-/Erkennungskriterien
PENT-1C2-ExfiltrationAusgehender HTTP/TCP-Traffic zu C2 unter Air-Gap versuchtAlle Pakete wurden bei Netfilter verworfen; Null Leckage
PENT-1bFW-Löschung erzwingenLöschregeln mit nft delete table inet roamswitchDie Anti-Clobber-Selbstheilung stellt die Regeln innerhalb von Sekunden wieder her
PENT-1cLuftspaltsichere WiederherstellungProblem mit authentifiziertem disable_air_gap IPCDrop-Regeln entfernt; Markierungen gelöscht; Konnektivität wiederhergestellt
PENT-2/tmp HintertürAbgelegtes Backdoor-Skript in /tmp ausführenVerweigert durch noexec Mount-Schutz (Permission denied)
PENT-2b/dev/shm Gemeinsamer SpeicherBinäre Nutzlast ausführen, die in /dev/shm platziert istBlockiert durch noexec Reittierverteidigung
PENT-2cErhaltung des BenutzerbereichsSkript im legitimen Benutzerverzeichnis (/home/tester/) ausführenUngehinderte Ausführung; Keine Unterbrechung des Arbeitsablaufs
PENT-3ptrace Memory SnoopingPTRACE_ATTACH als Ziel zum Extrahieren von Geheimnissen/TokensAbgelehnt von Yama LSM kernel.yama.ptrace_scope=1
PENT-3bCore Dump Secret ScrapingLösen Sie einen Prozessabsturz aus, um einen Speicherauszug zu erhaltenVerhindert durch fs.suid_dumpable=0
PENT-4Kanarische ManipulationZero-out-Kanarienvogel-Köderdatei in ~/Documents/Echtzeiterkennung von Größenanomalien und Hash-Änderungen
PENT-4bKanarisches MassenwischenMassenlöschung von Canary-Decoy-DateienDas Verschwinden der Datei wurde sofort erkannt, was zu einem Vorfall führte
PENT-5Spoofing von IP-AdressenÜbertragen Sie Pakete mit gefälschter Quell-IPVon rp_filter=1 gelöscht (Reverse-Path-Filter)
PENT-5bSYN Flood DoSÜberfluten Sie halboffene TCP-VerbindungenStatustabelle geschützt durch tcp_syncookies=1
PENT-5cICMP-Route-HijackFügen Sie gefälschte ICMP-Redirect-Pakete einIgnoriert wegen accept_redirects=0
PENT-6Kyrillisches Homograph-PhishingNavigieren Sie zu gооgle.com (kyrillischer Homograph)Identifiziert durch LinkGuard, bewertet mit 40 (GEFÄHRLICH/Block)
PENT-6bRoher IP- und KlartextverkehrDirekte ausgehende Verbindung zur Raw-IPPräzise als Sicherheitsrisikofaktor gekennzeichnet
PENT-7OpenAI-API-SchlüsselleckMachen Sie das sk-proj-...-Token im Code oder in Protokollen verfügbarDurch Shannon-Entropieanalyse erkannt und maskiert
PENT-7bGitHub-Token-LeakOffenlegen des persönlichen Tokens ghp_... im CodeÜbereinstimmung durch Tokenmuster und Entropieüberprüfung
PENT-8Kernel-LPE (Frag Gap)-PreemptionUnprivilegierter unshare -U -r (CVE-2026-53362-Versuch)Sofort abgelehnt von user.max_user_namespaces = 0 (Operation not permitted)
PENT-9eBPF-Bedrohungssensor und Prozess-FreezeKritischer/Notfallalarm, der über den Falco-eBPF-Socket eingespeist wirdProzess über SIGSTOP innerhalb von Millisekunden eingefroren (Status: Ts); Air-Gap eingesetzt

(7) Zusammenfassung der Penetrationstests (Standalone Hardened vs. eBPF Enhanced)

Zusammenfassung der Ergebnisse des vollständigen Penetrationstests, der in einer isolierten Docker-Umgebung durchgeführt wurde (Ziel: Ubuntu 24.04 mit RoamSwitch Client Edition; Angreifer: Nmap/curl/hping3; siehe offizieller Bericht docs/CLIENT_PENTEST_REPORT.ja.md):

VerifizierungskategorieOhne Falco (Standalone Hardened)Mit Falco (eBPF Enhanced)Urteil der Verteidigung
Externer Port-Scan-Widerstand (Nmap SYN)PASS (100 % gefiltert / DROP in Lockdown)PASS (100 % gefiltert / DROP in Lockdown)Total External Stealth
External Direct Access Cutoff (TCP/80, 3306)PASS (Timeout-Abbruch / keine Antwort)PASS (Timeout-Abbruch / keine Antwort)Null eingehende Exposition
Kernel-LPE (Frag Gap)-AbschwächungPASS (unshare über sysctl blockiert)PASS (eBPF-Alarm + SIGSTOP Einfrieren + Luftspalt)Defense-in-Depth bestätigt
Unautorisierte Porterkennung (Anomalie)PASS (0.0.0.0 Bindung mit HOHEM Risiko gekennzeichnet)PASS (0.0.0.0 Bindung mit HOHEM Risiko gekennzeichnet)100 % erkannt und geführt
Protokollaufblähung und CPU-Overhead-VerhinderungKein Protokoll-Footprint (deinstalliert)PASS (95 % Rauschunterdrückung / 2 MB Puffer / 50 MB Obergrenze)Desktop-optimiert

C.3 Bekannte Einschränkungen

EinschränkungAuswirkungenSchadensbegrenzung
Auf einigen Kerneln liefert FAN_MARK_MOUNT auf tmpfs (/tmp) keine EreignisseDateischreibvorgänge unter /tmp werden von fanotify nicht überwacht/tmp ist kurzlebig und kein überwachter Benutzerordner; Ransomware zielt auf ~/. Markierungsfehler werden explizit protokolliert
Keine Fanotify-Zustellung für Container-Overlays/TMPFsDie Erkennung von Entropieausbrüchen im Container kann nicht validiert werdenvalidiert auf echter Hardware (ext4); Der Kabelbaum überspringt automatisch über eine Sonde
Die nftables-Operationen von RoamSwitch teilen sich den Netfilter-Speicherplatz mit Dockers iptables-nftRoamSwitch-Regeloperationen können die NAT-Regeln von Docker beeinträchtigenals betrieblicher Vorbehalt dokumentiert; isoliert in der dedizierten inet roamswitch-Tabelle, aber Operationen für den gesamten Regelsatz wie nft flush ruleset sollten vermieden werden
Der Link Guard sieht den DoH eines Browsers nur über TLS SNI; Auch das verbirgt Encrypted Client Hello (ECH).Sobald ECH weit verbreitet ist, ist eine ECH-verwendende Verbindung zu einer ECH-unterstützenden Site nicht anhand des Hostnamens identifizierbarDie lokale Blockliste und die Heuristik wirken weiterhin auf DNS/HTTP und Nicht-ECH-TLS. Der DNS-Bedrohungsschutz (§4.5, Opt-in) deckt den Resolver-Pfad ab
Die Aktualität des täglichen Updates hängt vom Veröffentlichungsrhythmus ab, wenn updates.enabled = falseBei deaktivierten Aktualisierungen ist der Feed nur so aktuell wie der letzte apt upgradedie Entdeckungen mit dem höchsten Schweregrad (Markenhomograph) benötigen keine Zuführung; Melden Sie sich erneut an oder aktivieren Sie das DNS zum Schutz vor Bedrohungen, um eine stets aktuelle Abdeckung zu gewährleisten