Wersja John the Ripper 1.9.0-jumbo-1 z obsługą FPGA

Wydany nowa wersja najstarszego obsługiwanego programu do odgadywania haseł Jan Rozpruwacz 1.9.0-jumbo-1 (projekt rozwija się od 1996 roku). Minęło 1.8.0 roku od wydania poprzedniej wersji 1-jumbo-4.5, podczas której dokonano ponad 6000 zmian (zatwierdzeń git) od ponad 80 programistów. Dzięki ciągła integracja, która obejmuje wstępne sprawdzenie każdej zmiany (pull request) na wielu platformach, w tym okresie programiści zalecali korzystanie aktualne wydanie z GitHuba, którego stan pomimo dokonanych zmian utrzymał się na stabilnym poziomie. Główny kod projektu dystrybuowane przez na licencji GPLv2+, a kod niektórych komponentów na licencji BSD.

Cechą szczególną nowej wersji jest pojawienie się obsługi FPGA (oprócz procesora, karty graficznej i Xeon Phi). Do desek ZTEX 1.15 lat, w tym 4 układy FPGA i pierwotnie używane głównie do wydobywania Bitcoinów, obecnie zaimplementowano 7 typów skrótów haseł: bcrypt, classic descrypt (w tym bigcrypt), sha512crypt, sha256crypt, md5crypt (w tym Apache apr1 i AIX smd5), Drupal7 i phpass (używane , w szczególności w WordPressie). Niektóre z nich zostały po raz pierwszy zaimplementowane na FPGA.

W przypadku bcrypt osiągnięta wydajność ~119 tys. c/s przy 2^5 iteracjach („2b$05”) przy zużyciu energii ~27 watów znacznie przewyższa wyniki dla najnowszych procesorów graficznych na płytę, cenę sprzętu i wat . Obsługiwane również klastry płytek tego typu, w ramach których przetestowano aż 16 płytek (64 układy FPGA) sterowanych z jednego Raspberry Pi 2. Obsługiwana jest zwykła funkcjonalność John the Ripper, obejmująca wszystkie tryby zgadywania haseł i jednoczesne pobieranie dużej liczby skrótów .

Aby przyspieszyć pracę, zaimplementowaliśmy wykorzystanie maski (tryb „-maska”, także w połączeniu z innymi trybami) i porównanie wyliczonych skrótów z tymi ładowanymi po stronie FPGA. Z realizacyjnego punktu widzenia wiele projektów (np. sha512crypt i Drupal7) stosowane są bloki składające się z wielowątkowych rdzeni procesorów (miękkich rdzeni CPU) współpracujących z rdzeniami kryptograficznymi. Rozwój tej funkcjonalności był prowadzony przez Denisa Burykina we współpracy z innymi programistami typu jumbo.

Inne ważne zmiany:

  • Obsługa dużej liczby dodatkowych typów skrótów, szyfrów itp., w tym zarówno klasycznych skrótów haseł (np. z nowych wersji QNX), jak i portfeli kryptowalut, zaszyfrowanych archiwów i zaszyfrowanych systemów plików (np. Bitlocker i FreeBSD geli), a także obsługę nowych typów formatów obsługiwanych wcześniej (na przykład dodano obsługę bcrypt-pbkdf dla oprogramowania OpenBSD) i wiele więcej. W sumie dodano 80 formatów na procesorze i 47 na OpenCL. Całkowita liczba formatów wynosi obecnie 407 na procesorze (lub 262, nie licząc formatów „dynamicznych” skonfigurowanych z plików konfiguracyjnych) i 88 na OpenCL.
  • Odmowa wsparcia języka CUDA na rzecz OpenCL, co w żaden sposób nie przeszkadza w pełnym wykorzystaniu procesorów graficznych NVIDIA (a nawet pomaga, dzięki skupieniu rozwoju i optymalizacji na jednej implementacji każdego formatu dla GPU zamiast na dwóch dotychczasowych implementacjach).
  • Obsługa nowych zestawów instrukcji SIMD - AVX2, AVX-512 (w tym dla Xeon Phi drugiej generacji) i MIC (dla pierwszej generacji) - a także bardziej uniwersalne i pełne wykorzystanie SIMD w implementacjach wielu formatów, w tym z wykorzystaniem wcześniej obsługiwane zestawy instrukcji do AVX i XOP na x86(-64) i
    NEON, ASIMD i AltiVec odpowiednio na ARM, Aarch64 i POWER.

  • Liczne optymalizacje dla procesora i OpenCL, zarówno w celu wydajniejszej pracy z dużą liczbą skrótów jednocześnie (na przykład testowano ładowanie 320 milionów skrótów SHA-1 na GPU), jak i w celu zwiększenia szybkości obliczeń skrótu. Niektóre z tych optymalizacji są uniwersalne, inne obejmują różne podzbiory formatów, a wiele z nich jest specyficznych dla poszczególnych formatów.
  • (Auto)konfiguracja optymalnego buforowania sprawdzanych haseł na CPU („—tune=auto —verbosity=5”) i optymalnych rozmiarów zadań na OpenCL (domyślnie włączone), w tym uwzględnienie powolnego narastania do pełnej częstotliwości roboczej procesorów graficznych z serii NVIDIA GTX 10xx i nowszych. Używanie faktycznie załadowanych skrótów i rzeczywistej długości sprawdzanych haseł (jeśli jest znana z góry) do takiego automatycznego dostrajania.
  • Dodanie kompilatora dla „wyrażeń dynamicznych” określonych bezpośrednio w wierszu poleceń i zaimplementowanie nowych hybrydowych typów skrótu, na przykład „-format=dynamic='sha1(md5($p).$s)'”, obliczanych na procesorze przy użyciu SIMD . Jako składniki takich wyrażeń obsługiwane są dziesiątki szybkich skrótów (od popularnych, takich jak MD5 do umiarkowanie egzotycznych, takich jak Whirlpool), łączenie podciągów, kodowanie i dekodowanie, konwersja wielkości liter, odniesienia do hasła, soli, nazwy użytkownika i stałych łańcuchowych.
  • Eliminacja niepożądanych różnic w stosunku do hashcat, w tym obsługa reguł wcześniej specyficznych dla hashcat (polecenia reguł listy słów), przejście na numerację urządzeń OpenCL od 1, domyślne użycie tych samych długości haseł (zwykle długość 7) w testach wydajnościowych.
  • Nowe tryby generowania weryfikowalnych haseł (tryby łamania), w tym PRINCE z hashcat (tworzy „frazy” łącząc kilka słów w kolejności rosnącej całkowitej długości), podzbiory (wywołuje hasła z niewystarczającą liczbą różnych znaków, nawet jeśli te znaki pochodzą z dużego zestawu możliwych) i hybrydowe zewnętrzne (pozwala trybom zewnętrznym, opisanym w plikach konfiguracyjnych w języku podobnym do C, na generowanie wielu weryfikowalnych haseł na podstawie każdego podstawowego „słowa” otrzymanego z innego trybu). Ponadto kilka nowych predefiniowanych trybów zewnętrznych.
  • Dodatkowe możliwości jednoczesnego korzystania z kilku trybów (jeden na drugim - układanie w stosy), a także korzystania z zestawów reguł (stosowanie reguł listy słów).
  • Ulepszenia trybów maski (stopniowe rozciąganie maski w określonym zakresie długości, nałożenie maski z boku urządzenia OpenCL lub płytki FPGA) i pojedynczego pęknięcia (rozsądne zachowanie na urządzeniach obliczających dużą liczbę skrótów równolegle , dla których wcześniej w tym trybie nie było wystarczającej liczby weryfikowalnych haseł, a także ograniczeń w zużyciu pamięci).
  • Wiele ulepszeń w obsłudze Unicode i innych kodowań w różnych podsystemach.
  • Wiele ulepszeń programów *2john (konwertujących pliki w różnych formatach do
    używaj z Johnem), zwłaszcza wpapcap2john (obsługuje ruch Wi-Fi).

  • Istnieje wiele nowych opcji wiersza poleceń, ustawień w john.conf, konfiguracji opcji skryptu i odpowiednich nowych funkcji, z których nie wszystkie zostały tutaj wymienione.
  • Poprawa jakości kodu dzięki wbudowanej obsłudze kompilacji debugowania za pomocą AddressSanitizer (poprzednio) i UnknownBehaviorSanitizer (dodano), dodanie wbudowanego fuzzera formatu (w ramach GSoC 2015), wykorzystanie ciągłej integracji (kompilacje dla kilkudziesięciu systemów operacyjnych i kompilatorów kombinacje i testowanie ich pod kątem prawidłowej obsługi wszystkich formatów).

Źródło: opennet.ru

Dodaj komentarz