Angriffe durch RechteerweiterungElevation of Privilege

Ausweitung von Berechtigungen ergibt, wenn eine Autorisierung Angreifer Berechtigungen über die ihm ursprünglich gewährten hinaus erteilen.Elevation of privilege results from giving an attacker authorization permissions beyond those initially granted. Dies ist zum Beispiel der Fall, wenn einem Angreifer mit einem Berechtigungssatz von "Nur-Lesen"-Berechtigungen es irgendwie gelingt, "Lesen-und-Schreiben"-Berechtigungen in seinen Berechtigungssatz aufzunehmen.For example, an attacker with a privilege set of "read only" permissions somehow elevates the set to include "read and write."

Vertrauenswürdige STS sollten SAML-Tokenansprüche signierenTrusted STS Should Sign SAML Token Claims

Ein SAML (Security Assertions Markup Language)-Token ist ein generisches XML-Token, das den Standardtyp für ausgestellte Token darstellt.A Security Assertions Markup Language (SAML) token is a generic XML token that is the default type for issued tokens. SAML-Token können von einem Sicherheitstokendienst (Security Token Service, STS) erstellt werden, der für den empfangenden Webdienst in einem typischen Datenaustausch als vertrauenswürdig gilt.A SAML token can be constructed by a Security Token Service (STS) that the end Web service trusts in a typical exchange. SAML-Token enthalten Ansprüche in Form von Anweisungen.SAML tokens contain claims in statements. Ein Angreifer kann die Ansprüche aus einem gültigen Token kopieren, ein neues SAML-Token erstellen und mit einem anderen Aussteller signieren.An attacker may copy the claims from a valid token, create a new SAML token, and sign it with a different issuer. Das Ziel ist hierbei, festzustellen, ob der Server Aussteller validiert, und wenn nicht, diese Schwäche zum Erstellen von SAML-Token auszunutzen, die Berechtigungen über die von einem vertrauenswürdigen STS beabsichtigten hinaus gewähren.The intent is to determine whether the server is validating issuers and, if not, utilize the weakness to construct SAML tokens that allow privileges beyond those intended by a trusted STS.

Die SamlAssertion-Klasse überprüft die digitale Signatur, die in einem SAML-Token enthalten ist, und der Standard-SamlSecurityTokenAuthenticator erfordert, dass SAML-Token mit einem X.509-Zertifikat signiert sind, das gültig ist, wenn CertificateValidationMode der IssuedTokenServiceCredential-Klasse auf ChainTrust festgelegt ist.The SamlAssertion class verifies the digital signature contained within a SAML token, and the default SamlSecurityTokenAuthenticator requires that SAML tokens be signed by an X.509 certificate that is valid when the CertificateValidationMode of the IssuedTokenServiceCredential class is set to ChainTrust. Mithilfe des ChainTrust-Modus allein kann nicht bestimmt werden, ob der Aussteller des SAML-Tokens vertrauenswürdig ist.ChainTrust mode alone is insufficient to determine whether the issuer of the SAML token is trusted. Dienste, die ein stärker granuliertes Vertrauenswürdigkeitsmodell erfordern, können entweder mithilfe von Autorisierungs- oder Durchsetzungsrichtlinien den Aussteller der erzeugten Anspruchssätze durch die Authentifizierung der Token überprüfen oder die X.509-Validierungseinstellungen für IssuedTokenServiceCredential verwenden, um den Satz zulässiger Signaturzertifikate einzuschränken.Services that require a more granular trust model can either use authorization and enforcement policies to check the issuer of the claim sets produced by issued token authentication or use the X.509 validation settings on IssuedTokenServiceCredential to restrict the set of allowed signing certificates. Weitere Informationen finden Sie unter Verwalten von Ansprüchen und Autorisierung mit dem Identitätsmodell und Verbund und ausgestellte Token.For more information, see Managing Claims and Authorization with the Identity Model and Federation and Issued Tokens.

Wechseln der Identität ohne SicherheitskontextSwitching Identity Without a Security Context

Die nachfolgenden Ausführungen gelten nur für WinFXWinFX.The following applies only to WinFXWinFX.

Wird nicht geändert, wenn zwischen einem Client und Server, die Identität des Clients eine Verbindung hergestellt wird, nur in einem Fall: nach dem der WCF-Client geöffnet wird, wenn alle der folgenden Bedingungen erfüllt sind,:When a connection is established between a client and server, the identity of the client does not change, except in one situation: after the WCF client is opened, if all of the following conditions are true:

  • Die Verfahren, um einen Sicherheitskontext (mithilfe einer transportsicherheitssitzung oder einer nachrichtensicherheitssitzung) herzustellen abgeschaltet (EstablishSecurityContext -Eigenschaftensatz auf false im Falle von nachrichtensicherheit oder Transport nicht fähig zum Einrichten der Sicherheit Sitzungen werden in Transport Sicherheit Groß-/Kleinschreibung verwendet.The procedures to establish a security context (using a transport security session or message security session) is switched off (EstablishSecurityContext property is set to false in case of message security or transport not capable of establishing security sessions is used in transport security case. HTTPS ist ein Beispiel für ein solches Transportprotokoll).HTTPS is one example of such transport).

  • Sie verwenden die Windows-Authentifizierung.You are using Windows authentication.

  • Sie legen die Anmeldeinformationen nicht explizit fest.You do not explicitly set the credential.

  • Sie rufen den Dienst unter dem Identitätswechsel-Sicherheitskontext auf.You are calling the service under the impersonated security context.

Wenn diese Bedingungen erfüllt sind, kann die Identität verwendet zum Authentifizieren des Clients an den Dienst zu ändern (es ist möglicherweise nicht die imitierte Identität, sondern die Prozessidentität stattdessen) nach der WCF-Client geöffnet wird.If these conditions are true, the identity used to authenticate the client to the service might change (it might not be the impersonated identity but the process identity instead) after the WCF client is opened. Dies geschieht, weil die Windows-Anmeldeinformationen, mit denen der Client für den Dienst authentifiziert wird, mit jeder Nachricht übermittelt werden, und die zur Authentifizierung verwendeten Anmeldeinformationen von der Windows-Identität des aktuellen Threads bezogen werden.This occurs because the Windows credential used to authenticate the client to the service is transmitted with every message, and the credential used for authentication is obtained from the current thread's Windows identity. Wenn sich die Windows-Identität des aktuellen Threads ändert (beispielsweise durch einen Identitätswechsel, mit dem ein anderer Aufrufer imitiert wird), dann können sich auch die Anmeldeinformationen ändern, die an die Nachricht angefügt sind und die zur Authentifizierung des Clients gegenüber dem Dienst verwendet werden.If the Windows identity of the current thread changes (for example, by impersonating a different caller), the credential that is attached to the message and used to authenticate the client to the service might also change.

Wenn das Verhalten beim Einsatz der Windows-Authentifizierung in Verbindung mit dem Identitätswechsel deterministisch sein soll, müssen Sie die Windows-Anmeldeinformationen explizit festlegen, oder Sie müssen einen Sicherheitskontext für den Dienst einrichten.If you want to have deterministic behavior when using Windows authentication together with impersonation you need to explicitly set the Windows credential or you need to establish a security context with the service. Hierzu verwenden Sie eine Nachrichtensicherheitssitzung oder eine Transportsicherheitssitzung.To do this, use a message security session or a transport security session. Zum Beispiel kann der net.tcp-Transport eine Transportsicherheitssitzung bereitstellen.For example, the net.tcp transport can provide a transport security session. Darüber hinaus dürfen Sie in Aufrufen des Diensts nur die synchrone Version von Clientvorgängen verwenden.Additionally, you must use only a synchronous version of client operations when calling the service. Wenn Sie einen Nachrichtensicherheitskontext einrichten, sollten Sie die Verbindung mit dem Dienst nicht länger als den für die Sitzung konfigurierten Erneuerungszeitraum geöffnet halten, weil sich die Identität auch während des Sitzungserneuerungsprozesses ändern kann.If you establish a message security context, you should not keep the connection to the service open longer than the configured session renewal period, because the identity can also change during the session renewal process.

Aufzeichnung der AnmeldeinformationenCredentials Capture

Die folgenden Ausführungen gelten für .NET Framework Version 3.5.NET Framework version 3.5 und nachfolgende Versionen.The following applies to .NET Framework Version 3.5.NET Framework version 3.5, and subsequent versions.

Die vom Client oder Dienst verwendeten Anmeldeinformationen basieren auf dem aktuellen Kontextthread.Credentials used by the client or the service are based on the current context thread. Die Anmeldeinformationen werden durch einen Aufruf der Open-Methode (bzw. BeginOpen für asynchrone Aufrufe) des Clients oder Diensts bezogen.The credentials are obtained when the Open method (or BeginOpen, for asynchronous calls) of the client or service is called. Sowohl für die ServiceHost-Klasse als auch für die ClientBase<TChannel>-Klasse gilt, dass die Open-Methode bzw. die BeginOpen-Methode von der Open-Methode bzw. der BeginOpen-Methode der CommunicationObject-Klasse abgeleitet ist.For both the ServiceHost and ClientBase<TChannel> classes, the Open and BeginOpen methods inherit from the Open and BeginOpen methods of the CommunicationObject class.

Hinweis

Bei Verwendung der BeginOpen-Methode kann nicht garantiert werden, dass es sich bei den aufgezeichneten Anmeldeinformationen um die Anmeldeinformationen des Prozesses handelt, von dem die Methode aufgerufen wird.When using the BeginOpen method, the credentials captured cannot be guaranteed to be the credentials of the process that calls the method.

Tokenzwischenspeicher ermöglichen Wiederholungen mit veralteten DatenToken Caches Allow Replay Using Obsolete Data

WCF verwendet die lokalen Sicherheitsautorität (LSA) LogonUser Funktion zum Authentifizieren von Benutzern von Benutzername und Kennwort.WCF uses the local security authority (LSA) LogonUser function to authenticate users by user name and password. Da die Anmeldefunktion ein kostspieliger Vorgang ist, ermöglicht WCF an, dass Sie Zwischenspeicherung von Token, die darstellen, Benutzer zur Erhöhung der Leistung authentifiziert.Because the logon function is a costly operation, WCF allows you to cache tokens that represent authenticated users to increase performance. Mit dem Zwischenspeichermechanismus werden die Ergebnisse von LogonUser für die spätere Verwendung gespeichert.The caching mechanism saves the results from LogonUser for subsequent uses. Dieser Mechanismus ist standardmäßig deaktiviert. Legen Sie zum Aktivieren der CacheLogonTokens Eigenschaft, um true, oder verwenden Sie die cacheLogonTokens Attribut des der <UserNameAuthentication >.This mechanism is disabled by default; to enable it, set the CacheLogonTokens property to true, or use the cacheLogonTokens attribute of the <userNameAuthentication>.

Sie können eine Gültigkeitsdauer (Time to Live, TTL) für die zwischengespeicherten Token festlegen, indem Sie CachedLogonTokenLifetime-Eigenschaft auf eine TimeSpan-Zeitspanne festlegen oder das cachedLogonTokenLifetime-Attribut des userNameAuthentication-Elements verwenden. Der Standardwert beträgt 15 Minuten.You can set a Time to Live (TTL) for the cached tokens by setting the CachedLogonTokenLifetime property to a TimeSpan, or use the cachedLogonTokenLifetime attribute of the userNameAuthentication element; the default is 15 minutes. Beachten Sie Folgendes: Solange ein Token zwischengespeichert ist, kann jeder Client, der den gleichen Benutzernamen und das gleiche Kennwort angibt, das Token nutzen, auch wenn das betreffende Benutzerkonto in Windows gelöscht oder dessen Kennwort geändert wurde.Note that while a token is cached, any client that presents the same user name and password can use the token, even if the user account is deleted from Windows or if its password has been changed. Bis die Gültigkeitsdauer abläuft, und das Token aus dem Cache entfernt wird, kann WCF die (möglicherweise böswilligen) Benutzers zu authentifizieren.Until the TTL expires and the token is removed from the cache, WCF allows the (possibly malicious) user to authenticate.

So lässt sich dieses Problem abschwächen: Verkleinern Sie die Angriffsfläche, indem Sie den cachedLogonTokenLifetime-Wert auf die kürzeste Zeitspanne festlegen, die von den Benutzern benötigt wird.To mitigate this: Decrease the attack window by setting the cachedLogonTokenLifetime value to the shortest time span your users need.

Ausgestellte Tokenautorisierung: Ablaufzeit auf großem Wert zurückgesetztIssued Token Authorization: Expiration Reset to Large Value

Unter bestimmten Bedingungen kann die ExpirationTime-Eigenschaft des AuthorizationContext-Objekts auf einen unerwartet großen Wert (z. B. der Wert des MaxValue-Felds minus einem Tag oder der 20. Dezember 9999) festgelegt werden.Under certain conditions, the ExpirationTime property of the AuthorizationContext may be set to an unexpectedly larger value (the MaxValue field value minus one day, or December 20, 9999).

Dieser Fall tritt ein, wenn WSFederationHttpBinding und eine der vom System bereitgestellten Bindungen verwendet werden, für die ausgestellte Token als Clientanmeldeinformationen zulässig sind.This occurs when using the WSFederationHttpBinding and any of the system-provided bindings that have an issued token as the client credential type.

Dieser Fall tritt auch ein, wenn Sie mit einer der folgenden Methoden benutzerdefinierte Bindungen erstellen:This also occurs when you create custom bindings by using one of the following methods:

Um dem entgegenzuwirken, muss die Autorisierungsrichtlinie die Aktion und Gültigkeitsdauer jeder Autorisierungsrichtlinie überprüfen.To mitigate this, the authorization policy must check the action and the expiration time of each authorization policy.

Der Dienst verwendet ein anderes Zertifikat, als das vom Client beabsichtigteThe Service Uses a Different Certificate Than the Client Intended

Unter bestimmten Umständen kann ein Client eine Nachricht mit einem X.509-Zertifikat signieren und den Dienst ein anderes als das vorgesehene Zertifikat abrufen lassen.Under certain conditions, a client can digitally sign a message with an X.509 certificate and have the service retrieve a different certificate than the intended one.

Dieser Fall kann unter den folgenden Umständen eintreten:This can occur under the following circumstances:

  • Der Client signiert eine Nachricht mit einem X.509-Zertifikat und fügt das X.509-Zertifikat nicht an die Nachricht an, sondern verweist über dessen Subjektschlüsselbezeichner darauf.The client digitally signs a message using an X.509 certificate and does not attach the X.509 certificate to the message, but rather just references the certificate using its subject key identifier.

  • Auf dem Computer, auf dem der Dienst ausgeführt wird, sind zwei oder mehr Zertifikate mit dem gleichen öffentlichen Schlüssel vorhanden, die jedoch unterschiedliche Daten enthalten.The service's computer contains two or more certificates with the same public key, but they contain different information.

  • Der Dienst ruft ein Zertifikat ab, das zwar den gleichen Subjektschlüsselbezeichner aufweist, aber nicht das vom Client für die Verwendung vorgesehene Zertifikat ist.The service retrieves a certificate that matches the subject key identifier, but it is not the one the client intended to use. Wenn WCF die Nachricht empfängt und die Signatur überprüft, ordnet WCF die Informationen in das unbeabsichtigten x. 509-Zertifikat auf einen Satz von Ansprüchen, die anderen, möglicherweise mit erhöhten Rechten aus dem vom Client erwarteten sind.When WCF receives the message and verifies the signature, WCF maps the information in the unintended X.509 certificate to a set of claims that are different and potentially elevated from what the client expected.

Um dieses Problem zu entschärfen, verweisen Sie auf eine andere Art auf das X.509-Zertifikat, z. B. mithilfe von IssuerSerial.To mitigate this, reference the X.509 certificate another way, such as using IssuerSerial.

Siehe auchSee Also

SicherheitsüberlegungenSecurity Considerations
Offenlegung vertraulicher InformationenInformation Disclosure
Denial-of-Service-AngriffeDenial of Service
ReplayangriffeReplay Attacks
ManipulationTampering
Nicht unterstützte SzenarienUnsupported Scenarios