John the Ripper 1.9.0-jumbo-1 mit FPGA-Unterstützung

Veröffentlicht Die neue Version des ältesten unterstützten Passwort-Cracking-Programms John the Ripper 1.9.0-jumbo-1. (Das Projekt entwickelt sich seit 1996.) Auf Projekseite sind der Quellcode sowie fertige Builds für Windows zum Download verfügbar.

Es wird darauf hingewiesen, dass seit der Veröffentlichung von Version 1.8.0-jumbo-1 4,5 Jahre vergangen sind, in denen mehr als 6000 Änderungen (Git-Commits) von über 80 Entwicklern vorgenommen wurden. Während dieser Zeit empfahlen die Entwickler, aktuelle Version von GitHub, deren Zustand trotz der vorgenommenen Änderungen stabil gehalten wurde, dank kontinuierlicher Integration, die eine Vorabprüfung jeder Änderung (Pull-Request) auf vielen Plattformen beinhaltet. Ein neues Merkmal der neuen Version ist die Unterstützung von FPGA (Field Programmable Gate Arrays) zusätzlich zu CPU, GPU und Xeon Phi.


Für Platinen ZTEX 1.15y, die jeweils 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 (insbesondere in WordPress verwendet). Einige von ihnen sind erstmals auf FPGA implementiert. Für bcrypt erreichte die Leistung von ~119k c/s bei 2^5 Iterationen („$2b$05“) mit einem Stromverbrauch von etwa 27 Watt erheblich bessere Ergebnisse als die neuesten GPUs, im Verhältnis zur Platine, zum Preis der Hardware und zur Wattzahl. Zudem werden Cluster von Platinen dieses Typs unterstützt, was bis zu 16 Platinen (64 FPGA) von einem Raspberry Pi 2 aus überprüft wurde. Die regulären Funktionen von John the Ripper werden unterstützt, einschließlich aller Passwort-Cracking-Modi und der gleichzeitigen Verarbeitung einer großen Anzahl von Hashes. Zur Beschleunigung wurde die Anwendung von Masken (Modus "—mask", auch in Kombination mit anderen Modi) und der Vergleich der berechneten Hashes mit den auf dem FPGA geladenen Hashes realisiert. Aus Sicht der Implementierung wurde dies in vielen der Designs (zum Beispiel 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.

Andere wichtige Änderungen:

  • Unterstützung einer Vielzahl zusätzlicher Hash-Typen, Verschlüsselungen usw., einschließlich sowohl klassischer Passwort-Hashes (z. B. aus neuen Versionen von QNX) als auch Kryptowährungs-Wallets, verschlüsselter Archive und verschlüsselter Dateisysteme (z. B. Bitlocker und FreeBSD geli), sowie Unterstützung neuer Varianten vorheriger Formate (z. B. wurde 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 (und eine kleine Anzahl älterer Formate entfernt, da sie in neue und veraltete integriert wurden). Die Gesamtanzahl der Formate beträgt jetzt 407 für CPU (oder 262 ohne „dynamische“ 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. (Teilweise im Rahmen von GSoC 2015.)
  • 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 von geprüften Passwörtern auf CPU ("—tune=auto —verbosity=5") und optimalen Aufgabendimensionen auf OpenCL (standardmäßig aktiviert), auch unter Berücksichtigung des langsamen Hochlaufens auf die volle Frequenz der NVIDIA GTX 10xx GPUs und neuer. Verwendung tatsächlich ausgelasteter Hashes und realer Längen gecheckter Passwörter (wenn diese im Voraus bekannt sind) für eine solche Auto-Anpassung.
  • Hinzufügen eines Kompilierers für "dynamische Ausdrücke", die direkt über die Kommandozeile angegeben werden und neue hybride Hash-Typen implementieren, z. B. "—format=dynamic=’sha1(md5($p).$s)’", die auf CPU unter Verwendung von SIMD berechnet werden. Unterstützt werden als Komponenten solcher Ausdrücke Dutzende schneller Hashes (von gängigen wie MD5 bis zu moderat exotischen wie Whirlpool), das Kombinieren von Teilstrings, Kodierung und Dekodierung, das Umwandeln von Schriftzeichen in Groß- und Kleinbuchstaben, Verweise auf Passwort, Salt, 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: linux.org.ru

60GB SSD 8Gb DDR4