Datenbank mit Passworthashes analysieren

Felix_krueger

Ensign
Registriert
Sep. 2007
Beiträge
170
Hi Leute,

heute habe ich eine etwas verzwicktere Challenge, von der ich selbst glaube, dass sie unmöglich zu lösen ist. Aber vielleicht hat ja jemand von euch Trick 17 auf Lager, oder weiß einen ganz anderen Weg mit der Sache umzugehen.
Ihr habt bestimmt bei heise.de die News gelesen, dass die Datenbank von Have I Been Pawned erweitert wurde.
Ich war jetzt dabei mir ein c-Programm schreiben zu wollen das die Datenbank ausliest und mit den aus meinen Passwörtern erzeugten Hashes vergleicht. Sollte im Prinzip nicht so schwierig sein. Problem: ich habe nur 4 GB RAM, die Passwortdatei ist aber ~12 GB groß. Also müsste ich die Datei "Stückchenweise" auslesen :D hat jemand eine Idee?
Ich bin natürlich auch für jeden anderen gangbaren Vorschlag zu haben der es erlaubt einen eigen Hash gegen die Datenbank abzugleichen.


Grüße & Danke für hilfreiche Antworten
Felix
 
Also vom Programmieren kP, aber logisch würde ich aus allen zu prüfenden PWs beim Start des Programms den Hash erzeugen, dann 1/10 der Datensätze laden (also so 1,2GB), die vorab erzeugten Hashes dagegen matchen, dann das nächste Zehntel laden usw...
 
Manuell: Bild den Hash über dein Passwort, tipp das PW ein. Wenn das PW pwnd ist und du den Hash in deiner db hast, ist dein Hash pwnd.
Musst du jetzt in ner Sprache deiner Wahl wegautomatisieren.
 
Genau so habe ich es vor. Aber WIE nur einen Teil der Daten laden. Ich habe gerade mit GnomeSplit versucht die Datei aufzuteilen, aber das Programm ist erwartungsgemäß abgestürzt...

Edit:
habe ich mich so unklar ausgedrückt? Irgendwie wird meine Frage nicht verstanden ^^
 
Warum nutzt du dafür nicht die von HIBP bereit gestellte API zum gegenchecken?
 
Dein Handeln und Denkweise ist schon ein bisschen a̶̶s̶̶o̶̶z̶̶i̶̶a̶̶l̶ übervorsichtig, das ist dir aber schon bewusst, ja? Außerdem bestätigst doch nur du dir selbst die Existenz bzw Übereinstimmung mit dem Hash.

Entweder du vertraust HIBP bzw Troy Hunt, dass er nur darauf prüft ob die Eingabe mit einem Wert der HIBP-DB übereinstimmt oder du misstraust ihm dahingehend, dass er alle Eingaben von Usern auch speichert um zu gucken, ob mehr als ein User das gleiche Kennwort verwendet. Damit wäre dann aber der Sinn der HIBP-Kennwort-DB sinnlos, da man damit ja eigentlich prüfen kann, ob das eigene Kennwort bereits in irgendeinem Leak vorhanden ist und damit würde maximal für HIBP bekannt werden, dass zweimal das gleiche Kennwort eingegeben wurde von unterschiedlichen Adressen (wo wäre deiner Ansicht eigentlich der Unterschied zwischen ich gebe kein Kennwort da einmal "normal" und einmal per $VPN ein?).
Einen Hash geheim halten geht nicht bzw ist sinnfrei, denn mit genug CPU-Power und Zeit kann ich für alle möglichen Kombinationen von Zeichen die Hashes generieren. Ist bei SHA1 aber recht sinnfrei, da bereits im Februar diesen Jahres erfolgreich die erste SHA-1 Kollision reproduzierbar gezeigt wurde.
Aus diesem Grund nutzen halbwegs brauchbare Admins ja auch nicht nur einen Hash-Algorithmus zur Speicherung von Credentials sondern immer auch einen Salt.

Für dein Vorhaben hast du übrigens zwei Optionen: Datenbankbasiert oder Dateibasiert.

Für ersteres musst alle Hashes von HIBP in eine Tabelle packen, deine Kennwörter und Hashes in eine andere Tabelle und kannst dann mit ein bisschen SQL-Magie herausfinden, ob es Duplikate gibt bei beiden Tabellen.

Datei-basiert: Die große Datei in handliche Stücke zerlegen, z.B. alle x Tausend Zeilen trennen. Geht wunderbar mit diversen Tools unter Linux.
Dann hast du hibp-1 bis hibp-n
Anschließend Datei erstellen mit allen deinen Kennwörtern, nennen wir sie kennwörter_privat
for i in kennwörter_privat create hash(i) and store in hash_privat
for i in hash_privat do grep i from hibp_1 to hibp_n

Syntax kannst dir selbst zusammen suchen, stackoverflow/stackexchange/google liefern passende Ergebnisse.
 
Zuletzt bearbeitet: (guter Hinweis von Merle)
Naja, wenn du bei ihm auf der HP (HIBP) schaust, sagt er selber, dass man nirgendwohin sein Passwort übermitteln sollte (aktives), auch nicht zu ihm, weil man das nicht macht.
Damit erweckt er zwar primär mehr Vertrauen, legitimiert aber das Handeln des TE und ich kann den TE da schon auch verstehen.
Wie du auf "asozial" kommst verstehe ich zu 100% nicht, ich würde es vorsichtig nennen.
 
snaxilian ich weiß nicht was daran übervorischtig sein soll, wenn ich mein Passwort nicht bei irgendjemandem auf der Webseite posten will, sei es auch nur als Hash. Gerade weil es diese bekannten Angriffe auf SHA-1 gibt bin ich so vorsichtig. Ich weiß, dass ich von einem Passwortklau betroffen war, netter weise war das ein Weltkonzern der aber keinen SHA-Algorithmus eingesetzt hat, sondern einen veralteten Vorgänger (und natürlich auch ohne Salt). Ich hatte aber in der Zeit des Leaks mein Passwort öfter geändert und hoffte auf eine Möglichkeit zu erfahren welches davon ich als "verbrannt" ansehen kann.

Wenn Du genau gelesen hättest, wüsstest Du, dass ich es mit Linux versucht habe. Hilfreich wäre jetzt ein Tool zu nennen mit dem ich die Datei splitten kann, ohne dass mein RAM vollläuft - so wie wirelessy es getan hat.

Interessant wäre noch zu wissen worauf du deine Einschätzung "asozial" begründet hast. Hervorgebracht hast Du die Anschuldigung... allein das Argument fehlt.
 
Habe doch bereits meine Meinung korrigiert aber wenn du weiter drauf rum reiten willst viel Spaß dabei.
Mit "genau lesen" meinst du das erwähnte GnomeSplit? Denn sonst finde ich nirgends einen Hinweis, dass du Linux nutzt. Gut, ist ein auf Java basiertes Tool, theoretisch kannst das auf so ziemlich jeder Plattform laufen lassen aber wayne. Gegebenenfalls ist das auch das Problem gewesen. Klappt denn das splitten, wenn du das CLI Tool split verwendest? Das hat auch einen unbuffered mode, der zwar wesentlich langsamer sein soll aber wohl die Quelle nicht erst komplett einliest.
 
Zurück
Oben