Hallo zusammen,
wer kennt es nicht? Man schreibt ein Modul oder ein Skript für eine API, eine Datenbank oder den Router und landet früher oder später bei der Frage: Wohin mit den Zugangsdaten?
Die strukturelle Schwäche
Bisher bietet IP-Symcon keine native, verschlüsselte Tresor-Lösung für sensible Daten. Gemäß der offiziellen Dokumentation werden Instanz-Eigenschaften (Properties) persistent gespeichert. Das führt in der Praxis zu einem erheblichen Sicherheitsrisiko:
-
Klartext in der settings.json: Selbst wenn man eine PasswordTextBox im Formular nutzt (die nur optisch maskiert), werden die Passwörter unverschlüsselt in der zentralen settings.json gespeichert.
-
Sichtbarkeit: Wer Zugriff auf ein Backup oder das Dateisystem hat, kann alle API-Keys, Router-Passwörter und Datenbank-Logins im Klartext auslesen.
Die Lösung: Password Vault (Standalone)
Dieses Modul führt einen dedizierten Verschlüsselungs-Tresor (AES-128-GCM) ein. In der Standalone-Variante werden alle Geheimnisse in einer verschlüsselten Datei auf Betriebssystem-Ebene abgelegt. Der Clou: Der für die Entschlüsselung notwendige Master-Key wird physisch getrennt vom Symcon-Datenverzeichnis gespeichert.
-
Grafischer Tresor-Explorer: Direkt in der Instanz-Konfiguration können Ordnerstrukturen angelegt und Geheimnisse verwaltet werden.
-
Key-Rotation: Der Master-Key kann jederzeit neu generiert werden, wobei der Tresor automatisch umgeschlüsselt wird.
-
JSON-Import: Ein schneller Umstieg ist durch die Import-Funktion für bestehende Datensammlungen problemlos möglich.
Sicherheit in verteilten Systemen (Master/Slave)
Die Herausforderung wächst bei mehreren Symcon Installationen (z.B. Hauptwerk, Gartenhaus, Ferienwohnung). Bisher mussten Passwörter händisch synchronisiert werden – oft über unsichere Kanäle.
Hier setzt die Master/Slave-Architektur an:
-
Zentrale Verwaltung: Ein Master dient als „Source of Truth“.
-
Sicherer Transport: Änderungen werden per WebHook an die Slaves gepusht. Die Übertragung erfolgt verschlüsselt und kann zusätzlich durch Certificate Pinning (TLS) gegen Man-in-the-Middle-Angriffe abgesichert werden.
-
Autarkie: Die Slaves speichern eine lokale, verschlüsselte Kopie. Fällt der Master oder die Internetverbindung aus, arbeiten alle Slaves mit ihren vorhandenen Daten ganz normal weiter.
Praxis-Beispiel: Datensatz & Anwendung
Stellen wir uns vor, ihr habt im Tresor einen Datensatz für ein Remote-System angelegt. So sieht die Struktur innerhalb des Tresors aus:
Hierarchische Darstellung (Baumstruktur):
📦 GESAMT-TRESOR (Root-Array)
├── 📂 Folder_Kameras
│ └── 🔑 Haustür-Kamera
├── 📂 RemoteSystem <-- Dies ist der Ident (Key)
│ ├── 🔑 User: "admin"
│ ├── 🔑 Pass: "geheim123"
│ └── 🔑 URL: "http://192.168.1.50:3777/api/"
└── 📂 SmartHome_Cloud
PHP-Syntax für einen RPC-Aufruf:
Statt das Passwort im Skript zu hartcodieren, ruft ihr es sicher ab. Da das Array RemoteSystem mehrere Felder hat, liefert das Modul diese als JSON-kodiertes Array zurück:
// 1. Das Geheimnis aus dem Tresor laden (Ident: "RemoteSystem")
$jsonSecret = SEC_GetSecret($vaultID, "RemoteSystem");
$credentials = json_decode($jsonSecret, true);
if (!$credentials) die("Zugangsdaten nicht gefunden.");
// 2. RPC-Aufruf mit Basic-Auth ausführen (Kein Passwort im Klartext im Skript!)
$context = stream_context_create([
'http' => [
'method' => 'POST',
'header' => [
'Content-Type: application/json',
'Authorization: Basic ' . base64_encode($credentials['User'] . ':' . $credentials['Pass'])
],
'content' => json_encode([
'jsonrpc' => '2.0',
'method' => 'GetValue',
'params' => [54321],
'id' => 1
])
]
]);
$response = file_get_contents($credentials['URL'], false, $context);
Wichtige Hinweise zu Backup & Sicherheit
-
Das Backup-Dilemma: Da der master.key bewusst außerhalb des Symcon-Pfades liegt, wird er NICHT vom Standard-Symcon-Backup erfasst. Ihr müsst diesen Key unbedingt separat sichern (z.B. in einem physischen Tresor oder eurem privaten Passwort-Manager). Ohne diesen Key ist der Tresor bei einem Server-Crash verloren!
-
Pfad-Empfehlung: Wählt für den Key-Ordner einen Pfad, der nicht im Symcon-Verzeichnis liegt (z.B. ein anderer Mount-Point oder ein USB-Stick), um die physische Trennung von Schlüssel und Tresor zu gewährleisten.
-
Voraussetzungen: Das Modul nutzt die PHP-Extension OpenSSL (in fast allen IPS-Installationen standardmäßig enthalten) und ist für moderne PHP-Versionen (8.x) optimiert.
Installation
Das Modul ist ab sofort im Module Store unter dem Namen „Password Vault“ zu finden.
Ich freue mich auf euer Feedback und hoffe, dass wir damit gemeinsam die Sicherheit unserer IP-Symcon Installationen ein Stück professioneller machen können!