Zum Hauptinhalt springen

Wie funktioniert der csrf-Schutz?

CSRF (Cross–Site Request Forgery) ist eine Art von Angriff auf Webanwendungen, bei denen ein Angreifer versucht, bestimmte Aktionen im Namen eines Benutzers ohne seine Zustimmung auszuführen. Diese Art von Angriff basiert darauf, dass die Webanwendung Anforderungen von Benutzern akzeptiert, ohne dass diese zusätzliche Authentifizierung erforderlich ist.

Der Zweck des CSRF-Schutzes besteht darin, eine sichere Benutzerinteraktion mit der Webanwendung zu ermöglichen. Es besteht aus mehreren grundlegenden Elementen, einschließlich der Generierung und Anwendung von CSRF-Token, der Authentifizierung und der Bindung an bestimmte Benutzersitzungen.

Eine der gebräuchlichsten Methoden zum Schutz vor CSRF ist die Verwendung von CSRF-Tokens. Diese Token werden auf dem Server generiert und in jedes Formular oder jede Verknüpfung eingefügt, die wichtige Daten auf dem Server ändern können. Wenn eine Anforderung gesendet wird, authentifiziert der Server das Token, um sicherzustellen, dass die Anforderung tatsächlich vom erwarteten Benutzer stammt.

Bei der Implementierung des CSRF-Schutzes wird häufig auch die Bindung von CSRF-Token an eine bestimmte Benutzersitzung verwendet. Dadurch kann der Server Token bestimmten aktiven Benutzersitzungen zuordnen und Anforderungen ablehnen, wenn ihre Authentizität nicht überprüft werden kann oder die Benutzersitzung nicht mit der übereinstimmt, an die das Token gebunden ist.

Definition und Zweck des CSRF-Schutzes

Um die Funktionsweise eines CSRF-Angriffs zu verstehen, müssen Sie wissen, dass eine Webanwendung häufig eine Benutzerauthentifizierung benötigt, um bestimmte Aktionen auszuführen. Dies kann das Senden einer Nachricht sein, das Profil ändern oder das Passwort ändern. Wenn ein Angreifer jedoch einen Benutzer dazu bringen konnte, eine bösartige Website zu besuchen, kann er die Sicherheitsanfälligkeit in der Webanwendung ausnutzen, um unerwünschte Aktionen im Namen des Benutzers ohne seine Zustimmung auszuführen.

Der CSRF-Schutz wurde entwickelt, um solche Angriffe zu verhindern. Der Hauptzweck des CSRF-Schutzes besteht darin, jede Anfrage mit einem bestimmten Benutzer zu verknüpfen, um sicherzustellen, dass er legitim und autorisierend ist. Dazu generiert und enthält die Webanwendung in jedem Formular oder Link ein eindeutiges Token (CSRF-Token), das dann bei der Verarbeitung der Anforderung überprüft wird. Wenn die Token nicht übereinstimmen, wird die Anfrage als verdächtig angesehen und abgelehnt.

Im Wesentlichen besteht der CSRF-Schutz darin, sicherzustellen, dass Anfragen nur von einer legitimen Quelle stammen - der Webanwendung selbst. Dies macht den Angriff viel schwieriger, da ein Angreifer ein gültiges CSRF-Token von einem bestimmten Benutzer abfangen oder herausfinden muss, was unter praktischen Bedingungen ziemlich schwierig ist.

Grundprinzipien

Der Schutz vor CSRF-Angriffen basiert auf mehreren grundlegenden Prinzipien:

  1. Generieren Sie eindeutige CSRF-Token für jede Benutzersitzung.
  2. Implementieren Sie ein CSRF-Token in jedes sichere Formular oder jede Anforderung.
  3. Überprüfen des CSRF-Tokens bei der Verarbeitung eines serverseitigen Formulars oder einer Anforderung.

Das erste Prinzip besteht darin, für jede Sitzung des Benutzers ein eindeutiges CSRF-Token zu erstellen. Dieses Token wird beim Einrichten einer Benutzersitzung auf dem Server generiert und in die HTTP-Antwort aufgenommen. Wenn ein Benutzer eine Anforderung sendet, die ein geschütztes Formular oder einen Link enthält, wird das CSRF-Token in diese Anforderung eingeschlossen.

Das zweite Prinzip besteht darin, ein CSRF-Token in jedes geschützte Formular oder jede Anforderung einzufügen. Das Token kann als verstecktes Feld im Formular aktiviert oder zu URL-Parametern hinzugefügt werden. Dadurch kann der Server das übertragene CSRF-Token überprüfen und es dem Wert zuordnen, der beim Einrichten der Sitzung generiert wurde.

Das dritte Prinzip besteht darin, das CSRF-Token zu überprüfen, wenn ein serverseitiges Formular oder eine serverseitige Anforderung verarbeitet wird. Der Server muss das übergebene CSRF-Token mit dem vergleichen, was beim Einrichten der Benutzersitzung generiert wurde. Wenn die Token übereinstimmen, wird die Anforderung als gültig betrachtet und verarbeitet, andernfalls kann der Server die Anforderung ablehnen oder andere Aktionen ausführen, um einen CSRF-Angriff zu verhindern.

CSRF-Token

Ein CSRF-Token ist eine eindeutige Zeichenfolge, die auf der Serverseite generiert und zusammen mit einem Formular an den Client übergeben wird. Dieses Token wird auf der Clientseite gespeichert und beim Senden einer Anforderung an den Server zusammen mit den Formulardaten wird es in der Anforderung enthalten sein.

Jedes Mal, wenn eine Kommunikation zwischen dem Client und dem Server stattfindet, wird das CSRF-Token auf der Serverseite überprüft. Wenn das Token in der Anforderung nicht gefunden wird oder nicht mit dem Token übereinstimmt, das auf dem Server erstellt wurde, wird die Anforderung als ungültig behandelt und der Server führt die angeforderte Aktion nicht aus.

Daher können Sie mit dem CSRF-Token überprüfen, ob die Anforderung vom Benutzer gesendet wurde und nicht von einem Angreifer, der ohne seine Zustimmung versucht, eine Aktion im Namen des Benutzers auszuführen.

CSRF-Token können auf verschiedene Arten implementiert werden, z. B. als verstecktes Feld in einem HTML-Formular oder als Abfrageheader. Es ist wichtig, dass jedes Token für jeden Benutzer eindeutig ist und zufällig generiert wird.

Die Verwendung des CSRF-Tokens ist eine effektive Methode zum Schutz vor Angriffen im Zusammenhang mit der Manipulation von standortübergreifenden Anforderungen und ist einer der empfohlenen Ansätze bei der Entwicklung sicherer Webanwendungen.

Referer-Überprüfung

Zum Beispiel, wenn die Website "example.com" ein Benutzer sendet ein Formular von einer anderen Website, zum Beispiel "attacker.com ", dann enthält der Referer die Adresse "attacker.com ". In diesem Fall kann der Server die Anforderung ablehnen, da der Referer nicht mit dem erwarteten Wert übereinstimmt.

Es sollte jedoch beachtet werden, dass die Referer-Überprüfung kein absolut zuverlässiger Schutz ist, da der Referer-Header manipuliert werden kann oder in einigen Fällen nicht vorhanden ist (z. B. bei Verwendung von HTTPS).

Es wird daher empfohlen, andere Methoden zum Schutz vor CSRF-Angriffen anzuwenden, z. B. die Verwendung des CSRF-Tokens (CSRF Token) oder die Zwei-Faktor-Authentifizierung.

Beispiel für einen Angriff

Stellen wir uns vor, wir haben eine Webanwendung, die einen CSRF-Schutzmechanismus implementiert. Der Benutzer, der sich bei seinem Konto auf der Website anmeldet, sieht die Schaltfläche "Passwort ändern". Wenn Sie auf diese Schaltfläche klicken, wird ein Formular geöffnet, in dem der Benutzer ein neues Passwort eingeben und es bestätigen kann.

Angenommen, ein Angreifer erstellt eine bösartige Website, die ein verstecktes Formular enthält, das das Formular zum Ändern des Kennworts in unserer Webanwendung nachahmt. Auf dem Formular gibt der Angreifer ein neues Kennwort an und richtet es so ein, dass es beim Laden der Seite automatisch gesendet wird.

Als nächstes sendet der Angreifer dem Opfer einen Link zu seiner bösartigen Website und überredet das Opfer, diesen Link zu folgen. Wenn ein Opfer eine bösartige Website besucht, wird das Formular mit den gefälschten Daten automatisch an die Adresse unserer Webanwendung gesendet, wodurch das Passwort des Kontos des Opfers ohne dessen Zustimmung oder gar Kenntnis geändert wird.

Daher kann ein CSRF-Angriff verwendet werden, um Daten zu ändern oder verschiedene Vorgänge im Namen eines Opfers auszuführen, wenn die Webanwendung keinen Schutz vor solchen Angriffen bietet.

Angriffsreihenfolge

1. Einen Link erhalten

Der Angreifer sollte als erstes einen Link zu einer sicheren Ressource erhalten, die ein speziell gestaltetes HTML-Formular enthält. Dieser Link kann durch bösartige Pfade wie E-Mails oder soziale Netzwerke kompromittiert und verbreitet werden.

2. CSRF-Token abfangen

Der Angreifer erstellt eine bösartige Seite, auf der versteckter Code eingebettet ist, der darauf abzielt, das CSRF-Token abzufangen. Dieser Code kann in JavaScript geschrieben werden und die folgenden Schritte ausführen:

  1. Anfragen an eine sichere Website senden, um ein CSRF-Token zu erhalten
  2. Das resultierende CSRF-Token abfangen und zur späteren Verwendung speichern

3. Vorbereiten eines in böswilliger Absicht erstellten HTML-Formulars

Der Angreifer erstellt ein bösartiges HTML-Formular, in dem der abgefangene Wert in das Eingabefeld des CSRF-Tokens eingefügt wird. Dieses Formular kann auf einer Seite erstellt werden, die unter der Adresse aus Schritt 1 verfügbar ist, oder in eine andere in böswilliger Absicht erstellte Seite eingebettet werden.

4. Opfer anlocken

Der Angreifer muss das Opfer auf eine bösartige Seite bringen, die ein bösartiges HTML-Formular enthält. Dazu kann eine Social-Engineering-Methode verwendet werden, beispielsweise unter dem Deckmantel interessanter Inhalte oder einer Einladung zur Teilnahme an einer Umfrage oder einer Aktion.

5. Ausführen einer in böswilliger Absicht erstellten Operation

Wenn ein Opfer seine Daten in ein bösartiges HTML-Formular eingibt und sendet, sendet der Browser automatisch eine Anfrage an die sichere Website, einschließlich des CSRF-Tokens, das in Schritt 3 in das Formular eingefügt wurde. Auf diese Weise gelingt es dem Angreifer, eine bösartige Operation im Namen des Opfers ohne ihr Wissen durchzuführen.

Als Ergebnis eines Angriffs kann ein Angreifer auf die vertraulichen Daten eines Opfers zugreifen, seine Einstellungen ändern, schädliche Anfragen an seinen Namen senden oder sogar finanzielle Transaktionen durchführen.

Es ist wichtig zu beachten, dass es für einen erfolgreichen Angriff notwendig ist, dass das Opfer auf einer sicheren Ressource authentifiziert ist und eine aktive Sitzung hat.