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

Wydany nowa wersja najstarszego obsługiwanego programu do odgadywania haseł John the Ripper 1.9.0-jumbo-1. (Projekt rozwija się od 1996 r.) Dalej strona projektu Do pobrania dostępne są źródła, a także gotowe zestawy dla systemu Windows.

Należy zauważyć, że od wydania wersji 1.8.0-jumbo-1 minęło 4.5 roku, podczas którego dokonano ponad 6000 zmian (zatwierdzeń git) od ponad 80 programistów. W tym okresie programiści zalecali używanie aktualne wydanie z GitHuba, którego stan został utrzymany stabilny pomimo zmian dokonanych dzięki ciągła integracja, co obejmuje wstępną weryfikację każdej zmiany (pull request) na wielu platformach. Cechą szczególną nowej wersji jest pojawienie się obsługi FPGA (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 około 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, które przetestowano do 16 płytek (64 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 „--mask”, także w połączeniu z innymi trybami) i porównanie wyliczonych skrótów z tymi ładowanymi po stronie FPGA. Z punktu widzenia realizacji 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 CPU i 47 na OpenCL (a niewielka liczba starych została usunięta jako zintegrowana z nowymi i przestarzałymi). 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. (Częściowo w ramach GSoC 2015.)
  • 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 procesorze („—tune=auto —verbosity=5”) i optymalnych rozmiarów zadań w OpenCL (domyślnie włączone), w tym z uwzględnieniem powolnego przyspieszania NVIDIA GTX procesorów graficznych serii do pełnej częstotliwości roboczej 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: linux.org.ru

Dodaj komentarz