Lafine Systems Design · Documentation technique

Livre blanc technique de RoamSwitch Server Edition

Suite autonome de sécurité et de défense de l'intégrité des réseaux pour les infrastructures de serveurs Linux cloud et sans tête

Version v1.1.0 Champ d'application RoamSwitch Server Edition 1.3.2 Prérequis systemd + nftables Publié 2026-09-07

§1Aperçu et principes fondamentaux

RoamSwitch Server Edition est une suite de sécurité et de protection de l'intégrité du réseau autonome et résidente, spécialement conçue pour les infrastructures de serveurs Linux des fournisseurs de cloud (AWS, GCP, Azure, VPS nus) et des centres de données sur site.

Contrairement aux éditions de postes de travail clients axées sur la mobilité et l'adaptation du périmètre Wi-Fi, l'édition serveur repose sur cinq principes sans compromis : Inbound Default Drop, Critical Path File Integrity Monitoring (FIM), Preemptive Kernel LPE & Privilege Escalation Hardening, eBPF Runtime Threat Telemetry et Isolement autonome de l'hôte Air-Gap avec alertes d'urgence avant la séparation.

Construit avec une garantie stricte Zero Telemetry, le logiciel ne contient aucune bibliothèque d'analyse ou de suivi HTTP/TLS externe. Tous les secrets et jetons administratifs sont sécurisés cryptographiquement sous des autorisations strictes 0600.

Comparaison 1.1 : édition client et édition serveur

Dimensions Édition client (ordinateur de bureau/mobile) Édition serveur (sans tête/infrastructure)
Déploiement Ordinateurs portables, postes de travail de développement mobiles Machines virtuelles cloud, nœuds nus, hôtes de conteneurs
Comportement du réseau Commutation de profil dynamique basée sur le SSID Wi-Fi / Gateway MAC Suppression par défaut entrante statique. Seuls les ports explicitement autorisés sont exposés
Interface utilisateur Interface graphique du bureau GTK3 + indicateur de plateau CUI sans tête pur. Commandes CLI + Assistant interactif
Notifications d'incidents Notifications sur le bureau (libnotify) Transmission directe vers Telegram Bot, l'API de messagerie LINE et les Webhooks (Slack/Discord)
Défenses primaires Usurpation ARP Wi-Fi public, BadUSB, cryptage de documents par ransomware Largage de reconnaissance externe, détection de falsification FIM, fuites de conteneurs, LPE du noyau (CVE-2026-53362)

1.2 Principes architecturaux fondamentaux

  • Zéro Télémétrie : Le logiciel ne transmet jamais de télémétrie, de métriques ou de télémétrie à des serveurs externes. Les appels réseau externes se produisent uniquement pour les alertes d'incident configurées par l'utilisateur via l'exécution du sous-processus curl. Par défaut, il n'embarque aucune bibliothèque de communication externe. La seule exception : ce n'est que si l'opérateur active explicitement cve_kernel_map_updates_enabled (false par défaut) que roamswitch-updater récupère anonymement, une fois par jour, la base de données CVE du noyau pour l'audit d'isolation des conteneurs depuis lafine.net.
  • Inbound Default Drop : les paquets entrants non destinés à un port de service explicitement déclaré ou au port de maintenance administratif SSH sont rejetés au niveau du noyau nftables sans générer de paquets ICMP RST.
  • Confinement autonome fermé en cas de panne : les règles d'espace d'air d'urgence survivent aux redémarrages des démons et aux pannes de processus. Si des acteurs externes tentent de vider les tables nftables, le démon détecte la dérive et rétablit l'isolement en quelques secondes.
  • 0600 Protection des secrets cryptographiques : /etc/roamswitch/server.conf applique des autorisations strictes 0600 (lisibles uniquement par root) lors de la création et de chaque mise à jour.

§2Paysage des menaces et modèle de l’adversaire

Les serveurs modernes accessibles sur Internet sont confrontés à des analyses automatisées incessantes, à des vecteurs de rupture de conteneurs et à des élévations de privilèges du noyau Zero Day.

Principaux vecteurs de menaces abordés
  1. Reconnaissance automatisée et exposition de la base de données : analyseurs à l'échelle Internet localisant les ports de base de données internes involontairement exposés (MySQL 3306, Redis 6379, Postgres 5432).
  2. falsification du chemin critique et insertion de porte dérobée : les intrus établissent la persistance en modifiant les binaires d'authentification de base (/bin/login, /usr/bin/sudo, /etc/pam.d/*, /etc/shadow).
  3. Élévation des privilèges du noyau (CVE-2026-53362 Frag Gap) : des attaquants non privilégiés utilisent les espaces de noms utilisateur (unshare -U -r) pour déclencher une corruption de la mémoire du noyau et passer à la racine.
  4. Container Socket Breakout : conteneurs mal configurés avec des indicateurs /var/run/docker.sock ou --privileged montés exécutant des actions root sur le système d'exploitation hôte.
  5. Surveillance de la mémoire des processus : les attaquants attachent ptrace ou lisent /proc/$pid/mem à travers les processus pour extraire des clés privées ou des informations d'identification.

§3Architecture du système

RoamSwitch Server Edition fonctionne comme des binaires Rust natifs conçus pour une mémoire minimale et une surcharge CPU nulle.

┌─────────────────────────────────────────────────────────────┐
│  Espace utilisateur et administrateur                       │
│                                                             │
│   roamswitch (CLI)             roamswitch-mcp (AI Agent)    │
│   · server status (30 points)   · outils d'audit sécurité   │
│   · server config / setup      · stdio JSON-RPC             │
│   · fim verify / update                                     │
│        │                               │                    │
└───────┼───────────────────────────────────┼─────────────────┘
         │ (commandes CLI et config) │ (stdio)
┌───────▼───────────────────────────────────▼─────────────────┐
│  Fondation système (systemd + privilège root)               │
│                                                             │
│   roamswitch-server-daemon                                  │
│   ├── CriticalPathFim (balayage SHA-256 en arrière-plan)    │
│   ├── module d'intégration eBPF / Falco                     │
│   ├── Notifier (alertes Telegram / LINE / Webhook)          │
│   └── Air-Gap Controller (règles d'urgence nftables)        │
│                                                             │
│   Config : /etc/roamswitch/server.conf (permission 0600)    │
│   BD d'intégrité : /var/lib/roamswitch/fim_baseline.db      │
└─────────────────────────────────────────────────────────────┘

§4Mécanismes de défense de base

4.1 Sécurité des limites (abandon par défaut entrant)

nftables applique policy drop sur le trafic entrant, permettant les connexions établies, le bouclage et les ssh_ports et allowed_ports explicitement configurés.

La préservation des ports de gestion SSH empêche le verrouillage accidentel de l’opérateur lors des états d’urgence Air-Gap.

4.2 Surveillance de l'intégrité des fichiers du chemin critique (FIM)

Surveille plus de 150 fichiers d’authentification et d’administration critiques du système d’exploitation (/bin/login, /usr/sbin/sshd, /etc/pam.d/*, etc.). Calcule les hachages SHA-256 par rapport à /var/lib/roamswitch/fim_baseline.db. Le hook du gestionnaire de packages /etc/apt/apt.conf.d/99roamswitch-fim met automatiquement à jour la ligne de base après les opérations apt upgrade autorisées.

4.3 Durcissement des noyaux et des conteneurs

Frag Gap (CVE-2026-53362) Atténuation : applique user.max_user_namespaces = 0 via sysctl, neutralisant les vecteurs LPE. Yama LSM Protection applique kernel.yama.ptrace_scope = 2, empêchant toute inspection non autorisée de la mémoire. Les charges de travail des conteneurs sont auditées pour une exposition docker.sock.

Les ports publiés par Docker (-p) sont connus pour contourner le pare-feu standard de l'hôte ; c'est pourquoi protect_docker_ports=true (par défaut) insère en permanence des règles d'inspection dans la chaîne DOCKER-USER, bloquant tout trafic externe non explicitement autorisé. De plus, une surveillance permanente observe docker events en temps réel et vous avertit immédiatement dès qu'un conteneur --privileged démarre ou qu'un montage /var/run/docker.sock est détecté — un risque d'évasion de conteneur (aucune configuration requise ; notification uniquement, sans blocage automatique). Pour les hôtes qui traitent des fichiers destinés à d'autres personnes — un relais de messagerie, un dossier partagé —, un File Scan Guard optionnel (YARA intégré et ClamAV en option) assure une analyse périodique et une mise en quarantaine automatique.

4.4 Télémétrie des menaces et réglage anti-ballonnement pendant l'exécution de l'eBPF

Utilise des sondes eBPF modernes (CO-RE / BTF) pour intercepter les élévations de privilèges et les tentatives d'évasion de conteneurs en quelques millisecondes. Pour éliminer les problèmes standard de Falco — gonflement des journaux , épuisement du disque et surcharge du processeur — RoamSwitch standardise un profil optimisé (/etc/falco/config.d/99-roamswitch-optimized.yaml) :

  • Severity Filtering (priority: warning) : supprime de 95 % la télémétrie opérationnelle bruyante (informations/avis), faisant apparaître des incidents de sécurité strictement exploitables.
  • Kernel-Level Pre-Drop (drop_failed_exit: true) : rejette les sorties d'appel système ayant échoué directement dans la sonde du noyau, réduisant ainsi les changements de contexte du processeur de plus de 50 %.
  • Memory Footprint Optimization (cpus_for_each_buffer: 2) : compresse les tampons en anneau de 8 Mo à 2 Mo, limitant strictement l'utilisation de la mémoire à 30 - 50 Mo.
  • Direct UNIX Domain Socket IPC : le streaming direct vers /var/run/roamswitch/events.sock élimine complètement les problèmes d'E/S disque.
  • Capuchon de journal automatisé (/etc/logrotate.d/roamswitch-falco) : une rotation quotidienne avec maxsize 50M et 7 cycles compressés empêche en permanence l'épuisement de la capacité du disque.

4.5 Isolation de l'entrefer d'urgence avec alertes préalables à la séparation

Immédiatement avant de couper les interfaces réseau en cas de falsification critique, le démon envoie de manière synchrone des alertes d'urgence à Telegram, LINE et Webhooks. Les alertes ajoutent automatiquement le serveur Hostname et Primary IP Address.

Format d'alerte d'urgence (JA/EN)
🚨 [RoamSwitch IMMINENT AIR-GAP] CRITICAL: IMMINENT AIR-GAP HOST ISOLATION (cve_2026_53362_lpe)
🚨 CRITICAL SECURITY INCIDENT DETECTED: cve_2026_53362_lpe
Host: production-node-01 (IP: 192.168.1.10)
Process: exploit_payload (PID: 4921)
ACTION: Initiating host Air-Gap network isolation (SSH preservation active).
WARNING: Outbound internet connectivity will be cut immediately after this message.
Timestamp: 2026-09-06 18:00:00

§5Suite de diagnostics de sécurité à 30 vérifications

L'édition Server exécute 30 audits d'état de sécurité spécialisés :

# Catégorie Vérifier le titre Norme et logique
1Authentification et accèsConnexion racine SSH et authentification par mot de passeVérifie PermitRootLogin no et l'authentification par mot de passe désactivée
2Authentification et accèsComptes avec mot de passe videsGarantit qu'aucun utilisateur n'a de hachage de mot de passe vide dans /etc/shadow
3Authentification et accèsHygiène Privilège SudoersVérifie qu'aucune directive NOPASSWD non autorisée n'existe
4RéseauRefus par défaut entrantAudite nftables pour la politique de dépôt entrant par défaut
5Noyau et intégritéEspaces de noms d'utilisateurs non privilégiés (Frag Gap)Assure user.max_user_namespaces = 0 (CVE-2026-53362)
6Noyau et intégritéPrise en charge de l'eBPF BTFValide les informations de type BTF du noyau via /sys/kernel/btf/vmlinux
7Noyau et intégritéeBPF LSM ActifVérifie bpf dans le paramètre de démarrage lsm= du noyau
8Noyau et intégritéAgent de sécurité d'exécution eBPFValide le lien de télémétrie vers les agents Falco/Tetragon
9ConteneurAudit de montage de socket DockerDétecte les montages de conteneurs de /var/run/docker.sock
10ConteneurConteneurs privilégiés DockerAudits pour les charges de travail de conteneurs --privileged à haut risque
11IntégritéIntégrité des fichiers du chemin critique (FIM)Valide les hachages SHA-256 de plus de 150 binaires principaux du système d'exploitation
12Noyau et intégritéProtection des processus YamaVérifie kernel.yama.ptrace_scope = 2
13RéseauTransfert IP désactivéVérifie net.ipv4.ip_forward = 0
14RéseauProtection des cookies TCP SYNVérifie net.ipv4.tcp_syncookies = 1
15RéseauFiltrage de chemin inverse (rp_filter)Vérifie le filtrage strict du chemin inverse (rp_filter = 1)
16Noyau et intégritéRestriction de vidage de baseEmpêche les fuites de mémoire de processus via fs.suid_dumpable = 0
17OpérationsMises à jour de sécurité automatiquesValide la configuration de unattended-upgrades
18OpérationsSynchronisation de l'heure NTPVérifie la synchronisation via chrony ou systemd-timesyncd
19OpérationsProtection SSH contre la force bruteVérifie la surveillance active via fail2ban ou crowdsec
20Noyau et intégritéeBPF non privilégié désactivéChèques kernel.unprivileged_bpf_disabled = 1
21RéseauRedirections ICMP ignoréesEmpêche l'empoisonnement de la route via accept_redirects = 0
22RéseauDiffusions d'écho ICMP ignoréesAtténue les attaques DoS de l'amplificateur Schtroumpf
23Noyau et intégritéRenforcement de la mémoire partagéeGarantit que /dev/shm dispose d'options de montage nodev,nosuid
24Authentification et accèsAbsence de protocoles non sécurisés héritésVérifie l'absence de démons en texte clair (telnet, rsh, tftp)
25Noyau et intégritéDumps de mémoire du processus SUID restreintsEmpêche les fuites d'informations d'identification en cas de crash binaire SUID

§6Auto-vérification (vérification reproductible dans un environnement Docker)

Les mécanismes de défense de RoamSwitch Server Edition (Inbound Default Drop, Critical Path FIM, confinement par gravité via guard.yaml, garde-fou de sécurité des processus protégés, minuterie de sécurité, durcissement LPE du noyau, etc.) peuvent être entièrement reproduits et vérifiés sur votre propre machine en utilisant un conteneur Docker distinct comme attaquant externe contre le véritable paquet roamswitch-server v1.3.2 installé depuis le dépôt APT officiel (et non un binaire compilé localement). Voici les huit scénarios de vérification et le comportement attendu (critère de réussite) pour chacun. Voir la section 6.3 ci-dessous pour la procédure et les scripts exacts.

# Scénario Vecteur d'attaque Critère de réussite
PENT-S1 Nmap SYN Furtif Scan Sonder les ports 22, 80, 443, 3306, 8080 PASS (100 % furtif)
PENT-S2 Sonde de port non autorisée curl connexions directes aux ports 3306 et 8080 PASS
PENT-S3 Liste de blocage Egress / C2 Tentative de connexion sortante vers une adresse enregistrée dans le flux d'IP malveillantes Réussi
Seule l'adresse enregistrée est bloquée ; le trafic vers un hôte non répertorié n'est pas affecté (pas de blocage général)
PENT-S4 Attaque de falsification FIM Injecter la charge utile de la porte dérobée dans /bin/login PASS (Détection instantanée)
PENT-S5 Confinement basé sur la gravité via guard.yaml Injection d'un événement Falco Critical référençant un processus réel Réussi
Le processus incriminé est isolé du réseau, puis terminé par SIGKILL
PENT-S6 Garde-fou de sécurité pour les processus protégés Injection d'un événement de même type référençant le vrai PID de sshd Réussi
sshd continue de fonctionner ; seul un refus est consigné comme faux positif
PENT-S7 Minuteur de sécurité Incident Air-Gap laissé sans accusé de réception (aucun ACK de l'opérateur) Réussi
Restauration automatique en l'absence de confirmation ; une fois l'ACK reçu, l'isolement persiste jusqu'à emergency-restore
PENT-S8 Écart de fragmentation LPE du noyau Exécuter unshare -U -r en tant qu'utilisateur non privilégié PASS (rejeté)

Prévention du verrouillage SSH

Pendant qu'un Air-Gap au niveau de l'hôte (on_emergency) est actif, la session SSH de l'administrateur n'est pas coupée, grâce à preserve_ssh_on_isolation=true (valeur par défaut). Cette conception empêche structurellement le scénario où un faux positif isole complètement un serveur, le rendant inaccessible sans accès physique ou à la console. Vous pouvez vérifier ce comportement vous-même avec l'étape correspondant à PENT-S7 dans la suite de tests Docker ci-dessus.

Limites du périmètre de test (une divulgation honnête)

Ce que cela ne permet pas de vérifier

Le durcissement du noyau (désactivation des espaces de noms utilisateur non privilégiés, augmentation du ptrace_scope de Yama) ne peut pas être vérifié de bout en bout depuis l'intérieur d'un conteneur. Ces sysctl n'étant pas isolés par espace de noms au niveau du conteneur, les écritures effectuées depuis un conteneur privilégié (--privileged) affectent non pas un bac à sable de test, mais la machine réelle exécutant le test elle-même. Cette vérification confirme donc uniquement que l'écriture sysctl échoue proprement (sans plantage) face à un système de fichiers en lecture seule ; confirmer que la valeur est réellement appliquée nécessite une machine réelle ou une VM, conforme à l'environnement d'exécution prévu pour le produit.

Reproduisez-le vous-même

Tous les résultats ci-dessus peuvent être reproduits à 100 % sur votre propre machine, en utilisant uniquement le paquet de distribution officiel, grâce à la suite de tests Docker publiée dans le dépôt de support officiel (roamswitch-support) — aucun accès au code source ni confiance envers nous ne sont nécessaires.

# Récupérer et reproduire la suite de vérification (installe automatiquement roamswitch-server depuis le dépôt APT officiel)
git clone https://github.com/lafine1211/roamswitch-support.git
cd roamswitch-support/test/docker/server
./run.sh

Crée trois conteneurs jetables (Target, Attacker et un leurre C2) sur le réseau bridge par défaut de Docker et vérifie automatiquement les 18 points, en imprimant un rapport. Le résultat complet de l'exécution est publié à l'adresse RESULTS-PENTEST-SERVER-2026-09-07.md (incluant, par souci de transparence, les problèmes du banc de test lui-même détectés et corrigés lors de sa construction).

§7Opérations, déploiement et cycle de vie

7.1 Assistant d'outillage et de configuration de l'interface CUI sans tête

Gestion à distance complète via CLI :

  • roamswitch server status : sortie de diagnostic complète à 30 vérifications (JA/EN).
  • roamswitch server setup : Assistant de terminal interactif pour les ports et les notifications.
  • roamswitch server config show / set <key> <val> : automatisation scriptable pour Ansible/Terraform.
  • roamswitch server test-notify [all|telegram|line|webhook] : sonde de notification de bout en bout.

7.2 Emballage

Distribué via les référentiels officiels Debian/Ubuntu .deb, les référentiels RHEL/Fedora .rpm et Arch Linux AUR (roamswitch-server-bin).

§8Conclusion

RoamSwitch Server Edition offre un périmètre défensif sans compromis pour les infrastructures de serveur Linux : confidentialité sans télémétrie, suppression par défaut entrante, FIM du chemin critique et atténuation proactive de l'élévation des privilèges du noyau, offrant une défense autonome unifiée pour les nœuds cloud modernes.

C'est la norme de sécurité Linux serveur de nouvelle génération qui assure une défense en profondeur et un confinement autonome (Air-Gap) à chaque étape du vecteur d'attaque visé par les cyberattaquants — reconnaissance initiale, intrusion, élévation de privilèges et persistance.

Ce document reflète l'implémentation telle qu'elle est à la version RoamSwitch Server Edition v1.3.2 (Inbound Default Drop, Critical Path FIM, moteur de politiques guard.yaml, durcissement LPE du noyau, surveillance runtime eBPF, minuterie de sécurité Air-Gap). Consultez le CHANGELOG de roamswitch-support pour l'historique détaillé des modifications. Pour les informations les plus récentes, consultez lafine.net/linux.