MS MarlinSpike Passive OT/ICS Topology Workbench
Héritage

Comment MarlinSpike hérite du rôle de GrassMarlin.

Comment MarlinSpike hérite du rôle de GrassMarlin — ce que la NSA a publié en 2017, ce qui a cessé de fonctionner, pourquoi CVE-2026-6807 a forcé une succession, et ce qui a été conservé.

Même premier principe

Analyse passive de captures de paquets pour OT/ICS. Pas de sondes, pas de transmission, pas de scan actif.

Architecture moderne

Atelier web multi-utilisateur, déployable Docker, rapports JSON portables. Pas un client desktop Java.

Activement maintenu

Versions taguées, moteur et interface versionnés, récupération en cours de scan. Le rôle est géré, pas abandonné.

MarlinSpike est la continuation moderne de GrassMarlin. Cette page est le registre public de ce que cela signifie : ce qu’était GrassMarlin, pourquoi il a cessé d’être utilisable, et ce qui a été repris dans le successeur.

Ce qu’était GrassMarlin

GrassMarlin était un outil open source de cartographie réseau passive pour les systèmes de contrôle industriel (ICS), publié par l’Information Assurance Directorate de la NSA aux alentours de 2017 sur github.com/nsacyber/GRASSMARLIN. C’était une application desktop Java qui lisait des captures de paquets (.pcap, .pcapng) — ou du trafic en direct depuis une interface — et construisait une topologie réseau, identifiait les protocoles industriels, classifiait les équipements et faisait apparaître les relations de trafic. Pas de sondes, pas de scan actif, pas de transmission vers l’environnement.

Pour une communauté habituée au compromis « soit vous restez sûr en ne touchant pas au réseau OT, soit vous obtenez de la visibilité en le scannant », GrassMarlin offrait une véritable troisième voie. C’était la bonne idée : neutre vis-à-vis des fournisseurs, passif uniquement, gratuit, et conscient des protocoles spécifiques à l’OT à une époque où la plupart des outils réseau traitaient le trafic industriel comme opaque.

L’outil a été largement adopté par les équipes de sécurité ICS, les consultants en intervention et les propriétaires d’actifs faisant de la découverte réseau initiale dans des environnements de plant-floor segmentés où le scan actif n’était pas envisageable.

Ce qui a changé entre 2017 et 2025

GrassMarlin n’a jamais été activement maintenu après les premières versions publiques. Le dépôt GitHub de la NSA a explicitement listé le projet comme en fin de vie depuis 2017. L’architecture desktop Java a vieilli : un client lourd mono-utilisateur ne convient pas à un monde où l’intervention OT est de plus en plus une activité d’équipe sur des hôtes d’engagement temporaires, où Docker est la voie d’installation par défaut, et où les rapports doivent pouvoir être consultés sur plusieurs machines sans réinstaller l’outil.

La communauté d’intervention OT est passée à des ateliers web dans des espaces produit adjacents — mais le créneau open source, passif uniquement, neutre vis-à-vis des fournisseurs que GrassMarlin occupait est resté vide. Il n’y avait pas de successeur évident. Les opérateurs qui voulaient ce rôle exact ont continué à exécuter GrassMarlin sur des runtimes Java de plus en plus anciens, acceptant le compromis parce que l’alternative était rien.

CVE-2026-6807

Le 28 avril 2026, CISA a publié l’avis ICSA-26-118-01 divulguant CVE-2026-6807 — une vulnérabilité de divulgation d’information par entité externe XML (XXE) de sévérité moyenne dans GRASSMARLIN v3.2.1 (CWE-611). Des données de session conçues spécifiquement déclenchent une mauvaise gestion de l’entrée XML, ce qui peut entraîner une exposition involontaire d’informations sensibles depuis l’hôte. Du code de preuve de concept public est disponible.

La NSA a confirmé dans sa réponse que le projet est en fin de vie depuis 2017 et ne recevra pas de correctif. Toutes les versions sont affectées. Les conseils de mitigation de CISA se résument à « cessez de l’utiliser ».

Pour les équipes qui dépendaient du rôle que GrassMarlin remplissait, ce fut l’événement déclencheur. L’outil original ne peut plus être utilisé en toute sécurité. Le rôle doit toujours être rempli.

Pourquoi MarlinSpike

MarlinSpike était déjà en développement avant que le CVE n’arrive — l’architecture d’atelier d’intervention, le modèle multi-utilisateur, le contrat de rapport JSON portable, la couverture de protocoles OT-natifs, l’interface bilingue EN/FR, la lentille ATT&CK, la sévérité contextuelle pilotée par le contexte d’actifs, et le pipeline de chasse aux IOC étaient déjà conçus et livrés en v3.5.0.

Ce que CVE-2026-6807 a rendu explicite, c’est que le rôle lui-même a besoin d’un successeur activement maintenu, moderne et multi-utilisateur. MarlinSpike reprend ce flambeau. Nous avons pris le domaine grassmarlin.com parce que nous nous engageons publiquement sur ce rôle, et pas seulement parce que nous livrons un produit qui se trouve avoir l’air similaire.

Ce qui a été repris du design de GrassMarlin :

  • Analyse passive uniquement. Pas de sondes, pas de transmission, pas de scan actif.
  • Couverture des protocoles OT-natifs comme préoccupation de premier rang, pas comme arrière-pensée.
  • Neutre vis-à-vis des fournisseurs. Modbus, S7, DNP3, IEC 60870-5-104, CIP, MMS, GOOSE, BACnet, OPC UA, PROFINET, et plus.
  • Reconstruction de topologie à partir du trafic observé seul — inférence du niveau Purdue, empreintes fournisseurs, indices de rôle.
  • Gratuit et open source. AGPL-3.0.
  • Conscient des environnements plant-floor segmentés où le scan actif n’est pas sûr.

Ce qui a changé :

  • Atelier web multi-utilisateur au lieu d’une application desktop Java mono-utilisateur.
  • Déploiement Docker Compose (1 cœur / 1 Go RAM) au lieu d’une installation JAR sur un poste de travail.
  • Artefacts de rapport JSON portables comme contrat moteur ↔ atelier — les rapports survivent à l’outil qui les a produits.
  • Maintenance active. Versions taguées. Moteur et interface web versionnés. Récupération en cours de scan. Limites de concurrence par tier.
  • Interface bilingue (English / Français). Sortie moteur consciente de la locale. L’architecture supporte plus de locales comme un dépôt de contenu, pas un projet d’ingénierie.
  • Sévérité contextuelle pilotée par le contexte d’actifs. MEDIUM sur un contrôleur de sécurité peut surclasser CRITICAL sur une imprimante quand le contexte est en place.
  • Chasse aux IOC sur l’ensemble des rapports d’un projet. Matrice MITRE ATT&CK en direct (ICS + Enterprise) issue de la sortie des plugins.
  • Mode HP-HMI pour les écrans muraux de salle de contrôle. Curseur temporel + extraction de sous-PCAP pour la boucle d’analyse.

Parcours de migration

Si vous utilisiez GrassMarlin :

  1. Cessez d’exécuter v3.2.1 (ou toute version) compte tenu de l’avis CVE-2026-6807.
  2. Continuez à utiliser votre pipeline de capture existant. Tout ce qui produisait des fichiers .pcap / .pcapng pour GrassMarlin fonctionne pour MarlinSpike sans changement — taps, ports SPAN, dumpcap, tshark.
  3. Mettez en place MarlinSpike avec docker compose up -d --build (voir le guide de démarrage). Cinq minutes entre git clone et un atelier fonctionnel sur 127.0.0.1:5001.
  4. Téléversez vos captures. La chaîne d’analyse est exécutée comme un sous-processus par scan ; topologie, inventaire d’actifs et constats apparaissent dans l’atelier.
  5. Partagez l’URL avec le reste de votre équipe d’engagement. Multi-utilisateur est le mode par défaut ; tout le monde travaille sur le même projet.

Le côté sortie est matériellement différent : là où GrassMarlin produisait une vue en mémoire liée à la session desktop, MarlinSpike émet un artefact de rapport JSON portable. Ce rapport peut être examiné dans l’atelier MarlinSpike, archivé comme preuve, ou consommé par des outils en aval. Le rapport est le contrat.

Reconnaissance

Le crédit est dû. Le design de GrassMarlin était juste et sa publication était généreuse — l’Information Assurance Directorate de la NSA a publié le code source sous une licence ouverte à une époque où l’espace des outils de visibilité OT était dominé par des produits fermés, coûteux et liés à un fournisseur. Les choix architecturaux (passif uniquement, neutre vis-à-vis des fournisseurs, conscient de l’OT) ont porté les bonnes valeurs dans un artefact public que la communauté pouvait utiliser, étudier et apprendre.

MarlinSpike hérite directement de ces valeurs. L’implémentation est un code indépendant avec une forme architecturale différente, mais le rôle et les principes sont continus avec ce que GrassMarlin a établi. Nous gérons un créneau que l’équipe originelle a ouvert.

Références

Prêt à mettre en place le successeur ?

La page Démarrage couvre l'histoire complète Docker, entrée des captures et URL partagée pour l'atelier MarlinSpike moderne.