Veröffentlichung von John the Ripper 1.9.0-jumbo-1 mit FPGA-Unterstützung

Veröffentlicht eine neue Version des ältesten unterstützten Passwort-Cracking-Programms John the Ripper 1.9.0-jumbo-1 (das Projekt wird seit 1996 weiterentwickelt). Seit der Veröffentlichung der vorherigen Version 1.8.0-jumbo-1 sind 4,5 Jahre vergangen, in denen mehr als 6000 Änderungen (git commits) von über 80 Entwicklern vorgenommen wurden. Dank kontinuierlicher Integration, die eine Vorprüfung jeder Änderung (pull request) auf vielen Plattformen umfasst, haben die Entwickler in dieser Zeit empfohlen, die aktuelle Version von GitHub, deren Zustand trotz der vorgenommenen Änderungen stabil gehalten wurde. Der Hauptcode des Projekts wird verbreitet ist unter der GPLv2+-Lizenz, während der Code einiger Komponenten unter der BSD-Lizenz steht.

Ein Merkmal der neuen Version ist die Unterstützung von FPGA (neben CPU, GPU und Xeon Phi). Für die ZTEX 1.15y, die je 4 FPGA-Chips enthalten und ursprünglich hauptsächlich für das Mining von Bitcoin verwendet wurden, sind nun 7 Arten von Passwort-Hashes implementiert: bcrypt, klassisches descrypt (einschließlich bigcrypt), sha512crypt, sha256crypt, md5crypt (einschließlich Apache apr1 und AIX smd5), Drupal7 und phpass (das unter anderem in WordPress verwendet wird). Einige von ihnen werden erstmals auf FPGA implementiert.

Für bcrypt wurde eine Leistung von ~119k c/s bei 2^5 Iterationen („$2b$05“) mit einem Stromverbrauch von etwa ~27 Watt erreicht, was die Ergebnisse für die neuesten GPUs in Bezug auf die Kosten pro Karte, den Preis der Hardware und die Wattzahl bei Weitem übertrifft. Auch werden Cluster von diesen Karten unterstützt, was bis zu 16 Karten (64 FPGA-Chips) getestet wurde, die von einem einzigen Raspberry Pi 2 gesteuert werden. Die Standardfunktionen von John the Ripper, einschließlich aller Passwort-Cracking-Modi und die gleichzeitige Verarbeitung einer großen Anzahl von Hashes, werden unterstützt.

Zur Beschleunigung wurde die Anwendung von Masken (Modus „—mask“, auch in Kombination mit anderen Modi) und der Vergleich der berechneten Hashes mit den auf der FPGA-Seite geladenen Hashes implementiert. Aus Sicht der Implementierung wurden in vielen der Designs (z. B. für sha512crypt und Drupal7) Blöcke verwendet, die aus multithreaded CPU-Kernen (soft CPU cores) bestehen, die mit kryptografischen Kernen interagieren. Die Entwicklung dieser Funktionalität wurde von Denis Burykin in Abstimmung mit anderen Entwicklern des Jumbo-Projects durchgeführt.

Weitere wichtige Änderungen:

  • Unterstützung einer großen Anzahl zusätzlicher Hash-, Verschlüsselungs- und ähnlicher Typen, einschließlich klassischer Passwort-Hashes (z.B. von neuen QNX-Versionen) sowie Kryptowallets, verschlüsselten Archiven und verschlüsselten Dateisystemen (z.B. Bitlocker und FreeBSD geli), und auch Unterstützung neuer Varianten von zuvor unterstützten Formaten (z.B. wurde die Unterstützung von bcrypt-pbkdf für OpenBSD softraid hinzugefügt) und vieles mehr. Insgesamt wurden 80 Formate für CPU und 47 für OpenCL hinzugefügt. Die Gesamtzahl der Formate beträgt nun 407 für CPU (oder 262 ohne die „dynamischen“ Formate, die aus Konfigurationsdateien angepasst werden) und 88 für OpenCL.
  • Verzicht auf die Unterstützung der CUDA-Sprache zugunsten von OpenCL, was die vollwertige Nutzung der GPU von NVIDIA nicht beeinträchtigt (und sogar hilft, dank der Fokussierung von Entwicklung und Optimierungen auf eine Umsetzung jedes Formats für GPU statt auf zwei Umsetzungen wie zuvor).
  • Unterstützung neuer SIMD-Befehlssätze – AVX2, AVX-512 (einschließlich für die zweite Generation von Xeon Phi) und MIC (für die erste Generation) – sowie eine universellere und umfassendere Nutzung von SIMD in den Implementierungen vieler Formate, einschließlich der Anwendung früher unterstützter Befehlssätze bis hin zu AVX und XOP auf x86(-64) und
    NEON, ASIMD und AltiVec auf ARM, Aarch64 und POWER, entsprechend.
  • Zahlreiche Optimierungen für CPU und OpenCL, sowohl für eine effizientere Verarbeitung einer großen Anzahl von Hashes gleichzeitig (z.B. wurden 320 Millionen SHA-1-Hashes auf der GPU getestet) als auch zur Geschwindigkeitssteigerung der Hash-Berechnungen. Einige dieser Optimierungen sind universell, andere decken verschiedene Teilmengen von Formaten ab, und viele sind spezifisch für bestimmte Formate.
  • (Auto-)Anpassung der optimalen Pufferung der überprüften Passwörter auf der CPU („—tune=auto —verbosity=5“) und der optimalen Aufgabenstellungen auf OpenCL (standardmäßig aktiviert), auch unter Berücksichtigung des langsamen Erreichens der vollen Arbeitsfrequenz der NVIDIA GTX 10xx-Serie und neuer. Verwendung tatsächlich geladener Hashes und der tatsächlichen Länge der überprüften Passwörter (sofern sie im Voraus bekannt ist) für eine solche Auto-Anpassung.
  • Hinzufügen eines Kompilators für "dynamische Ausdrücke", die direkt in der Befehlszeile angegeben werden und neue hybride Hash-Typen implementieren, wie z. B. "—format=dynamic='sha1(md5($p).$s)'", die auf der CPU unter Verwendung von SIMD berechnet werden. Als Komponenten solcher Ausdrücke werden Dutzende von schnellen Hashes unterstützt (von weit verbreiteten wie MD5 bis hin zu moderat exotischen wie Whirlpool), Substring-Kombinationen, Kodierung und Dekodierung, Groß- und Kleinschreibung, Verweise auf Passwörter, Salze, Benutzernamen und Zeichenkonstanten.
  • Beseitigung unerwünschter Abweichungen von hashcat, einschließlich der Unterstützung früher speziell für hashcat entwickelter Regeln (wordlist rule commands), Umstellung auf die Nummerierung der OpenCL-Geräte ab 1, sowie die standardmäßige Verwendung derselben Passwortlängen (in der Regel eine Länge von 7) bei Leistungstests.
  • Neue Modi zur Generierung überprüfbarer Passwörter (cracking modes), einschließlich PRINCE aus hashcat (bildet "Phrasen", indem mehrere Wörter in aufsteigender Gesamtlänge kombiniert werden), subsets (generiert Passwörter mit unzureichender Anzahl unterschiedlicher Zeichen, auch wenn diese Zeichen aus einer großen Anzahl möglicher stammen) und hybrid external (erlaubt externen Modi, die in Konfigurationsdateien in einer C-ähnlichen Sprache beschrieben sind, eine Vielzahl von überprüfbaren Passwörtern basierend auf jedem Basiswort zu generieren, das von einem anderen Modus stammt). Ebenfalls einige neue vordefinierte externe Modi.
  • Zusätzliche Möglichkeiten zur gleichzeitigen Verwendung mehrerer Modi (einer über dem anderen - stacking) sowie zur Verwendung von Regelsets (wordlist rules stacking).
  • Verbesserungen der Modi mask (schrittweise Dehnung der Maske über einen angegebenen Längenbereich, Anwendung der Maske auf der Seite des OpenCL-Geräts oder FPGA-Platinen) und single crack (vernünftiges Verhalten auf Geräten, die eine große Anzahl von Hashes parallel berechnen, für die zuvor in diesem Modus nicht genügend überprüfbare Passwörter zur Verfügung standen, sowie Einschränkungen bzgl. des Speicherverbrauchs).
  • Viele Verbesserungen der Unterstützung für Unicode und andere Kodierungen in verschiedenen Subsystemen.
  • Viele Verbesserungen der Programme *2john (konvertiert Dateien verschiedener Formate für
    Verwendung mit john), insbesondere wpapcap2john (verarbeitet WiFi-Verkehr).
  • Viele neue Optionen für die Befehlszeile, Einstellungen in john.conf, Konfigurationsskriptoptionen und die entsprechenden neuen Funktionen, von denen hier bei weitem nicht alle erwähnt werden konnten.
  • Verbesserung der Codequalität durch integrierte Unterstützung für Debug-Builds mit AddressSanitizer (früher vorhanden) und UndefinedBehaviorSanitizer (neu hinzugefügt), Integration eines eingebauten Fuzzers für Formate (im Rahmen von GSoC 2015), Anwendung von kontinuierlicher Integration (Builds für Hunderte von Kombinationen von Betriebssystem und Compiler und deren Test auf die korrekte Unterstützung aller Formate).

Quelle: opennet.ru

60GB SSD 8Gb DDR4