Zum Inhalt springen

Edge-Scanner (Resilic Edge)

Resilic Edge ist ein Discovery-Scanner, den Sie selbst betreiben: ein Docker-Container auf einem Raspberry Pi 4/5, einem SIMATIC IOT2050 oder einem beliebigen Linux-Docker-Host im Schaltschrank. Er erkennt die Geräte im Maschinennetz (Steuerungen, I/O, Gateways, HMIs) und meldet nur Geräte-Metadaten an Resilic – Hersteller, Typ/Bestellnummer, Seriennummer, Firmware. Keine Nutzdaten, keine Paketmitschnitte.

Die Verbindung ist ausschließlich ausgehend (HTTPS zu api.resilic.ai). Es muss kein Port geöffnet werden; die lokale Statusseite ist nur im LAN erreichbar und kann abgeschaltet werden.

Registrierung und Verbindung (das Gerät erscheint in Resilic mit Status, Hardware, Version und Adresse), die Geräteerkennung vor Ort (der Scanner hört im Maschinennetz mit und sendet die Standard-Identifikationsanfragen, die auch Engineering-Werkzeuge senden) sowie die laufende Meldung an Resilic: Jeder Zyklus wird übertragen, ein von Ihnen bestätigter Referenzstand dient als Vergleich, und jede Abweichung – neues Gerät, fehlendes Gerät, geänderte Firmware, Adresse oder Bezeichnung – erscheint in Resilic und löst eine Benachrichtigung aus.

Jeder Zyklus (Voreinstellung: alle 60 Minuten, in Resilic konfigurierbar) hat zwei Phasen:

  1. Mithören (rund 45 Sekunden, sendet nichts): ARP, LLDP, mDNS und SSDP – die Meldungen, die Steuerungen, Switches und HMIs ohnehin ständig ins Netz geben.

  2. Identifizieren (nur im Modus aktiv und innerhalb eines Wartungsfensters, falls eines konfiguriert ist): je eine PROFINET-DCP-Identify-All-Anfrage, eine EtherNet/IP-ListIdentity- Anfrage, eine mDNS-Dienstabfrage und eine SSDP-Suche. Das sind dieselben, ausschließlich lesenden Broadcasts, die TIA Portal oder PRONETA beim Öffnen senden – kein Port-Scan, kein Schreibzugriff, keine Anmeldeversuche. Dazu kommt, wenn das Verfahren ARP-Sweep aktiv ist, je eine ARP-Anfrage („who-has“) pro Adresse im erlaubten Bereich (Voreinstellung: das eigene Subnetz, höchstens 1024 Adressen, 40 Anfragen pro Sekunde). ARP beantwortet jedes IPv4-Gerät; so werden auch Geräte gefunden, die nie von sich aus senden und kein Identifikationsprotokoll sprechen – ein Server, ein HMI-Panel, eine Kamera, ein Modbus-Gateway. Was antwortet, bekommt anschließend die lesenden Einzelabfragen.

  3. Gezielt nachfragen (ebenfalls nur aktiv und im Wartungsfenster): Jedes Gerät, das in diesem Zyklus bereits gehört wurde und im erlaubten Bereich liegt, bekommt nacheinander bis zu sechs lesende Standardanfragen – SNMP GET der Systemgruppe (Community public), OPC UA GetEndpoints (ohne Sitzung, ohne Anmeldung), Modbus/TCP Read Device Identification (Funktion 43/14), ein HTTP-GET / samt TLS-Zertifikatsdaten sowie für Windows-Geräte (HMI-Tablets, Industrie-PCs) eine NetBIOS-Namensabfrage (nbtstat -A: Computername und Arbeitsgruppe) und ein SMB2-Negotiate (nur die Protokollversion, keine Sitzung, keine Anmeldung – nichts landet im Sicherheitsprotokoll des Geräts). Ein Host nach dem anderen, mindestens 250 ms Abstand, 2 s Zeitlimit, bei Fehlern mit wachsendem Abstand. Adressen, von denen in diesem Zyklus nichts zu hören war, werden nie angesprochen – es gibt keinen Port-Scan.

Erlaubter Bereich: Voreinstellung ist das eigene Subnetz des Scanners. In Resilic lassen sich Bereiche (CIDR) erlauben und ausschließen; Ausschlüsse haben immer Vorrang.

Der Hersteller wird aus der MAC-Adresse abgeleitet (mitgelieferte OT-Herstellerliste, erweiterbar über /data/oui.csv im IEEE-Format); Stationsname, Typ, Rolle, Firmware, Seriennummer und OPC-UA-Sicherheitsprofile kommen aus den Antworten selbst. Jedes Merkmal trägt seine Quelle; bei Widersprüchen gewinnt die verlässlichere (z. B. PROFINET DCP vor mDNS vor SSDP).

Probelauf: http://<geräte-ip>:8480/api/dry-run zeigt, welche Pakete ein Zyklus mit der aktuellen Konfiguration senden würde – bevor der erste Zyklus läuft. Im Modus passiv wird nichts gesendet. Scan jetzt auf der Statusseite startet einen Zyklus sofort.

  1. In Resilic unter Einstellungen → Edge-Scanner auf Installationspaket herunterladen klicken. Sie erhalten eine ZIP-Datei mit compose.yml (Image der aktuellen signierten Version, per Digest festgelegt), .env (mit einem Registrierungs-Token, der 24 Stunden und genau einmal gilt) und einer Anleitung.

  2. Den Ordner auf das Gerät kopieren und starten:

    Terminal-Fenster
    docker compose up -d
  3. Innerhalb einer Minute meldet sich der Scanner; in Resilic steht er auf Online.

Voraussetzung: ein Linux-Docker-Host. Der Scanner läuft im Host-Netz (network_mode: host), weil er im Maschinennetz mithören muss. Das geht nur mit Docker Engine auf Linux – Raspberry Pi, IOT2050, ein Linux-Server oder eine Linux-VM mit gebrücktem Netzwerkadapter. Docker Desktop unter Windows oder macOS ist für den Betrieb nicht geeignet: dort läuft der Container in einer eigenen VM, sieht das Maschinennetz nicht, und die Statusseite ist von außen nicht erreichbar.

Raspberry Pi OS: Die Speicherbegrenzung des Containers (mem_limit: 300m) greift dort erst, wenn die Speicher-Cgroup aktiviert ist. Einmalig in /boot/firmware/cmdline.txt am Zeilenende cgroup_enable=memory cgroup_memory=1 ergänzen und neu starten; docker stats zeigt danach Speicherwerte statt 0B / 0B. Ohne diese Einstellung läuft der Scanner genauso, nur ohne harte Obergrenze.

Für einen reinen Verbindungstest auf einem Windows- oder Mac-PC ersetzen Sie in compose.yml die Zeile network_mode: host durch

ports:
- "8480:8480"

Dann erreichen Sie die Statusseite unter http://localhost:8480, und der Scanner meldet sich in Resilic – die Geräteerkennung findet in diesem Modus aber nichts. Auf einem Linux-Host muss Port 8480/TCP in der Firewall des Hosts freigegeben sein, wenn andere Rechner die Statusseite aufrufen sollen.

Alternativ erzeugen Sie mit Nur Token erzeugen einen Token und tragen ihn selbst in eine .env ein oder geben ihn auf der lokalen Statusseite http://<geräte-ip>:8480 ein. Die Compose-Datei dazu liegt jedem GitHub-Release bei.

Nur Owner und Admins (Berechtigung Einstellungen bearbeiten) können Token erzeugen und Scanner widerrufen. Jede dieser Aktionen erscheint im Audit-Log.

Unter Einstellungen → Edge-Scanner → Konfigurieren legen Sie je Scanner fest:

Einstellung Bedeutung
Modus Aktiv (Voreinstellung): mithören, identifizieren, nachfragen. Passiv: nur mithören, es wird nichts gesendet.
Zyklus Abstand zwischen zwei Zyklen (5 Minuten bis 24 Stunden; Voreinstellung 60 Minuten) – gilt, solange kein Zeitplan gesetzt ist.
Zeitplan Feste Startzeiten je Wochentag (Gerätezeit), z. B. Mo–Fr 02:00 und So 03:30. Mit Zeitplan starten Zyklen genau dann; ein verpasster Termin (etwa nach einem Neustart) wird einmal nachgeholt.
Verfahren Welche Mithör-, Identifikations- und Nachfrage-Verfahren der Scanner nutzt. Scanner, die vor dem ARP-Sweep eingerichtet wurden, behalten ihre Liste: Haken bei ARP sweep setzen, wenn stille Geräte fehlen.
Erlaubte / ausgeschlossene Bereiche CIDR-Bereiche für Einzelabfragen. Leer = eigenes Subnetz. Ausschlüsse haben Vorrang.
Zweck Überwachung (Voreinstellung): ein Netz dauerhaft beobachten, mit Referenzzustand und Abweichungen. Inbetriebnahme: auf dem Prüfstand eine Maschine nach der anderen aufnehmen – siehe Inbetriebnahme.
Updates Manuell (Voreinstellung): neue Versionen nur über „Jetzt aktualisieren“. Automatisch: der Scanner spielt neue Versionen selbst ein – im Wartungsfenster, falls eines gesetzt ist, und nie während eines Zyklus. Siehe Updates.
Wartungsfenster Wochentage und Uhrzeiten (Gerätezeit), in denen gesendet werden darf. Ohne Fenster: jederzeit. Endet das Fenster während eines Zyklus, stoppt die aktive Phase sofort; der Zyklus wird als unvollständig markiert.
Abstand / Zeitlimit Mindestens 250 ms zwischen Einzelabfragen und 2 s Zeitlimit – diese Untergrenzen lassen sich nicht unterschreiten.

Gespeicherte Änderungen übernimmt der Scanner beim nächsten Lebenszeichen (spätestens nach einer Minute); die Versionsnummer zeigt, welcher Stand auf dem Gerät aktiv ist. Jede Änderung erscheint im Audit-Log.

Jede Scanner-Version ist ein signiertes Image (cosign, SBOM als Attestierung). Resilic kennt die aktuelle Version und zeigt in der Scanner-Liste Update verfügbar: X.Y.Z, sobald ein Gerät eine ältere ausführt. Drei Wege, sie einzuspielen:

  1. Von Hand auf dem Gerät: neues Installationspaket laden (es pinnt die aktuelle Version) oder in compose.yml die image:-Zeile anpassen, dann docker compose pull && docker compose up -d. Zugangsdaten, Konfiguration und Postausgang bleiben in /data; keine neue Registrierung.
  2. Jetzt aktualisieren in Resilic: setzt den Updater-Container auf dem Gerät voraus (docker compose --profile updater up -d, einmalig). Der Scanner erfährt den Auftrag mit dem nächsten Herzschlag und wendet ihn an, sobald kein Zyklus läuft; das Ergebnis steht danach in der Liste.
  3. Automatisch (Einstellung „Updates“ in der Scanner-Konfiguration): wie 2, nur ohne Klick – im Wartungsfenster, falls eines gesetzt ist, sonst beim nächsten freien Moment.

Der Updater-Container hat kein Netzwerk. Er spricht nur mit dem Docker-Socket des Geräts und startet ausschließlich Images aus dem signierten Resilic-Repository – was auch immer in der Auftragsdatei steht. Er übernimmt die Konfiguration des laufenden Containers eins zu eins (Rechte, Volumes, Umgebung), startet den neuen, prüft nach zehn Sekunden, ob er läuft, und stellt sonst den alten wieder her. Weil er am Docker-Socket hängt, ist er bewusst optional.

http://<geräte-ip>:8480 (nur im LAN, mit EDGE_LOCAL_PORT=0 abschaltbar) zeigt im Resilic-Design Registrierung, Hardware, Adresse, die aus Resilic übernommene Konfiguration und den Probelauf – die Liste der Pakete, die der nächste Zyklus senden würde. Dort wählen Sie auch die Netzwerkschnittstelle, auf der gescannt wird (bei Geräten mit zwei Ports), starten einen Zyklus mit Jetzt scannen und sehen die zuletzt erkannten Geräte. Die Seite gibt es auf Deutsch und Englisch (nach Browsersprache, umschaltbar).

Passwort: Beim ersten Aufruf legen Sie ein Passwort fest (mindestens 8 Zeichen); danach ist jede Funktion der Seite nur nach Anmeldung erreichbar. Nach mehreren Fehlversuchen sperrt die Seite mit wachsender Wartezeit. Alternativ setzen Sie das Passwort über EDGE_LOCAL_PASSWORD in der .env vor. Das Passwort liegt nur als Hash auf dem Gerät; Resilic kennt es nicht.

Spalte Bedeutung
Status Online (Lebenszeichen in den letzten 3 Minuten), Offline oder Widerrufen
Hardware / Version Was der Scanner über sich meldet (z. B. „Raspberry Pi 4 Model B“, v0.1.0)
Adresse Die eigene LAN-Adresse des Scanners – so finden Sie das Gerät im Schrank
Zuletzt gesehen Zeitpunkt des letzten Lebenszeichens

Steht der Scanner nicht im Schaltschrank beim Kunden, sondern auf Ihrem Prüfstand, sieht er jede Woche eine andere Maschine. Dafür gibt es den Zweck Inbetriebnahme in der Scanner-Konfiguration: Ein solcher Scanner hat keinen Referenzzustand und meldet keine Abweichungen. Stattdessen arbeiten Sie mit Aufnahmen (Reiter Inbetriebnahme):

  1. Aufnahme starten für eine Maschine im Register – eine vorhandene (Produkt → Version → Kunde / Standort) oder eine neue, die Sie direkt hier anlegen (Produktversion, Kunde, Standort, Seriennummer).
  2. Scan laufen lassen – „Jetzt scannen“ auf dem Gerät oder der nächste Zyklus. Jeder Zyklus, der während der Aufnahme eintrifft, aktualisiert die Arbeitsliste.
  3. Prüfen: Jedes Gerät mit Hersteller, Modell, Firmware, Seriennummer, vorgeschlagener Rolle (Steuerung, Antrieb, HMI, E/A, Netzwerk, Kamera) und dem Haken „Gehört dazu“. Der Laptop des Technikers oder der Prüfstand-Switch bleiben draußen. Geräte, die ein früherer Zyklus derselben Aufnahme sah, der letzte aber nicht, stehen abgeblendet dabei – nichts geht stillschweigend verloren.
  4. Bestätigen: Der letzte Zyklus wird eingefroren, die Liste wird zum Auslieferungsstand der Maschine (sichtbar an der Maschine im Produktregister), die Aufnahme ist geschlossen und der Scanner frei für die nächste Maschine. Eine Maschine kann später erneut aufgenommen werden, etwa nach einem Umbau vor der Auslieferung; der ältere Stand bleibt lesbar.

Der Auslieferungsstand ist der Beleg dafür, welche Steuerung, welche Antriebe, Kameras und HMIs die Maschine mit welcher Firmware verlassen hat – und die Ausgangsbasis für den Feldvergleich, wenn später ein Scanner im Schaltschrank der Maschine steht.

Beim Prüfen schlägt Resilic für jedes Gerät vor, welches Katalogprodukt es ist – mit Quelle und Übereinstimmung in Prozent, nie als Entscheidung. Die Quellen, in dieser Reihenfolge:

  • Gemerkt: eine Zuordnung, die Sie für dasselbe Gerätekennzeichen schon einmal bestätigt haben (PROFINET-Hersteller-/Gerätekennung, EtherNet/IP-Produktcode, Bestellnummer oder Hersteller|Modell).
  • Gerätekennung: was das Gerät selbst meldet – etwa die Siemens-Bestellnummer (6ES7 …) aus der SNMP-Systembeschreibung, aus der Resilic auch die Firmware liest.
  • SBOM der Version: die Komponente der Produktversion, zu der Hersteller, Name, Bestellnummer oder Firmware passen.
  • Hersteller-Advisory: Produkte aus den CSAF-Advisories Ihrer angebundenen Lieferanten. Nennt ein Advisory die gemessene Firmware als betroffen, steht das mit Kennung und Versionsbereich am Gerät; die höchste „unter X“-Grenze erscheint als Hinweis, dass Versionen darunter als betroffen gelten. Resilic formuliert daraus keine Empfehlung – es zitiert.
  • CPE-Verzeichnis: der Eintrag im NVD-Produktverzeichnis, dessen Kennung die Schwachstellenkorrelation verwendet.
  • KI-Vorschlag: nur für Geräte, die keine der anderen Quellen sicher einordnet, und nur mit Bestätigung – „KI entwirft, der Mensch unterschreibt“.

Sie wählen einen Vorschlag, „Keine Zuordnung“ oder tragen Name, Hersteller, CPE und Bestellnummer von Hand ein. Merken sorgt dafür, dass die nächste Maschine mit demselben Teil den Vorschlag mit voller Übereinstimmung bekommt; gemerkte Zuordnungen stehen unter dem Reiter und lassen sich vergessen. Daneben ordnen Sie dem Gerät die SBOM-Komponente der Produktversion zu, die es ist.

Mit dem Bestätigen schreibt Resilic den Auslieferungsstand als SBOM-Revision der Maschine (CycloneDX 1.6, Komponenten vom Typ device mit Hersteller, Firmware, CPE und den Beobachtungsquellen als Eigenschaften; die SBOM der Produktversion ist als übergeordnete Stückliste referenziert). Jede spätere Änderung am Auslieferungsstand schreibt eine neue Revision; alle Revisionen bleiben an der Maschine herunterladbar, und CycloneDX exportieren liefert die aktuelle. Die SBOM der Produktversion bleibt der Sollzustand – unverändert.

Identifizierte Geräte landen mit ihrer ausgelieferten Firmware im Komponentenregister. Die Schwachstellenkorrelation läuft damit pro Maschine auf der tatsächlich verbauten Firmware: Ein Treffer auf eine Steuerung zeigt genau die Maschinen, in denen diese Firmware steckt, nicht alle Installationen der Version.

Später im Feld: Auslieferungsstand als Referenzstand

Abschnitt betitelt „Später im Feld: Auslieferungsstand als Referenzstand“

Steht später ein Scanner im Schaltschrank der Maschine, muss niemand vor Ort einen Referenzstand „übernehmen“: Unter Geräte wählen Sie für den Scanner Auslieferungsstand als Referenzstand und die Maschine (Produkt → Version → Maschine mit Auslieferungsstand). Der bestätigte Auslieferungsstand wird zum Referenzstand des Scanners, der Scanner übernimmt den Standort der Maschine, und das versionstragende Gerät ist der Maschine zugeordnet. Jede Abweichung heißt ab jetzt: anders als ausgeliefert – ein fehlendes Gerät, ein neues Gerät oder eine geänderte Firmware an einer Komponente. Eine geänderte Firmware ist eine Abweichung mit hoher Dringlichkeit, denn sie ist genau der Unterschied pro Komponente zum Auslieferungsstand.

An der SBOM einer Produktversion wählen Sie die versionstragende Komponente – typisch die SPS oder der IPC, deren Firmware den Versionsstand ausmacht. Ist im Auslieferungsstand einer Maschine ein Gerät dieser Komponente zugeordnet, gilt der Versionsstand der Maschine im Register als verifiziert, wenn die ausgelieferte Firmware zur eingetragenen Version passt, und als abweichend, wenn nicht – auch ohne Scanner im Feld. Eine spätere Scanner-Beobachtung hat Vorrang.

Ein erkanntes Gerät lässt sich einer Installation im Produktregister zuordnen. Resilic schlägt passende Einträge vor — anhand von Seriennummer, Hersteller, Produktname, Firmware und Standort —, gespeichert wird die Zuordnung erst, wenn Sie sie bestätigen. Meldet das Gerät die Seriennummer, die im Register bei der Maschine steht, ist das der stärkste Hinweis. Nach der Bestätigung vergleicht Resilic in jedem Zyklus die ausgelesene Firmware mit der eingetragenen Version: Stimmen beide überein, gilt der Versionsstand der Maschine im Register als verifiziert; weichen sie ab, erscheint eine Abweichung, die Sie ins Register übernehmen können.

Verlässt die Maschine das Werk mit dem Scanner im Schaltschrank, wechselt der Scanner den Eigentümer (Entscheidung des Produktverantwortlichen, 18. Oktober 2026): Der Betreiber besitzt ihn und alles, was er ab der Übergabe beobachtet – in seiner eigenen Resilic-Organisation. Was der Scanner vorher beobachtet hat, bleibt Ihr Nachweis und bleibt bei Ihnen.

  1. Übergeben am Scanner erzeugt einen einmaligen Übergabe-Code (7 Tage gültig). Eine offene Aufnahme muss vorher bestätigt oder verworfen sein.
  2. Der Betreiber löst den Code in seiner Organisation unter Edge-Scanner → Übergabe annehmen ein. Der Scanner erscheint dort als „Übernommen am …“, meldet ab sofort dorthin und behält seine Zugangsdaten – am Gerät ist nichts zu tun. Referenzstand, Standort, Empfänger und Portal-Einstellungen sind zurückgesetzt, weil sie in Ihre Organisation zeigten; der Betreiber setzt sie neu.
  3. Sie behalten Lesezugriff: Unter Scanner → Von Betreibern geteilte Scanner sehen Sie letzten Zyklus und offene Abweichungen, nur lesend. Der Betreiber sieht diesen Zugriff unter Lesezugriffe auf Ihre Scanner und kann ihn jederzeit beenden.

Hat der Betreiber keine eigene Resilic-Organisation, bleibt der Scanner bei Ihnen: Schalten Sie in der Scanner-Konfiguration Befunde im Kundenportal zeigen ein, dann sieht der Betreiber letzten Zyklus und offene Abweichungen auf der Portalseite des Kunden, an dessen Standort der Scanner steht. Die Portalseite ist per Link erreichbar – geben Sie den Link nur an den Betreiber.

Widerrufen macht die Zugangsdaten des Scanners sofort ungültig. Das Gerät vergisst daraufhin seine Registrierung und wartet auf einen neuen Token; bereits gemeldete Daten bleiben erhalten. Verwenden Sie das, wenn ein Gerät ausgebaut, verkauft oder abhandengekommen ist.

  • Auf dem Gerät liegt nur ein zufälliges Geheimnis; Resilic speichert davon ausschließlich einen Hash. Ein Widerruf macht eine kopierte Datei wertlos.
  • Der Container läuft schreibgeschützt und ohne privileged; von allen Linux-Capabilities behält er nur NET_RAW und NET_ADMIN – das Minimum, um auf Schicht 2 mitzuhören.
  • Der Scanner gehört dem Mandanten, der ihn registriert hat. Ein Maschinenbauer, der ein Gerät beim Kunden betreibt, sieht dessen Daten in seinem eigenen Mandanten; eine Freigabe an den Betreiber läuft über die bestehende Kunden-/Standortbeziehung, nie automatisch.
  • Voreinstellung: aktiv, ausschließlich lesend. Die gezielten Einzelabfragen (SNMP, OPC UA, Modbus, HTTP) laufen nur gegen bereits gehörte Geräte im erlaubten Bereich, ein Host nach dem anderen, mit festen Mindestabständen. Ein rein passiver Modus ist jederzeit wählbar.
  • TLS-Zertifikate werden gelesen, nie geprüft oder vertraut: Der Scanner sendet nichts Vertrauliches; Betreff, Aussteller und Ablaufdatum sind reine Bestandsdaten.