it-swarm-eu.dev

Wie können Cracker 200k gesalzene Passwort-Hashes so schnell rekonstruieren?

Ich recherchiere für einen kleinen Vortrag über Websicherheit und habe einen Artikel über den Formspring-Hack gefunden, der mich neugierig gemacht hat. Sie behaupten, SHA-256 + Salz verwendet zu haben

Wir konnten das Loch sofort reparieren und unsere Hashing-Mechanismen von sha-256 mit zufälligen Salzen auf bcrypt aktualisieren, um die Sicherheit zu erhöhen (10. Juli 2012).

… Trotzdem haben die Angreifer behauptet sie haben ~ 200.000 Passwörter in den 400.000 veröffentlichten Datensätzen gefunden (Sie haben 11 Millionen Benutzer, es ist meiner Meinung nach wahrscheinlich, dass die meisten von ihnen kopiert wurden).

Etwa die Hälfte der 400.000 Hashes wurde bereits von Passwort-Crackern rekonstruiert. (11. Juli 2012)

Das sieht für mich verdächtig aus. Ich weiß, dass ohne PKCS # 5 oder ähnliche Techniken die Sicherheit von SHA-256 begrenzt ist, aber wie viel Rechenleistung würden sie benötigen, um so viele Passwörter so schnell zu finden?

Ich vermute, dass Formspring über das Hashing gelogen hat. Hat jemand ein paar Einblicke dazu?

33

Keine der vorhandenen Antworten deckt den kritischen Teil dieser Frage zu meiner Zufriedenheit ab: was ist mit den Salzen ?

Wenn nur die Passwort-Hash-Werte gepostet wurden, können andere Cracker möglicherweise nicht wissen:

  1. Der tatsächliche Salzwert pro Passwort (angeblich zufällig, pro Quelle).

  2. Wie das Salz mit dem Passwort im Code gemischt wird.

Alles was sie haben ist der letzte, resultierende Hash!

Es gibt viele Möglichkeiten , wie das Passwort und Salt kombiniert werden können, um den Hash zu bilden:

sha256(pass + salt)
sha256(salt + pass)
sha256(sha256(pass) + sha256(salt))
sha256(pass + sha256(salt))
sha256(sha256(...(salt + pass + salt)...))

Aber wenn das Salz die empfohlenen 8 Zeichen der reinen Zufälligkeit ist ...

sha256("monkey1" + "w&[email protected]")
sha256("w&[email protected]" + "monkey1")

… Dies bedeutet, dass ein "typisches" Passwort mit 7 oder 8 Zeichen extrem schwer zu erzwingen ist, weil es effektiv 15 oder mehr Zeichen enthält! Um Passwort-Hashes zu knacken, die Sie wissen gesalzen haben, haben Sie keine andere Wahl als Brute Force, es sei denn, Sie haben auch das Salz !

Basierend auf Untersuchungen, die ich mit GPU-Cracking durchgeführt habe, erreichte ich 8213,6 M c/s mit zwei High-End-ATI-Karten mit Brute-Force-Cracking-MD5-Passwort-Hashes. In meinem Benchmarking bedeutete dies, dass ich versuchen konnte:

all 6 character password MD5s   47 seconds
all 7 character password MD5s   1 hour, 14 minutes
all 8 character password MD5s   ~465 days
all 9 character password MD5s   fuggedaboudit

Beachten Sie, dass SHA-256 auf GPUs mit Hashcat 13% der Geschwindigkeit von MD5 beträgt. Multiplizieren Sie diese Zahlen mit ungefähr 8, um zu sehen, wie lange das dauern würde.

Wenn die Salze nicht bekannt waren, bedeutet dies, dass Sie im Wesentlichen brutal das Äquivalent von Passwörtern mit mehr als 12 Zeichen erzwingen. Das geht weit über den Bereich einer bekannten Rechenleistung hinaus.

Nun, wenn Sie das argumentieren wollen ...

  1. Die Original Cracker erhielten ebenfalls die Salze, entschieden sich jedoch dafür, sie nicht zu veröffentlichen.

  2. Die Cracker original haben auch den Quellcode (oder Open Source), damit sie wissen, wie die Passwörter gesalzen sind, aber diese Informationen nicht veröffentlichen.

  3. Formspring lügt und ihre Passwörter wurden nicht oder nicht richtig gesalzen, so dass die Salze keine Wirkung hatten.

… Dann ist es leicht möglich, 200.000 von 400.000 Passwort-Hashes in wenigen Tagen zu knacken.

34
Jeff Atwood

Bearbeiten: Alle folgenden Angaben setzen voraus, dass die Salze bekannt sind, weil das ist die branchenübliche Verwendung des Wortsalzes (3. Zeile) .

Schauen Sie sich als Beispiel dafür, wie oft dies in der Datenbank aussieht, diese SHA-256 Unix Crypt Ausgabe an:

$5$rounds=80000$wnsT7Yr92oJoP28r$cKhJImk5mfuSKV9b3mumNzlbstFUplKtQXXMo4G6Ep5

.. wo wnsT7Yr92oJoP28r ist das Salz im Klartext. Die Python Passlib-Dokumentation enthält eine gute Beschreibung vieler gängige Hash-Passwortformate , und die meisten dieser Speicher speichern Klartextsalze, die zusammen mit der Darstellung des Hash-Passworts verkettet sind.

Das ' dem Angreifer unbekannt Salz', über das @Jeff Atwood spricht, wird häufig als "Pfeffer" bezeichnet. Siehe Password Hashing Salz + Pfeffer hinzufügen oder ist Salz genug?


2009 schrieb Daniel J. Bernstein eine hochoptimierte SHA-1-Implementierung für das CUDA-Framework von NVIDIA. Damals schafften sie 690 Millionen SHA-1-Hashes pro Sekunde auf einem einzelnen Server mit vier Grafikkarten.

Brute-Force-Angriffe gegen gehashte Passwörter sind eine "peinlich parallele" Arbeitslast . Im Jahr 2010 demonstrierte Thomas Roth Brute Force greift ~ 10 Hashes für ~ 2 $ an mit Amazon EC2. Dies kann leicht vergrößert werden. Wenn die Rate nicht hoch genug ist, fügen Sie einfach weitere EC2-Instanzen hinzu.

Es geht also im Wesentlichen nicht darum, wie lange es dauern wird, um die Passwörter zu erzwingen. Es geht eher darum, wie viel Rechenleistung der Angreifer bereit oder in der Lage ist zu bezahlen, um schneller Ergebnisse zu erzielen.

die Angreifer gaben an, ~ 200.000 Passwörter gefunden zu haben

Eine vernünftige Erklärung ist, dass die Angreifer nicht auf bestimmte Hash-Darstellungen abzielten, sondern sich nur für die "niedrig hängenden Früchte" entschieden haben. Mit anderen Worten, sie suchten nur nach Passwörtern, die leicht zu erraten sind. Vielleicht so etwas wie:

  • Eine Kandidatenliste mit den häufigsten Passwörtern im Klartext, erstellt aus veröffentlichten Listen der tatsächlichen Benutzerkennwörter. (Im Laufe der Jahre gab es mehrere Lecks von echten Benutzerkennwörtern .)
  • Und vielleicht haben sie zusätzlich alle aussprechbaren Kleinbuchstaben bis zu einer unteren Obergrenze ausprobiert, zum Beispiel bis zu 6 Zeichen. (Im obigen MySpace-Datensatz von 2006 wurde festgestellt, dass 17% aller Endbenutzerkennwörter aus 6 oder weniger Zeichen bestehen.)

Ich vermute, dass Formspring über das Hashing gelogen hat.

Wenn ich Ihre Links richtig verstehe, wurden die Hashes am 7. Juli in einem Forum entdeckt. Aber sie könnten Wochen oder Monate zuvor von Formspring gestohlen worden sein?

Angesichts dessen, was ich oben beschrieben habe, erscheint es mir nicht unangemessen, dass eine einzelne Runde SHA256 mit einem eindeutigen Salz pro Passwort verwendet wurde, wie Formspring sagte.

Es hängt alles davon ab, wie viel Zeit und Mühe die Angreifer in das Brute-Force-Cracken stecken. Innerhalb der Ressourcen, über die eine kleine Gruppe einzelner Hacker verfügen könnte, erscheint es jedoch plausibel, 200.000 schwache Passwörter aus einem Datensatz von 11 Millionen einfachen SHA-256-Hash-Darstellungen zu ermitteln.

16
Jesper M

Das Knacken von ungesalzenen Hashes ist ziemlich trivial: Sie suchen einfach in einer vorberechneten Tabelle nach Hash und finden Ihre Antwort. Es macht keinen Sinn, den Rest brutal zu erzwingen, da Ihre Rainbow-Tabellen bereits Ihr Brute-Force-Wörterbuch abdecken.

Das Knacken gesalzener Passwörter ist jedoch immer noch einfach. langsamer aber immer noch einfach. Bei den meisten Brute-Force-Angriffen setzt der Angreifer auf Breite und nicht auf Tiefe. Anstatt 1 Milliarde Passwörter für ein Konto zu versuchen, versucht er zehn, Hunderte oder Tausende gängiger Passwörter für ALLE Konten. Sicherlich sind Regenbogentische schneller, aber Salz allein behindert die klassische Brute-Force-Methode nicht. Beginnen Sie oben in Ihrem Wörterbuch und versuchen Sie dieses Passwort für alle Konten: Dies beinhaltet natürlich die Neuberechnung des Hashs für jedes Konto, aber andererseits sind Ihre Trefferchancen ziemlich hoch (genau das bedeutet "allgemeines Passwort") , wie auch immer). Nehmen Sie als nächstes Ihr nächsthäufigstes Passwort, dann das nächste usw.

Am Ende kommen Sie vielleicht nur durch mehrere tausend Passwörter, aber statistisch gesehen gibt es wahrscheinlich Hunderte von Konten mit dem Passwort "123456" in Ihrer Liste und eine ziemlich große Anzahl, die "Passwort1" und "111111" und "Test" verwenden. .

200K von 11M sind glaubwürdig; nur etwa 2%. 200K von 400K weniger. Nicht unmöglich, aber nicht so wahrscheinlich. Das Gesetz der Verringerung der Renditen tritt irgendwo ein; Ich bin mir nicht sicher, wie weit ich drin bin, aber es ist wahrscheinlich ein wirklich einfaches Verhältnis wie 1/e oder so. Darüber hinaus werde ich skeptisch.

8
tylerl

Es liegt in der Vernunft, dass sie nicht lügen.

  1. Wie @ Jeff bemerkte , dass der Zugang zum Salz für ein schnelles Knacken wesentlich ist, aber wie @Remus Rusanu bemerkte: "Wenn sie die Hashes erhalten haben, ist es für mich schwer zu sehen, wie sie das Salz nicht erhalten könnten gut ", da sie so gespeichert werden müssen, dass sie miteinander verknüpft werden können. Ich würde davon ausgehen, dass zumindest die ersten Hacker Zugang zum Salz hatten.1

  2. @ Jeff gibt außerdem an, dass sie Zugriff auf den Quellcode haben müssen, um zu wissen, wie das Salt und das Passwort kombiniert werden. Ich schlage einen anderen Ansatz vor, um herauszufinden, wie das Salz und das Passwort kombiniert werden:

    1. nehmen wir an, dass sie vor dem Angriff ein Formspring-Konto haben (eine ziemlich vernünftige Annahme).
    2. suchen Sie in der erhaltenen Liste nach diesem bestimmten Konto (Salt, Hash)
    3. wenn Sie das Passwort, das Salt und den daraus resultierenden Hash kennen, sollte es einfach sein, ein kleines Skript zu erstellen, um alle vernünftigen (und einige unvernünftigen) Möglichkeiten zum Kombinieren von Passwort und Salt zu testen (nicht mehr als ein paar tausend Wege?).
    4. ???
    5. profitieren!
  3. sie behaupten, "zig Millionen Mitglieder" zu haben, was @Jesper niedrig hängende Frucht Theorie sehr vernünftig klingen lässt.

Ok, sie können immer noch lügen, aber zumindest klingt es vernünftig, dass sie es nicht sind.

1. Wenn diese Annahme falsch ist - die ersten Hacker haben das Salt nicht veröffentlicht UND nicht versucht, die Passwörter selbst zu knacken -, kann der Rest nicht möglich sein.

7
João Portela

hashcat kann auf der Radeon HD7970 etwas mehr als 1 Milliarde SHA256-Hashes pro Sekunde ausführen, was nur der halben Geschwindigkeit von SHA1 und einem Viertel der Geschwindigkeit von MD5 entspricht. Dies ist jedoch nicht einmal der Engpass :

Noch etwas, bevor wir weitermachen; Haben Sie bemerkt, dass die Geschwindigkeit des Knackens „nur“ 258,7 Millionen pro Sekunde betrug? Was ist mit dem theoretischen Durchsatz von ein paar Milliarden SHA1-Hashes pro Sekunde passiert? Das Problem ist, dass der höhere Durchsatz nur mit „Mutationen“ der Kennwortwörterbuchwerte oder durch Durcharbeiten verschiedener Kennwortmöglichkeiten direkt in der GPU erreicht werden kann. Mit anderen Worten, wenn Sie die GPU einen Wörterbuchwert annehmen lassen, verwandeln Sie ihn in eine Reihe verschiedener Möglichkeiten, die viel schneller funktionieren können. Die GPU kann nicht schnell genug mit Passwörtern versorgt werden, um den gleichen Durchsatz zu erzielen. Eine effektive Liste von Passwörtern ist daher ein Engpass.

Die Verwendung von SHA256 (oder sogar SHA512) ist also nicht sicherer als die Verwendung von SHA1 oder MD5 gegen diese Art von Angriffen.

4
mgorven

In keinem Beitrag wird erwähnt, ob die Täter Zugriff auf den Formspring-Quellcode erhalten haben oder nicht. Wenn dies der Fall wäre, würde den Angreifern die Methode der Hash-Konstruktion und der zufälligen Erzeugung der Salze zur Verfügung stehen. Dies würde die Aufgabe des Crackens erheblich erleichtern, insbesondere wenn die Methode zur Erzeugung der "zufälligen" Salze sie auf vergleichsweise kleine Sollwerte beschränkte.

Angesichts der scheinbaren Geschwindigkeit, mit der dieser begrenzte Satz geknackt wurde, würde ich davon ausgehen, dass dies der Fall ist.

3
mitchellrj

Wenn sie Hashes mit einem eindeutigen Salt pro Passwort verwenden würden, würde es normalerweise eine beträchtliche Zeit dauern, bis man diese Passwörter knacken könnte. Es sei denn, die Passwörter waren extrem schwach oder die Passwörter waren Wörter im Wörterbuch. Reines Bruteforcing scheint ein bisschen unwahrscheinlich, wenn sie stark wären.

Toms Hardware enthält einen Artikel über GPGPU-Passwort Cracken. Schwache Passwörter ( nicht mit mehr als 10 Zeichen, einschließlich Groß-, Klein- und Kleinbuchstaben, ...) können in wenigen Minuten geknackt werden, selbst mit einem Salz wenn das Salz bekannt ist.

Andernfalls dauert es viele Tage, Monate, längere Passwörter, sogar Tausende von Jahren. Aber das ist ohne Salz. Mit einem Salz wird es ewig dauern.

1
Lucas Kauffman