Difference between revisions of "Rainbowtables"

From C4 Wiki
Jump to: navigation, search
(MD5 und DES)
(Save the planet, rettet den Regenwald und schreibt endlich wieder vernünftige Artikel...)
Line 1: Line 1:
Lasst uns Oracle, MD5, lanman Rainbowtables generieren. Daten, die nur auf 30 DVDs passen. Aber wenn man dann mal ein Passwort vergessen hat, kann man darauf zurückgreifen.
+
Bei einer Rainbow-Table handelt es sich um ein vorberechnetes und gespeichertes Nachschlagewerk für Hashes. Eine Tabelle besteht aus zig Ketten, die ein Startwort und einen Endhash besitzen.
  
==Lanman/NTLM==
+
==Grundlagen==
 +
Jeder von euch hat schon einmal eine MD5 Prüfsumme einer CD heruntergeladen und diese Prüfsumme mit dem Image auf eurer Platte verglichen. Stimmt die Prüfsumme, so habt ihr die Nutzdaten ohne Übertragungsfehler heruntergeladen.
  
Es gibt Lanman (oder NT Lan Manager=NTLM genannt) Passwort Hash in der Version v3 und v4.  
+
Niemand würde aber auf die Idee kommen, aus dem 32 Zeichen langen Hash die CD-Nutzdaten zurückgewinnen zu wollen. Hashen ist eine One-Way-Operation, aus einem Hash kann man nicht die Eingangsdaten zurückgewinnen.  
  
Standard Verfahren um Windows Passwörter im Netz zu versenden.
+
Da das Zurückrechnen nicht geht, könnte man einen Dictonary-Angriff starten und hoffen, dass man die richtigen Wörter in seinem Wörterbuch hat. Das dauert sehr lange und muss für jeden, gesuchten Hash wiederholt werden. Alle vorberechneten Plaintext:Hash Paare in einer Datenbank zu speichern, würde extrem viel Platz wegnehmen. Also suchen wir nach einer Möglichkeit, Millionen von Hashes kompakt zu speichern. Die Lösung: Rainbow-Tables...
  
[http://rainbowtables.shmoo.com/ der Shmoo Group seine v4 Tabellen]
+
==Erstellung==
Link down: [http://rainbowtables-shop.de/ Rainbowtables online kaufen]
+
Man nimmt ein Startwort, einen Plaintext, und hasht ihn, reduziert ihn um ihn erneut zu hashen und wiederholt diese Schrittfolge 10.000 mal.
  
==MD5 und DES==
+
  String plaintext, first, ciphertext;
  
[[wikipedia:MD5|MD5]] und [[wikipedia:Data Encryption Standard|DES]] sind beiden Standardverfahren bei /etc/[passwd|shadow] Hashing.
+
  plaintext = first = "abcdefg";
  
_Free_ Online Service:
+
  for ( i=0; i<100000; i++ ) {
 +
    ciphertext = hash_it (plaintext);
 +
    plaintext = reduce_it (ciphertext);
 +
  }
  
*[http://www.plain-text.info/ Plain-Text.info]
+
  System.out.printf("%s:%s\n", first, ciphertext);
  
Durch die enorme CPU Anforderung lohnt es sich einem Rainbowtables Team bezutreten:
+
Diese Schrittfolge erzeugt genau eine Kette in der Tabelle. Regenbogentabellen bestehen aus Millarden solcher Ketten.
  
*[http://www.alphatables.de/ Alphatables.de -  LM Rainbowtables, NTLM Rainbowtables, MD5 Rainbowtables, MYSQL Rainbowtables, SHA Rainbowtables,ORACLE SYS+SYSTEM Rainbowtable über 1600 Gbyte]
+
==Anwendung==
 +
Nach dem langwierigen Prozess der Erstellung bestitzen wir eine fertige Tabelle zum Nachschlagen. Jede Kette besteht aus einem Startwort und einem Endhash und alle Hashes(und Plaintexte) IN der Kette sind auffindbar. Aber wie? Wir suchen nun den Plaintext für
 +
97fae39bfd56c35b6c860aa468c258e0 ("Domino"). Wenn dieser Hash auf der rechten Seite unserer Tabelle in Zeile 25 zu finden ist, dann müssen wir Zeile 25 von Anfang bis Ende durchlaufen, um an den Hash(hier das Passwort) zu kommen. Finden wir den Hash aber nicht auf der rechten Seite, dann reduzieren wir den Hash, beispielsweise auf die ersten 6 Zeichen, hashen dann "97fae39" und bekommen d038f682bb670c6f55ef46aa0ddbac09. Jetzt suchen wir diesen Hash auf der rechten Seite und machen das solange, bis wir wirklich einen Final-Hash auf der rechten Seite gefunden haben. Sollten wir als Beispiel unseren gesuchten Hash auf diese Weise 5000 mal reduziert und gehasht haben, so befindet sich unser Passwort hoffentlich in der Mitte der Kette, die wir jetzt neu berechnen müssen.
  
Für LM
+
Schaut euch einfach mal das Java Beispiel in der Linkliste an. Da habt ihr was zum Spielen...
*[http://www.astalavista.net/ Astalavista.net - Online RainbowTables Server]
+
 
 +
==Praxis==
 +
Es ist schön, dass es den Lanmanger gibt. Es ist klasse, dass es Script-Kiddies gibt, die jetzt mit dem Download anfangen und Passwörter cracken wollen. Aber a word of caution, handle with care: Rainbow Tables zerstören den Regenwald. Sie fressen nur Plattenplatz, fressen nur CPU-Leistung, nur Energie. Kauft euch ein Buch über Krypographie, lernt es auswendig und beratet Firmen, wie sie sich vor euch schützen können.
  
Für MD5
+
==Weblinks==
 
*[http://www.astalavista.net/ Astalavista.net - Online RainbowTables Server]
 
*[http://www.astalavista.net/ Astalavista.net - Online RainbowTables Server]
 
*[http://www.antsight.com/zsl/rainbowcrack/ Zum selber knacken]
 
*[http://www.antsight.com/zsl/rainbowcrack/ Zum selber knacken]
Line 35: Line 43:
 
*[http://rainbowtables.ddl.cx/ Diverse Rainbow Tables zu Herunterladen]
 
*[http://rainbowtables.ddl.cx/ Diverse Rainbow Tables zu Herunterladen]
 
*[http://lightintron.de/rainbow/ leicht verständliche Implementierung in Java]
 
*[http://lightintron.de/rainbow/ leicht verständliche Implementierung in Java]
 
==Oracle==
 
 
http://rainbowtables-shop.de/
 
 
[http://www.sans.org/rr/special/index.php?id=oracle_pass Paper zu Oracle PasswörternPDF]
 
 
'''Merke: Alle Passworter zu kennen ist viel einfacher als sie zu knacken.'''
 
 
==Salting - Untergang der Rainbowtables==
 
Rainbow Tables funktionieren besonders gut gegen Algorithmen die ohne Salt, eine zufaellige Bitfolge die den Hash veraendert, arbeiten. Die meisten Unix/Linux Systeme benutzen salted Algorithmen.
 
Ein 2 Byte grosser Salt vergroessert den notwendigen Table um den Faktor 256*256.
 
 
Deshalb sind Rainbow Tables besonders populaer bei Windows LanManager Hashes, die ohne Salt arbeiten.
 
 
Siehe http://www1.umn.edu/oit/security/passwordattackdiscussion.html  fuer mehr Details.
 
 
 
  
 
{{stub}}
 
{{stub}}
 
  
 
[[Category:Hacks]]
 
[[Category:Hacks]]

Revision as of 15:21, 7 August 2008

Bei einer Rainbow-Table handelt es sich um ein vorberechnetes und gespeichertes Nachschlagewerk für Hashes. Eine Tabelle besteht aus zig Ketten, die ein Startwort und einen Endhash besitzen.

Grundlagen

Jeder von euch hat schon einmal eine MD5 Prüfsumme einer CD heruntergeladen und diese Prüfsumme mit dem Image auf eurer Platte verglichen. Stimmt die Prüfsumme, so habt ihr die Nutzdaten ohne Übertragungsfehler heruntergeladen.

Niemand würde aber auf die Idee kommen, aus dem 32 Zeichen langen Hash die CD-Nutzdaten zurückgewinnen zu wollen. Hashen ist eine One-Way-Operation, aus einem Hash kann man nicht die Eingangsdaten zurückgewinnen.

Da das Zurückrechnen nicht geht, könnte man einen Dictonary-Angriff starten und hoffen, dass man die richtigen Wörter in seinem Wörterbuch hat. Das dauert sehr lange und muss für jeden, gesuchten Hash wiederholt werden. Alle vorberechneten Plaintext:Hash Paare in einer Datenbank zu speichern, würde extrem viel Platz wegnehmen. Also suchen wir nach einer Möglichkeit, Millionen von Hashes kompakt zu speichern. Die Lösung: Rainbow-Tables...

Erstellung

Man nimmt ein Startwort, einen Plaintext, und hasht ihn, reduziert ihn um ihn erneut zu hashen und wiederholt diese Schrittfolge 10.000 mal.

 String plaintext, first, ciphertext;
 plaintext = first = "abcdefg";
 for ( i=0; i<100000; i++ ) {
   ciphertext = hash_it (plaintext);
   plaintext = reduce_it (ciphertext);
 }
 System.out.printf("%s:%s\n", first, ciphertext);

Diese Schrittfolge erzeugt genau eine Kette in der Tabelle. Regenbogentabellen bestehen aus Millarden solcher Ketten.

Anwendung

Nach dem langwierigen Prozess der Erstellung bestitzen wir eine fertige Tabelle zum Nachschlagen. Jede Kette besteht aus einem Startwort und einem Endhash und alle Hashes(und Plaintexte) IN der Kette sind auffindbar. Aber wie? Wir suchen nun den Plaintext für 97fae39bfd56c35b6c860aa468c258e0 ("Domino"). Wenn dieser Hash auf der rechten Seite unserer Tabelle in Zeile 25 zu finden ist, dann müssen wir Zeile 25 von Anfang bis Ende durchlaufen, um an den Hash(hier das Passwort) zu kommen. Finden wir den Hash aber nicht auf der rechten Seite, dann reduzieren wir den Hash, beispielsweise auf die ersten 6 Zeichen, hashen dann "97fae39" und bekommen d038f682bb670c6f55ef46aa0ddbac09. Jetzt suchen wir diesen Hash auf der rechten Seite und machen das solange, bis wir wirklich einen Final-Hash auf der rechten Seite gefunden haben. Sollten wir als Beispiel unseren gesuchten Hash auf diese Weise 5000 mal reduziert und gehasht haben, so befindet sich unser Passwort hoffentlich in der Mitte der Kette, die wir jetzt neu berechnen müssen.

Schaut euch einfach mal das Java Beispiel in der Linkliste an. Da habt ihr was zum Spielen...

Praxis

Es ist schön, dass es den Lanmanger gibt. Es ist klasse, dass es Script-Kiddies gibt, die jetzt mit dem Download anfangen und Passwörter cracken wollen. Aber a word of caution, handle with care: Rainbow Tables zerstören den Regenwald. Sie fressen nur Plattenplatz, fressen nur CPU-Leistung, nur Energie. Kauft euch ein Buch über Krypographie, lernt es auswendig und beratet Firmen, wie sie sich vor euch schützen können.

Weblinks


dieser artikel ist kurz. bau ihn aus!