Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Jak nie budować generatorów haseł – na przykładzie 'fabryki haseł’
Dotarła do nas dzisiaj ciekawa informacja prasowa, dotycząca jednego z serwisów popularyzujących bezpieczne zachowania w Internecie, a którego właścicielem jest Wirtualna Polska. Między innymi pojawia się w niej informacja o serwisie – https://fabrykahasel.pl/
Sam pomysł bardzo ciekawy i na pewno potrzebny – czyli pokazane jak w prosty i interaktywny sposób zbudować własne, bezpieczne hasło.
Gorzej jednak z wykonaniem… Wpisałem w pole 'Twoja Propozycja Hasła’ słowo z niewielkiego zbioru imion żeńskich (imiona bardzo często stosowane są jako hasła – oczywiście hasła mało bezpieczne). Wybrałem więc 'Hermenegilda’. Co zobaczyłem?
Ano że taka propozycja hasła jest 'wystarczająco silna’ i że czas łamania hasła to >>> 1000 lat (’>>>’ zakładam że oznacza 'dużo więcej’ albo po prostu 'więcej’ ;)
Kolejną ciekawostką, którą zauważyłem to banner: „Uwaga, nie zapamiętujemy Twoich haseł”. Dobra, to zobaczmy:
Czyli generalnie każde hasło wpisane w generator jest przesyłane do części serwerowej (na szczęście banner informuje nas, że nie jest ono 'zapisywane’ czy też dokładniej – 'zapamiętane’, ufffff).
Mała ciekawostka – na stronie dostępna jest pewna dawka teorii budowy bezpiecznych haseł – i czytamy tu na przykład:
Jakie hasło NIE jest bezpieczne?
słownikowe, czyli składające się wyłącznie (lub niemal wyłącznie) z nazw własnych, np: jakub, ania12, mruczek2, atlantyk+; wbrew pozorom liczba słów i ich prostych kombinacji jest ograniczona (…)[ i dalej: ]
Podatność na atak słownikowy jest piętą achillesową hasła, dlatego tego typu haseł nie należy używać!
Czyżby więc autorzy serwisu przeczyli sami sobie? W końcu powyższa „Hermenegilda” to idealne hasło słownikowe i to zaczerpnięte z jednego z prostszych i często używanych słowników :) Co więcej daje ono szansę na skuteczne łamanie on-line, a nie tylko off-line (pod warunkiem, że np. konto nie jest blokowane po n nieudanych próbach logowania).
Trochę dziwna jest również metodologia pokazująca w jakim czasie podane hasło można złamać (prawdopodobnie wzięty został do tego „komputer wzorcowy: AMD Athlon64 3GHz” – można o tym znaleźć fragment w stronie z teorią).
W dobie łamania haseł na GPU, czy potworów takich jak ten, podane na cytowanej stronie czasy są w moim odczuciu raczej z dwa rzędy wielkości zbyt optymistyczne (oczywiście wszystko zależy od wykorzystanego algorytmu przechowywania haseł – istnieją algorytmy takie jak BCrypt czy PBKDF2, które znacznie utrudniają crackowanie, ale nie widziałem o nich informacji na 'fabryce haseł’).
Na koniec zacząłem zastanawiać się czy proponowane zasady generowania haseł da ubrać się w pewne standardowe reguły, które często implementuje się w crackerach.
Tego typu reguły to na przykład klasyczny lit spik, ale są oczywiście i bardziej skomplikowane przykłady – z tego typu technik korzystano między innymi w konkursie, o którym pisaliśmy jakiś czas temu (Crackowanie haseł – czyli polowanie na grubego zwierza – 90% z badanej próbki haseł zostało złamanych w mniej niż 24h).
W każdym razie sprawdziłem tym razem hasło Katarzyna:
Fiu, fiu, zamiana litery a na znak @ w słowie 'Katarzyna’ zwiększa czas łamania o ponad 300 lat. Nieźle :) A czy da się stworzyć odpowiedni plik z regułami np. do hashcata? To już zostawiam jako małe zadanie domowe dla naszych czytelników ;)
PS
Oczywiście popieramy wszelakie generatory ułatwiające ludziom zapamiętać hasło, róbmy to jednak z głową!
PPS
Pamiętajmy że: 'Katarzyna1′ ani 'Aleksandra’ to wcale nie są bezpieczne hasła ;-)
PPPS
Polecicie jakieś dobre generatory haseł? (niekoniecznie haseł w pełni losowych ;-)
–michal.sajdak<to_nie_jest_zabezpieczenie>sekurak.pl
To może Keepass, dobry umożliwia generowanie haseł według wzorca, losowo i w wymaganej ilości
Keepass to niezły pomysł (btw: http://sekurak.pl/keepass-system-zarzadzania-haslami/) szczególnie że to nie tylko generator haseł ;-)
Ja używam z powodzeniem generatora wbudowanego w KeePass – można w łatwy sposób utworzyć własne szablony z użyciem konkretnych zestawów znaków i ustalić oczywiście długość hasła :)
Ja czasami używam takiej oto funkcji znalezionej w sieci:
genpasswd() {
local l=$1
[ „$l” == „” ] && l=16
tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs
}
Mam ją dodaną w .bashrc dla ułatwienia. Dodatkowo wstawiam ręcznie jakieś znaki typu *&^%$ aby ładniej hasło wyglądało.
Kiedyś sam zapisywałem literki i cyferki co mi do głowy przyszły (że niby losowe miały być ale to tylko teoria) ale jakoś wyobraźnia mi szwankuje i się wspomagam dopalaczami jak powyżej.
Generuje ciąg o tej samej długości, i jeszcze się podpisałeś.
buuu.
Dla dzieci neostrady może to zająć 300 lat :)
Popieram KeePassa i chciałem tylko przypomnieć, że ma swoje klony również na tabletach :) Password Safe autorstwa Bruce Schneiera chyba też miał generator.
A co do hasła Hermenegilda i jego czasu łamania. Autorzy strony testującej nie podali warunków. Zakładam, że chodziło o możliwości przeciętnego Chińczyka, który nie zna niemieckich imion, a skupiony jest na infiltracji tylko amerykańskich sieci ;)
dla hasła Mariolka98 również podaje czas 1000lat :)
Na co dzień oczywiście korzystam z KeePass. Niemniej jednak, gdy tworzy się konta dla jakiejś grupy ludzi, lepiej złapać za PWGen. Hasła nie wyglądają jak krzaki i każdy normalny człowiek jest w stanie je przeczytać – a przez to również zapamiętać. Wtedy można sobie zrekompensować lekki ubytek na „dziwności” długością.
Ponadto, jeśli problem zapomnianych haseł i ich „resetu” lub incydentów wygenerowanych przy kilkukrotnym błędnym logowaniu wraca do administratora – wtedy takie cudeńko się na pewno przydaje i oszczędza czas i nerwy. Polecam.
Ja stosuje inna technikę, do ważnych rzeczy używam haszy, biorąc pod uwagę tekst wygląda to mniej więcej tak. Hasło „katarzyna” przepuszczam przez md5 wychodzi 05e58b1e044783e22f40f39fea26f218 i coś takiego wpisuje jako hasło, można dodatkowo coś jeszcze dopisać od siebie jak ktoś chce jeszcze skomplikować. Plus taki że hasło może być w miarę proste, wpisanie go do kopiuj wklej z generatora więc to kilka chwil, gorzej gdy wygląda to gdy trzeba z palca przepisać ze smartfona ;) Uważam że md5 nadaje się najlepiej, bo z sha wychodzi długi łańcuch i nie wszędzie można go z tego względu wpisać na max limit.
Może tak?
cat /dev/urandom| tr -dc 'a-zA-Z0-9′ | fold -w 8 -s | head -n 4
A ja mam inną metodę. Wymyślam sobie zdanie, biorę pierwsze litery ze zdania i mam hasło. Można opracować sobie jakiś system do tego np dla stron www. Zaszyć w haśle nazwę strony i mamy, np:
Hasło do strony Sekurak.pl dla loginu Gucio89. i z tego zdania mamy hasło: HdsS.pdlG89. – później tylko podmieniamy sobie nazwę strony dla następnego portalu i jest nowe hasło. To oczywiście tylko dla mało „ważnych” kont, dla kont gdzie hasło musi być silne oczywiście KeePass i generator od niego.
apg
Po co kombinować? https://xkcd.com/936/ :D
pwgen 20
A ja tam wole użyć głowy do generowania haseł
dobrą metodą jest nap branie pierwszych liter z jakiejs piosenki
np: „Wlazł kotek na płotek i mruga” i powtaje hasło
Wknpim ? Hmm.. za łatwe ? \/\/knp1m ? jeszcze inne ? Prosze !/\!knp!m może jakieś dodatkowe znaki ? na koniec albo na początku ? I po co używać generatorów ? Moje zdanie jest takie,dziwie się że ludzie ufają takim aplikacjom zawsze może ona zawierać funkcje dzięki którym zostaną wysłane takie hasła ,utworzone przez przeciętnego kowalskiego :-) do jakiegoś script kiddie <- dzięki temu koles może albo je wykorzystać do łamania dictionary on-line attack lub poprostu tworzyć słowniki popularnie używanych haseł :-) więc warto by ludzie użyli głowy. To takie moje zdanie. Pozdrawiam
Oczywiscie jeżeli ktoś nie ma głowy zawsze można użyć takowo skryptu tego typu to moja taka propozycja w języku python, skopuj to do notatnika i zapisz z rozszerzeniem .py np gener.py
Pamietaj by miec zainstalowany interpreter pythona 2.7.
Skypt 1:
import random
import string
znaki = list(string.printable) #wylistowanie wszystkich ASCII
dlugosc = int(raw_input(„Podaj dlugosc hasla: „))
propozycja = int(raw_input(„Podaj ile chcesz propozycji hasel: „))
for x in range(0,propozycja):
haslo = ”
a = 0
while a <= dlugosc:
wylosowany_znak = random.choice(znaki)
haslo += wylosowany_znak
a += 1
print ' UTWORZONO::: ',haslo
raw_input("NACISNIJ ENTER")
Skrypt 2: To samo dzialnie inaczej zapisane :-)
#
import random
import string
znaki = list(string.printable) #wylistowanie wszystkich ASCII
dlugosc = int(raw_input("Podaj dlugosc hasla: "))
propozycja = int(raw_input("Podaj ile chcesz propozycji hasel: "))
print ''
for x in range(0,propozycja):
haslo = [x for y in range(0,dlugosc) for x in random.choice(znaki)]
print "WYGENEROWANO::: ", ''.join(haslo)
raw_input("NACISNIJ ENTER")
Dla hasła „Aleksandra” — czas łamania 233 lata :) + zapewnienie:
Tutaj http://goo.gl/tqbUca natomiast twierdzą, że sprawdzają, czy hasło nie jest słownikowe. Polecam zastosować obszerniejsze słowniki ;) http://sekurak.pl/crackstation-udostepnia-ogromny-slownik-hasel/
„Nietolerancja”
> > > 1000 lat (hehehehe)
to samo „Homoseksualista”
KTO IM PISAŁ SŁOWNIKI?????
Ja hasła generuję w następujący sposób:
Otwieram program tekstowy.
Zamykam oczy i chaotycznie uderzam w klawisze przez kilka sekund poprzez moją kartonową nakładkę na klawiaturę.
Nakładka ta blokuje z oczywistych powodów dostęp do niektórych klawiszy.
Potem oglądam to co uzyskałem i wycinam sobie interesujący mnie fragment lub fragmenty.
To moje nowe hasło.
A może stary, dobry GRC ? https://www.grc.com/passwords.htm
:))))))))
Sprawdziłem dla ciekawości w fabryce haseł:
Tusk : czas łamania hasła 1 min.
Kaczyński : czas łamania hasła 5 lat.
==========
DOBRE :))))))))
Oj tam, oj tam, czepiacie się poradnika podczas gdy przejście z hasła Kasia na Homoseksualista dla większości użytkowników WP to wielki skok cywilizacyjny.
Wymyślanie super złożonych haseł przypomina mi anegdotę o wydaniu $1 mln przez pewien bank do zabezpieczenia $100 tys. Trzeba realnie oszacować ryzyko i dobrać zabezpieczenia na odpowiednim poziomie.
Nota bene:
Ja często wpisuję całe zdania jako hasło.
A jak nie mogę, to używam również
echo -n „całe zdanie” | sha1sum | cut -b -n ileSystemPozwala
Po komentarzach widzę, że wiele osób wpadło na ten sam pomysł co ja kilka lat temu, czyli generowania hasła na podstawie sum kontrolnych.
Ten pomysł zarzuciłem i przeszedłem na hasła całkowicie losowe. Otóż te rozwiązanie ma 2 olbrzymie wady:
1. Jak już widać nawet w komentarzach – „algorytm” ten nie jest unikatowy i stosują go różne osoby.
2. Suma kontrolna „domyślnie” rozumiana jest jako przedstawiona heksadecymalnie, a to daje tylko 16 możliwości na każdy znak!
Więc, defacto hasło 'Anastazja1′ jest bezpieczniejsze od '5819d4c4be’ i tak samo bezpieczne jak '5819d4c4be51e0ffaaeae4cdef21d77c’.
Do sum kontrolnych można dodać znaki specjalne, samo złamanie 32 znakowego hasła jest mało prawdopodobne jeżeli dodamy własna „sól” do sumy kontrolnej
nota bene, sól nie jest ochroną przed brute-force (np. hashcat potrafi łamać hasła solone).
Żeby wygenerować bezpieczne hasło wystarczy newbie posadzić przed vi i kazać mu z niego wyjść.
jako że moja pamięć już szwankuje i nie chce sobie zapamiętywać każdego znaku osobno, zapamiętuje ruch palca po klawiaturze i początkowe znaki. Wyjaśnijcie np. jak to hasło zostało stworzone:
– ghY^7ujKI*76yU&8io( – ;)
Odpowiedź dla leniwych – w poziomie w prawo/w dół bez shifta, w lewo/w górę z shiftem od litery g.
Hahaha z nudów, wpadłem na super epickie hasło nie do złamania przez 10000000000 lat, dla najpotężniejszych komputerów!
!QAZxcde3@WSXcvfr4#EDCvbgt5$RFVbnhy6%TGBnmju7^YHNm,ki8&UJM,.lo9*IK./;p0(OL>
75 znaków, 94^75 = 9.651371e+147
(tak, brakuje jednego znaku, ale sekurak blokuje :( )
Ja uzywam do generowania haseł PWGen – jest on o tyle ciekawy że może generować hasło z wybranych liter. Dzięki temu omijam takie litery jak O,I, itp., które często są mylone z 0, l.
No cóż, ręce opadają. Takie inicjatywy mają pomagać, a w praktyce robią coś dokładnie odwrotnego. Najgorzej jak staną się popularne – trafiają one jako referencje do różnych prac, ludziom się nie chce sprawdzać mechanizmu i ogólne bezpieczeństwo użytkowników znowu leci na pysk (tak się stało chociażby z tym tępym paskiem xkcd z koniem, który też gdzieś tutaj się pojawił). Mam nadzieję, że ten wpis będzie popularniejszy od samej fabryki haseł – fajnie, że zwrócono na to uwagę :)
A jakie hasło jest dobre? Unikatowe i na tyle długie, żebyś zdążył go zmienić, gdy na jaw wyjdzie jakiś wyciek (dobre nie implikuje bezpieczne).
Jakie hasło jest bezpieczne? To jest bardzo skomplikowane pytanie, bardzo zależy od kryptosystemu, który analizujemy. Trudno znaleźć *konkretne* wytyczne/standardy odnośnie bezpieczeństwa haseł, które są aktualne. Samo badanie entropii to też grubsza sprawa, niż podnoszenie x do potęgi y. Ale o tych problemach będę tu jeszcze za niedługo pisał :)
Troglodyta: widzę, że znasz życie ;) Pamiętam, jak próbowałem wyjść z edytora „ed” znając właśnie vi. Utknąłem na bardzo długi czas i jeszcze w jakimś dziwnym shellu z idiotycznym TERM… Pomogło ubicie sesji.
@vizzdoom
przyglądałem się kilku aplikacjom bruteforce, są trzy metody łamania haseł:
1. metoda słownikowa, bruteforce wpisuje wszystkie słowa z danego języka (w angielskim jest ponad 200k haseł, czad) bądź z konkretnej bazy danych
2. metoda słownikowo-kombinacyjna, program dopisuje do końca hasła cyfry oraz zamienia np. A na 4, I na 1, E na 3 itp. oraz tworzy hasła wieloczłonowe (w efekcie dostajesz np. johntrevor87, 4l4b4m4cop itp.)
3. generator haseł, programy mają dostarczone w domyśle bazy danych wszystkich możliwych kombinacji z 8 znakowego zakresu kombinatoryki znaków (specjalne/cyfry/litery), ale możesz w dowolnym momencie zwiększyć ten zakres o ile tam chcesz znaków (wykorzystujemy moc obliczeniową GPU)
Warto zauważyć, że generator haseł ma swoją kolejność – najpierw lecą małe litery od a (a,b,c,d,e,f itd.), potem lecą duże litery też zaczynając od A (A,B,C,D,E,F itd.), następnie program dodaje cyfry zaczynając od 0 (0,1,2,3,4,5 itd.) i dopiero na samym końcu przeskakuje na znaki zaczynając od ! („,#,$,%,& itd.). Znając mechanikę działania oprogramowania, wnioskuję, że możesz wybrać kilka elementów:
1. zakres np. od 1-6, A-K itp.
2. który konkretnie zbiór chcesz wygenerować (czy cyfry, czy liczby, czy znaki)
3. element, od którego zaczynasz generowanie np. od f lub od $ itp.
4. czy generator ma lecieć w górę czy w dół (od z->a, czy od 0->9, od K->D).
Wyciągam kilka wniosków:
1. używaj wszystkich 3 zbiorów znaków
2. stwórz hasło dłuższe niż 8 znaków
3. staraj się w większości korzystać ze znaków środkowych (np. 5,6,7 albo KLMNO itp.) umieszczając w środku hasła skrajne znaki ze zbiorów (np. AZ, 0,9, !`)
4. nie używaj wyrazów istniejących w jakimkolwiek słowniku
Generator najprościej wykiwać dając mu jak najwięcej pracy, czyli zmusić go do wygenerowania jak największej ilości operacji i jak najbardziej złożonego ciągu znaków.
Z tą kolejnością znaków to jest różnie. Co ciekawe w części crackerów są obsługiwane inne niż standardowe kolejności – tworzone na podstawie dużej próby statystycznej (realne hasła).
Kuknij też tu: http://sekurak.pl/crackowanie-hasel-czyli-polowanie-na-grubego-zwierza/
opisałem tylko to, co zauważyłem ściągając z freeneta kilka aplikacji. Nie watpię ani trochę, że aplikacji można napisać dowolnie i ją maksymalnie rozwinąć. :)
W KeePass mam 445 par login+hasło do różnych witryn i aplikacji (każde hasło inne, wszystkie możliwe z generatora KeePassa, chyba że corpo narzuciło :-)
Czy uważacie, że tyle różnych, przynajmniej *w miarę* silnych haseł da się wymyślić „z głowy”? Według mnie wszystkie powyżej podane sposoby zawiodłyby.
BTW sposób https://xkcd.com/936/ jest fajny, ale wiele polskich sklepów internetowych czy innych witryn nie akceptuje haseł dłuższych niż np. 8, 12, 16 znaków. Moja preferowana długość w generatorze KeePass – 30 – przerasta możliwości takich stron. „CorrectHorseBatteryStaple” też by się nie zmieściło :-)
Endrju, tak na prawdę masz jedno hasło do KeePass-a, które odblokowuje wszystkie pozostałe. Nie wiem czy nie bezpieczniej mieć 10-12 znakowe hasła w głowie (dwa albo trzy) niż czterysta znajdujących się w jednej bazie. Programy typu KeePass dają złudne poczucie bezpieczeństwa i równie dobrze możesz zapisać te hasła na kartce, którą będziesz trzymał w kieszeni (bo na biurku to już zbytnia ekstrawagancja).
Dla dzieci neostrady może to zająć 100 lat :)