Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Verbesserungen wurden vorgenommen, die sich darauf auswirken, wie die integrierte Windows-Authentifizierung von den HttpWebRequest, HttpListener, SmtpClient, SslStream, NegotiateStream und verwandten Klassen in den System.Net und verwandten Namespaces behandelt wird. Unterstützung wurde für erweiterten Schutz hinzugefügt, um die Sicherheit zu verbessern.
Diese Änderungen können sich auf Anwendungen auswirken, die diese Klassen verwenden, um Webanforderungen vorzunehmen und Antworten zu empfangen, bei denen die integrierte Windows-Authentifizierung verwendet wird. Diese Änderung kann sich auch auf Webserver und Clientanwendungen auswirken, die für die Verwendung der integrierten Windows-Authentifizierung konfiguriert sind.
Diese Änderungen können sich auch auf Anwendungen auswirken, die diese Klassen verwenden, um andere Arten von Anforderungen vorzunehmen und Antworten zu empfangen, bei denen die integrierte Windows-Authentifizierung verwendet wird.
Die Änderungen zur Unterstützung des erweiterten Schutzes sind nur für Anwendungen unter Windows 7 und Windows Server 2008 R2 verfügbar. Die erweiterten Schutzfeatures sind in früheren Versionen von Windows nicht verfügbar.
Überblick
Das Design der integrierten Windows-Authentifizierung ermöglicht es, dass einige Antworten auf Anmeldeinformationen universell sind, was bedeutet, dass sie wiederverwendet oder weitergeleitet werden können. Die Herausforderungsantworten sollten mindestens mit zielspezifischen Informationen und vorzugsweise auch mit einigen kanalspezifischen Informationen erstellt werden. Dienste können dann erweiterten Schutz bereitstellen, um sicherzustellen, dass Antworten auf Herausforderungen zu Anmeldeinformationen dienstspezifische Informationen wie einen Dienstprinzipalname (Service Principal Name, SPN) enthalten. Enthält der Austausch von Anmeldedaten diese Informationen, können die Dienste besser vor einer böswilligen Verwendung von Abfragerückmeldungen zu Anmeldeinformationen schützen, die möglicherweise nicht ordnungsgemäß verwendet wurden.
Die erweiterte Schutzkonzeption ist eine Verbesserung der Authentifikationsprotokolle, die zur Abwehr von Authentifizierungs-Relay-Angriffen konzipiert wurde. Es dreht sich um das Konzept von Kanal- und Dienstbindungsinformationen.
Die allgemeinen Ziele sind die folgenden:
Wenn der Client aktualisiert wird, um den erweiterten Schutz zu unterstützen, sollten Anwendungen eine Kanalbindung und Dienstbindungsinformationen für alle unterstützten Authentifizierungsprotokolle bereitstellen. Kanalbindungsinformationen können nur bereitgestellt werden, wenn eine Bindung an einen Kanal (TLS) besteht. Dienstbindungsinformationen sollten immer bereitgestellt werden.
Aktualisierte Server, die ordnungsgemäß konfiguriert sind, überprüfen möglicherweise die Kanal- und Dienstbindungsinformationen, wenn sie im Clientauthentifizierungstoken vorhanden sind, und lehnen den Authentifizierungsversuch ab, wenn die Kanalbindungen nicht übereinstimmen. Je nach Bereitstellungsszenario können Server die Kanalbindung, die Dienstbindung oder beides überprüfen.
Aktualisierte Server haben die Möglichkeit, Clientanforderungen auf Down-Level-Ebene zu akzeptieren oder abzulehnen, die die Kanalbindungsinformationen basierend auf der Richtlinie nicht enthalten.
Die durch den erweiterten Schutz verwendeten Informationen bestehen aus einem oder beiden der folgenden zwei Elemente:
einem Kanalbindungstoken oder CBT (Channel Binding Token)
Dienstbindungsinformationen in Form eines Dienstprinzipalnamens oder SPN.
Dienstbindungsinformationen sind ein Hinweis auf die Absicht eines Clients, sich bei einem bestimmten Dienstendpunkt zu authentifizieren. Sie wird von Client zu Server mit den folgenden Eigenschaften kommuniziert:
Der SPN-Wert muss für den Server verfügbar sein, der die Clientauthentifizierung in Klartextform ausführt.
Der Wert des SPN ist öffentlich.
Der SPN muss während der Übertragung kryptografisch geschützt sein, sodass ein Man-in-the-Middle-Angriff seinen Wert nicht einfügen, entfernen oder ändern kann.
Ein CBT ist eine Eigenschaft des gesicherten Außenkanals (z.B. TLS), die zur Kopplung (Bindung) an eine Konversation über einen clientauthentifizierten Innenkanal verwendet wird. Das CBT muss über die folgenden Eigenschaften verfügen (auch durch IETF RFC 5056 definiert):
Ist ein Außenkanal vorhanden, muss der CBT-Wert eine Eigenschaft sein, die entweder den Außenkanal oder den Serverendpunkt identifiziert. Sie muss auf beiden Seiten der Konversation unabhängig empfangen werden, sowohl beim Client als auch beim Server.
Der Wert des CBT, das vom Client gesendet wird, darf von keinem Angreifer beeinflusst werden.
Es werden keine Garantien zur Geheimhaltung des CBT-Werts gemacht. Dies bedeutet jedoch nicht, dass der Wert der Dienstbindung sowie die Kanalbindungsinformationen von anderen als dem server, der die Authentifizierung ausführt, untersucht werden können, da das Protokoll, das das CBT trägt, verschlüsselt sein könnte.
Das CBT muss während der Übertragung kryptografisch integritätsgeschützt sein, sodass ein Angreifer seinen Wert nicht einfügen, entfernen oder ändern kann.
Die Kanalbindung erfolgt durch den Client, der den SPN und das CBT auf den Server in manipulationssicherer Weise überträgt. Der Server überprüft die Kanalbindungsinformationen in Übereinstimmung mit seiner Richtlinie und lehnt Authentifizierungsversuche ab, bei denen er nicht glaubt, dass er das beabsichtigte Ziel ist. Auf diese Weise werden die beiden Kanäle kryptografisch miteinander verbunden.
Um die Kompatibilität mit vorhandenen Clients und Anwendungen zu erhalten, kann ein Server so konfiguriert werden, dass Authentifizierungsversuche von Clients zugelassen werden, die den erweiterten Schutz noch nicht unterstützen. Dies wird als "teilweise gehärtete" Konfiguration bezeichnet, im Gegensatz zu einer "vollständig gehärteten" Konfiguration.
Mehrere Komponenten in den System.Net Und System.Net.Security Namespaces führen die integrierte Windows-Authentifizierung im Auftrag einer aufrufenden Anwendung aus. In diesem Abschnitt werden Änderungen an System.Net Komponenten beschrieben, um bei der Verwendung der integrierten Windows-Authentifizierung erweiterten Schutz hinzuzufügen.
Erweiterter Schutz wird derzeit unter Windows 7 unterstützt. Es wird ein Mechanismus bereitgestellt, damit eine Anwendung ermitteln kann, ob das Betriebssystem erweiterten Schutz unterstützt.
Änderungen zur Unterstützung des erweiterten Schutzes
Der bei der integrierten Windows-Authentifizierung verwendete Authentifizierungsprozess umfasst abhängig vom verwendeten Authentifizierungsprotokoll häufig eine Vom Zielcomputer ausgegebene Herausforderung und wird an den Clientcomputer zurückgesendet. Erweiterter Schutz fügt diesem Authentifizierungsprozess neue Features hinzu
Der System.Security.Authentication.ExtendedProtection Namespace bietet Unterstützung für die Authentifizierung mithilfe des erweiterten Schutzes für Anwendungen. Die ChannelBinding Klasse in diesem Namespace stellt eine Kanalbindung dar. Die ExtendedProtectionPolicy Klasse in diesem Namespace stellt die erweiterte Schutzrichtlinie dar, die vom Server zum Überprüfen eingehender Clientverbindungen verwendet wird. Andere Klassenmember werden mit erweitertem Schutz verwendet.
Für Serveranwendungen umfassen diese Klassen Folgendes:
Ein ExtendedProtectionPolicy, das die folgenden Elemente enthält:
Eine OSSupportsExtendedProtection Eigenschaft, die angibt, ob das Betriebssystem die integrierte Windows-Authentifizierung mit erweitertem Schutz unterstützt.
Ein PolicyEnforcement Wert, der angibt, wann die erweiterte Schutzrichtlinie erzwungen werden soll.
Ein ProtectionScenario Wert, der das Bereitstellungsszenario angibt. Dies beeinflusst, wie erweiterter Schutz überprüft wird.
Eine optionale ServiceNameCollection mit der benutzerdefinierten SPN-Liste für einen Abgleich mit dem vom Client bereitgestellten SPN als beabsichtigtem Ziel der Authentifizierung.
Ein optionales ChannelBinding, das eine benutzerdefinierte Kanalbindung enthält, die für die Überprüfung verwendet wird. Dieses Szenario ist kein gängiger Fall.
Der System.Security.Authentication.ExtendedProtection.Configuration Namespace bietet Unterstützung für die Konfiguration der Authentifizierung mithilfe des erweiterten Schutzes für Anwendungen.
Es wurden mehrere Featureänderungen vorgenommen, um den erweiterten Schutz im vorhandenen System.Net Namespace zu unterstützen. Diese Änderungen umfassen Folgendes:
Eine neue Klasse TransportContext, die dem Namespace System.Net hinzugefügt wurde und einen Transportkontext darstellt.
Neue EndGetRequestStream- und GetRequestStream-Überladungsmethoden in der HttpWebRequest-Klasse, die das Abrufen des TransportContext ermöglichen, um erweiterten Schutz für Clientanwendungen zu unterstützen.
Ergänzungen zu den HttpListener Und HttpListenerRequest Klassen zur Unterstützung von Serveranwendungen.
Es wurde eine Featureänderung vorgenommen, um den erweiterten Schutz für SMTP-Clientanwendungen im vorhandenen System.Net.Mail Namespace zu unterstützen:
- Eine TargetName Eigenschaft in der SmtpClient Klasse, die den SPN für die Authentifizierung bei Verwendung des erweiterten Schutzes für SMTP-Clientanwendungen darstellt.
Es wurden mehrere Featureänderungen vorgenommen, um den erweiterten Schutz im vorhandenen System.Net.Security Namespace zu unterstützen. Diese Änderungen umfassen Folgendes:
Neue Überladungsmethoden BeginAuthenticateAsClient und AuthenticateAsClient in der Klasse NegotiateStream zur Übergabe eines CBT für die Unterstützung des erweiterten Schutzes bei Clientanwendungen.
Neue BeginAuthenticateAsServer und AuthenticateAsServer Überladungsmethoden in der NegotiateStream Klasse, die das Übergeben eines ExtendedProtectionPolicy ermöglichen, um erweiterten Schutz für Serveranwendungen zu unterstützen.
Eine neue TransportContext Eigenschaft in der SslStream Klasse zur Unterstützung des erweiterten Schutzes für Client- und Serveranwendungen.
Eine SmtpNetworkElement Eigenschaft wurde hinzugefügt, um die Konfiguration des erweiterten Schutzes für SMTP-Clients im System.Net.Security Namespace zu unterstützen.
Erweiterter Schutz für Clientanwendungen
Erweiterte Schutzunterstützung für die meisten Clientanwendungen erfolgt automatisch. Die Klassen HttpWebRequest und SmtpClient unterstützen den erweiterten Schutz, wenn die zugrunde liegende Windows-Version den erweiterten Schutz unterstützt. Eine HttpWebRequest Instanz sendet einen SPN, der aus dem Uri konstruiert wird. Standardmäßig sendet eine SmtpClient Instanz einen SPN, der aus dem Hostnamen des SMTP-E-Mail-Servers erstellt wurde.
Für die benutzerdefinierte Authentifizierung können Clientanwendungen die HttpWebRequest.EndGetRequestStream(IAsyncResult, TransportContext)- oder HttpWebRequest.GetRequestStream(TransportContext)-Methoden in der HttpWebRequest-Klasse verwenden, die das Abrufen des TransportContext und des CBT mithilfe der GetChannelBinding-Methode ermöglichen.
Sie können den von einer HttpWebRequest-Instanz an einen bestimmten Server gesendeten SPN zur integrierten Windows-Authentifizierung überschreiben, indem Sie die Eigenschaft CustomTargetNameDictionary festlegen.
Die TargetName Eigenschaft kann verwendet werden, um einen benutzerdefinierten SPN festzulegen, der für die integrierte Windows-Authentifizierung für die SMTP-Verbindung verwendet werden soll.
Erweiterter Schutz für Serveranwendungen
HttpListener stellt automatisch Mechanismen zum Überprüfen von Dienstbindungen beim Ausführen der HTTP-Authentifizierung bereit.
Das sicherste Szenario ist das Aktivieren des erweiterten Schutzes für HTTPS:// Präfixe. Legen Sie HttpListener.ExtendedProtectionPolicy in diesem Fall auf ein ExtendedProtectionPolicy mit PolicyEnforcement, das auf WhenSupported oder Always gesetzt ist, und setzen Sie ProtectionScenario auf TransportSelected. Ein Wert von WhenSupported versetzt HttpListener in den Modus 'teilweise gehärtet', während Always dem vollständig gehärteten Modus entspricht.
In dieser Konfiguration, wenn eine Anforderung über einen äußeren sicheren Kanal an den Server gestellt wird, wird der äußere Kanal für eine Kanalbindung abgefragt. Diese Kanalbindung wird an die SSPI-Authentifizierungsaufrufe übergeben, die überprüfen, ob die Kanalbindung im Authentifizierungsblob übereinstimmt. Es gibt drei mögliche Ergebnisse:
Das zugrunde liegende Betriebssystem des Servers unterstützt keinen erweiterten Schutz. Die Anforderung wird nicht für die Anwendung verfügbar gemacht, und eine nicht autorisierte Antwort (401) wird an den Client zurückgegeben. Eine Nachricht mit dem Grund für den Fehler wird in der Ablaufverfolgungsquelle HttpListener protokolliert.
Der SSPI-Aufruf schlägt fehl, wobei angegeben wird, dass der Client entweder eine Kanalbindung angegeben hat, die nicht mit dem erwarteten Wert übereinstimmt, der vom äußeren Kanal abgerufen wurde, oder der Client konnte keine Kanalbindung bereitstellen, wenn die erweiterte Schutzrichtlinie auf dem Server für Always konfiguriert wurde. In beiden Fällen wird die Anforderung nicht für die Anwendung verfügbar gemacht, und eine nicht autorisierte Antwort (401) wird an den Client zurückgegeben. Eine Nachricht mit dem Grund für den Fehler wird in der Ablaufverfolgungsquelle HttpListener protokolliert.
Der Client gibt die richtige Kanalbindung an oder kann eine Verbindung herstellen, ohne eine Kanalbindung anzugeben, da die erweiterte Schutzrichtlinie auf dem Server mit WhenSupported konfiguriert ist. Die Anforderung wird zur Verarbeitung an die Anwendung zurückgegeben. Es wird keine Überprüfung des Dienstnamens automatisch durchgeführt. Eine Anwendung kann eine eigene Überprüfung des Dienstnamens mithilfe der ServiceName-Eigenschaft durchführen, dies ist jedoch unter diesen Umständen redundant.
Wenn eine Anwendung eigene SSPI-Aufrufe durchführt, um die Authentifizierung basierend auf Blobs auszuführen, die im Textkörper einer HTTP-Anforderung übergeben wurden und die Kanalbindung unterstützen möchte, muss sie die erwartete Kanalbindung aus dem äußeren sicheren Kanal HttpListener abrufen, um sie an die native Win32-Funktion AcceptSecurityContext zu übergeben. Verwenden Sie dazu die TransportContext-Eigenschaft und rufen Sie die GetChannelBinding-Methode auf, um die CBT abzurufen. Es werden nur Endpunktbindungen unterstützt. Wird etwas anderes als Endpoint angegeben, wird eine NotSupportedException ausgelöst. Wenn das zugrunde liegende Betriebssystem die Kanalbindung unterstützt, gibt die GetChannelBinding-Methode einen ChannelBindingSafeHandle zurück, der einen Zeiger auf eine Kanalbindung umschließt, die zum Übergeben an die AcceptSecurityContext-Funktion geeignet ist, als pvBuffer-Mitglied einer SecBuffer-Struktur, die im pInput-Parameter übergeben wird. Die Size Eigenschaft enthält die Länge der Kanalbindung in Bytes. Wenn das zugrunde liegende Betriebssystem Keine Kanalbindungen unterstützt, gibt die Funktion zurück null.
Ein weiteres mögliches Szenario ist das Aktivieren des erweiterten Schutzes für HTTP:// Präfixe, wenn Proxys nicht verwendet werden. Legen Sie HttpListener.ExtendedProtectionPolicy in diesem Fall auf ein ExtendedProtectionPolicy mit PolicyEnforcement, das auf WhenSupported oder Always gesetzt ist, und setzen Sie ProtectionScenario auf TransportSelected. Ein Wert von WhenSupported versetzt HttpListener in den Modus 'teilweise gehärtet', während Always dem vollständig gehärteten Modus entspricht.
Eine Standardliste der zulässigen Dienstnamen wird basierend auf den Präfixen erstellt, die bei der HttpListener angemeldet wurden. Diese Standardliste kann über die DefaultServiceNames Eigenschaft untersucht werden. Wenn diese Liste nicht vollständig ist, kann eine Anwendung eine benutzerdefinierte Dienstnamenauflistung im Konstruktor für die ExtendedProtectionPolicy Klasse angeben, die anstelle der Standarddienstnamenliste verwendet wird.
Wird in dieser Konfiguration eine Anforderung ohne sicheren Außenkanal an den Server gesendet, erfolgt die Authentifizierung üblicherweise ohne Überprüfung der Kanalbindung. Wenn die Authentifizierung erfolgreich ist, wird der Kontext für den Dienstnamen abgefragt, den der Client bereitgestellt und anhand der Liste der zulässigen Dienstnamen überprüft hat. Es gibt vier mögliche Ergebnisse:
Das zugrunde liegende Betriebssystem des Servers unterstützt keinen erweiterten Schutz. Die Anforderung wird nicht für die Anwendung verfügbar gemacht, und eine nicht autorisierte Antwort (401) wird an den Client zurückgegeben. Eine Nachricht mit dem Grund für den Fehler wird in der Ablaufverfolgungsquelle HttpListener protokolliert.
Das zugrunde liegende Betriebssystem des Clients unterstützt keinen erweiterten Schutz. In der WhenSupported Konfiguration wird der Authentifizierungsversuch erfolgreich ausgeführt, und die Anforderung wird an die Anwendung zurückgegeben. In der Always Konfiguration schlägt der Authentifizierungsversuch fehl. Die Anforderung wird nicht für die Anwendung verfügbar gemacht, und eine nicht autorisierte Antwort (401) wird an den Client zurückgegeben. Eine Nachricht mit dem Grund für den Fehler wird in der Ablaufverfolgungsquelle HttpListener protokolliert.
Das zugrunde liegende Betriebssystem des Clients unterstützt erweiterten Schutz, die Anwendung hat jedoch keine Dienstbindung angegeben. Die Anforderung wird nicht für die Anwendung verfügbar gemacht, und eine nicht autorisierte Antwort (401) wird an den Client zurückgegeben. Eine Nachricht mit dem Grund für den Fehler wird in der Ablaufverfolgungsquelle HttpListener protokolliert.
Der Client hat eine Dienstbindung angegeben. Die Dienstbindung wird mit der Liste der zulässigen Dienstbindungen verglichen. Wenn sie übereinstimmt, wird die Anforderung an die Anwendung zurückgegeben. Andernfalls wird die Anforderung nicht für die Anwendung verfügbar gemacht, und eine nicht autorisierte Antwort (401) wird automatisch an den Client zurückgegeben. Eine Nachricht mit dem Grund für den Fehler wird in der Ablaufverfolgungsquelle HttpListener protokolliert.
Wenn dieser einfache Ansatz mit einer zulässigen Liste zulässiger Dienstnamen nicht ausreicht, kann eine Anwendung eine eigene Überprüfung des Dienstnamens durch Abfragen der ServiceName Eigenschaft bereitstellen. Im 1. und 2. Fall gibt die Eigenschaft null zurück. Im Fall 3 gibt sie eine leere Zeichenfolge zurück. In Fall 4 wird der vom Client angegebene Dienstname zurückgegeben.
Diese erweiterten Schutzfeatures können auch von Serveranwendungen für die Authentifizierung mit anderen Arten von Anforderungen und bei Verwendung vertrauenswürdiger Proxys verwendet werden.