⬅ Zurück zur Übersicht

Brute Force Protection

david am Montag, 23.09.2019 - 10:24:41
⬅ Zurück zur Übersicht

Was ist Brute – Force

Brute Force Angriffe auf Webanwendungen stellen gerade bei größeren Webseiten mit vielen Nutzern ein ernsthaftes Problem dar. Dabei versucht ein Angreifer entweder mit  zufälligen Nutzername- und Passwortkombinationen einen Nutzeraccount zu komprimittieren oder mit einer sogenannten Wordlist, in welcher sich mehrere typische Nutzernamen und mehrere typische Passwörter wie admin und 1234 befinden. Diese Listen werden in schneller Abfolge ausprobiert und anhand der Rückgabe des Servers wird erkannt, ob der Login erfolgreich war oder nicht.

Dabei muss man – theoretisch – davon ausgehen, dass mit Brute Force hypothetisch jedes Passwort geknackt werden. Die Frage ist allerdings, in welcher Zeit das Passwort erraten werden kann. Wenn ein Angriff 20min dauert ist dies für einen Angreifer vertretbar, bei 500 Jahren sieht das schon anders aus. Daher ist eine effektive Möglichkeit, Brute Force Angriffe zu verhindern, die Zeitspanne für einen erfolgreichen Durchlauf so lang wie möglich zu gestalten.

Grundsätzlich ist es daher immer ratsam, dem einloggenden Nutzer nicht mitzuteilen, ob der Nutzername existiert. Dadurch erhöht sich die Dauer eines erfolgreichen Angriffs exorbitant, denn der Angreifer muss neben dem Passwort auch noch einen validen Nutzernamen erraten. Das ist weniger bei Netzwerkplattformen sinnvoll, bei denen jeder Nutzer auch den Nutzernamen der anderen Nutzer sehen kann. Ein Angreifer würde sich dann einfach einen validen Account erstellen und die Nutzernamen der anderen Nutzer dadurch erhalten (Ein möglicher Schutzmechanismus steht unten).

Weiterhin ist grundsätzlich guter Ansatz, den Login nicht über HTTP – Statuscodes zu verfizieren. Ein 403 – Code ist für einen Angreifer einfach abzufangen und er erhält so schnell die Information darüber, ob der Login erfolgreich war oder nicht und muss nicht zusätzlich die Webseite parsen, um den Loginstatus zu erhalten, was einen zusätzlichen Zeitgewinn für uns bedeutet.

Zeitspanne

Unter https://tmedweb.tulane.edu/content_open/bfcalc.php gibt es einen spannenden Rechner, der euch ausrechnen kann, wie lange ein Brute – Force Angriff dauert und wie viele Kombinationen möglich sind.

Ein Passwort mit 5 Großbuchstaben, zwei Kleinbuchstaben und zwei Zahlen gibt mir dort folgendes Ergebnis:

Your password is 9 characters long and has 803,181,017,600 combinations.
It takes 15.58 hours or 0.65 days to crack your password on computer that trys 25,769,803,776 passwords per hour. This is based on a typical PC processor in 2007 and that the processor is under 10% load.

15.58 Stunden ist relativ wenig und dürfte einen Angreifer, der das Programm auf seinem Rechner laufen hat, wohl nicht abschrecken. Das Ziel muss also sein, die Zeitspanne so zu verlängern, dass ein Brute – Forcen des Passwortes nicht mehr angemessen erscheint, gleichzeitig der Nutzer aber so wenige Einschränkungen erfährt wie möglich.

Wie schützen

Captcha

Captchas sind eine übliche Vorgehensweise zum Schutz vor Brute Force Angriffen. Nach einer gewissen Anzahl nicht erfolgreicher Logins wird dem Nutzer ein Captcha angezeigt, welches er zusätzlich lösen muss um einen weiteren Loginversuch zu initiieren. Der Vorteil besteht darin, dass der Nutzer nicht gesperrt wird und weiterhin die Möglichkeit hat, sich einzuloggen, er muss allerdings ein Captcha lösen, was aus Barrierefreiheitsgründen problematisch ist. Außerdem kann es viele Nutzer abschrecken, ein Captcha einzugeben, welches unter Umständen nicht immer leicht zu erkennen ist (was ja Sinn der Sache ist).

Secret Username

Ein „Secret Username“ (keine Ahnung ob der Begriff offiziell existiert) bedeutet, dass der Nutzername, welcher bei einer Netzwerkplattform sichtbar ist, nicht auch gleichzeitig der Nutzername ist, mit dem ein Login initialisiert wird. Alternativ könnte eine Nutzereid oder (etwas komfortabler) die Mailadresse erwartet werden.
Das Bedeutet, wenn ich bei einem sozialen Netzwerk mit dem Nutzernamen David und der Mailadresse „fancymail@d3vdav3.de“ angemeldet bin, sehen andere Nutzer nur meinen Nutzernamen (David), der Login ist aber nur mit meiner E-Mail – Adresse „fancymail@d3vdav3.de“ möglich. So muss ein Angreifer sowohl Nutzernamen als auch Passwort erraten, was die Zeitspanne für einen erfolgreichen Angriff deutlich erhöht.

Accountsperre

Eine Sperre gehört zu den harten Möglichkeiten, einen Account vor Brute – Force – Angriffen zu schützen. Dabei wird der Account nach einer gewissen Anzahl von fehlerhaften Loginversuchen für eine gewisse Zeit gesperrt. Ein Angreifer, der nach 5 Versuchen 30 Sekunden warten muss, braucht eine signifikant längere Zeitspanne um ein Passwort zu erraten und wird sich ein leichteres Ziel suchen.

Der Nachteil hierbei ist jedoch, dass hierdurch eine relativ einfache DOS Attacke gestartet werden kann. Ein Angreifer, der den Nutzernamen kennt, kann einfach im Abstand von 30 Sekunden mehrere falsche Loginversuche starten und somit dem legitimen Nutzer einen Login verwehren. Außerdem wird sich der legitime Nutzer ärgern, sollte er wirklich sein Passwort vergessen haben, wenn er erst 30 Sekunden warten muss bis ein neuer Versuch stattfinden kann.

E-Mail Verifizierung

Eine relativ leichte und effiziente Möglichkeit ist die Freischaltung weiterer Loginversuche per Mail. Hierbei bekommt der Nutzer nach einer gewissen Anzahl von falschen Loginversuchen eine Mail mit einem Link, welcher angeklickt werden muss um den Account wieder freizuschalten. Dadurch ist relativ schnell ein neuer Versuch möglich, der Nutzer muss nicht warten und bekommt zusätzlich bei einem Brute – Force – Versuch die Info, dass mehrere Logins fehlgeschlagen sind, und kann dann ggfs. sein Passwort in ein stärkeres abändern.

Mausbewegung

Funktional, aber relativ ineffektiv ist das Abfangen von Mausbewegungen. Der Nutzer muss, um auf der Seite zu navigieren, seine Maus bewegen, sei es um zum Eingabefeld zu gelangen oder den Login Button zu klicken. Ein Nutzer der keinerlei Mausbewegung ausführt kann unter Umständen ein Bot sein und könnte dann zur Eingabe eines Captchas gezwungen werden.
Der Nachteil ist wieder die Barrierefreiheit: Eine Navigation auf der Seite ist z.B. über die TAB – Taste möglich, was keine Mausbewegung triggert und den Nutzer fälschlicherweise als Bot identifiziert. Daher wäre es auch sinnvoll, Tastatureingaben zu prüfen. Allerdings wird z.B. via Chromium ebenfalls das Keypress – Event getriggert und der Schutz läuft ins leere. Außerdem wird ein professioneller Angreifer nicht über das Formular gehen, sondern Anfragen direkt an das Loginskript via Post – Request senden. Somit läuft dieser Schutz wieder ins leere.

Zweifaktor

Ein zusätzliches, effektives Vorgehen ist die Nutzung eines One-Time/Timebased Token auf Grundlage der Zwei-Faktor – Authentifizierung.
Der Nutzer bekommt hier einen bspw. 8 stelligen Schlüssel, welcher Sich nach einer gewissen Zeit ändert und neu generiert wird. Die Generierung der Schlüssel erfolgt sowohl Client als auch Serverseitig mit dem gleichen Seed, sodass der Server den eingegebenen Schlüssel zurückrechnen und validieren kann. Der Vorteil liegt hier darin, dass sich der Schlüssel nach z.B. 30 Sekunden ändert und somit einen Brute – Force – Angriff erschwert.

Login – Geschwindigkeit

Auch das Messen der Logingeschwindigkeit ist eine Lösung zur Vermeidung von Brute – Force – Angriffen. Dabei wird serverseitig die Zeitspanne gemessen, die ein Nutzer braucht um einen weiteren Loginvorgang zu starten. Angenommen, der legitime Nutzer tippt vor einem erneuten Login ein anderes Passwort ein, dauert das mindestens eine Sekunde bis ein erneuter Loginversuch stattfinden kann. Ein Client, der mehrere Loginversuche pro Sekunde startet, kann nur programmatisch gesteuert werden und somit als Bot angesehen werden. Daher wäre es sinnvoll, bei mehreren Login – Versuchen innerhalb einer kurzen Zeitspanne zur zusätzlichen Validierung einen Captcha einzuschalten, den Nutzer zu informieren oder den Account für eine gewisse Zeit zu sperren.

Verzögerung im Login – Prozess

Eine letzte Möglichkeit ist die Verzögerung im Loginprozess. Der Nutzer gibt zwar seine Nutzerdaten an, der Server wartet allerdings ein paar Sekunden bevor der Login ausgeführt wird. Dem Nutzer kann dabei ein Ladebalken angezeigt werden, sodass es für ihn aussieht als würde der Server die Anfrage noch verarbeiten. Dadurch verzögert sich jeder einzelne Login um ein paar Sekunden was einen erfolgreichen Brute – Force – Angriff erschwert.

Ergebnis

Ein absoluter Schutz gegen Brute – Force – Angriffe ist nicht möglich. Er kann jedoch erkannt und gegebenenfalls so verzögert werden, dass die Zeitspanne bis zum Erfolg so groß ist, dass es unökonomisch ist, den Angriff tatsächlich laufen zu lassen. Am besten lassen sich dazu mehrere hier genannte Methoden zu kombinieren, wobei immer eine Abwägung zwischen Nutzerfreundlichkeit und Sicherheit getroffen werden muss.

Kommentar schreiben

Kommentare