it-swarm.com.de

Warum werden Brute-Force-Angriffe zum Knacken von Passwörtern nicht automatisch erkannt und vereitelt?

Warum erkennt Software Angriffe zum Knacken von Passwörtern nicht automatisch und vereitelt sie?


Lange Version:

Angenommen, jemand versucht einen Brute-Force-Angriff zum Knacken von Passwörtern auf ein Programm XYZ, für das eine Passwortauthentifizierung erforderlich ist.

Mein Verständnis ist, dass ein solcher Angriff darin bestehen würde, die Menge "aller möglichen Passwörter" zu durchlaufen und jeweils nacheinander an XYZ zu senden, bis eines davon funktioniert. Damit diese Strategie eine Erfolgswahrscheinlichkeit hat, muss der Angreifer in der Lage sein, XYZ sehr viele Kandidatenpasswörter pro Sekunde zu liefern. Daher wäre es trivial, XYZ so zu programmieren, dass dieses Muster erkannt wird (dh es unterscheidet sich von dem Fall, in dem ein legitimer Benutzer das richtige Kennwort einige Male falsch eingibt) und die Authentifizierungsanforderung automatisch für die nächsten beispielsweise 10 Minuten eskaliert.

Die Idee ist, dass der Besitzer von XYZ zwei "Passwörter" setzen darf: ein "Level 1 Passwort" (AKA "den PassWort") das ist relativ leicht zu merken und leicht zu tippen, aber auch relativ leicht mit brutaler Gewalt zu knacken, und ein" Level 2 Passwort "(AKA" der Passphrase") das könnte extrem lang sein, mit brutaler Gewalt nicht zu knacken sein, aber auch für den (legitimen) täglichen Gebrauch sehr unpraktisch.

Jemand, der den bequemen, aber schwachen Pass kannteWort würde kaum jemals den unknackbaren, aber unbequemen Pass benutzen müssenphrase.

Ich bin sicher, es gibt einen großen Fehler in diesem Schema, sonst würden Passwörter den legitimen Benutzern nicht die Kopfschmerzen bereiten, die es ist. Was ist die Erklärung?

35
kjo

Ziemlich oft. Jedes vernünftige System sperrt Sie, wenn Sie zu viele Online-Angriffe (oder legitime falsche Versuche) ausführen, um auf das Konto zuzugreifen.

Das Problem tritt bei Offline-Angriffen auf. Der Server (oder was auch immer Sie authentifizieren) muss etwas haben, mit dem Sie das Passwort vergleichen können. Dies ist normalerweise entweder ein verschlüsselter Wert, der mit dem Kennwort entschlüsselt werden kann, oder ein Hash. Wenn dieser Wert beeinträchtigt wird, z. B. wenn ein Angreifer Zugriff auf die Benutzerdatenbank erhält, kann er versuchen, den Hash oder die Entschlüsselung auf seinem eigenen Computer auszuführen und alle Anzahl der Versuche zu umgehen. Sie können auch versuchen, Größenordnungen schneller zu erraten, da sie lokal arbeiten und nicht auf ein Netzwerk warten müssen.

Bei einem Offline-Angriff ist es möglich, Tausende, wenn nicht Millionen von Angriffen pro Sekunde zu versuchen, und es wird plötzlich trivial, einfache Passwörter innerhalb von Minuten, wenn nicht Sekunden, anzugreifen. Es gibt keine Möglichkeit, den Angriff zu verhindern, da wir keine Kontrolle über das System haben, mit dem das Kennwort überprüft wird. Aus diesem Grund ist es wichtig, Ihr Kennwort zu ändern, nachdem ein DB-Kompromiss entdeckt wurde.

58
AJ Henderson

Bei "Online-Angriffen" tun sie dies in unterschiedlichem Umfang und mit unterschiedlichem Erfolg. Normalerweise ist es nur ein Ärger für den legitimen Benutzer und keine große Abschreckung für Kriminelle.
Für Offline-Angriffe ist dies nicht möglich. Wenn jemand Ihre Passwortdatenbank hat, können Sie ihn nicht daran hindern, etwas damit zu tun (obwohl Sie Verzögerung sie etwas).

Handys funktionieren genau so, wie Sie es beschreiben. Nachdem Sie Ihre PIN unkorrekt über einen bestimmten Schwellenwert hinaus (z. B. 3 Versuche)) eingegeben haben, benötigen Sie die PUK, um das Gerät zu entsperren. Wenn mir das jemals passiert, bin ich sehr sauer, da ich weggeworfen habe das Blatt Papier, auf dem diese 10-stellige Nummer vermerkt ist.

Mein AVM-Router sperrt Sie für 5 Sekunden und verdoppelt die Zeit mit jedem fehlgeschlagenen Login. Nach 10 fehlgeschlagenen Versuchen müssen Sie also 42 Minuten warten, bevor Sie es erneut versuchen können.

Ein solches Schema ist jedoch nur mäßig intelligent. Es ist zwar unwahrscheinlich, dass Sie 10 Mal hintereinander einen Tippfehler haben, aber es ist durchaus möglich, dass Sie sich nicht erinnern können, welches der 10 Passwörter (Passwörter, die Sie selten an verschiedenen Orten verwenden, oder unter Passwörtern, die Sie haben) im Laufe der Zeit geändert) ist die richtige. Außerdem ermöglicht es einen Denial-of-Service-Angriff mit vergleichsweise wenig Arbeit.
Natürlich muss auch der Angreifer zwischen den Anmeldeversuchen warten, aber er wartet nur 21 Minuten, wo Sie 42 Minuten warten müssen (oder 6 Stunden, während Sie 12 warten). Wenn jemand nur böswillig ist und das Warten nicht schadet, können Sie jederzeit einen Wecker auf 6 Stunden stellen und sich abends erneut falsch anmelden. Für den legitimen Benutzer ist es ein vollständiger Tag des Wartens, wenn dies funktioniert (und was noch wichtiger ist, das Warten tut tut weh, wenn Sie tatsächlich etwas tun müssen).
Andere Systeme, die ich auf einigen Websites gesehen habe, sind noch weniger intelligent. In einem Fall musste ich vor einigen Jahren mein Passwort ändern, um mein Konto zu entsperren, weil jemand einige falsche Anmeldungen vorgenommen hatte. Das ist natürlich totaler Unsinn, da das Passwort nachweislich nicht kompromittiert wurde (da diese Anmeldeversuche erfolglos waren). Diese "Sicherheitsmaßnahme" war für den Kunden nur ein sehr großer Ärger, ohne Nutzen.

Zur Verteidigung der Implementierer ist es überhaupt nicht einfach (wenn möglich), etwas zu finden, das viel besser funktioniert.

14
Damon

Es gibt ein anderes Szenario, das schwer zu erkennen wäre.

Schauen wir uns zunächst Szenarien an, gegen die man sich leicht verteidigen kann.

Einfach: Verteidigung gegen Brute-Force-Angriffe auf einen einzelnen Benutzer.

Brute-Force-Angriffe sind auch leicht zu verteidigen, wenn ein einzelner Benutzer das Ziel des Angriffs ist. Wir können nur das Konto dieses Benutzers sperren. Dies kann den Benutzer ärgern, aber es ermöglicht uns zu verhindern, dass das System kompromittiert wird.

  • melden Sie sich bei UserJoe an
  • melden Sie sich bei UserJoe an
  • melden Sie sich bei UserJoe an
  • melden Sie sich bei UserJoe an
  • melden Sie sich bei UserJoe an
  • serJoes Konto sperren

Einfach: Verteidigung gegen Brute-Force-Angriffe von einer einzigen IP-Adresse

Brute-Force-Angriffe, die leicht zu erkennen und abzuwehren sind, wenn alle Anforderungen von derselben IP-Adresse stammen.

Wir können diese IP-Adresse einfach daran hindern, weitere Anfragen zu stellen.

  • SomeIPAddress1 versucht sich anzumelden
  • SomeIPAddress1 versucht sich anzumelden
  • SomeIPAddress1 versucht sich anzumelden
  • SomeIPAddress1 versucht sich anzumelden
  • Verhindert, dass SomeIPAddress1 versucht, sich später anzumelden

Unmöglich (?): Verteidigung gegen einen Botnet, der bei jedem Versuch einen neuen Benutzer brutal zwingt.

Angenommen, jemand, der ein Botnetz verwendet, versucht, Ihr System brutal zu erzwingen. Sie haben unterschiedliche IP-Adressen, sodass Sie Anmeldungen nicht nach IP-Adresse filtern können.

Angenommen, sie versuchen bei jedem Versuch, sich bei einem anderen Benutzer anzumelden.

Die Anfragen könnten also so aussehen:

  • SomeIPAddress1 versucht, sich bei UserJoe anzumelden
  • SomeIPAddress2 versucht, sich bei UserAnne anzumelden
  • SomeIPAddress3 versucht, sich bei UserMarc anzumelden
  • SomeIPAddress4 versucht, sich bei UserHanah anzumelden
  • ...

Ich kann mir keine Möglichkeit vorstellen, legitime Anmeldungen von gefälschten Anmeldungen zu unterscheiden.

10

Es wird immer ein Balanceakt sein, wie viel Zeit jemand nach einem falschen Anmeldeversuch warten lässt. Es ist nicht unangemessen, die Wartezeit nach jedem Versuch weiter zu verlängern (und schließlich weitere Versuche bis zu einem Zurücksetzen zu sperren), dies muss jedoch an die IP-Adresse gebunden sein, auf die der Versuch eingeht, damit der legitime Benutzer dies nicht tut. t auch ausgesperrt werden (Opfer, weil jemand versucht, in sein Konto einzubrechen). Ein verteilter Angriff (von vielen IP-Adressen) kann das System jedoch so weit belasten, dass es nur noch zu einem einfachen DDoS-Angriff wird.

Wenn jemand entschlossen ist, eine ganze Reihe von Passwörtern auszuprobieren (nicht unbedingt jedes möglich eins, nur die häufigsten/wahrscheinlichsten) und eine Herde zombifizierter Maschinen hat, wird dies entweder irgendwann gelingen oder bringen Sie das System auf die Knie. Vergessen Sie nicht, dass das Erzwingen einer Wartezeit (Abweisen von Anmeldeanforderungen) oder das Verweigern einer IP-Adresse ebenfalls Ressourcen verbraucht. Und wenn Sie so viele Passwörter haben, dass Sie sich nicht erinnern können, welches Sie verwenden sollen, haben Sie ein Problem mit Ihrer Methodik, wenn Sie alle durchgehen müssen!

Eine "Sicherheitsfrage" -Aufforderung (im Grunde ein alternatives Passwort) nach so vielen fehlgeschlagenen Versuchen ist möglich, ebenso wie das Versenden eines Einmalkennworts (Zurücksetzen) an eine registrierte E-Mail-Adresse (ob automatisch oder "Passwort vergessen" -Anforderung) eine Sperrung dieser IP-Adresse für eine bestimmte Zeit oder bis ein Administrator aufgefordert wird, sie zu entsperren. Ich habe all diese Methoden gesehen.

Wenn der Angreifer Insiderinformationen hat, nämlich die gehashte oder verschlüsselte Kennwortdatei, kann er den größten Teil seiner Arbeit offline erledigen und sich nur einmal anmelden (nachdem er das zu verwendende Kennwort herausgefunden hat). Passwörter sollten immer als Hashes (Einwegverschlüsselungen) und niemals im Klartext oder sogar in reversibler verschlüsselter Form gespeichert werden. Hashes sind schwierig (aber nicht unmöglich), um das Nur-Text-Passwort wiederherzustellen, insbesondere wenn sie gesalzen sind (so dass der Hash für zwei verschiedene Benutzer, die zufällig "geheim" für ihr Passwort gewählt haben, nicht gleich ist).

2
Phil Perry

Weil der Kunde nicht für die Sicherheit bezahlt.

Sie müssen eine Datenbanktabelle erstellen. Sammeln Sie IP-Adressen aus fehlgeschlagenen Anmeldungen. Bereinigen Sie diese Tabelle regelmäßig. Erstellen Sie eine weitere Tabelle mit blockierten IP-Adressen und bereinigen Sie diese ebenfalls. Sie sehen, es erfordert einige Anstrengungen, und Kunden möchten nicht nur für die Sicherheit extra bezahlen.

Als Entwickler sollten Sie Frameworks verwenden, die sich um diese Probleme kümmern. Vielleicht möchten Sie auch einen Blick auf fail2ban werfen.

0
PiTheNumber