Sicherheitsüberlegungen für Metadaten
Beachten Sie bei der Verwendung der Metadatenfunktionen in Windows Communication Foundation (WCF) die Auswirkungen auf die Sicherheit beim Veröffentlichen, Abrufen und Verwenden von Dienstmetadaten.
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öffentlichung 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. Beachten Sie, dass Sie Metadaten und Clientcode auch weiterhin direkt aus Ihren Dienstassemblys mit dem ServiceModel Metadata Utility Tool (Svcutil.exe) erzeugen können. Weitere Informationen über die Verwendung von Svcutil.exe für den Export von Metadaten finden Sie unter Vorgehensweise: Verwenden von Svcutil.exe zum Exportieren von Metadaten aus kompiliertem Servicecode
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 Vorgehensweise: Sichern von Metadatenendpunkten.
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 die XmlDictionaryReader mit entsprechenden Quoten bei der Verarbeitung von XML und setzen Sie außerdem die Eigenschaft DtdProcessing auf Prohibit.
Das Metadatensystem in WCF ist erweiterbar und Metadatenerweiterungen können in der Konfigurationsdatei Ihrer Anwendung 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, der Verhaltensweisen validiert, finden Sie unter Client-Validierung.
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.