So schützt du Passwörter und Secrets

Viele unserer Anwendungen werden für administrative Aufgaben eingesetzt. Dabei ist es häufig notwendig, sensible Zugangsdaten wie Passwörter oder Secrets in der Konfiguration zu hinterlegen. Doch gerade diese Informationen müssen besonders gut geschützt werden – denn im Falle eines Angriffs sind sie oft das primäre Ziel.

Passwörter und Secrets richtig schützen

Unsere Anwendungen bieten dir verschiedene Möglichkeiten, um Passwörter und Secrets sicher zu verwalten:

  • Kodierung von Passwörtern: Du kannst sensible Daten direkt in der Konfiguration kodieren. Dadurch sind sie nicht im Klartext sichtbar, was einen ersten Schutz bietet – vor allem gegen versehentliches Offenlegen.

  • Verwendung von Umgebungsvariablen: Eine sichere Alternative ist es, Passwörter und Secrets nicht direkt in der Konfigurationsdatei zu speichern, sondern sie über Umgebungsvariablen bereitzustellen. So bleiben sie vollständig außerhalb der Konfiguration.

Kodieren von Passwörtern

Das Kodieren von Passwörtern in Konfigurationsdateien bietet einen einfachen Schutz – insbesondere dann, wenn einzelne Dateien versehentlich weitergegeben oder offengelegt werden. Dabei wird das Passwort mit einem asymmetrischen Schlüssel verschlüsselt, sodass nur die Zielanwendung es wieder entschlüsseln kann.

Schützt zuverlässig vor neugierigen Blicken und versehentlichem Offenlegen.

Einfach und schnell auf jede Konfiguration anwendbar.

Kodierte Passwörter lassen sich in anderen Installationen derselben Anwendung wiederverwenden.

Mit hohem Aufwand (z. B. durch staatlich finanzierte Angreifer) kann ein kodiertes Passwort entschlüsselt werden.

So funktioniert’s

Nehmen wir als Beispiel die Konfiguration eines Assistant Clients in der Datei configuration.xml. Dort ist das Secret, mit dem sich der Client beim Assistant Server authentifiziert, im Klartext gespeichert:

 1<?xml version="1.0" encoding="UTF-8" ?>
 2<Configuration
 3        version="1"
 4        xmlns="http://educateit.ch/software/BlueStone/Configuration/1">
 5    <Module name="Application">
 6        <Value name="serverName">127.0.0.1</Value>
 7        <Value name="sslProfile">client</Value>
 8        <Value name="apiKey">3!2( ... Schlüssel ... ).NKn</Value>
 9        <Value name="apiSecret">#|T( ... Secret ... )D7{</Value>
10    </Module>
11    ...
12</Configuration>

Alle unsere Anwendungen enthalten einen eingebauten Passwort-Encoder. Du startest einfach die Anwendung mit der Option --pe-encode-config und übergibst die entsprechende Konfigurationsdatei:

PS AssistantClient> .\AssistantClient.exe --pe-encode-config=configuration.xml

Die Anwendung liest die Konfigurationsdatei, ersetzt alle nicht kodierten Passwörter durch kodierte Werte und speichert die Datei anschließend automatisch. Danach sieht sie beispielsweise so aus:

 1<?xml version="1.0" encoding="UTF-8" ?>
 2<Configuration
 3        version="1"
 4        xmlns="http://educateit.ch/software/BlueStone/Configuration/1">
 5    <Module name="Application">
 6        <Value name="serverName">127.0.0.1</Value>
 7        <Value name="sslProfile">client</Value>
 8        <Value name="apiKey">3!2( ... Schlüssel ... ).NKn</Value>
 9        <Value name="apiSecret">◀PKEY▶R(... zufällige Zeichen ...)
1000(... zufällige Zeichen ...)j4
11Tf(... zufällige Zeichen ...)LG
12kK(... zufällige Zeichen ...)lL
13O/(... zufällige Zeichen ...)Ql
14vD(... zufällige Zeichen ...)DS
15eO(... zufällige Zeichen ...)sn
16+O(... zufällige Zeichen ...)rM</Value>
17    </Module>

Zur besseren Lesbarkeit wurde das kodierte Secret oben gekürzt. Du erkennst kodierte Werte immer an der Zeichenfolge ◀PKEY▶ am Anfang.

Bemerkung

Zeilenumbrüche und Leerzeichen in einem kodierten Passwort werden von der Anwendung ignoriert. Du kannst den Text also beliebig einrücken oder auch in einer einzigen Zeile speichern.

Weitere Informationen zur Kodierung von Passwörtern findest du im Kapitel Kodieren von Passwörtern.

Verwendung von Umgebungsvariablen

Falls deine Serverumgebung einen sicheren Weg bietet Passwörter beim Start z.B. an einen Service zu übergeben, dann kannst du diese auch als Umgebungsvariablen in die Konfiguration einbauen.

Umgebungsvariablen lassen sich pro Service definieren.

Statt in Klartext, lässt sich der Inhalt der Umgebungsvariable kodieren.

Schützt vor neugierigen Blicken und versehentlichem Offenlegen beim kopieren einer Konfigurationsdatei.

Umgebungsvariablen sind für alle Prozesse mit dem selben Benutzeraccount sichtbar.

So funktioniert’s

Nehmen wir als Beispiel die Konfiguration eines Assistant Clients in der Datei configuration.xml. Dort ist das Secret, mit dem sich der Client beim Assistant Server authentifiziert, im Klartext gespeichert:

 1<?xml version="1.0" encoding="UTF-8" ?>
 2<Configuration
 3        version="1"
 4        xmlns="http://educateit.ch/software/BlueStone/Configuration/1">
 5    <Module name="Application">
 6        <Value name="serverName">127.0.0.1</Value>
 7        <Value name="sslProfile">client</Value>
 8        <Value name="apiKey">3!2( ... Schlüssel ... ).NKn</Value>
 9        <Value name="apiSecret">#|T( ... Secret ... )D7{</Value>
10    </Module>
11    ...
12</Configuration>

Ersetze jetzt den inhalt des Werts apiSecret mit einem Platzhalter für die Umgebungsvariable.

 1<?xml version="1.0" encoding="UTF-8" ?>
 2<Configuration
 3        version="1"
 4        xmlns="http://educateit.ch/software/BlueStone/Configuration/1">
 5    <Module name="Application">
 6        <Value name="serverName">127.0.0.1</Value>
 7        <Value name="sslProfile">client</Value>
 8        <Value name="apiKey">3!2( ... Schlüssel ... ).NKn</Value>
 9        <Value name="apiSecret">●environmentVariable(ASSISTANT_SECRET)●</Value>
10    </Module>
11    ...
12</Configuration>

Startest du jetzt den Client, liest dieser das secret aus dem Umgebungsvariable ASSISTANT_SECRET.

Warnung

Du solltest in keinem Fall Passwörter oder Secrets im Klartext permanent in Umgebungsvariablen speichern.

Dateiberechtigungen unter Windows einschränken

Neben der Kodierung oder Auslagerung sensibler Daten kannst du den Zugriff auf Konfigurationsdateien zusätzlich über Dateiberechtigungen einschränken. Unter Windows lässt sich so verhindern, dass andere Benutzer auf dem gleichen System Passwörter oder Secrets einsehen können.

Ziel ist es, der Konfigurationsdatei nur dem Benutzerkonto Leserechte zu geben, unter dem der entsprechende Service läuft – z. B. NT SERVICE\AssistantClient.

So geht’s

  1. Rechtsklick auf die DateiEigenschaften öffnen.

  2. Zum Reiter Sicherheit wechseln.

  3. Auf Bearbeiten… klicken, um Berechtigungen anzupassen.

  4. Entferne alle Gruppen und Benutzer, die keinen Zugriff benötigen – z. B. Benutzer, Administratoren, Jeder.

  5. Füge den Benutzer oder Dienst hinzu, unter dem der Service läuft – z. B.:

    NT SERVICE\AssistantClient

  6. Weise diesem Benutzer Leserechte zu.

  7. Bestätige alle Dialoge mit OK.

Bemerkung

Der Benutzername muss exakt dem entsprechen, unter dem der Dienst ausgeführt wird. Du kannst dies in der Windows-Dienstverwaltung unter „Anmelden als“ nachprüfen.

Warnung

Vergiss nicht: Wenn du die Konfiguration als Administrator bearbeitest, sie aber dem Service-Account gehört, kann der Service eventuell nicht mehr darauf zugreifen. Teste daher unbedingt nach dem Setzen der Berechtigungen den Service-Start.

Vorteile dieser Methode

  • Du behältst volle Kontrolle über die Datei – ohne externe Tools oder Verschlüsselung.

  • Der Schutz greift systemweit – auch bei Zugriff über andere Prozesse oder Remote-Sitzungen.

  • In Kombination mit Kodierung oder Umgebungsvariablen erreichst du ein sehr hohes Sicherheitsniveau.