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

Veröffentlicht Neue Version des ältesten unterstützten Programms zum Erraten von Passwörtern John the Ripper 1.9.0-jumbo-1 (Das Projekt wird seit 1996 entwickelt). 1.8.0 Jahre sind seit der Veröffentlichung der Vorgängerversion 1-jumbo-4.5 vergangen, in der mehr als 6000 Änderungen (Git-Commits) von mehr als 80 Entwicklern vorgenommen wurden. Dank an kontinuierliche Integration, das auf vielen Plattformen eine vorläufige Prüfung jeder Änderung (Pull-Request) beinhaltet, wurde von den Entwicklern für diesen Zeitraum empfohlen aktuelle Ausgabe von GitHub, dessen Zustand trotz der vorgenommenen Änderungen stabil gehalten wurde. Hauptprojektcode vertrieben von unter der GPLv2+-Lizenz und der Code einiger Komponenten steht unter der BSD-Lizenz.

Eine Besonderheit der neuen Version ist das Erscheinen der FPGA-Unterstützung (zusätzlich zu CPU, GPU und Xeon Phi). Für Bretter ZTEX 1.15 Jahre, einschließlich 4 FPGA-Chips und ursprünglich hauptsächlich für das Bitcoin-Mining verwendet, sind jetzt 7 Arten von Passwort-Hashes implementiert: bcrypt, classic descrypt (einschließlich bigcrypt), sha512crypt, sha256crypt, md5crypt (einschließlich Apache apr1 und AIX smd5), Drupal7 und phpass (verwendet). , insbesondere in WordPress). Einige davon werden erstmals auf FPGA implementiert.

Für bcrypt liegt die erreichte Leistung von ~119k c/s mit 2^5 Iterationen („$2b$05“) bei einem Stromverbrauch von ~27 Watt deutlich über den Ergebnissen der neuesten GPUs pro Board, pro Hardwarepreis und pro Watt . Auch unterstützt Cluster Von Boards dieses Typs wurden bis zu 16 Boards (64 FPGA-Chips) getestet, die von einem einzigen Raspberry Pi 2 gesteuert werden. Die übliche John the Ripper-Funktionalität wird unterstützt, einschließlich aller Modi zum Erraten von Passwörtern und dem gleichzeitigen Herunterladen einer großen Anzahl von Hashes .

Um die Arbeit zu beschleunigen, haben wir die Verwendung einer Maske (den „—mask“-Modus, auch in Kombination mit anderen Modi) und den Vergleich der berechneten Hashes mit den auf der FPGA-Seite geladenen Hashes implementiert. Aus Umsetzungssicht sind viele der Entwürfe (z.B. sha512crypt und Drupal7) Es werden Blöcke verwendet, die aus Multithread-Prozessorkernen (Soft-CPU-Kernen) bestehen, die mit kryptografischen Kernen interagieren. Die Entwicklung dieser Funktionalität wurde von Denis Burykin in Abstimmung mit anderen Jumbo-Entwicklern geleitet.

Weitere wichtige Änderungen:

  • Unterstützung für eine große Anzahl zusätzlicher Arten von Hashes, Chiffren usw., darunter sowohl klassische Passwort-Hashes (z. B. aus neuen Versionen von QNX) als auch Kryptowährungs-Wallets, verschlüsselte Archive und verschlüsselte Dateisysteme (z. B. Bitlocker und FreeBSD geli) sowie Unterstützung für neue Arten von Formaten, die zuvor unterstützt wurden (z. B. zusätzliche Unterstützung für bcrypt-pbkdf für OpenBSD-Softraid) und vieles mehr. Insgesamt wurden 80 Formate auf der CPU und 47 auf OpenCL hinzugefügt. Die Gesamtzahl der Formate beträgt jetzt 407 auf der CPU (oder 262, ohne die aus Konfigurationsdateien konfigurierten „dynamischen“ Formate) und 88 auf OpenCL.
  • Verweigerung der Unterstützung der CUDA-Sprache zugunsten von OpenCL, was die vollständige Nutzung von NVIDIA-GPUs in keiner Weise beeinträchtigt (und dank der Fokussierung der Entwicklung und Optimierung auf eine Implementierung jedes Formats für die GPU statt bisher auf zwei Implementierungen sogar hilft).
  • Unterstützung für neue SIMD-Befehlssätze – AVX2, AVX-512 (einschließlich für Xeon Phi der zweiten Generation) und MIC (für die erste Generation) – sowie eine universellere und vollständigere Verwendung von SIMD in Implementierungen vieler Formate, einschließlich der Verwendung von zuvor unterstützte Befehlssätze bis zu AVX und XOP auf x86(-64) und
    NEON, ASIMD und AltiVec auf ARM, Aarch64 bzw. POWER.

  • Zahlreiche Optimierungen für CPU und OpenCL, sowohl um effizienter mit einer großen Anzahl von Hashes gleichzeitig zu arbeiten (zum Beispiel wurde das Laden von 320 Millionen SHA-1-Hashes auf die GPU getestet) als auch um die Geschwindigkeit der Hash-Berechnungen zu erhöhen. Einige dieser Optimierungen sind universell, andere decken verschiedene Teilmengen von Formaten ab und viele sind spezifisch für einzelne Formate.
  • (Auto-)Konfiguration der optimalen Pufferung überprüfter Passwörter auf der CPU („—tune=auto —verbosity=5“) und optimaler Jobgrößen auf OpenCL (standardmäßig aktiviert), einschließlich der Berücksichtigung des langsamen Hochlaufs auf die volle Betriebsfrequenz von GPUs der NVIDIA GTX-Serie 10xx und neuer. Für eine solche automatische Optimierung werden tatsächlich geladene Hashes und die tatsächliche Länge der überprüften Passwörter verwendet (sofern diese im Voraus bekannt ist).
  • Hinzufügen eines Compilers für „dynamische Ausdrücke“, die direkt auf der Befehlszeile angegeben werden, und Implementierung neuer Hybrid-Hash-Typen, zum Beispiel „-format=dynamic='sha1(md5($p).$s)'“, berechnet auf der CPU mithilfe von SIMD . Als Komponenten solcher Ausdrücke werden Dutzende schneller Hashes unterstützt (von gängigen wie MD5 bis hin zu mäßig exotischen wie Whirlpool), Teilstring-Verkettung, Codierung und Decodierung, Zeichenkonvertierung, Verweise auf Passwörter, Salt, Benutzernamen und String-Konstanten.
  • Beseitigung unerwünschter Unterschiede zu Hashcat, einschließlich der Unterstützung zuvor hashcat-spezifischer Regeln (Wortlistenregelbefehle), Übergang zur OpenCL-Gerätenummerierung von 1, standardmäßige Verwendung derselben Passwortlängen (normalerweise Länge 7) für Leistungstests.
  • Neue Modi zum Generieren verifizierbarer Passwörter (Cracking-Modi), einschließlich PRINCE aus Hashcat (bildet „Phrasen“ durch Kombination mehrerer Wörter in aufsteigender Reihenfolge der Gesamtlänge), Teilmengen (zeigt Passwörter mit einer unzureichenden Anzahl unterschiedlicher Zeichen an, selbst wenn diese Zeichen vorkommen). aus einer großen Menge möglicher Passwörter) und hybrider externer Modi (ermöglicht externen Modi, die in Konfigurationsdateien in einer C-ähnlichen Sprache beschrieben werden, die Generierung vieler überprüfbarer Passwörter basierend auf jedem grundlegenden „Wort“, das von einem anderen Modus empfangen wurde). Außerdem mehrere neue vordefinierte externe Modi.
  • Zusätzliche Funktionen zur gleichzeitigen Nutzung mehrerer Modi (übereinander – Stacking) sowie zur Nutzung von Regelsätzen (Stacking von Wortlistenregeln).
  • Verbesserungen der Maskenmodi (allmähliche Dehnung der Maske in einem bestimmten Längenbereich, Anbringen einer Maske auf der Seite des OpenCL-Geräts oder der FPGA-Karte) und Single Crack (vernünftiges Verhalten auf Geräten, die eine große Anzahl von Hashes parallel berechnen). , für die es in diesem Modus bisher nicht genügend verifizierbare Passwörter gab, und auch Einschränkungen beim Speicherverbrauch).
  • Viele Verbesserungen zur Unterstützung von Unicode und anderen Kodierungen in verschiedenen Subsystemen.
  • Viele Verbesserungen an *2john-Programmen (die Dateien verschiedener Formate konvertieren für
    Verwendung mit John), insbesondere wpapcap2john (verwaltet den WLAN-Verkehr).

  • Es gibt viele neue Befehlszeilenoptionen, Einstellungen in john.conf, Konfigurationsskriptoptionen und entsprechende neue Funktionen, die hier nicht alle erwähnt wurden.
  • Verbesserung der Codequalität dank integrierter Unterstützung für Debug-Builds mit AddressSanitizer (zuvor) und UndefinedBehaviorSanitizer (hinzugefügt), Hinzufügen eines integrierten Format-Fuzzers (als Teil von GSoC 2015) und Verwendung kontinuierlicher Integration (Builds für Dutzende von Betriebssystemen und Compilern). Kombinationen und testen sie auf korrekte Unterstützung für alle Formate).

Source: opennet.ru

Kommentar hinzufügen