Rilascio di John the Ripper 1.9.0-jumbo-1 con supporto FPGA

Rilasciato nuova versione del programma più vecchio ancora supportato per la generazione di password John the Ripper 1.9.0-jumbo-1 (il progetto è in sviluppo dal 1996). Sono passati 4,5 anni dall'uscita della precedente versione 1.8.0-jumbo-1, durante i quali sono state apportate oltre 6000 modifiche (commit git) da più di 80 sviluppatori. Grazie a all'integrazione continua, che include una revisione preliminare di ogni modifica (pull request) su molte piattaforme, nel corso di questo periodo gli sviluppatori hanno raccomandato di utilizzare l'edizione attuale da GitHub, il cui stato è stato mantenuto stabile nonostante le modifiche apportate. Il codice principale del progetto è distribuito è sotto licenza GPLv2+, mentre il codice di alcuni componenti è sotto licenza BSD.

Una caratteristica della nuova versione è l'introduzione del supporto FPGA (oltre a CPU, GPU e Xeon Phi). Per le schede ZTEX 1.15y, che includono 4 chip FPGA e originariamente utilizzate principalmente per il mining di Bitcoin, ora sono implementati 7 tipi di hashing delle password: bcrypt, descrypt classico (incluso bigcrypt), sha512crypt, sha256crypt, md5crypt (incluso Apache apr1 e AIX smd5), Drupal7 e phpass (utilizzato, in particolare, in WordPress). Alcuni di essi sono implementati su FPGA per la prima volta.

Per bcrypt, la prestazione ottenuta è di ~119k c/s con 2^5 iterazioni («$2b$05») con un consumo di potenza di circa ~27 watt, superando significativamente i risultati dei più recenti GPU in relazione al costo della scheda, del prezzo dell'hardware e dei watt. Sono inoltre supportati cluster di schede di questo tipo, testati fino a 16 schede (64 chip FPGA), controllati da un singolo Raspberry Pi 2. È supportata la funzionalità standard di John the Ripper, inclusi tutti i metodi di generazione di password e il caricamento simultaneo di un gran numero di hash.

Per accelerare il funzionamento è stata implementata l'applicazione di maschere (modalità «—mask», anche in combinazione con altre modalità) e il confronto degli hash calcolati con quelli caricati sul lato FPGA. Dal punto di vista dell'implementazione, in molti dei design (ad esempio, per sha512crypt e Drupal7) utilizzano blocchi composti da nuclei di processore multithreading (soft CPU cores), interagendo con nuclei crittografici. Lo sviluppo di questa funzionalità è stato condotto da Denis Burikin in coordinamento con altri sviluppatori di jumbo.

Altre importanti modifiche:

  • Supporto per un gran numero di ulteriori tipi di hash, cifrature, ecc., inclusi sia gli hash classici delle password (ad esempio, dalle nuove versioni di QNX), sia i wallet per criptovalute, gli archivi cifrati e i file system cifrati (ad esempio, Bitlocker e FreeBSD geli), oltre al supporto di nuove varianti di formati precedentemente supportati (ad esempio, è stato aggiunto il supporto per bcrypt-pbkdf per OpenBSD softraid) e molto altro. In totale, sono stati aggiunti 80 formati per CPU e 47 per OpenCL. Il numero totale di formati è ora 407 su CPU (o 262 escludendo i formati "dynamic" configurabili dai file di configurazione) e 88 su OpenCL.
  • Abbandono del supporto per il linguaggio CUDA a favore di OpenCL, il che non interferisce affatto con l'uso completo delle GPU NVIDIA (e anzi aiuta, grazie al focus dello sviluppo e alle ottimizzazioni su un'unica implementazione di ciascun formato per GPU anziché due implementazioni come in precedenza).
  • Supporto per nuovi set di istruzioni SIMD - AVX2, AVX-512 (incluso per la seconda generazione di Xeon Phi) e MIC (per la prima generazione) - e un utilizzo più universale e completo di SIMD nelle implementazioni di molti formati, inclusa l'applicazione di set di istruzioni precedentemente supportati fino ad AVX e XOP su x86(-64) e
    NEON, ASIMD e AltiVec su ARM, Aarch64 e POWER, rispettivamente.
  • Numerose ottimizzazioni per CPU e OpenCL, sia per un funzionamento più efficiente con un gran numero di hash contemporaneamente (ad esempio, è stata testata la gestione di 320 milioni di hash SHA-1 su GPU), sia per incrementare la velocità di calcolo degli hash. Parte di queste ottimizzazioni è universale, parte copre vari sottoinsiemi di formati, mentre molte sono specifiche per singoli formati.
  • (Auto-)configurazione della bufferizzazione ottimale delle password verificate su CPU ("—tune=auto —verbosity=5") e delle dimensioni ottimali dei job su OpenCL (inclusa per impostazione predefinita), tenendo conto anche dell'avvio lento per raggiungere la frequenza operativa completa delle GPU della serie NVIDIA GTX 10xx e superiori. Utilizzo di hash realmente caricati e della reale lunghezza delle password verificate (quando nota in anticipo) per tale auto-configurazione.
  • Aggiunta di un compilatore di "espressioni dinamiche", specificato direttamente nella riga di comando e che implementa nuovi tipi ibridi di hash, ad esempio "—format=dynamic=’sha1(md5($p).$s)'", calcolati sulla CPU utilizzando SIMD. Tra i componenti di tali espressioni sono supportati decine di hash veloci (da quelli comuni come MD5 a quelli moderatamente esotici come Whirlpool), concatenamento di sottostringhe, codifica e decodifica, conversione del caso delle lettere, riferimenti a password, sale, nomi utente e costanti stringa.
  • Eliminazione delle differenze indesiderate rispetto a hashcat, inclusa la supporto a regole specifiche per hashcat (comandi di regole per liste di parole), passaggio alla numerazione dei dispositivi OpenCL partendo da 1, utilizzo per impostazione predefinita delle stesse lunghezze delle password (generalmente una lunghezza di 7) nei test di prestazioni.
  • Nuovi modi di generazione di password verificabili (modi di cracking), inclusi PRINCE di hashcat (forma "frasi" combinando più parole in base alla lunghezza totale crescente), sottoinsiemi (individua password con un numero insufficiente di caratteri diversi, anche se questi caratteri provengono da un ampio insieme possibile) e ibrido esterno (permette a modalità esterne, descritte in file di configurazione in un linguaggio simile al C, di generare molte password verificabili basate su ogni "parola" di base proveniente da un'altra modalità). Inoltre, sono presenti diverse nuove modalità esterne predefinite.
  • Ulteriori possibilità di utilizzo di più modalità contemporaneamente (una sovrapposta all'altra — stacking), così come per l'uso di set di regole (stacking delle regole per liste di parole).
  • Miglioramenti delle modalità mask (allungamento graduale della maschera nella gamma di lunghezze specificata, applicazione della maschera sul lato del dispositivo OpenCL o della scheda FPGA) e single crack (comportamento ragionevole sui dispositivi che calcolano un gran numero di hash in parallelo, poiché precedentemente in questa modalità mancavano password verificabili, così come vincoli sul consumo di memoria).
  • Miglioramenti significativi nel supporto di Unicode e altre codifiche in diverse sottosistemi.
  • Numerosi miglioramenti ai programmi *2john (che trasformano file di formati diversi per
    utilizzo con john), in particolare wpapcap2john (elabora il traffico WiFi).
  • Molte nuove opzioni della riga di comando, impostazioni in john.conf, opzioni dello script configure e le relative nuove funzionalità, non tutte delle quali sono riuscite a essere menzionate qui.
  • Miglioramento della qualità del codice grazie al supporto integrato per le build di debug con AddressSanitizer (già presente) e UndefinedBehaviorSanitizer (aggiunto), implementazione di un fuzzing incorporato per i formati (nell'ambito del GSoC 2015), uso della integrazione continua (build per decine di combinazioni di sistema operativo e compilatore e test per supportare correttamente tutti i formati).

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster