18-03-2024, 04:10
Wenn ich IIS konfiguriere, um mich gegen XSS-Angriffe zu schützen, finde ich es hilfreich, sowohl aus der Perspektive des Servers als auch des Inhalts zu denken. Es gibt einige wichtige Strategien, die ich normalerweise umsetze, und ich möchte sie mit euch teilen. Es geht darum, eure Verteidigung zu schichten, und ich werde meine Gedanken aufschlüsseln, ohne euch mit technischem Fachjargon zu überladen.
Zunächst einmal lasst uns über Header sprechen. Ich habe gelernt, dass das Setzen der richtigen HTTP-Header auf eurem Server einen großen Unterschied machen kann. Etwas, das ich immer mache, ist die Verwendung des Content Security Policy (CSP) Headers. Das solltet ihr definitiv in Betracht ziehen. Der CSP-Header ermöglicht es euch, anzugeben, welche Inhaltsquellen als vertrauenswürdig gelten. Wenn der Browser diesen Header sieht, weiß er, dass er nur Skripte ausführen darf, die von den Quellen stammen, die ihr vertraut. Ihr könnt ihn so einrichten, dass inline-Skripte abgelehnt werden und das Skript auf bestimmte Domains beschränkt wird. Ich beginne normalerweise mit einer strengen Richtlinie und lockere sie nach Bedarf basierend auf Tests; es geht darum, das richtige Gleichgewicht zu finden.
Ein Fehler, den ich oft sehe, ist die Vernachlässigung des X-Content-Type-Options Headers. Ihr denkt vielleicht: "Was könnte schon schiefgehen?" Aber wenn Browser versuchen, den Inhaltstyp einer Datei zu erraten, fangen die Probleme an. Indem ihr diese Option auf "nosniff" setzt, sagt ihr dem Browser, dass er nicht raten und den Content-Type, den euer Server sendet, strikt befolgen soll. Es klingt einfach, aber solche kleinen Dinge können verhindern, dass unerwartete Skripte ausgeführt werden. Ihr müsst darüber nachdenken, wie ein böswilliger Benutzer versuchen könnte, die Art und Weise auszunutzen, wie der Browser Inhalte interpretiert.
Ein weiterer wichtiger Header ist X-XSS-Protection. Dieser Header ist mehr ein Werkzeug auf der Browser-Seite, kann aber äußerst nützlich sein. Wenn ich ihn einfüge, stelle ich sicher, dass ich den integrierten XSS-Filter aktiviere, der in modernen Browsern zu finden ist. Dies kann eine zusätzliche Schicht der Erkennung und Blockierung potenzieller Cross-Site-Scripting-Angriffe hinzufügen. Verlasst euch jedoch nicht ausschließlich darauf; es sollte eure einzige Verteidigungslinie nicht sein. Ich habe Szenarien gesehen, in denen er nicht perfekt funktioniert, aber in Kombination mit CSP und anderen Methoden wird er Teil einer stärkeren Strategie.
Jetzt, was die Konfiguration betrifft, springe ich oft in die web.config-Datei. Ihr habt wahrscheinlich selbst damit zu tun gehabt, aber falls nicht, dort passiert viel von der Magie in IIS. Ich stelle sicher, dass ich all diese Header direkt in dieser Datei einfüge. Es ist einfach genug; ihr fügt einfach die entsprechenden Zeilen im <system.webServer>-Abschnitt hinzu. Wenn ihr euch in diesem Bereich nicht wohlfühlt, denkt daran, eure web.config-Datei vor Änderungen zu sichern, damit ihr problemlos zurückkehren könnt, falls etwas schiefgeht.
Lasst uns die Bedeutung der Kodierung nicht vergessen. Ich denke, hier tun sich viele Menschen schwer. Ihr müsst sicherstellen, dass jeglicher benutzergenerierter Inhalt richtig kodiert ist, bevor er im Browser gerendert wird. Wenn ihr beispielsweise Benutzereingaben akzeptiert und diese dann direkt auf eure Webseite ausgebt, solltet ihr diese Ausgabe immer kodieren. Es ist eine gute Praxis, eine Kodierungsfunktion für HTML zu verwenden. Wenn ich das mache, nutze ich Kodierungsbibliotheken oder integrierte Funktionen, die vom Sprach-Framework bereitgestellt werden, das ich benutze. Die richtige Kodierung eurer Inhalte bedeutet, dass, wenn ein Angreifer versucht, ein Skript in die Eingabe einzufügen, es nicht ausgeführt wird, da es als Daten und nicht als ausführbarer Code behandelt wird.
Als Nächstes lege ich großen Wert auf die Validierung von Eingaben. Ihr wollt sicherstellen, dass alle Daten, die in eure Anwendung kommen, so sauber wie möglich sind. Es beginnt auf der Eingabeebene und geht oft Hand in Hand mit der Kodierung. Ich mag es, einzugrenzen, welche Art von Daten ich von Benutzern akzeptiere, basierend darauf, was ich tatsächlich brauche. Ich frage mich immer: Ist diese Eingabe notwendig? Wenn nicht, verhindere ich sie normalerweise ganz. Wenn ich die Eingabe benötige, prüfe ich sie gründlich anhand einer Reihe von Regeln oder einer Whitelist. Dies hält gefährliche Zeichen und Skripte davon ab, durchzuschlüpfen. Aus meiner Erfahrung kann selbst ein einfaches reguläres Ausdrucksmuster einen großen Unterschied machen.
Ein weiterer Punkt, der nicht oft besprochen wird, ist die Verwendung von HTTPOnly- und Secure-Flags für Cookies. Wenn ihr das HTTPOnly-Flag setzt, wird es fast unmöglich für Skripte, auf diese Cookies zuzugreifen, was etwas ist, das ich immer im Hinterkopf habe. Habt ihr schon mal darüber nachgedacht, wie sticky Sessions oder Authentifizierung entführt werden können? Die Verwendung dieser Flags hilft, sich dagegen zu schützen. Es kann ein bisschen mühsam sein, insbesondere wenn ihr Bibliotheken verwendet, die Cookies verwalten, aber es lohnt sich langfristig.
Lasst uns für einen Moment die Perspektive wechseln und über Protokollierung und Überwachung nachdenken. Ich kann nicht oft genug betonen, wie wichtig es ist, ein Auge darauf zu haben, was auf eurem Server passiert. Ihr könnt nicht schützen, was ihr nicht seht, richtig? Ich stelle sicher, dass das Protokollieren für alle Anfragen eingerichtet ist, besonders wenn sie verdächtig oder ungewöhnlich erscheinen. Indem ich Protokoll führe, kann ich oft böse Akteure auf frischer Tat ertappen und ihre Muster verstehen. Es ist eine großartige Möglichkeit, potenzielle XSS-Versuche zu erkennen. Es gibt Tools, die diese Protokolle für euch analysieren und Anomalien aufzeigen können; ich empfehle immer, Automatisierung zu nutzen, wann immer dies möglich ist.
In ähnlicher Weise solltet ihr euren Server und eure Anwendungen auf dem neuesten Stand halten. Ich versuche, ein Auge auf Sicherheitspatches und Updates von Microsoft und anderen Anbietern zu haben. Manchmal fühlt es sich überwältigend an, aber Updates können Fixes für Schwachstellen enthalten, die für einen XSS-Angriff ausgenutzt werden könnten, unter anderem. Auf dem neuesten Stand zu bleiben, gehört dazu, alles reibungslos und sicher am Laufen zu halten, und ich stelle sicher, dass ich dafür Zeit einplane.
Wenn ihr mit Drittanbieterbibliotheken oder -frameworks arbeitet, seid euch ihrer Sicherheitslage bewusst. Ich hatte Situationen, in denen ich eine Bibliothek verwendet habe, die hilfreich schien, nur um viel später herauszufinden, dass sie Schwachstellen hatte. Ich würde empfehlen, die Bibliotheken, die ihr verwendet, im Auge zu behalten und bereit zu sein, sie zu aktualisieren oder auszutauschen, wenn ihr eine bessere Alternative findet.
Oh, und während wir dabei sind, lasst uns das Benutzerschulung und -bewusstsein nicht vergessen. Es sorgt immer für ein Augenrollen, wenn ich es erwähne, aber die Schulung eures Teams über bewährte Praktiken kann viel bewirken. Wenn Benutzer verstehen, wie ein XSS-Angriff aussieht und wie sie ihn vermeiden können, reduziert ihr die Wahrscheinlichkeit, dass jemand unbeabsichtigt einen Angriff erleichtert.
Zusammenfassend - ich weiß, ich habe zuvor gesagt, dass es keine Zusammenfassungen geben sollte - denkt einfach daran, dass der Schutz eures IIS-Servers vor XSS-Angriffen darin besteht, auf mehreren Ebenen proaktiv zu sein. Es geht darum, verschiedene Methoden zu kombinieren und mögliche Angriffsvektoren im Auge zu behalten. Ihr könnt IIS so konfigurieren, dass Risiken minimiert werden, und jeder Schritt, den ihr unternehmt, egal wie klein, trägt zu eurer gesamten Verteidigung bei.
Ich hoffe, ihr fandet meinen Beitrag nützlich. Übrigens, habt ihr eine gute Windows Server-Backup-Lösung? In diesem Beitrag erkläre ich, wie man Windows Server richtig sichert.
Zunächst einmal lasst uns über Header sprechen. Ich habe gelernt, dass das Setzen der richtigen HTTP-Header auf eurem Server einen großen Unterschied machen kann. Etwas, das ich immer mache, ist die Verwendung des Content Security Policy (CSP) Headers. Das solltet ihr definitiv in Betracht ziehen. Der CSP-Header ermöglicht es euch, anzugeben, welche Inhaltsquellen als vertrauenswürdig gelten. Wenn der Browser diesen Header sieht, weiß er, dass er nur Skripte ausführen darf, die von den Quellen stammen, die ihr vertraut. Ihr könnt ihn so einrichten, dass inline-Skripte abgelehnt werden und das Skript auf bestimmte Domains beschränkt wird. Ich beginne normalerweise mit einer strengen Richtlinie und lockere sie nach Bedarf basierend auf Tests; es geht darum, das richtige Gleichgewicht zu finden.
Ein Fehler, den ich oft sehe, ist die Vernachlässigung des X-Content-Type-Options Headers. Ihr denkt vielleicht: "Was könnte schon schiefgehen?" Aber wenn Browser versuchen, den Inhaltstyp einer Datei zu erraten, fangen die Probleme an. Indem ihr diese Option auf "nosniff" setzt, sagt ihr dem Browser, dass er nicht raten und den Content-Type, den euer Server sendet, strikt befolgen soll. Es klingt einfach, aber solche kleinen Dinge können verhindern, dass unerwartete Skripte ausgeführt werden. Ihr müsst darüber nachdenken, wie ein böswilliger Benutzer versuchen könnte, die Art und Weise auszunutzen, wie der Browser Inhalte interpretiert.
Ein weiterer wichtiger Header ist X-XSS-Protection. Dieser Header ist mehr ein Werkzeug auf der Browser-Seite, kann aber äußerst nützlich sein. Wenn ich ihn einfüge, stelle ich sicher, dass ich den integrierten XSS-Filter aktiviere, der in modernen Browsern zu finden ist. Dies kann eine zusätzliche Schicht der Erkennung und Blockierung potenzieller Cross-Site-Scripting-Angriffe hinzufügen. Verlasst euch jedoch nicht ausschließlich darauf; es sollte eure einzige Verteidigungslinie nicht sein. Ich habe Szenarien gesehen, in denen er nicht perfekt funktioniert, aber in Kombination mit CSP und anderen Methoden wird er Teil einer stärkeren Strategie.
Jetzt, was die Konfiguration betrifft, springe ich oft in die web.config-Datei. Ihr habt wahrscheinlich selbst damit zu tun gehabt, aber falls nicht, dort passiert viel von der Magie in IIS. Ich stelle sicher, dass ich all diese Header direkt in dieser Datei einfüge. Es ist einfach genug; ihr fügt einfach die entsprechenden Zeilen im <system.webServer>-Abschnitt hinzu. Wenn ihr euch in diesem Bereich nicht wohlfühlt, denkt daran, eure web.config-Datei vor Änderungen zu sichern, damit ihr problemlos zurückkehren könnt, falls etwas schiefgeht.
Lasst uns die Bedeutung der Kodierung nicht vergessen. Ich denke, hier tun sich viele Menschen schwer. Ihr müsst sicherstellen, dass jeglicher benutzergenerierter Inhalt richtig kodiert ist, bevor er im Browser gerendert wird. Wenn ihr beispielsweise Benutzereingaben akzeptiert und diese dann direkt auf eure Webseite ausgebt, solltet ihr diese Ausgabe immer kodieren. Es ist eine gute Praxis, eine Kodierungsfunktion für HTML zu verwenden. Wenn ich das mache, nutze ich Kodierungsbibliotheken oder integrierte Funktionen, die vom Sprach-Framework bereitgestellt werden, das ich benutze. Die richtige Kodierung eurer Inhalte bedeutet, dass, wenn ein Angreifer versucht, ein Skript in die Eingabe einzufügen, es nicht ausgeführt wird, da es als Daten und nicht als ausführbarer Code behandelt wird.
Als Nächstes lege ich großen Wert auf die Validierung von Eingaben. Ihr wollt sicherstellen, dass alle Daten, die in eure Anwendung kommen, so sauber wie möglich sind. Es beginnt auf der Eingabeebene und geht oft Hand in Hand mit der Kodierung. Ich mag es, einzugrenzen, welche Art von Daten ich von Benutzern akzeptiere, basierend darauf, was ich tatsächlich brauche. Ich frage mich immer: Ist diese Eingabe notwendig? Wenn nicht, verhindere ich sie normalerweise ganz. Wenn ich die Eingabe benötige, prüfe ich sie gründlich anhand einer Reihe von Regeln oder einer Whitelist. Dies hält gefährliche Zeichen und Skripte davon ab, durchzuschlüpfen. Aus meiner Erfahrung kann selbst ein einfaches reguläres Ausdrucksmuster einen großen Unterschied machen.
Ein weiterer Punkt, der nicht oft besprochen wird, ist die Verwendung von HTTPOnly- und Secure-Flags für Cookies. Wenn ihr das HTTPOnly-Flag setzt, wird es fast unmöglich für Skripte, auf diese Cookies zuzugreifen, was etwas ist, das ich immer im Hinterkopf habe. Habt ihr schon mal darüber nachgedacht, wie sticky Sessions oder Authentifizierung entführt werden können? Die Verwendung dieser Flags hilft, sich dagegen zu schützen. Es kann ein bisschen mühsam sein, insbesondere wenn ihr Bibliotheken verwendet, die Cookies verwalten, aber es lohnt sich langfristig.
Lasst uns für einen Moment die Perspektive wechseln und über Protokollierung und Überwachung nachdenken. Ich kann nicht oft genug betonen, wie wichtig es ist, ein Auge darauf zu haben, was auf eurem Server passiert. Ihr könnt nicht schützen, was ihr nicht seht, richtig? Ich stelle sicher, dass das Protokollieren für alle Anfragen eingerichtet ist, besonders wenn sie verdächtig oder ungewöhnlich erscheinen. Indem ich Protokoll führe, kann ich oft böse Akteure auf frischer Tat ertappen und ihre Muster verstehen. Es ist eine großartige Möglichkeit, potenzielle XSS-Versuche zu erkennen. Es gibt Tools, die diese Protokolle für euch analysieren und Anomalien aufzeigen können; ich empfehle immer, Automatisierung zu nutzen, wann immer dies möglich ist.
In ähnlicher Weise solltet ihr euren Server und eure Anwendungen auf dem neuesten Stand halten. Ich versuche, ein Auge auf Sicherheitspatches und Updates von Microsoft und anderen Anbietern zu haben. Manchmal fühlt es sich überwältigend an, aber Updates können Fixes für Schwachstellen enthalten, die für einen XSS-Angriff ausgenutzt werden könnten, unter anderem. Auf dem neuesten Stand zu bleiben, gehört dazu, alles reibungslos und sicher am Laufen zu halten, und ich stelle sicher, dass ich dafür Zeit einplane.
Wenn ihr mit Drittanbieterbibliotheken oder -frameworks arbeitet, seid euch ihrer Sicherheitslage bewusst. Ich hatte Situationen, in denen ich eine Bibliothek verwendet habe, die hilfreich schien, nur um viel später herauszufinden, dass sie Schwachstellen hatte. Ich würde empfehlen, die Bibliotheken, die ihr verwendet, im Auge zu behalten und bereit zu sein, sie zu aktualisieren oder auszutauschen, wenn ihr eine bessere Alternative findet.
Oh, und während wir dabei sind, lasst uns das Benutzerschulung und -bewusstsein nicht vergessen. Es sorgt immer für ein Augenrollen, wenn ich es erwähne, aber die Schulung eures Teams über bewährte Praktiken kann viel bewirken. Wenn Benutzer verstehen, wie ein XSS-Angriff aussieht und wie sie ihn vermeiden können, reduziert ihr die Wahrscheinlichkeit, dass jemand unbeabsichtigt einen Angriff erleichtert.
Zusammenfassend - ich weiß, ich habe zuvor gesagt, dass es keine Zusammenfassungen geben sollte - denkt einfach daran, dass der Schutz eures IIS-Servers vor XSS-Angriffen darin besteht, auf mehreren Ebenen proaktiv zu sein. Es geht darum, verschiedene Methoden zu kombinieren und mögliche Angriffsvektoren im Auge zu behalten. Ihr könnt IIS so konfigurieren, dass Risiken minimiert werden, und jeder Schritt, den ihr unternehmt, egal wie klein, trägt zu eurer gesamten Verteidigung bei.
Ich hoffe, ihr fandet meinen Beitrag nützlich. Übrigens, habt ihr eine gute Windows Server-Backup-Lösung? In diesem Beitrag erkläre ich, wie man Windows Server richtig sichert.