Sicherheitsüberlegungen für Metadaten

Berücksichtigen Sie bei Verwendung der Metadatenfunktion in Windows Communication Foundation (WCF) die Auswirkungen auf die Sicherheit, die sich durch das Veröffentlichen, Abrufen und Verwenden von Dienstmetadaten ergeben.

Veröffentlichen von Metadaten

Von den WCF-Diensten werden standardmäßig keine Metadaten veröffentlicht. Zum Veröffentlichen von Metadaten für einen WCF-Dienst muss die Veröffentlichung von Metadaten explizit aktiviert werden, indem dem Dienst Metadatenendpunkte hinzugefügt werden (siehe Veröffentlichen von Metadaten). Wird das Veröffentlichen von Metadaten nicht aktiviert, bietet der Dienst eine geringere Angriffsfläche, und auch das Risiko der ungewollten Preisgabe von Informationen ist geringer. Metadaten müssen nicht von allen Diensten veröffentlicht werden. Wenn keine Metadaten veröffentlicht werden müssen, können Sie die Funktion auch deaktiviert lassen. Metadaten sowie Clientcode können weiterhin direkt über die Dienstassemblys generiert werden. Verwenden Sie hierzu das ServiceModel Metadata Utility-Tool (Svcutil.exe). Weitere Informationen finden Sie unter zum Verwenden von Svcutil.exe für den Export von Daten finden Sie unter Vorgehensweise: Verwenden von "Svcutil.exe" zum Exportieren von Metadaten aus kompiliertem Dienstcode.

Veröffentlichen von Metadaten unter Verwendung einer sicheren Bindung

Die standardmäßig von WCF bereitgestellten Metadatenbindungen sind nicht sicher und ermöglichen den anonymen Zugriff auf die Metadaten. Die von einem WCF-Dienst veröffentlichten Dienstmetadaten enthalten eine ausführliche Beschreibung des Diensts und können (entweder absichtlich oder unabsichtlich) sensible Informationen beinhalten. So können in den Dienstmetadaten beispielsweise Informationen zu Infrastrukturvorgängen enthalten sein, die nicht für eine Veröffentlichung bestimmt sind. Mithilfe einer sicheren Bindung für den Metadatenendpunkt können die Dienstmetadaten vor nicht autorisiertem Zugriff geschützt werden. Metadatenendpunkte reagieren auf HTTP\/GET-Anforderungen, von denen Secure Sockets Layer (SSL) zum Sichern der Metadaten verwendet werden kann. Weitere Informationen finden Sie unter Gewusst wie: Sichere Metadatenendpunkte.

Das Sichern der Metadatenendpunkte hat zudem den Vorteil, dass Dienstmetadaten auf sichere Weise und ohne Manipulations- oder Spoofinggefahr abgerufen werden können.

Ausschließliches Verwenden vertrauenswürdiger Metadaten

Mithilfe von Dienstmetadaten lassen sich automatisch die zum Aufrufen des Diensts erforderlichen Laufzeitkomponenten konstruieren. Die Metadaten können auch zur Entwurfszeit verwendet werden, um eine Clientanwendung zu entwickeln, oder zur Laufzeit, um die vom Client zum Aufrufen des Diensts verwendete Bindung dynamisch zu aktualisieren.

Werden die Dienstmetadaten auf unsichere Weise abgerufen, können die Daten manipuliert oder gespooft werden. Manipulierte Metadaten können eine Umleitung des Clients zu Malware, fehlerhafte Sicherheitseinstellungen oder bösartige XML-Strukturen beinhalten. Metadatendokumente können groß sein und werden häufig im Dateisystem gespeichert. Verwenden Sie zum Schutz vor Manipulation und Spoofing beim Anfordern von Dienstmetadaten eine sichere Bindung (sofern vorhanden).

Verwenden sicherer Techniken zum Verarbeiten von Metadaten

Dienstmetadaten werden häufig von einem Dienst über ein Netzwerk abgerufen. Hierzu werden standardisierte Protokolle wie WS-MetadataExchange (MEX) verwendet. Viele Metadatenformate enthalten Verweismechanismen, um auf weitere Metadaten zu verweisen. Verweise in WSDL (Web Services Description Language)-, XML-Schema- und MEX-Dokumenten werden vom MetadataExchangeClient-Typ automatisch verarbeitet. Die Größe des aus den abgerufenen Metadaten erstellten MetadataSet-Objekts verhält sich direkt proportional zum MaximumResolvedReferences-Wert für die verwendete MetadataExchangeClient-Instanz sowie zum MaxReceivedMessageSize-Wert für die von dieser MetadataExchangeClient-Instanz verwendeten Bindung. Legen Sie geeignete Werte für diese Kontingente fest.

In WCF werden Dienstmetadaten als XML verarbeitet. Beim Verarbeiten von XML-Dokumenten schützen sich die Anwendungen selbst vor bösartigen XML-Strukturen. Verwenden Sie beim Verarbeiten von XML den XmlDictionaryReader mit geeigneten Kontingenten, und legen Sie die <xref:System.XML.XmlReaderSettings.ProhibitDtd%2A>-Eigenschaft des XmlReaderSettings-Objekts für die XmlReader-Instanz auf true fest.

Das Metadatensystem in WCF ist erweiterbar. Metadatenerweiterungen können in der Anwendungskonfigurationsdatei registriert werden (siehe Erweitern des Metadatensystems). Von Metadatenerweiterungen kann beliebiger Code ausgeführt werden, weshalb die Anwendungskonfigurationsdatei mithilfe geeigneter Zugriffssteuerungslisten (Access Control Lists, ACLs) geschützt werden muss und ausschließlich vertrauenswürdige Implementierungen von Metadatenerweiterungen registriert werden dürfen.

Überprüfen von generierten Clients

Überprüfen Sie beim Generieren von Clientcode aus Metadaten, die von einer nicht vertrauenswürdigen Quelle abgerufen wurden, den generierten Clientcode, und stellen Sie sicher, dass der generierte Client mit den Sicherheitsrichtlinien der Clientanwendungen konform ist. Die Validierung der Einstellungen für die Clientbindung kann entweder mit einem Validierungsverhalten oder durch eine Sichtprüfung des generierten Codes erfolgen. Ein Beispiel für die Implementierung eines Clients mit Verhaltensprüfung finden Sie hier: Clientvalidierung.

Schützen von Anwendungskonfigurationsdateien

Mithilfe der Anwendungskonfigurationsdatei eines Diensts kann gesteuert werden, ob und auf welche Weise Metadaten veröffentlicht werden. Es empfiehlt sich, die Anwendungskonfigurationsdatei mit geeigneten Zugriffssteuerungslisten (Access Control Lists, ACLs) zu schützen, um so den Schutz vor Einstellungsänderungen durch einen möglichen Angreifer sicherzustellen.

Siehe auch

Gewusst wie: Sichere Metadatenendpunkte
Sicherheit