Was sind CSRF-Angriffe und wie können Sie sie verhindern?

Cross-Site Request Forgery (CSRF) ist eine der ältesten Möglichkeiten, die Schwachstellen einer Website auszunutzen. Es zielt auf serverseitige Web-Switches ab, für die normalerweise Authentifizierungen wie das Anmelden erforderlich sind. Während eines CSRF-Angriffs möchte ein Angreifer sein Opfer dazu zwingen, in seinem Namen eine nicht autorisierte, böswillige Webanforderung zu stellen.

Schwache oder schlechte Sicherheitspraktiken für Websites und Nachlässigkeit auf dem Weg des Benutzers sind einige der häufigsten Ursachen für einen erfolgreichen CSRF-Angriff.

Schauen wir uns an, was ein CSRF-Angriff ist und wie Sie sich als Entwickler oder Benutzer davon abhalten können.

Wie wirken sich CSRF-Angriffe auf Sie aus?

Ein CSRF ist ein Angriff, der verwendet wird, um nicht autorisierte Anforderungen während Webaktionen zu implementieren, für die eine Benutzeranmeldung oder -authentifizierung erforderlich ist. CSRF-Angriffe können Sitzungs-IDs, Cookies sowie andere serverbasierte Sicherheitslücken nutzen, um die Anmeldeinformationen eines Benutzers zu stehlen.

Durch das Aktivieren von Anti-CSRF-Verfahren werden beispielsweise domänenübergreifende böswillige Interaktionen verhindert.

Sobald diese Barriere durchbrochen ist, kann ein Angreifer die Sitzungs-ID des Benutzers über die vom Browser des Benutzers erstellten Cookies schnell nutzen und ein Skript-Tag in die anfällige Website einbetten.

Durch die Manipulation einer ID kann der Angreifer Besucher auch auf eine andere Webseite umleiten oder Social-Engineering-Methoden wie E-Mail zum Senden von Links nutzen, um das Opfer zum Herunterladen schädlicher Software zu ermutigen.

Sobald das Opfer solche Aktionen ausführt, sendet es eine HTTP-Anfrage an die Dienstseite des Benutzers und autorisiert die Anforderungsaktion zugunsten des Angreifers. Das kann für einen ahnungslosen Benutzer verheerend sein.

Ein erfolgreicher CSRF-Angriff kann dazu führen, dass autorisierte Benutzer ihre Zugriffsdaten an einen Angreifer verlieren, insbesondere bei serverbasierten Aktionen wie Kennwort- oder Benutzernamenänderungsanforderungen. In schlimmeren Szenarien übernimmt der Angreifer die gesamte Sitzung und handelt im Namen der Benutzer.

CSRF wurde verwendet, um Transaktionen über das Internet zu entführen sowie Benutzernamen und Kennwörter zu ändern, was dazu führt, dass Benutzer den Zugriff auf den betroffenen Dienst verlieren.

Wie Angreifer Ihre Sitzungen mit CSRF entführen: Beispiele

Die Hauptziele für CSRF-Angriffe sind Webaktionen, bei denen ein Benutzer authentifiziert wird. Um erfolgreich zu sein, braucht es unbeabsichtigte Handlungen des Opfers.

Während eines CSRF-Angriffs sind GET-, DELETE- und PUT-Aktionen sowie anfällige POST-Anforderungen die Hauptziele eines Angreifers.

Schauen wir uns die Bedeutung dieser Begriffe an:

  • GET: Eine Anforderung zum Sammeln eines Ergebnisses aus der Datenbank. Zum Beispiel die Google-Suche.
  • POST: In der Regel zum Senden von Anfragen über Webformulare. Eine POST-Anforderung tritt häufig bei der Registrierung oder Anmeldung eines Benutzers auf, was auch als Authentifizierung bezeichnet wird.
  • LÖSCHEN: Zum Entfernen einer Ressource aus der Datenbank. Sie tun dies immer dann, wenn Sie Ihr Konto von einem bestimmten Webdienst löschen.
  • PUT: Eine PUT-Anforderung ändert oder aktualisiert eine vorhandene Ressource. Ein Beispiel ist das Ändern Ihres Facebook-Namens .

In der Praxis verwenden Angreifer Sitzungsentführungen, um einen CSRF-Angriff zu sichern. Bei Verwendung dieser Kombination kann der Angreifer mithilfe eines Hijacks die IP-Adresse des Opfers ändern.

Die Änderung der IP-Adresse protokolliert das Opfer dann auf einer neuen Website, auf der der Angreifer einen betrügerischen Link eingefügt hat, der ein repliziertes Formular oder eine geänderte Serveranforderung sendet, die er über CSRF erstellt hat.

Ein ahnungsloser Benutzer glaubt dann, dass die Weiterleitung vom Dienstanbieter stammt, und klickt auf den Link auf der Webseite des Angreifers. Sobald sie dies getan haben, senden Hacker ohne ihr Wissen ein Formular beim Laden der Seite.

Beispiel eines GET Request CSRF-Angriffs

Stellen Sie sich vor, Sie versuchen eine Online-Zahlung über eine ungesicherte E-Commerce-Plattform. Die Plattformbesitzer verwenden die GET-Anforderung, um Ihre Transaktion zu verarbeiten. Diese GET-Abfrage könnte folgendermaßen aussehen:

 https://websiteurl/pay?amount=$10&company=[company ABC's account]

Ein Hijacker kann Ihre Transaktion leicht stehlen, indem er die Parameter der GET-Anfrage ändert. Um dies zu tun, müssen sie lediglich Ihren Namen gegen ihren Namen tauschen und, schlimmer noch, den Betrag ändern, den Sie bezahlen möchten. Anschließend optimieren sie die ursprüngliche Abfrage wie folgt:

 https://websiteurl/pay?amount=$20000&company=[attacker's account]

Sobald Sie auf einen Link zu dieser geänderten GET-Anforderung klicken, wird eine unbeabsichtigte Übertragung auf das Konto des Angreifers vorgenommen.

Transaktionen über GET-Anforderungen sind eine schlechte Praxis und machen Aktivitäten anfällig für Angriffe.

Beispiel eines CSRF-Angriffs mit POST-Anforderung

Viele Entwickler glauben jedoch, dass die Verwendung von POST-Anforderungen für Webtransaktionen sicherer ist. Obwohl dies zutrifft, ist eine POST-Anfrage leider auch für CSRF-Angriffe anfällig.

Um eine POST-Anfrage erfolgreich zu entführen, benötigt ein Angreifer lediglich Ihre aktuelle Sitzungs-ID, einige replizierte unsichtbare Formulare und manchmal ein wenig Social Engineering.

Ein POST-Anforderungsformular könnte beispielsweise folgendermaßen aussehen:

 <form action="Company ABC's account" method="POST">
<input type="text" name="name" placeholder="name"><br>
<input type="number" name="amount"><br>
<input type="submit" name="submit">
</form>

Ein Angreifer kann jedoch Ihre Anmeldeinformationen austauschen, indem er eine neue Seite erstellt und das obige Formular wie folgt ändert:

 <body onload="document.getElementById('payment-form').submit();">
<form action="Attacker's account" id="payment-form" method="POST">
<input type="text" hidden name="name" placeholder="name"><br>
<input type="number" hidden value=30000 name="amount"><br>
<input type="submit" hidden name="submit">
</form>
</body>

In dem manipulierten Formular setzt der Angreifer den Wert des Betragsfelds auf "30000", tauscht die Kontonummer des Empfängers gegen seine aus, sendet das Formular beim Laden der Seite und verbirgt auch die Formularfelder vor dem Benutzer.

Sobald sie diese aktuelle Sitzung entführen, leitet Ihre Transaktionsseite eine Weiterleitung zur Seite des Angreifers ein, auf der Sie aufgefordert werden, auf einen Link zu klicken, von dem sie wissen, dass Sie ihn am wahrscheinlichsten besuchen.

Wenn Sie darauf klicken, wird die Übermittlung des replizierten Formulars geladen, mit dem Ihr Geld auf das Konto des Angreifers überwiesen wird. Das bedeutet, dass Sie nicht auf Schaltflächen wie "Senden" klicken müssen, damit die Transaktion stattfindet, da JavaScript dies beim Laden der nächsten Webseite automatisch ausführt.

Alternativ kann ein Angreifer auch eine in HTML eingebettete E-Mail erstellen, in der Sie aufgefordert werden, auf einen Link zu klicken, um die gleiche Übermittlung des Seitenladeformulars durchzuführen.

Eine weitere Aktion, die für einen CSRF-Angriff anfällig ist, ist ein Benutzername oder eine Kennwortänderung, ein Beispiel für eine PUT-Anforderung. Ein Angreifer repliziert Ihr Anforderungsformular und ersetzt Ihre E-Mail-Adresse durch seine.

Dann stehlen sie Ihre Sitzung und leiten Sie entweder auf eine Seite weiter oder senden Ihnen eine E-Mail, in der Sie aufgefordert werden, auf einen ansprechenden Link zu klicken.

Daraufhin wird ein manipuliertes Formular gesendet, das den Link zum Zurücksetzen des Kennworts an die E-Mail-Adresse des Hackers anstatt an Ihre sendet. Auf diese Weise ändert der Hacker Ihr Passwort und meldet Sie von Ihrem Konto ab.

So verhindern Sie CSRF-Angriffe als Entwickler

Was sind CSRF-Angriffe und wie können Sie sie verhindern? - How to prevent yourself against a CSRF attack

Eine der besten Methoden, um eine CSRF zu verhindern, besteht darin, häufig wechselnde Token zu verwenden, anstatt von Sitzungscookies abhängig zu sein, um eine Statusänderung auf dem Server auszuführen.

Verwandte Themen: Kostenlose Anleitungen zum Verständnis der digitalen Sicherheit und zum Schutz Ihrer Privatsphäre

Viele moderne Backend-Frameworks bieten Sicherheit gegen CSRF. Wenn Sie also die technischen Probleme vermeiden möchten, CSRF selbst zu verbessern, können Sie dies problemlos beheben, indem Sie serverseitige Frameworks verwenden, die mit integrierten Anti-CSRF-Token geliefert werden.

Wenn Sie ein Anti-CSRF-Token verwenden, generieren serverbasierte Anforderungen zufällige Zeichenfolgen anstelle der statischeren anfälligen Sitzungscookies. Auf diese Weise können Sie Ihre Sitzung davor schützen, vom Entführer erraten zu werden.

Die Implementierung eines 2FA-Systems (Two-Factor Authentication) zum Ausführen von Transaktionen in Ihrer Web-App verringert auch die Wahrscheinlichkeit einer CSRF.

Es ist möglich, eine CSRF über Cross-Site-Scripting (XSS) zu initiieren, bei dem Skripte in Benutzerfelder wie Kommentarformulare eingefügt werden. Um dies zu verhindern, empfiehlt es sich, die automatische HTML-Escape-Funktion in allen Benutzerformularfeldern auf Ihrer Website zu aktivieren. Diese Aktion verhindert, dass Formularfelder HTML-Elemente interpretieren.

So verhindern Sie CSRF-Angriffe als Benutzer

Als Benutzer eines Webdienstes mit Authentifizierung müssen Sie verhindern, dass Angreifer Ihre Anmeldeinformationen und Sitzungen auch über CSRF stehlen.

Stellen Sie sicher, dass Sie vertrauenswürdige Webdienste bei Aktivitäten verwenden, bei denen es um Geldtransfers geht.

Verwenden Sie außerdem sichere Webbrowser , die Benutzer vor Sitzungsrisiken schützen, sowie sichere Suchmaschinen, die vor Suchdatenlecks schützen.

Verwandte: Beste private Suchmaschinen, die Ihre Daten respektieren

Als Nutzer können Sie sich auch auf Authentifikatoren von Drittanbietern wie Google Authenticator oder dessen Alternativen verlassen, um Ihre Identität über das Web zu überprüfen.

Obwohl Sie sich möglicherweise hilflos fühlen, einen Angreifer daran zu hindern, Ihre Sitzung zu entführen, können Sie dies dennoch verhindern, indem Sie sicherstellen, dass Ihr Browser keine Informationen wie Kennwörter und andere Anmeldedaten speichert.

Verbessern Sie Ihre Web-Sicherheit

Entwickler müssen Web-Apps während der Entwicklung und Bereitstellung regelmäßig auf Sicherheitsverletzungen testen.

Es ist jedoch üblich, andere Sicherheitslücken einzuführen, während versucht wird, andere zu verhindern. Stellen Sie daher sicher, dass Sie beim Versuch, eine CSRF zu blockieren, nicht gegen andere Sicherheitsparameter verstoßen haben.