Schützen Ihres XML-Webdiensts gegen Hacker, Teil I

 

Matt Powell
Microsoft Corporation

5. September 2001

Einführung

Eine der größten Bedenken, die wir von Entwicklern hören, wenn wir über das Potenzial von XML-Webdiensten sprechen, ist die Angst vor Sicherheitsrisiken, die böswilligen Benutzern ermöglichen könnten, ihre Dienste anzugreifen. Die schlechte Nachricht ist, dass Angriffe zu solchen Gräueltaten führen können, wie z. B. die Einschränkung der Verfügbarkeit Ihres Diensts, die Kompromittierung privater Daten oder im schlimmsten Fall den Verlust der Kontrolle über Ihre Computer an diese böswilligen Benutzer. Die gute Nachricht ist, dass Ihnen echte Schutzmaßnahmen zur Verfügung stehen, die die Risiken dieser Angriffe begrenzen können. Wir sehen uns an, welche Arten von Angriffen es gibt und was Sie tun können, um sich in den Bereichen Bereitstellung, Entwurf und Entwicklung zu schützen. Diese erste Spalte zu diesem Thema konzentriert sich auf Bereitstellungsprobleme, die Sie berücksichtigen sollten. in unserer nächsten Spalte befassen wir uns mit Entwurfs- und Entwicklungsproblemen, die Sie beachten müssen, wenn Sie Ihre XML-Webdienste entwickeln.

Arten von Angriffen

Der erste Schritt, um herauszufinden, was die Risiken sind und was wir tun können, um sie zu vermeiden, besteht darin, die Arten von Angriffen zu verstehen, die auf unsere Dienste abzielen können. Sobald wir die Arten von Problemen kennen, für die wir anfällig sind, können wir diese Risiken minimieren, indem wir geeignete Maßnahmen ergreifen.

Angriffe fallen in drei allgemeine Kategorien:

  • Spoofing
  • Nutzen von Fehlern
  • Denial of Service

Spoofing

Einer der häufigsten Angriffe auf ein System, das eine Authentifizierung erfordert, besteht darin, dass ein Hacker die Anmeldeinformationen für die Authentifizierung eines Benutzers herausfindet, sich als dieser Benutzer anmeldet und auf die Informationen dieses Benutzers zugreifen kann. Dies ist schlecht genug, kann aber ein noch größeres Risiko darstellen, wenn die kompromittierten Anmeldeinformationen einem Systemadministrator oder einem anderen Benutzer mit höheren Berechtigungen gehören. In einem solchen Fall kann der Angriff nicht nur die Daten eines einzelnen Benutzers kompromittieren, sondern auch die Daten aller Benutzer gefährden.

Es gibt verschiedene Ansätze, die ein Hacker verwenden kann, um das Kennwort eines Benutzers zu ermitteln. Beispiel: Ausprobieren von Wörtern, die für den Benutzer aussagekräftig sein können, z. B. der Name des Benutzers, der Name des Haustiers oder dessen Geburtstag. Ein hartnäckigerer Hacker kann sogar jedes Wort im Wörterbuch ausprobieren (ein Wörterbuchangriff). Andere Möglichkeiten, Anmeldeinformationen zu erhalten, sind: Die Netzwerkpakete zu ernüffeln und die Informationen aus den gesendeten Daten zu lesen; durch DNS-Spoofing, einfügen eines böswilligen Computers als Vermittler zwischen einem Client und dem Server; sich als Systemadministrator auszugeben und den Benutzer aufzufordern, seine Anmeldeinformationen für Die Problembehandlung anzugeben; oder indem Sie einen Logon-Handshake mit einem Server aufzeichnen und die Sequenz wiedergeben, um zu versuchen, sich zu authentifizieren.

Ein Großteil des Spoofingrisikos kann durch Maßnahmen wie das Erzwingen sicherer Kennwörter und die Verwendung sicherer Authentifizierungsmechanismen verringert werden.

Nutzen von Fehlern

Einer der wichtigsten Faktoren, die das Sicherheitsrisiko eines Systems für Angriffe bestimmen, ist die Qualität des Codes, der auf diesem System ausgeführt wird. Fehler im System können mehr als nur dazu führen, dass ein bestimmter Thread eine Ausnahme auslöst. Hacker können diese Sicherheitsrisiken potenziell nutzen, um ihren eigenen Code auf dem System auszuführen, auf Ressourcen mit erhöhten Rechten zuzugreifen oder einfach Ressourcenlecks (basierend auf dem Fehler) zu nutzen, die dazu führen können, dass sich Ihr System verlangsamt oder nicht mehr verfügbar ist. Einer der berühmtesten dieser Art von Angriff ist der Code Red Worm Virus, der einen Fehler in der Index Server ISAPI-Erweiterung ausnutzte, um Code seiner Wahl auf einem infizierten System auszuführen und dann nach anderen anfälligen Computern zu suchen.

Ein weiterer häufiger Angriff besteht darin, Fehler zu nutzen, bei denen Annahmen zur Gültigkeit von Eingabedaten getroffen werden. Betrachten Sie für instance einen XML-Webdienst, der erwartet, dass ein Benutzername als Parameter eingegeben wird. Wenn Sie davon ausgehen, dass der Benutzername nur eine ASCII-Zeichenfolge enthält, und sie daher direkt in Ihre SQL-Abfrage einfügen, können Sie Ihren Dienst einem schwerwiegenden Sicherheitsrisiko aussetzen. Angenommen, Sie haben für instance eine SQL-Abfrage in Ihrem Code, die wie folgt erstellt wird:

sqlQuery = “SELECT * FROM Users WHERE (Username=’” & UsernameInput & “’)

Wenn der UsernameInput-Parameter etwas wie

Bob’) or not (Username=’0

Dann gibt Ihr Dienst möglicherweise alle Datensätze zurück, nicht nur den Datensatz für einen bestimmten Benutzer.

Denial of Service

Denial-of-Service-Angriffe zielen nicht darauf ab, in einen Standort einzubrechen oder dessen Daten zu ändern. sie sind vielmehr so konzipiert, dass sie eine Website in die Knie zwingen, so dass sie legitime Anfragen nicht bedienen kann. Der Code Red Worm Virus infizierte nicht nur Maschinen und suchte dann nach weiteren Maschinen zu infizieren, es verursachte auch die infizierten Maschinen, eine große Anzahl von Paketen an die offizielle Website des Weißen Hauses zu senden. Da Tausende von Maschinen infiziert wurden, war die Anzahl der Anfragen, die an die Website des Weißen Hauses gesendet wurden, extrem hoch. Durch das Senden von Anforderungen von einer großen Anzahl von Computern wurde der Code Red Worm Virus zu einem "verteilten Denial-of-Service-Angriff", der extrem schwer zu begrenzen ist, da so viele Computer beteiligt sind.

Denial-of-Service-Anforderungen können in vielen Formen auftreten, da es so viele Ebenen gibt, auf denen gefälschte Anforderungen gesendet werden können, um Ihr System anzugreifen. Für instance Ihre Website benutzern möglicherweise erlaubt, Ihre IP-Adresse zu PINGen, was dazu führt, dass eine ICMP-Nachricht an Ihren Server gesendet und dann zurückgegeben wird. Dies ist ein effektives Mittel zur Behandlung von Konnektivitätsproblemen. Wenn jedoch Hunderte von Computern jeweils Tausende von Paketen gleichzeitig an Ihren Server senden, werden Sie wahrscheinlich feststellen, dass Ihr Computer mit der Verarbeitung der PING-Anforderungen so ausgelastet ist, dass er nicht die CPU-Zeit erhalten kann, um andere normale Anforderungen zu verarbeiten.

Eine etwas höhere Ebene ist ein SYN-Angriff, bei dem ein Netzwerkprogramm auf niedriger Ebene geschrieben wird, um das erste Paket (ein SYN-Paket) in einem TCP-Verbindungs-Handshake zu senden. Dies ist tendenziell schädlicher als eine PING-Anforderung, da Sie im Gegensatz zu PING-Anforderungen, die bei Bedarf ignoriert werden können, wenn eine Anwendung an einem TCP-Port lauscht (wie Ihr Webserver), anfällig für ausstehende Ressourcen sind, wenn Sie die scheinbar gültigen Verbindungsanforderungen erhalten.

Am high end des Spektrums können Denial-of-Service-Angriffe die Form haben, dass mehrere, grundsätzlich gültige SOAP-Anforderungen an Ihren XML-Webdienst gesendet werden, die zu Datenbanksuchen führen. Datenbank-Lookups können einen langen Zeitraum in Anspruch nehmen. Wenn also jede Sekunde Tausende solcher Anforderungen an Ihren Server gesendet werden, kann dies dazu führen, dass sowohl der Webserver, der die Anforderung empfängt, als auch der Datenbankserver im Back-End übermäßig ausgelastet wird. Dies kann wiederum dazu führen, dass Ihr Dienst andere Anforderungen nicht rechtzeitig verarbeiten kann.

Wenn Auf Ihrem Computer Code mit Fehlern vorhanden ist, können Denial-of-Service-Angriffe noch einfacher sein. Wenn Ihr Produktionswebdienst beispielsweise den Fehler gemacht hat, ein Meldungsfeld im Falle einer bestimmten Art von Fehler anzuzeigen, könnte ein Hacker diesen Fehler verwenden, um eine relativ kleine Anzahl von Anforderungen an Ihren Computer zu senden, die dazu führen, dass das Meldungsfeld angezeigt wird. Dadurch können alle Threads gesperrt werden, die Anforderungen behandeln, wodurch der Zugriff auf Ihren Dienst für andere personen nicht möglich ist.

Probleme bei der Bereitstellung

Nun, da wir die verschiedenen Arten von Angriffen gesehen haben, was kann gegen diese bösen Angriffe getan werden? Die gute Nachricht ist, dass Sie viel tun können, um sich selbst zu schützen, und die meisten Schutzmaßnahmen sind sehr einfach. Sehen wir uns zunächst die Arten von Schutzmaßnahmen an, die Sie aktivieren können, indem Sie einfach steuern, wie Ihre Webserver und Ihre Back-End-Server konfiguriert werden.

Es gibt eine Reihe wichtiger Sicherheitsvorkehrungen, die Sie ergreifen sollten, um sicherzustellen, dass Ihre Webserver für Angriffe unangreifbar sind, einschließlich so offensichtlicher Maßnahmen wie sicherstellen, dass Sie über das neueste Sicherheitsupdate verfügen. Im Folgenden finden Sie eine Liste der wichtigsten Schritte, die Sie ergreifen können, um sich selbst zu schützen. Viele dieser Elemente sind nicht spezifisch für das Hosten von Webdiensten, gelten aber für alle Webserver, die Inhalte hosten.

Installieren des Sicherheitsupdates

Stellen Sie zunächst sicher, dass Sie über das neueste Update verfügen, damit Sie nicht anfällig für den Code Red Worm Virus sind. Die Anweisungen zum Installieren des Updates, einschließlich Links zum Herunterladen des Patches, finden Sie unter Installieren des Patches, der den Wurm Code Red stoppt.

Die Korrektur für den Code Red Worm Virus und andere Fehlerbehebungen werden schließlich im nächsten Service Pack für Microsoft® Windows® 2000 sein und werden bereits in Microsoft® Windows® XP behandelt.

Natürlich ist die größere Frage, wie Sie den Überblick über andere potenzielle Sicherheitsrisiken behalten und sich vor zukünftigen Problemen schützen, die auftreten könnten. Informationen zu Microsoft-Produktsicherheitsproblemen finden Sie in der Microsoft-Sicherheitsbenachrichtigungsliste. Abonnenten werden per E-Mail über neue Probleme benachrichtigt. Anweisungen zur Registrierung finden Sie auf der Seite Produktsicherheitsbenachrichtigungen .

Einschränken, wer auf Ihre Webserver zugreifen kann

Wenn Sie Bedenken über Angriffe haben, insbesondere wenn Sie über private Informationen zu Ihrem XML-Webdienst verfügen, sollten Sie den Zugriff auf Ihre Website nur auf legitime Benutzer beschränken. Dies kann auf verschiedene Arten erreicht werden, aber hier sind einige, die Angreifer daran hindern können, auf Ihren XML-Webdienst zuzugreifen.

  1. Authentifizieren von Benutzern mithilfe der HTTP-Authentifizierung; beschränken Sie dann die Ressourcen, auf die sie Zugriff haben. Die Authentifizierung wird konfiguriert, indem Sie mit der rechten Maustaste auf die Website, das virtuelle Verzeichnis oder eine einzelne Datei im Internetdienste-Manager klicken. Wählen Sie im Popupmenü die Option Eigenschaften aus. Wechseln Sie zur Registerkarte Verzeichnissicherheit , und klicken Sie unter Anonyme Zugriffs- und Authentifizierungssteuerung auf die Schaltfläche Bearbeiten .
  2. Schränken Sie die IP-Adressen ein, die auf Ihren Webserver zugreifen können. Wenn Sie über eine kleine Liste mit legitimen Benutzern verfügen, die Ihre Website verwenden können, sollten Sie nur den Zugriff auf ihre bestimmten IP-Adressen zulassen. Sie können auch den Zugriff auf bestimmte IP-Adressbereiche einschränken oder den Zugriff auf eine IP-Adresse oder einen IP-Adressbereich verweigern. Sie können den Zugriff sogar basierend auf Domänennamen einschränken, aber dafür sind möglicherweise langwierige Domänennamenssuche für die IP-Adressen erforderlich, die eine Verbindung mit Ihrem Computer herstellen. IP-Adresseinschränkungen werden wie folgt geändert: Wechseln Sie zur in Schritt 1 erwähnten Registerkarte Verzeichnissicherheit , und klicken Sie auf die Schaltfläche Bearbeiten unter Einschränkungen für IP-Adresse und Domänennamen. Abbildung 1 zeigt das Dialogfeld IP-Adresse und Domänennamenseinschränkungen, wobei der Zugriff auf drei bestimmte IP-Adressen beschränkt ist.

Abbildung 1. Festlegen von IP-Adresseinschränkungen für Ihre Website

  1. Ssl-Verbindungen (Secure Sockets Layer) mit Clientzertifikaten erforderlich. Dies ist wahrscheinlich die sicherste Methode zum Authentifizieren von Benutzern, die auf Ihre Website zugreifen. SSL-Einschränkungen werden auch über die Registerkarte Verzeichnissicherheit unter Sichere Kommunikation vorgenommen.

Konfigurieren Sie Ihren Router so, dass er nur den erforderlichen Zugriff zulässt.

Ihr Router ist Ihre Firewall. Es kann die überwiegende Mehrheit der illegitimen Anforderungen blockieren, die an Ihren Computer gesendet werden können. Die meisten gängigen Router können den Zugriff auf bestimmte TCP-Ports einschränken, sodass Sie möglicherweise nur eingehende Anforderungen an Port 80, dem HTTP-Standardport, zulassen möchten. Dadurch wird verhindert, dass jeder außerhalb der Firewall versucht, eine Verbindung mit anderen Diensten auf Ihrem Computer herzustellen. Achten Sie darauf, Ports für andere Dienste zu öffnen. Es kann praktisch sein, einen Port zu öffnen, damit Sie über den Terminaldiensteclient eine Verbindung mit Ihren Webservern herstellen können, sodass Sie die Remoteverwaltung durchführen können, aber dann kann jeder versuchen, eine Verbindung mit Ihrem Computer über eine Terminalserververbindung herzustellen. Selbst wenn ein Hacker keinen gültigen Benutzernamen und ein gültiges Kennwort kennt, kann der Hacker immer noch viele Ressourcen auf Ihrem Computer verbrauchen, indem er mehrere Sitzungen gleichzeitig einrichten, die nur den Anmeldebildschirm anzeigen.

Router sind auch wichtige Tools beim Herausfiltern illegitimer Pakete, die Ressourcen auf Ihrem Computer verbrauchen können. Offensichtlich falsch formatierte Pakete sollten einfach weggeworfen werden – die meisten Router tun dies automatisch –, aber viele Router haben heute auch die Möglichkeit, Dinge wie TCP SYN-Pakete zu erkennen, die angeben, dass sie von einer anderen IP-Adresse als der gesendet werden, von der sie stammen. Wenn Sie diese Art von Schutz aktivieren, können Sie die zuvor in Bezug auf Denial-of-Service-Angriffe erwähnten SYN-Angriffe vermeiden.

Beachten Sie auch, dass Firewalleinschränkungen sich nur auf den Datenverkehr in der Firewall auswirken. Dies mag offensichtlich erscheinen, aber berücksichtigen Sie die Situation, in der Sie eine T1-Leitung von einem Internetdienstanbieter (ISP) erwerben und einen sicher konfigurierten Router an Ihrem Ende der T1-Leitung platzieren. Wenn Ihr ISP die Erkennung ungültiger SYN-Anforderungen auf seinen Routern nicht aktiviert, sind seine Router anfällig für SYN-Angriffe und können möglicherweise den Dienst auf der anderen Seite Ihrer T1-Leitung verweigern, wodurch der Zugriff auf Ihre Website effektiv abgeschnitten wird.

In komplexen Umgebungen, in denen auf beiden Seiten einer bestimmten Verbindung zahlreiche Router vorhanden sein können, ist jeder Router ein potenziell anfälliges Angriffsziel, das ihre Fähigkeit beeinträchtigen kann, legitimen Benutzern Zugriff auf Ihre Website zu gewähren. Verwenden Sie das Hilfsprogramm TRACERT.EXE, um eine Liste der Router zu erhalten, die Ihre Pakete durchlaufen, um Ihren Server zu erreichen.

Konfigurieren der TCP/IP-Filterung zum Einschränken von Ports, für die Verbindungen akzeptiert werden

Wenn Sie keinen Router für Ihre Firewall haben oder ihren Router aus irgendeinem Grund nicht verwalten können, können Sie Ihren eigenen Computer effektiv zu Ihrer Firewall machen, indem Sie die Art der eingehenden Verbindungen einschränken, die sie empfangen wird. Klicken Sie in Windows 2000 auf die Schaltfläche Start, wählen Sie Einstellungen aus, wählen Sie Netzwerk- und DFÜ-Verbindungen aus, klicken Sie mit der rechten Maustaste auf das Netzwerk Karte, das mit dem Internet verbunden ist, und wählen Sie Eigenschaften aus. Wählen Sie Internetprotokoll (TCP/IP) aus, und klicken Sie auf die Schaltfläche Eigenschaften . klicken Sie auf die Schaltfläche Erweitert , und wechseln Sie zur Registerkarte Optionen . Wählen Sie TCP/IP-Filterung aus, und klicken Sie auf die Schaltfläche Eigenschaften . Es wird ein Dialogfeld wie in Abbildung 2 dargestellt angezeigt. Hier können Sie die Ports einschränken, an denen Sie Verbindungen erhalten. Im Beispiel in Abbildung 2 ist der Zugriff so eingeschränkt, dass nur die Ports 80 und 443 für HTTP- und HTTPS-Verbindungen zulässig sind.

Abbildung 2. Konfigurieren der TCP/IP-Filterung

Entfernen von nicht benötigten Diensten und Software

Je mehr Software auf Ihrem Computer ausgeführt wird, desto wahrscheinlicher sind Sie anfällig für Angriffe, insbesondere wenn Dienste als Benutzer mit hohen Berechtigungen ausgeführt werden. Wenn Ihr Computer für die alleinige Ausführung Ihres Webdiensts und Ihres Webdiensts dediziert ist, beginnen Sie damit, einige der anderen Dienste auf Ihrem Computer zu deaktivieren. Dies umfasst den FTP-Dienst, den SMTP-Dienst sowie Windows-Dienste wie den Terminaldiensteclient.

Die Menge an Software, auf die über den Internetinformationsserver zugegriffen werden kann, sollte ebenfalls begrenzt sein. Stellen Sie sicher, dass die einzigen virtuellen Websites und Verzeichnisse, die Sie konfiguriert haben, diejenigen sind, die Sie benötigen. Die Verwaltungswebsite ist wahrscheinlich das erste, was entfernt werden muss. Das virtuelle Verzeichnis IISSamples sollte ebenfalls entfernt werden. Wenn Sie über einen Computer verfügen, der für die Ausführung Ihres Webdiensts dediziert ist, sollten Sie alle anderen virtuellen Verzeichnisse entfernen.

Selbst in den virtuellen Verzeichnissen, die Sie installiert haben, müssen Sie vorsichtig sein, welche Art von Software für Anforderungen verfügbar ist. Wenn Sie im Internetdienste-Manager mit der rechten Maustaste auf einen Standort oder ein virtuelles Verzeichnis klicken, im Menü Eigenschaften auswählen, die Registerkarte Virtuelles Verzeichnis auswählen und dann auf die Schaltfläche Konfiguration klicken, wird die Registerkarte App-Zuordnungen angezeigt, auf der alle Erweiterungen aufgeführt sind, die verschiedenen ISAPI-Erweiterungen oder CGI-Anwendungen zugeordnet sind. Wenn Sie diese Erweiterungen nicht verwenden, entfernen Sie sie aus der Liste. Die Indexservererweiterung für . IDQ-Dateien hatten einen Fehler darin, der für den Code Red Worm Virus verantwortlich war. Wenn Sie diese Änderung auf ebene des virtuellen Standorts vornehmen, müssen Sie sich keine Gedanken darüber machen, dass sie für jedes erstellte virtuelle Verzeichnis erstellt wird.

Verwenden der Microsoft Internet Information Server-Sicherheitsprüfliste

Microsoft hat eine Sicherheitsprüfliste für Internet Information Server 4.0 erstellt, in der alles, was ich hier erwähnt habe, sowie vieles mehr erwähnt wird. Verwenden Sie diese Checkliste, um sicherzustellen, dass Sie zumindest alle Optionen für die Sicherheit berücksichtigt haben. Obwohl Sie wahrscheinlich nicht Internet Information Server 4.0 ausführen (5.0 ist die Version, die in Windows 2000 enthalten ist), gelten die meisten Schritte weiterhin und gelten weiterhin für zukünftige Versionen von InternetInformationsserver. Die Checkliste finden Sie unter Microsoft Internet Information Server 4.0 Security Checklist.

Zusammenfassung

Es gibt zahlreiche Maßnahmen , insbesondere hinsichtlich der Konfiguration Ihrer Computer und Ihres Netzwerks, die Sie ergreifen sollten, um Ihre Webserver vor Angriffen zu schützen. In unserer nächsten Spalte werden wir uns weiter mit Möglichkeiten befassen, ihre XML-Webdienste vor Angriffen zu schützen, indem wir uns mit Problemen befassen, die Entwickler und Architekten beim Erstellen ihrer XML-Webdienste beachten müssen.

 

Zu Ihren Diensten

Matt Powell ist Mitglied des MSDN Architectural Samples-Teams, in dem er an der Entwicklung des bahnbrechenden SOAP Toolkit 1.0 mitgewirkt hat. Zu den weiteren Erfolgen von Matt gehören co-authoring Running Microsoft Internet Information Server von Microsoft Press, das Schreiben zahlreicher Zeitschriftenartikel und eine schöne Familie, um jeden Tag nach Hause zu kommen.