Verwenden der Verschlüsselung zum Schützen von Kennwörtern
von Saad Ladki
Einführung
Dieses Dokument enthält eine Übersicht über die Schritte zum Festlegen der Anwendungspool- und Arbeitsprozessisolation für IIS 7.0 und höher. Die Anwendungspoolisolation umfasst den Schutz von Daten, auf die WAS (der lokale IIS-Systemprozess) zugreifen muss. Ein Beispiel für diese Daten sind die Anwendungspool-Kennwörter. Die Arbeitsprozessisolation erfordert andererseits den Schutz von Daten, auf die die Identität des Anwendungspools zugreifen muss. Ein Beispiel für diese Daten ist das Kennwort des anonymen Benutzerkontos.
Voraussetzungen
Um diesen Prozess zu vereinfachen, werden zwei Teile von Beispielcode bereitgestellt:
- Erstellen Sie einen neuen RSA-Verschlüsselungsanbieter in machine.config.
- Legen Sie den Namen des Standardanbieters in machine.config fest.
Im letzten Abschnitt zu den Voraussetzungen werden Sie durch das Einrichten von vier Benutzerkonten geleitet, die in späteren Themen verwendet werden.
Erstellen einer neuen RSA-Verschlüsselungsanbieteranwendung
Öffnen Sie Windows-Editor, und erstellen Sie eine Datei in einem Verzeichnis Ihrer Wahl namens createProvider.cs, das den folgenden C#-Code enthält:
using System; using Microsoft.Web.Administration; using System.Configuration; namespace testingEncryption { public class createProvider { public static void Main(string[] args) { String keyContainerName = args[0]; String description = args[1]; String providerName = args[2]; System.Configuration.Configuration machineConfig = System.Configuration.ConfigurationManager.OpenMachineConfiguration(); System.Configuration.ProviderSettings settings = new System.Configuration.ProviderSettings(providerName, "System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"); settings.Parameters["description"] = description; settings.Parameters["keyContainerName"] = keyContainerName; settings.Parameters["cspProviderName"] = String.Empty; settings.Parameters["useMachineContainer"] = "true"; settings.Parameters["useOAEP"] = "false"; settings.Parameters["name"] = providerName; ProtectedConfigurationSection pcSection = (System.Configuration.ProtectedConfigurationSection)machineConfig.GetSection ("configProtectedData"); pcSection.Providers.Add(settings); machineConfig.Save(); } } }
Öffnen Sie dann eine Eingabeaufforderung mit erhöhten Rechten.
- Klicken Sie auf das Menü Start.
- Klicken Sie mit der rechten Maustaste auf Eingabeaufforderung.
- Wähle Als Administrator ausführen.
Navigieren Sie im Eingabeaufforderungsfenster zu dem Speicherort, an dem Sie die Datei createProvider.cs gespeichert haben, und führen Sie den folgenden Befehl aus, um den Code zu kompilieren:
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\csc.exe /reference:%SystemRoot%\System32\inetsrv\Microsoft.Web.Administration.dll createProvider.cs
Der Schritt ist nun abgeschlossen.
Erstellen einer Anwendung zum Ändern des Standardanbieters
Öffnen Sie Windows-Editor, und erstellen Sie eine Datei in einem Verzeichnis Ihrer Wahl namens setProvider.cs, das den folgenden C#-Code enthält:
using System; using Microsoft.Web.Administration; using System.Configuration; namespace testingEncryption { public class setProvider { public static void Main(string[] args) { String provider = args[0]; // example: DataProtectionConfigurationProvider System.Configuration.Configuration machineConfig = System.Configuration.ConfigurationManager.OpenMachineConfiguration(); ProtectedConfigurationSection pcSection = (System.Configuration.ProtectedConfigurationSection)machineConfig.GetSection("configProtectedData"); string oldEncryptionProviderName = pcSection.DefaultProvider; Console.WriteLine("The default provider is currently: " + oldEncryptionProviderName); Console.WriteLine("Changing the default provider to: " + provider); pcSection.DefaultProvider = provider; machineConfig.Save(); } } }
Öffnen Sie dann eine Eingabeaufforderung mit erhöhten Rechten.
- Klicken Sie auf das Menü Start.
- Klicken Sie mit der rechten Maustaste auf Eingabeaufforderung.
- Wähle Als Administrator ausführen.
Navigieren Sie im Eingabeaufforderungsfenster zu dem Speicherort, an dem Sie die Datei setProvider.cs gespeichert haben, und führen Sie den folgenden Befehl aus, um den Code zu kompilieren:
%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\csc.exe /reference:%SystemRoot%\System32\inetsrv\Microsoft.Web.Administration.dll setProvider.cs
Der Schritt ist nun abgeschlossen.
Erstellen von Benutzerkonten
In diesem Schritt erstellen wir vier neue Benutzerkonten, die in diesem Dokument verwendet werden.
Öffnen Sie zunächst ein Befehlsshellfenster, das unter Administratorrechten ausgeführt wird, indem Sie die folgenden Schritte ausführen:
- Klicken Sie auf das Menü Start.
- Klicken Sie mit der rechten Maustaste auf Eingabeaufforderung.
- Wähle Als Administrator ausführen.
- Führen Sie im Befehlsfenster den folgenden Befehl aus:
net user /add AppPoolIdentity1 password1
net user /add AppPoolIdentity2 password2
net user /add AnonymousAccount1 password3
net user /add AnonymousAccount2 password
Der Schritt ist nun abgeschlossen.
Isolation des Anwendungspools
IIS verfügt über einen Prozess namens WAS, der im Kontext von LOCALSYSTEM ausgeführt wird und der einzige Prozess ist, der Zugriff auf die Anwendungspool-Kennwörter benötigt. In dieser Aufgabe werden wir:
- Einen neuen RSA-Schlüssel (iisWasKey) erstellen, auf den nur LOCALSYSTEM und Administratoren Zugriff haben. Dieser Schlüssel wird verwendet, um die Kennwörter jedes Anwendungspools zu verschlüsseln.
- Zwei Anwendungspools erstellen.
- Jeden dieser Anwendungspools so konfigurieren, dass sie unter verschiedenen Identitäten ausgeführt werden und ihre Kennwörter mithilfe des iisWasKey verschlüsseln.
- Die NTFS-Dateisystemberechtigungen für die Schlüsseldateien beschränken, sodass nur SYSTEM und Administratoren Zugriff haben.
Neuen RSA-Schlüssel erstellen
- Klicken Sie auf das Menü Start.
- Klicken Sie mit der rechten Maustaste auf Eingabeaufforderung.
- Wähle Als Administrator ausführen.
- Navigieren Sie im Befehlsfenster zu der Stelle, an der Sie Ihre Datei createProvider.exe gespeichert haben, und führen Sie den folgenden Befehl aus:
createProvider.exe iisWasKey RsaKeyForWAS Rsa_WAS
Stellen Sie sicher, dass diese Änderungen ordnungsgemäß vorgenommen wurden. Öffnen Sie Ihre %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\config\machine.config
mit dem Windows-Editor, und überprüfen Sie, ob die Zeilen zum Abschnitt für den neuen Anbieter vorhanden sind:
keyContainerName="NetFrameworkConfigurationKey" cspProviderName=""
useMachineContainer="true" useOAEP="false" name="RsaProtectedConfigurationProvider"
type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
useMachineProtection="true" keyEntropy="" name="DataProtectionConfigurationProvider"
type="System.Configuration.DpapiProtectedConfigurationProvider,System.Configuration,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
cspProviderName="" useMachineContainer="true" useOAEP="false"
name="Rsa_WAS"
type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
Verschlüsseln der Anwendungspool-Kennwörter
Standardmäßig verwendet IIS, wenn eine Eigenschaft verschlüsselt ist, den defaultProvider für die Verschlüsselung, die in "machine.config" definiert ist. Der Standardwert hierfür ist RsaProtectedConfigurationProvider.
In diesem Schritt verwenden wir die zuvor erstellte setProvider.exe-Anwendung, um den Anbieter in iisWasKey zu ändern und dann den IIS-Manager zum Ändern der Kennwörter zu verwenden:
- Klicken Sie auf das Menü Start.
- Klicken Sie mit der rechten Maustaste auf Eingabeaufforderung.
- Wähle Als Administrator ausführen.
- Navigieren Sie im Befehlsfenster zu der Stelle, an der Sie Ihre Datei setProvider.exe gespeichert haben, und führen Sie den folgenden Befehl aus:
setProvider.exe Rsa_WAS
Der Standardanbieter Rsa_WAS wurde erfolgreich geändert.
Neue Anwendungspools erstellen
In diesem Schritt erstellen wir zwei neue Anwendungspools, die wir voneinander isolieren. Starten Sie dazu den IIS-Manager:
Klicken Sie auf Start, geben Sie „INetMgr.exe“ ein, und drücken Sie die EINGABETASTE (wenn Sie dazu aufgefordert werden, wählen Sie Weiter aus, um Ihre Berechtigungen zu erhöhen).
Klicken Sie auf die Schaltfläche + neben dem Namen Ihres Computers im Abschnitt Verbindungen.
Klicken Sie auf Anwendungspools.
Wählen Sie die Aufgabe auf der rechten Seite mit dem Titel Anwendungspool hinzufügen aus.
Geben Sie den Namen „AppPool1“ ein, und drücken Sie dann OK wie gezeigt:
Wiederholen Sie die vorherigen Schritte, aber verwenden Sie diesmal den Namen AppPool2.
Sie sehen, dass die Identität für AppPool1 und AppPool2 jeweils NetworkService ist. Wir ändern dies in die Konten, die wir zuvor erstellt haben, indem wir mit der rechten Maustaste auf AppPool1 klicken und dann auf Erweiterte Einstellungen.
Unter dem Titel Prozessmodell:
Klicken Sie auf die Schaltfläche rechts neben den Wörtern Identität.
Wählen Sie im Fenster Anwendungspool-Identiy das Optionsfeld Benutzerdefiniertes Konto aus, und klicken Sie auf die Schaltfläche „Festlegen...“.
Geben Sie den folgenden Benutzernamen und das folgende Kennwort im Dialogfeld Anmeldeinformationen festlegen ein.
Benutzername: AppPoolIdentity1
Kennwort: password1
Nun sollte der Wert Identität wie unten dargestellt angezeigt werden:
Klicken Sie auf OK , um die Änderungen zu speichern.
Wiederholen Sie den vorherigen Schritt für AppPool2 und den Benutzernamen „AppPoolIdentity2“ und das Kennwort „password2“.
Im IIS-Manager wird Folgendes angezeigt (es wurden hauptsächlich die Identitäten für die Anwendungspools geändert):
Überprüfen Sie die Änderungen mithilfe von Windows-Editor, und öffnen Sie die Datei
%SystemRoot%\System32\Inetsrv\applicationHost.config
. Navigieren Sie zum Abschnitt applicationPools. Dort sehen Sie, dass wir die Anwendungspool-Kennwörter mit dem Rsa_WAS-Schlüssel wie gewünscht verschlüsselt haben:password="[enc:Rsa_WAS:jAAAAAECAAADZgAAAKQAAAUkBfhWFbUHIt/qtlo+P7CiZC10r9H0DGBvAl U2mhiOxMoHXX6Dz0S8TQjKx2YTKvuE8y+SBUWrEs3JYzXKOkY45Q9z6E/3BFvru5oR9uzbjInASKF/83N N1tIEsoorQWmUOjnL4XM9RNzpqkY6TgyC3CyPUGN9fR7li5+AUupHHfgVPMzcLHfCsoq+ri+X6IbEnJdu cUEAYBn1P9F/Zxk=:enc]" /> password="[enc:Rsa_WAS:jAAAAAECAAADZgAAAKQAAEbQEa/sAmyLbryAR0hD3voip2+0RfzM44sXPekp I2H7HYLzta55NfLcG8vSPHhasahKVgO4wcIcT03CLSn+5koWvAaIRdeClhXWK/X8ZQPFooOpyhOqT0TEP5v jB+DXAKgq0RC6ufHFtrHMy0U69ew7/49YXEcrkF+o8OJZ1K+EkgA3J2ikHKxW0pFBU0tFvLCjt2/UXypfNI 0hYPe2syk=:enc]" />
Sperren der Verschlüsselungsanbieter
Standardmäßig erhält IIS_IUSRS Lesezugriff auf die Schlüssel, wenn sie erstellt werden. Sie können jedoch das ASPNET_REGIIS-Tool verwenden, um diesen Zugriff zu entfernen. Führen Sie dazu die folgenden Befehle an der Eingabeaufforderung mit erhöhten Rechten aus:
cd /d %systemroot%
cd Microsoft.NET\Framework\v2.0.50727
aspnet_regiis.exe -pr iisWasKey IIS_IUSRS
Dadurch wurde IIS_IUSRS (die Anwendungspool-Identitätengruppe) die Möglichkeit genommen, iisWasKey zu lesen, da nur Administratoren und LOCALSYSTEM Zugriff haben.
Arbeitsprozessisolation
In diesem Thema wird erläutert, wie Sie die Arbeitsprozessisolation einrichten, indem Sie zwei neue Sites erstellen, die Teil verschiedener Anwendungspools sind und unterschiedliche anonyme Authentifizierungsidentitäten aufweisen. Anschließend erstellen wir einen neuen RSA-Anbieter für jeden Anwendungspool, um die anonymen Kennwörter zu verschlüsseln.
Erstellen neuer Sites
In diesem Abschnitt erstellen wir zwei neue Sites und fügen jede Site zu einem zuvor erstellten Anwendungspool hinzu. Öffnen Sie zunächst eine Befehlsshell, die unter Administratorrechten ausgeführt wird, indem Sie die folgenden Schritte ausführen:
Klicken Sie auf das Menü Start.
Klicken Sie mit der rechten Maustaste auf Eingabeaufforderung.
Wähle Als Administrator ausführen.
Navigieren Sie im Befehlsfenster zum Verzeichnis wwwroot, indem Sie den folgenden Befehl verwenden:
cd /d %SystemDrive%\inetpub\wwwroot
Erstellen Sie ein neues Verzeichnis namens „one“ und ein Verzeichnis „two“ mithilfe der folgenden Befehle:
mkdir one
mkdir two
Erstellen Sie eine einfache Default.htm-Datei in den Verzeichnissen „one“ und „two“, die folgenden HTML-Code enthalten:
<html><body>Hello from site X</body></html>
Hinweis
Ersetzen Sie „X“ je nach Verzeichnisspeicherort der Datei durch „one“ oder „two“.
Verwenden Sie nun den IIS-Manager, um zwei Sites zu erstellen:
Klicken Sie auf Start, geben Sie „INetMgr.exe“ ein, und drücken Sie die EINGABETASTE (wenn Sie dazu aufgefordert werden, wählen Sie Weiter aus, um Ihre Berechtigungen zu erhöhen).
Klicken Sie auf die Schaltfläche + neben dem Namen Ihres Computers im Abschnitt Verbindungen.
Klicken Sie mit der rechten Maustaste auf Site in der Strukturansicht unter Verbindungen, und wählen Sie dann Website hinzufügen aus.
Die folgenden Informationen unterstützten Sie beim Erstellen Ihrer Site:
Name der Website: One
Anwendungspool: AppPool1
Physischer Pfad: {Speicherort Ihres Inetpub-Verzeichnisses}\wwwroot\one
Port: 81Nach Abschluss sollte es wie folgt aussehen:
Klicken Sie zum Speichern der Änderungen auf OK.
Wiederholen Sie die beiden vorherigen Schritte, aber verwenden Sie diesmal die folgenden Informationen für die zweite Site:
Name der Website: Two
Anwendungspool: AppPool2
Physischer Pfad: {Speicherort Ihres Inetpub-Verzeichnisses}\wwwroot\two
Port: 82
Sie haben nun zwei neue Sites mit dem Namen One und Two erstellt und sie den Anwendungspools AppPool1 und AppPool2 hinzugefügt.
Die URLs zum Testen Ihrer Site lauten:
http://localhost:81
für Site Onehttp://localhost:82
für Site Two
Erstellen neuer Anbieter für jeden Anwendungspool
In diesem Abschnitt erstellen wir einen neuen RSA-Anbieter für jeden der Anwendungspools:
Klicken Sie auf das Startmenü.
Klicken Sie mit der rechten Maustaste auf Eingabeaufforderung.
Wähle Als Administrator ausführen.
Navigieren Sie im Befehlsfenster zu der Stelle, an der Sie Ihre Datei createProvider.exe gespeichert haben, und führen Sie den folgenden Befehl aus:
createProvider.exe App1Key RsaKeyForAppPool1 Rsa_app1 createProvider.exe App2Key RsaKeyForAppPool2 Rsa_app2
Festlegen des anonymen Kontos für Site One
Führen Sie in Ihrem Eingabeaufforderungsfenster mit erhöhten Rechten den folgenden Befehl aus:
setProvider.exe Rsa_app1
Kehren Sie zurück zu IIS-Manager, und doppelklicken Sie auf Site One.
Doppelklicken Sie auf das Element Authentifizierung unter der Überschrift Featurename.
Wählen Sie Anonyme Authentifizierung aus, und klicken Sie dann auf Bearbeiten unter der Überschrift Aufgaben auf der rechten Seite, in der das Dialogfeld Anonyme Authentifizierungsanmeldeinformationen bearbeiten angezeigt wird.
Klicken Sie auf die Option Spezifischer Benutzer, und klicken Sie dann auf die Schaltfläche Festlegen.
Geben Sie den Benutzernamen AnonymousAccount1 und das Kennwort password3 ein, und wählen Sie OK aus.
Daraufhin wird das folgende Dialogfeld angezeigt:
Klicken Sie auf OK, um die Änderungen zu speichern.
Festlegen des anonymen Kontos für Site Two
Führen Sie in Ihrem Eingabeaufforderungsfenster mit erhöhten Rechten den folgenden Befehl aus:
setProvider.exe Rsa_app2
- Kehren Sie zurück zu IIS-Manager, und doppelklicken Sie auf Site Two.
- Doppelklicken Sie auf das Element Authentifizierung unter der Überschrift Featurename.
- Wählen Sie "Anonyme Authentifizierung" aus, und klicken Sie dann auf der rechten Seite auf "Bearbeiten" unter der Überschrift "Aufgaben", in der das Dialogfeld "Anonyme Anmeldeinformationen bearbeiten" angezeigt wird.
- Klicken Sie auf die Option Bestimmter Benutzer, und klicken Sie auf Festlegen.
- Geben Sie den Benutzernamen AnonymousAccount2 und das Kennwort password4 ein, und wählen Sie OK aus.
- Klicken Sie auf OK , um die Änderungen zu speichern.
Zurücksetzen des Verschlüsselungsanbieters auf die Standardeinstellung
- Kehren Sie zu Ihrem Eingabeaufforderungsfenster mit erhöhten Rechten zurück, und führen Sie den folgenden Befehl aus:
setProvider.exe RsaProtectedConfigurationProvider
Hinweis
Diese Änderung stellt sicher, dass alle verschlüsselten zukünftigen Eigenschaften den Standardverschlüsselungsanbieter verwenden.
Überprüfen der Änderungen
Überprüfen Sie, ob das erreicht wurde, was wir wollten. Öffnen Sie mit dem Windows Editor die Datei %SystemRoot%\System32\Inetsrv\applicationHost.config
:
Beachten Sie, dass das Kennwort für AppPool1 und AppPool2- weiterhin mit dem Rsa_Was-Schlüssel geschützt ist.
Beachten Sie, dass das Kennwort für AnonymousAccount1 auch mit dem Rsa_app1 Schlüssel geschützt ist:
password="[enc:Rsa_app1:jAAAAAECAAADZgAAAKQAAKoz4LV7HyPQuyNzXh8gspB0rPG7j3Ijvn3d+jY3/f gma8ZxA7AHLUxjis9b0+Qu8XkLvsGn/A+F+m1O68gY1LkWzAcSW9ks81FuiBVhpZx73FzEo6aOz2QqBduJ7Xhu x923KMBqmwkIVJ0mVAdzwFIm6LWymwRXxNxDE4eosKsw6QP6Rd6duC8gckaLxrTndclErQYgGdMt3W6ofxzRMlc=:enc]" />
Beachten Sie schließlich auch, dass das Kennwort für AnonymousAccount2 ebenfalls mit dem Rsa_app2 Schlüssel geschützt ist:
password="[enc:Rsa_app2:jAAAAAECAAADZgAAAKQAAKmHMhCTICEUhGncSGCxQc6ll/QGXo0asEIzOf3rIjl sBDGRYhlDQWlf2QbFcIsBGYt8dHo9hzAQN/f03BPSlaFynevpSx4xJOg2/B8ATgPmCg4vgxpY5huZbGxongs55c Rr20WFXsxzlUuw1xoUZI8c1+7gQPOtF0Rwh1g8NBmb5ML/R3jAIFcMtVhaj0OOIfAP7JCjdInwztBqK0XO7FM=:enc]" />
Sperren der Verschlüsselungsanbieter
Sichern Sie die Dateiberechtigungen für die Schlüssel, wie oben beschrieben. Führen Sie die folgenden Befehle von einer Eingabeaufforderung mit erhöhten Rechten aus:
cd /d %systemroot%
cd Microsoft.NET\Framework\v2.0.50727
aspnet_regiis.exe -pr App1Key IIS_IUSRS
aspnet_regiis.exe -pa App1Key AppPoolIdentity1
aspnet_regiis.exe -pr App2Key IIS_IUSRS
aspnet_regiis.exe -pa App2Key AppPoolIdentity2
Diese Befehle haben IIS_IUSRS die Möglichkeit zum Lesen der Schlüssel genommen und nur die Anwendungspoolidentität hinzugefügt, die Zugriffsberechtigungen für die Schlüssel benötigt.
Testen Ihrer Sites
Testen Sie jetzt Ihre Sites:
http://localhost:81
http://localhost:82
Alles sollte wie zuvor funktionieren.
Zusammenfassung
Zusammenfassend haben wir die folgenden Aufgaben ausgeführt, um die Anwendungspooleinstellungen zu sichern:
- Zwei Anwendungspools erstellt.
- Zwei lokale Benutzerkonten erstellt und als Anwendungspoolidentitäten konfiguriert.
- Wir haben einen Verwaltungsverschlüsselungsschlüssel erstellt und verwendet, um alle Kennwörter für Anwendungspoolidentitäten zu schützen.
- Wir haben ASPNET_REGIIS verwendet, um IIS_IUSRS (die Anwendungspool-Identitätengruppe) den Zugriff auf den Schlüssel zu verweigern.
Diese Aufgaben stellen effektiv sicher, dass nur die Administratoren und SYSTEM-Konten die Kennwörter für die Anwendungspools lesen können. Wenn Anwendungen in einem Anwendungspool also versuchen, die Kennwörter für den (oder einen beliebigen) Anwendungspool abzurufen, schlägt der Versuch fehl.
Um die Einstellungen für den Arbeitsprozess zu isolieren, führen wir folgende Schritte aus:
- Erstellen eines neuen anonymen Identitätskontos
- Wir haben einen neuen Anbieter für den Anwendungspool erstellt.
- Wir haben das Kennwort für die anonyme Authentifizierung mit dem Anwendungspoolschlüssel verschlüsselt.
- Wir haben den Zugriff auf den anonymen Authentifizierungsanbieter für IIS_IUSRS entfernt und nur der Anwendungspoolidentität Zugriff gewährt.
Dadurch wurde effektiv sichergestellt, dass die Identität des Anwendungspools das anonyme Kennwort entschlüsseln kann, zu dem es gehört, und sonst niemand.