Sicherheitsübersicht

Das Sicherheitsframework in der Windows-Webdienst-API (WWSAPI) bietet Folgendes:

  • Nachrichtenintegrität, Vertraulichkeit, Wiedergabeerkennung und Serverauthentifizierung mithilfe der Transportsicherheit.
  • Clientauthentifizierung, z. B. Überprüfung von Sicherheitstoken, Zertifikatvertrauens- und Sperrprüfungen usw. mithilfe von SOAP-Nachrichtensicherheit oder Transportsicherheit.

Das Sicherheitsprogrammiermodell

Sicherheit ist Kommunikationskanälen zugeordnet. Das Schützen eines Kanals besteht aus den folgenden Schritten.

  • Erstellen und initialisieren Sie eine oder mehrere Sicherheitsbindungen , die den Sicherheitsanforderungen der Anwendung entsprechen.
  • Erstellen Sie eine Sicherheitsbeschreibung , die diese Sicherheitsbindungen enthält.
  • Erstellen Sie einen Kanal - oder Dienstproxy (auf der Clientseite), oder erstellen Sie einen Listener oder Diensthost (auf der Serverseite), der diese Sicherheitsbeschreibung übergibt.
  • Führen Sie die normalen Kanalprogrammierschritte Öffnen, Akzeptieren, Senden, Empfangen, Schließen usw. aus.

Nachrichten, die auf dem Kanal gesendet und empfangen werden, werden gemäß der angegebenen Sicherheitsbeschreibung automatisch von der Runtime gesichert. Optional können diese Schritte optimiert werden, indem sie eine oder mehrere kanalweite Sicherheitseinstellungen in der Sicherheitsbeschreibung oder bindungsweite Sicherheitseinstellungen in einer Sicherheitsbindung angeben.

Jede erforderliche Autorisierung von Absenderidentitäten muss von der Anwendung unter Verwendung der Sicherheitsverarbeitungsergebnisse durchgeführt werden, die an jede empfangene Nachricht angefügt sind. Autorisierungsschritte werden weder in der Sicherheitsbeschreibung angegeben noch von der Runtime automatisch ausgeführt.

Fehler in der Sicherheitsbeschreibung, z. B. nicht unterstützte Bindungen, nicht verwendbare Eigenschaften/Felder, fehlende erforderliche Eigenschaften/Felder oder ungültige Eigenschaften-/Feldwerte, führen dazu, dass die Kanal- oder Listenererstellung fehlschlägt.

Auswählen von Sicherheitsbindungen

Beim Entwerfen von Sicherheit für eine Anwendung ist die primäre Entscheidung die Auswahl der Sicherheitsbindungen, die in die Sicherheitsbeschreibung aufgenommen werden sollen. Im Folgenden finden Sie einige Richtlinien für die Auswahl von Sicherheitsbindungen, die für das Sicherheitsszenario einer Anwendung geeignet sind. Eine nützliche Heuristik besteht darin, zunächst zu verstehen, welche Sicherheitsanmeldeinformationstypen (z . B. X.509-Zertifikate, Windows-Domänenbenutzername/-kennwörter, anwendungsdefinierte Benutzernamen/Kennwörter) für die Anwendung verfügbar sind, und dann eine Sicherheitsbindung auszuwählen, die diesen Anmeldeinformationstyp verwenden kann.

Kanäle und Sicherheit

Wie oben erwähnt, ist die Sicherheit auf Kanäle ausgerichtet. Darüber hinaus werden Kanalvorgänge allen Sicherheitsschritten konsistent über alle Sicherheitsbindungen hinweg zugeordnet.

  • Kanalerstellung: Die in der Sicherheitsbeschreibung angegebene Gruppe von Sicherheitsbindungen wird überprüft und bleibt anschließend für den Kanal behoben. Die Form des Kanalstapels, einschließlich aller Seitenkanäle, die für WS-Trust basierte Verhandlungen verwendet werden sollen, wird ebenfalls bestimmt.
  • Kanal geöffnet: Alle Anmeldeinformationen, die als Teil von Sicherheitsbindungen angegeben werden, werden geladen, und Es werden Sicherheitssitzungen eingerichtet. Im Allgemeinen enthält ein geöffneter Kanal den Sicherheitsstatus "live". Das Öffnen eines Clientkanals gibt auch die Endpunktadresse des Servers an, für die die Serverauthentifizierung von der Runtime durchgeführt wird.
  • Zwischen Kanal öffnen und schließen: Nachrichten können in dieser Phase sicher gesendet und empfangen werden.
  • Senden von Nachrichten: Sicherheitskontexttoken werden nach Bedarf abgerufen oder erneuert, und die Sicherheit wird gemäß der Sicherheitsbeschreibung auf jede übertragene Nachricht angewendet. Fehler, die beim Anwenden von Sicherheit auftreten, werden als Sendefehler an die Anwendung zurückgegeben.
  • Nachrichten empfangen: Die Sicherheit wird für jede empfangene Nachricht gemäß der Sicherheitsbeschreibung überprüft. Alle Fehler bei der Nachrichtensicherheitsüberprüfung werden als Empfangsfehler an die Anwendung zurückgegeben. Diese Fehler pro Nachricht wirken sich nicht auf den Kanalstatus oder nachfolgende Empfangsvorgänge aus. Die Anwendung verwirft möglicherweise einen fehlgeschlagenen Empfang und startet einen Empfang für eine andere Nachricht neu.
  • Kanalabbruch: Der Kanal kann jederzeit abgebrochen werden, um alle E/A-Vorgänge auf dem Kanal anzuhalten. Beim Abbrechen wechselt der Kanal in einen fehlerhaften Zustand und lässt keine weiteren Sende- oder Empfangsvorgänge mehr zu. Der Kanal behält jedoch möglicherweise weiterhin einen "Live"-Sicherheitsstatus bei, sodass ein nachfolgendes Schließen des Kanals erforderlich ist, um den gesamten Zustand sauber zu entfernen.
  • Kanal schließen: Der bei geöffnet erstellte Sicherheitsstatus wird entfernt, und Sitzungen werden abgerissen. Sicherheitskontexttoken werden abgebrochen. Der Kanalstapel bleibt erhalten, enthält aber keinen "Live"-Sicherheitsstatus oder geladene Anmeldeinformationen.
  • Kanalfrei: Der bei create erstellte Kanalstapel wird zusammen mit allen Sicherheitsressourcen freigegeben.

Sicherheits-APIs

Die API-Dokumentation zur Sicherheit ist in den folgenden Themen gruppiert.

Sicherheit

Bei Verwendung der WWSAPI-Sicherheits-API sind Anwendungen mit mehreren Sicherheitsrisiken konfrontiert:

Versehentliche Fehlkonfiguration

WWSAPI unterstützt eine Reihe sicherheitsbezogener Konfigurationsoptionen. Weitere Informationen finden Sie unter WS_SECURITY_BINDING_PROPERTY_ID. Einige dieser Optionen, z. B. WS_SECURITY_BINDING_PROPERTY_ALLOW_ANONYMOUS_CLIENTS ermöglichen es der Anwendung, die Standardsicherheitsebene zu senken, die von den verschiedenen Sicherheitsbindungen bereitgestellt wird. Die Verwendung solcher Optionen sollte sorgfältig bewertet werden, um sicherzustellen, dass es keine resultierenden Angriffsvektoren gibt.

Darüber hinaus ermöglicht WWSAPI einer Anwendung, wie oben beschrieben, absichtlich bestimmte Schritte zu deaktivieren, die zum vollständigen Schutz eines Nachrichtenaustauschs erforderlich sind, z. B. das Deaktivieren der Verschlüsselung, obwohl Sicherheitsanmeldeinformationen übertragen werden. Dies ist zulässig, um bestimmte spezifische Szenarien zu ermöglichen und sollte nicht für die allgemeine Kommunikation verwendet werden. Die WS_PROTECTION_LEVEL muss speziell gesenkt werden, um diese Szenarien zu ermöglichen, und Anwendungen sollten diesen Wert nur ändern, wenn dies absolut erforderlich ist, da dadurch viele Überprüfungen deaktiviert werden, die für eine sichere Konfiguration konzipiert sind.

Speichern vertraulicher Informationen im Arbeitsspeicher

Vertrauliche Informationen, z. B. Kennwörter, die im Arbeitsspeicher gespeichert sind, sind anfällig für die Extraktion durch einen privilegierten Angreifer, z. B. durch die Auslagerungsdatei. WWSAPI erstellt eine Kopie der bereitgestellten Anmeldeinformationen und verschlüsselt diese Kopie, sodass die ursprünglichen Daten nicht geschützt sind. Es liegt in der Verantwortung der Anwendung, die ursprüngliche instance zu schützen. Darüber hinaus wird die verschlüsselte Kopie kurz entschlüsselt, während sie verwendet wird, und öffnet ein Fenster, um sie zu extrahieren.

Denial-of-Service

Die Sicherheitsverarbeitung kann erhebliche Ressourcen beanspruchen. Jede zusätzliche Sicherheitsbindung erhöht diese Kosten. WWSAPI bricht die Sicherheitsverarbeitung ab, sobald ein Fehler bei der Sicherheitsüberprüfung auftritt, aber bestimmte Überprüfungen wie Autorisierungsentscheidungen werden möglicherweise erst durchgeführt, nachdem wichtige Arbeiten ausgeführt wurden.

Während eine Nachricht auf dem Server verarbeitet wird, wird der Sicherheitsstatus auf dem Nachrichtenheap gespeichert. Die Anwendung kann den Arbeitsspeicherverbrauch während der Sicherheitsverarbeitung einschränken, indem sie die Größe dieses Heaps bis WS_MESSAGE_PROPERTY_HEAP_PROPERTIES reduziert. Darüber hinaus können bestimmte Sicherheitsbindungen wie die WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING dazu führen, dass der Server Ressourcen im Auftrag des Clients zuordnet. Die Grenzwerte für diese Ressourcen können mithilfe der folgenden WS_SECURITY_BINDING_PROPERTY_ID Werte konfiguriert werden:

  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_MAX_PENDING_CONTEXTS
  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_MAX_ACTIVE_CONTEXTS
  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_RENEWAL_INTERVAL
  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_ROLLOVER_INTERVAL

Das Festlegen dieser Grenzwerte auf niedrige Werte reduziert den maximalen Arbeitsspeicherverbrauch, kann jedoch dazu führen, dass legitime Clients abgelehnt werden, wenn das Kontingent erreicht wird.