To nie jest kolejna analiza 10 milionów haseł
Napisał: Patryk Krawaczyński
24/02/2015 w Bezpieczeństwo Brak komentarzy. (artykuł nr 475, ilość słów: 1436)
J
akiś czas temu konsultant bezpieczeństwa Mark Burnett udostępnił plik zawierający 10 milionów loginów i haseł. Odpowiedzi na różne pytania dotyczące historii stworzenia, struktury itd. tego pliku możemy znaleźć w odpowiedzi na najczęściej zadawane pytania (FAQ). Rzadko zdarza się, że wycieki haseł posiadają takie ilości, a jeszcze rzadziej kiedy ktoś zbiera wycieki przez parę lat, skleja je w jedność i publikuje.
Bardzo szybko powstały różne analizy tego zbioru. Od najprostszych skryptów bash zwracających top 20 popularnych haseł:
export LC_ALL='C'
awk '{ print $2 }' 10-million-combos-utf8.txt | tr 'A-Z' 'a-z' |
sort | uniq -c | sort -nr | head -n 20
oraz liczbę wplecionych roczników:
for i in {1900..2015} do echo "$i: `cat passwords.txt |grep $i |wc -l`" done
po trochę bardziej skomplikowane w framework’u Perl, a kończąc na najbardziej zaawansowanych w języku R z ładnymi wykresami w ggplot2. Powstała nawet gra podpowiadająca nam ile % haseł byśmy odgadnęli z tych 10 milionów.
Spróbujmy przeprowadzić w takim razie własną analizę, a że nasze lenistwo nie zna granic użyjemy do tego narzędzia napisanego w języku Python o nazwie PACK (Password Analysis and Cracking Toolkit), którego użycie ogranicza się do wydania polecenia:
python PACK-0.0.4/statsgen.py passwords.txt --hiderare
* plik passwords.txt zawiera same hasła i został przygotowany poprzez polecenie:
awk '{ print $2 }' 10-million-combos-utf8.txt > passwords.txt
Raport z programu:
_
StatsGen 0.0.3 | |
_ __ __ _ ___| | _
| '_ \ / _` |/ __| |/ /
| |_) | (_| | (__| <
| .__/ \__,_|\___|_|\_\
| |
|_| iphelix@thesprawl.org
[*] Analyzing passwords in [passwords.txt]
[+] Analyzing 100% (9997986/9997986) of passwords
[*] Length:
[+] 8: 29% (2980856)
[+] 6: 25% (2543979)
[+] 7: 16% (1662858)
[+] 9: 06% (680813)
[+] 5: 04% (495019)
[+] 10: 04% (471284)
[+] 4: 03% (345143)
[+] 11: 02% (263464)
[+] 12: 01% (190978)
[+] 13: 01% (135587)
[*] Character-set:
[+] loweralpha: 38% (3824585)
[+] loweralphanum: 29% (2985680)
[+] numeric: 20% (2035149)
[+] mixedalphanum: 05% (570968)
[+] mixedalpha: 02% (251579)
[+] upperalphanum: 01% (110229)
[+] upperalpha: 01% (109263)
[*] Password complexity:
[+] digit: min(0) max(35)
[+] lower: min(0) max(40)
[+] upper: min(0) max(39)
[+] special: min(0) max(24)
[*] Simple Masks:
[+] string: 41% (4185427)
[+] stringdigit: 21% (2173420)
[+] digit: 20% (2035149)
[+] digitstring: 05% (549643)
[+] othermask: 05% (507861)
[+] stringdigitstring: 03% (363760)
[+] digitstringdigit: 01% (107776)
[*] Advanced Masks:
[+] ?l?l?l?l?l?l: 11% (1175675)
[+] ?l?l?l?l?l?l?l?l: 08% (897376)
[+] ?l?l?l?l?l?l?l: 07% (749500)
[+] ?d?d?d?d?d?d?d?d: 07% (739504)
[+] ?d?d?d?d?d?d: 07% (702940)
[+] ?l?l?l?l?l: 03% (314444)
[+] ?d?d?d?d?d?d?d: 02% (208532)
[+] ?l?l?l?l?l?l?d?d: 01% (199591)
[+] ?l?l?l?l?l?l?l?l?l: 01% (196952)
[+] ?l?l?l?l: 01% (173537)
[+] ?d?d?d?d: 01% (142090)
[+] ?l?l?l?l?l?l?l?d: 01% (138451)
[+] ?l?l?l?l?l?d: 01% (124788)
[+] ?l?l?l?l?l?l?l?l?l?l: 01% (120657)
[+] ?l?l?l?l?l?d?d: 01% (119001)
[+] ?l?l?l?l?d?d?d?d: 01% (110166)
[+] ?l?l?l?l?l?l?d: 01% (107369)
[+] ?l?l?l?l?d?d: 01% (104593)
Z przeprowadzonej wstępnie analizy wynika, że najwięcej haseł posiada od 6 do 8 znaków, które są zestawem „loweralpha”, czyli składają się małych liter od „a” do „z”; nie posiadają oczywistej złożoności, ale za to większość z nich może zostać „przysłonięta” maską „ciągu znaków” (ang. string). Ostatnia sekcja: Advanced Masks zawiera najczęściej występujące maski w formacie hashcat. Jeśli mamy wstępnie przeanalizowany plik – możemy zacząć wdawać się w szczegóły – na przykład przeanalizować tylko te wpisy, które miały największy procent (41%) prostej maski – czyli:
python PACK-0.0.4/statsgen.py passwords.txt --hiderare --simplemask string -q
Dalsze kroki i bardziej zaawansowane użycie reszty narzędzi z PACK znajdziemy na stronie Petera Kacherginskiego. Warto również zapoznać się z jego prezentacją z konferencji PasswordsCon13, z której wynika, że szybkie łamanie haseł nie powinno ograniczać się tylko do szybkiego sprzętu, ale wykrywania i analizy wzorów na podstawie jakich są one najczęściej tworzone.
Więcej informacji: Automatic password rule analysis and generation

