Sprucie hasła „1234” trwało coś około doby. Jeśli mam być szczery, mocno mnie to zaskoczyło. Musiałem wykonać kilka prób, aby przekonać się, że program o wdzięcznej nazwie John the Ripper faktycznie działa.
Miałem powody do zdziwienia. Komputer z procesorem 3,5 GHz, łamanie w tzw. trybie słownikowym, które w teorii powinno dać wynik natychmiast. Podpiąłem słownik – drobne 15 GB. To „1234” należy podobno do jednych z najczęściej stosowanych głupich haseł. A jednak…
Sprawdziłem. Naprawdę szybko program znajduje hasła, które są tworzone na bazie danych do logowania. Konto „jasio” – hasło „jasio” pada natychmiast, co prawda wymaga to uruchomienia programu w odpowiednim trybie, ale hackarz to umie. Na to trzeba naprawdę uważać, przy tworzeniu konta system (diabli wiedzą po co) wymaga wpisania szeregu danych, które potem figurują w plikach odpowiedzialnych za logowanie. Jeśli jako hasła użyjemy którejkolwiek z tych danych, choćby zmodyfikowanej (np. „jAcio”), to leżymy.
Aliści spokojnie. Kiedy w ogóle hackarz „pruje” hasła? Gdy na skutek różnych tajemnych knowań uzyska dostęp do całego dysku, także obszaru systemu. To się zdarza na wielkich serwisach, dla komputera domowego taki przypadek stanowi kuriozum. Dlaczego hasła trzeba „pruć” i co w ogóle robi ów John the Ripper? Hasła są zapisywane w pamięci komputera w postaci tzw. „haszy”. Logowanie przebiega tak, że po wklepaniu naszego tajnego zaklęcia otwierającego system jest ono przekształcane przez tzw. funkcję jednokierunkową. To operacja, dla której nie znamy odwrotnej. Dostajemy długi, chaotyczny ciąg znaków. Nie ma sposobu, by z niego odtworzyć hasło. Jeśli jest on identyczny z tym, który komputer ma zapisany w pamięci, zostajemy wpuszczeni do systemu. Oczywiście to, z czym przekształcone hasło jest porównywane, co komputer trzyma jako wzorzec, także zostało „zahashowane”, przepuszczone przez tę samą funkcję jednokierunkową.
Jeśli włamywacz przeniknie do komputera, to dostanie jedynie owe zupełnie nieczytelne, długaśne ciągi znaków. Aby mógł się zalogować na konto, musi wiedzieć, z czego powstały, bo to trzeba wpisać jako hasło. John the Ripper zna chyba wszystkie algorytmy produkujące „hasze” i próbuje znaleźć metodą prób i błędów właściwe zaklęcie. Metoda słownikowa (słynna?) jest inteligentniejsza, sprawdzamy realnie stosowane hasła, słowa i ich przekształcenia. Gdy program ma (dobry?) słownik, zaczyna od tych najpopularniejszych. Wedle opisów – „1234” powinno zostać znalezione w ciągu jakiś minut.
W końcu doczytałem się. Problem idiotycznych haseł był ćwiczony już ponoć w gdzieś w 70. latach XX wieku. Wówczas powstał jeden z pierwszych skutecznych pomysłów. Tak zwane „solenie”, haseł metoda Morrisa oraz Thompsona, rok 1979.
Są przynajmniej dwa powody, przez które łamanie haseł z dobrym słownikiem dramatycznie (może nawet dziesiątki tysięcy razy) przyspiesza pracę. Komputer wymija kombinacje znaków, których człowiek nigdy nie użyje. Oczywiście jest ich pewnie 99,9 procenta ze wszystkich jakie można wygenerować. Powód drugi: w słowniku mamy pary hasło-hasz. Komputer nie musi wyliczać owego hasza, przez co czasami wyjątkowo skraca czas przeszukiwania.
Jeśli dodamy do hasła „sól” losowy ciąg znaków, który może być nawet znany włamywaczowi, to słownik leży. Funkcję haszującą konstruuje się tak, żeby zmiana jednego bitu danych wejściowych powodowała zmianę co najmniej ponad połowy bitów na wyjściu – jest „bardzo wrażliwa”. Dodawana sól jest długa, to kilkadziesiąt znaków. Dlatego że hasze są zupełnie inne od zapisanych w słowniku. Wyłoży się także bardziej cwana wersja słownika, tzw. tęczowe tablice, które prócz haseł mają załączone reguły ich przekształcania. „Sole” są w komputerze zapisywane w jawnej postaci, ale nie zmienia to ich skuteczności.
Już ładnych parę lat temu kryptolodzy spotkali się z poważnym problemem w postaci ogromnej mocy obliczeniowej kart graficznych. Zawierają one dziś np. 2048 prostych procesorów. Można na nich prowadzić obliczenia równolegle. Czyli np. pobrać 2048 haszy, haseł z ukradzionej bazy, i każde nich osobno próbować złamać. Albo dla jednego hasza wypróbowywać 2048 kombinacji jednocześnie.
Oczywiście oznacza to ogromny przyrost prędkości procesu krakowania. Co prawda nie jest on wprost proporcjonalny do liczby procesorów na karcie, ale pojawił się taki problem, że moc obliczeniowa porównywalna z wielkimi komputerami znalazła się w dyspozycji tzw. zwykłego użytkownik. Powiedzmy od razu, że nie tak zwykłego, trzeba się jednak dość wysilić i wydać trochę kasy na taki klaster obliczeniowy. Mimo to trzeba było jednak coś przedsięwziąć.
W tej chwili w wielu systemach stosowany jest jest algorytm opracowany w USA przez National Security Agency z serii algorytmów nazywanych sha2 o nazwie SHA512, w którym ustawia się parametr „rounds” oznaczający liczbę przebiegów haszowania. Bierzemy hasło, wykonujemy z niego hasz, następnie z tego hasza kolejny. Tak mnóstwo razy. Cel jest prosty: zwiększyć czas wyliczania hasza na tyle, aby skompensował przyrost mocy obliczeniowej systemów zbudowanych na GPU, czyli nowoczesnych kartach graficznych. Jak wyczytałem, dla sha512 typowa wartość parametru rounds wynosi 5000 i to już załatwia problem.
Warto zauważyć, że gdyby nie solenie haseł, to ta operacja byłaby psu na budę. Słownik bowiem będzie zawierał pary hasz–hasło. Nie trzeba uruchamiać programu wyliczającego ów hasz, przeszukiwanie idzie piorunem.
Ale gdy mamy i solenie, i wielokrotne haszowanie, to znalezienie hasła „1234” trwa naprawdę dziesiątki godzin na normalnym komputerze. Połamania bazy wykradzionych haseł liczącej dziesiątki tysięcy sztuk nie może dokonać ktokolwiek.
Krótko mówiąc, eksperymentalnie się przekonałem, że i w specjalistycznych publikacjach, i w tych popularnych, pisze się bajki: nawet bardzo durne hasło w dzisiejszych czasach nie jest łatwe do przełamania.
Media nam wmawiają, że zagrożenia cybernetyczne rosną. Tyle że jeśli przyjrzeć się technicznym bebechom, to widać coś innego.
Tak, pojawiają się nowe narzędzia crakerów, jak komputery z kartami graficznymi. Lecz znajdujemy się w sytuacji, że posiadają je tylko niektórzy ludzie. To już nie może być kilkunastoletni wandal komputerowy, jak bywało jeszcze kilkanaście lat temu. Ktoś musi wyłożyć kasę, musi mieć w tym jakiś cel. A broniący się może podkręcić mocniej owo „rounds”, np, razy 10, może ustawić minimalną długość hasła w systemie na kilkanaście znaków, może zmienić funkcję haszującą na nowszą. Na przykład bcrypt. Algorytm lub program przeznaczony specjalnie do tego, by spowolnić proces haszowania. Można w nim ustawiać złożoność aż do takich wartości, że na normalnym komputerze operacja będzie trwała gdzieś około 1,5 roku. Jest tak zaprojektowany, że procesu nie da się rozbić na wiele równoległych, nie da się więc złamać algorytmu za pomocą superkomputerów NSA czy NASA albo chińskich gigantów, ponieważ i tak poszczególne procesory pracują z prędkościami bliskimi tych w domowych maszynach. Ten program może stawić czoła wszystkim komputerom na świecie połączonym w jeden klaster. Nawet jeśli ustawimy sobie głupie hasło – i tak możemy ustawić komplikację haszowania na takim poziomie, że jego łamanie będzie trwać za długo dla każdego.
Wynik mojego eksperymentu był dla człowieka znającego współczesne systemy operacyjne oczywisty. To znaczy… powinien być oczywisty. Jednak nigdzie nie przeczytałem, że to będzie tak wyglądać. Dodam, że dla eksperymentu gdzieś od półtora miesiąca próbuję złamać inne hasła, które zdawały mi się słabe. Cóż… chyba się jeszcze przydadzą.
Pobierz tekst:

Adam Cebula „W obliczeniach tkwi błąd”
A może by tak przyjąć ryzykowną i ekstrawagancką tezę, że książki fantastyczne nie opisują przygód zielonych marsjańskich fifoludków…

Adam Cebula „Grzech niepierworodny”
Podatek z jajec złożony to dycht poważna sprawa, zwłaszcza gdy podgrodzie w ruinie… Adam Cebula uczynił…

Red-Akcje nr 11
Oj sypią się gromy na superprodukcję TVP o tytule „Korona królów”. Najnowszej…
Pewnie że się da zrobić bezpiecznie, ale to nie oznacza że tak jest zrobione – patrz wyciek z zeszłego roku ze znanego sklepu internetowego – hashe w słabej wersji md5. No i druga sprawa, czyli używanie tych samych haseł (albo par login/hasło) w wielu miejscach – wystarczy złamać jedno miejsce gdzie programiście się nie chciało i zrobił hasła plain textem albo komunikację http (bez 's’), a potem tylko sprawdzić pozostałe serwisy czy zdobyty login / hasło pasują. To wydaje mi się głównym zagrożeniem, a nie liczenie dobrze zabezpieczonego hasła.
Czyli potwierdzasz, to co napisałem. Narzędzia są doskonałe, trzeba ich użyć.