Versione John the Ripper 1.9.0-jumbo-1 con supporto FPGA

Rilasciato nuova versione del più vecchio programma supportato per indovinare la password Giovanni lo Squartatore 1.9.0-jumbo-1 (il progetto è in corso di sviluppo dal 1996). Sono trascorsi 1.8.0 anni dal rilascio della versione precedente 1-jumbo-4.5, durante la quale sono state apportate più di 6000 modifiche (git commit) da più di 80 sviluppatori. Grazie a integrazione continua, che prevede un controllo preliminare di ogni modifica (pull request) su molte piattaforme, durante questo periodo gli sviluppatori consigliano di utilizzare revisione corrente da GitHub, il cui stato si è mantenuto stabile nonostante le modifiche apportate. Codice del progetto principale distribuito da sotto la licenza GPLv2+ e il codice di alcuni componenti è sotto la licenza BSD.

Una caratteristica speciale della nuova versione è la comparsa del supporto FPGA (oltre a CPU, GPU e Xeon Phi). Per tavole Ztex 1.15 anni, inclusi 4 chip FPGA e originariamente utilizzati principalmente per il mining di Bitcoin, sono ora implementati 7 tipi di hash delle password: bcrypt, classic descrypt (incluso bigcrypt), sha512crypt, sha256crypt, md5crypt (inclusi Apache apr1 e AIX smd5), Drupal7 e phpass (utilizzato , in particolare in WordPress). Alcuni di essi vengono implementati per la prima volta su FPGA.

Per bcrypt, le prestazioni ottenute di ~119k c/s con 2^5 iterazioni (“$2b$05”) con un consumo energetico di ~27 watt superano significativamente i risultati delle GPU più recenti per scheda, per prezzo hardware e per watt . Anche supportato grappoli di schede di questo tipo, che sono state testate fino a 16 schede (64 chip FPGA) controllate da un singolo Raspberry Pi 2. È supportata la consueta funzionalità di John the Ripper, comprese tutte le modalità di indovinamento della password e il download simultaneo di un gran numero di hash .

Per velocizzare il lavoro, abbiamo implementato l'utilizzo di una maschera (la modalità “—mask”, anche in combinazione con altre modalità) e il confronto degli hash calcolati con quelli caricati lato FPGA. Dal punto di vista dell’implementazione, molti dei progetti (ad es. sha512crypt e Drupal7) utilizzavano blocchi costituiti da core del processore multi-thread (core soft della CPU) che interagiscono con i core crittografici. Lo sviluppo di questa funzionalità è stato guidato da Denis Burykin in coordinamento con altri sviluppatori jumbo.

Altre modifiche importanti:

  • Supporto per un gran numero di tipi aggiuntivi di hash, cifre, ecc., inclusi sia gli hash delle password classici (ad esempio, dalle nuove versioni di QNX), sia portafogli di criptovaluta, archivi crittografati e file system crittografati (ad esempio, Bitlocker e FreeBSD geli), nonché il supporto per nuovi tipi di formati precedentemente supportati (ad esempio, aggiunto il supporto per bcrypt-pbkdf per OpenBSD softraid) e molto altro. In totale sono stati aggiunti 80 formati su CPU e 47 su OpenCL. Il numero totale di formati è ora 407 sulla CPU (o 262 escludendo i formati "dinamici" configurati dai file di configurazione) e 88 su OpenCL.
  • Rimozione del supporto del linguaggio CUDA a favore di OpenCL, che non interferisce minimamente con il pieno utilizzo della GPU NVIDIA (e anzi aiuta, grazie al focus dello sviluppo e delle ottimizzazioni su un'implementazione di ogni formato sotto la GPU invece di due implementazioni precedenti).
  • Supporto per i nuovi set di istruzioni SIMD - AVX2, AVX-512 (incluso per la seconda generazione di Xeon Phi) e MIC (per la prima generazione) - nonché un uso più universale e completo di SIMD nelle implementazioni di molti formati, incluso l'uso di set di istruzioni precedentemente supportati fino a AVX e XOP su x86(-64) e
    NEON, ASIMD e AltiVec rispettivamente su ARM, Aarch64 e POWER.

  • Numerose ottimizzazioni per CPU e OpenCL, sia per lavorare in modo più efficiente con un numero elevato di hash contemporaneamente (ad esempio caricando 320 milioni di hash SHA-1 sulla GPU) sia per aumentare la velocità di calcolo degli hash. Alcune di queste ottimizzazioni sono universali, altre coprono vari sottoinsiemi di formati e molte sono specifiche del formato.
  • (Auto)configurazione del buffering ottimale delle password controllate sulla CPU (“—tune=auto —verbosity=5”) e dimensioni ottimali dei lavori su OpenCL (abilitato per impostazione predefinita), inclusa la presa in considerazione della lenta accelerazione fino alla piena frequenza operativa delle GPU NVIDIA serie GTX 10xx e successive. Utilizzando gli hash effettivamente caricati e la lunghezza effettiva delle password da controllare (se nota in anticipo) per tale ottimizzazione automatica.
  • Aggiunta di un compilatore per "espressioni dinamiche" specificate direttamente sulla riga di comando e implementazione di nuovi tipi di hash ibridi, ad esempio "-format=dynamic='sha1(md5($p).$s)'", calcolato sulla CPU utilizzando SIMD . Come componenti di tali espressioni, sono supportate dozzine di hash veloci (da quelli comuni come MD5 a quelli moderatamente esotici come Whirlpool), concatenazione di sottostringhe, codifica e decodifica, conversione di caratteri maiuscoli, riferimenti a password, sale, nome utente e costanti di stringa.
  • Eliminazione di differenze indesiderate da hashcat, incluso il supporto per comandi di regole di elenchi di parole precedentemente specifici per hashcat, passaggio alla numerazione dei dispositivi OpenCL da 1, utilizzando le stesse lunghezze di password predefinite (solitamente lunghezza 7) per i test delle prestazioni.
  • Nuove modalità di cracking, tra cui PRINCE da hashcat (genera "frasi" concatenando più parole in ordine crescente di lunghezza totale), sottoinsiemi (porta password con caratteri non abbastanza diversi anche se quei caratteri provengono da un ampio set di caratteri possibili) e esterno ibrido (consente alle modalità esterne, descritte nei file di configurazione in linguaggio C-like, di generare molte password verificabili basate su ogni "parola" di base ricevuta da un'altra modalità). Inoltre, diverse nuove modalità esterne predefinite.
  • Funzionalità aggiuntive per l'utilizzo di più modalità contemporaneamente (una sopra l'altra - stacking), nonché per tale utilizzo di set di regole (impilamento delle regole dell'elenco di parole).
  • Miglioramenti alle modalità maschera (estensione graduale della maschera nell'intervallo di lunghezze specificato, applicazione della maschera sul lato di un dispositivo OpenCL o scheda FPGA) e single crack (comportamento ragionevole su dispositivi che calcolano un numero elevato di hash in parallelo, che in precedenza in questa modalità mancavano le password da controllare, e anche i limiti sul consumo di memoria).
  • Molti miglioramenti nel supporto per Unicode e altre codifiche in vari sottosistemi.
  • Molti miglioramenti ai programmi *2john (conversione di file di vari formati in file
    use with john), specialmente wpapcap2john (gestisce il traffico WiFi).

  • Molte nuove opzioni della riga di comando, le impostazioni di john.conf, le opzioni di configurazione degli script e le loro nuove funzionalità corrispondenti, non tutte sono state menzionate qui.
  • Miglioramento della qualità del codice grazie al supporto integrato per build di debug con AddressSanitizer (precedentemente) e UndefinedBehaviorSanitizer (aggiunto), aggiunta di un fuzzer di formato integrato (all'interno di GSoC 2015), utilizzo dell'integrazione continua (build per dozzine di combinazioni di sistemi operativi e compilatori e testandoli per il corretto supporto di tutti i formati).

Fonte: opennet.ru

Aggiungi un commento