BruteForce - generowanie haseł

Spis treści


Informacje wstępne
Jakie można napotkać zabezpieczenia
Generowanie słownika
Crunch
Instalacja
Sposób użycia
RSmangler
Instalacja
Opis parametrów
Sposób użycia
Common User Passwords Profiler
Konfiguracja
Sposób użycia
Download

Informacje wstępne


Atak typu brute force jest jednym z najbardziej skutecznych ataków i dość prosty do implementacji, podchodzi do problemu włamani się w sposób dość bezpośredni tj. przez drzwi frontowe :) Sama zaś zasada działania jest prosta i polega na sprawdzeniu wszystkich możliwych kombinacji haseł.
Takiego typu atak może być bardzo skuteczny szczególnie jeżeli łamiemy hash’e, ponieważ możemy sprawdzać bardzo dużą ilość kombinacji w ciągu sekundy i ogranicza nas tylko wydajność naszej maszyny.
Teoretycznie skuteczność takiego ataku może być 100%, kwestią jest tylko czas, który niestety w niektórych przypadkach możemy liczyć w milionach lat.
Przyśpieszyć ten proces możemy na dwa sposoby:
- Zwiększając moc obliczeniową/przepustowość łącza
- Precyzując kombinacje haseł
To pierwsze możemy uzyskać przez zwiększanie wydajności aplikacji łamiącej np. na skorzystanie nie tylko z CPU ale również z GPU oraz przez podzielenie zadania między maszyny, a nawet cały BotNet co nie tylko zwiększa moc obliczeniową ale przepustowość łącza. Mówiąc przepustowość łącza mam na myśli wykonywanie zdalnego ataku bruteforce.
Drugą wymienioną metodą jest precyzowanie kombinacji i tutaj nie ma już gwarancji, że hasło zostanie złamane, ponieważ zwyczajnie możemy nie trafić. Jednakowoż warto próbować, szczególnie przy atakach zdalnych.

Jakie można napotkać zabezpieczenia


No dobrze w niektórych sytuacjach możemy zabezpieczyć się przed tego typu atakiem lub znacznie utrudnić jego wykonanie. Przy łamaniu hash’y zabezpieczeniem będzie skomplikowanie jego zawartości poprzez wprowadzenie saltu lub zastosowanie w między czasie hash’owania jakiegoś własnego algorytmu, który skomplikuje hasło. Hash też można hash’ować ponownie, a nawet wielokrotnie ale mimo zastosowania tych wszystkich kombinacji nadal hash jest do złamania.
Zabezpieczyć się przed zdalnym atakiem bruteforce na aplikacje webową lub serwer jest łatwiej, ponieważ tutaj już może nastąpić filtracja ruchu i jest możność wykrycia takiego ataku, a co za tym idzie zastosowanie odpowiedniego postępowania. Tak więc nie jesteśmy zdani, tylko na łaskę mocy obliczeniowej.
Wykrycie raczej nie powinno stanowić problemu, bo łatwo spostrzeżemy że jakiś oszołom :-P absorbuje spory ruch sieciowy lub po prostu wykonuje bardzo dużo prób logowań.
Można zablokować logowanie na dane konto, tylko że to odetnie też tego prawdziwego użytkownika, a tego raczej nikt by nie chciał oprócz atakującego, ;) więc takie działanie raczej odpada.
Można po iluś próbach wymagać autoryzacji przez captcha (obrazek) taki mechanizm stosuje m.in Google, nawet przy wyszukiwaniu stron. Istnieje też inny sposób np. po 5 próbach błędnego logowania lub po 5 próbach błędnego logowania z uwzględnieniem IP nie sprawdzać poprawności loginu i hasła, tylko informować o błędzie w sposób taki, aby nie było widać różnicy.
Pamiętaj o tym wszystkim i przed rozpoczęciem przetestuj czy nie ma takich zabezpieczeń, żeby się nie narobić na darmo ;) Przecież mogłeś/aś włączyć takie na localhoście i zapomnieć...

Generowanie słownika


Rozejrzałem się po sieci, popytałem i znalazłem kilka ciekawych narzędzi, które potrafią generować kombinacje możliwych haseł.
Przedstawiam tutaj opis dla systemów opartych o jądro Linux i systemów uniksopodobnych ale na Windowsach też można odpalić.

Crunch


Dość ciekawy program napisany w C potrafiący tworzyć listę słów składających się z kolejnych opcji oraz permutacji wyrazów.

Instalacja


Instalacja ogranicza się do wydania trzech poleceń z konsoli:
  1. make
  2. make install
  3. chmod +x crunch

Obsługa


Generowanie wszystkich kombinacji trzy i czteroliterowych z przedziału a-z
  1. ./crunch 3 4

Przykład:
aaa
aab
aac
...
zzzz

Generowanie wszystkich kombinacji liter abc trzech i czteroliterowych
  1. ./crunch 3 4 abc

Generowanie wszystkich kombinacje liter abcde
Cyfry 3 i 4 nic nie robią ale muszą jakieś być ;) ważne żeby pierwsza była mniejsza od drugiej
  1. ./crunch -p 3 4 abcde

Generowanie wszystkich kombinacji wyrazów ala ma kota
  1. ./crunch -p 3 4 ala ma kota

Przykład
alakotama
alamakota
kotaalama
kotamaala
maalakota
makotaala

Więcej przykładów i szczegółowy opis jest dostępnych w manualu
  1. man crunch


RSmangler


Bardzo ciekawe narzędzie napisane w Ruby do generowania permutacji wyrazów z różnymi kombinacjami liter, cyfr oraz znaków specjalnych.
Pozwoliłem sobie go lekko go zmodyfikować, tak aby był wygodniejszy w użyciu. W zwykłej wersji podawanie kolejnych parametrów oznaczało ich wyłączanie tzn. jeżeli chcielibyśmy wygenerować permutacje danego wyrazu należy użyć kilkunastu parametrów z wyjątkiem parametru odpowiadającemu permutacji. Osobiście trochę zmodyfikowałem
(Oryginał również załączyłem) i teraz jest na odwrót tj. jakie parametry się takie program uwzględni przy generowaniu.

Instalacja


  1. chmod +x rsmangler.rb

Opis parametrów:


--help, -h: show help
--file, -f: the input file, use - for STDIN
--perms, -p: permutate all the words
--double, -d: double each word
--reverse, -r: reverser the word
--leet, -t: l33t speak the word
--capital, -c: capitalise the word
--upper, -u: uppercase the word
--lower, -l: lowercase the word
--swap, -s: swap the case of the word
--ed, -e: add ed to the end of the word
--ing, -i: add ing to the end of the word
--punctuation: add common punctuation to the end of the word
--pna: add 01 - 09 to the end of the word
--pnb: add 01 - 09 to the beginning of the word
--na: add 1 - 123 to the end of the word
--nb: add 1 - 123 to the beginning of the word
--years: add all years from 1990 to current year to start and end
--acronym: create an acronym based on all the words entered in order and add to word list
--common: add the following words to start and end: admin, sys, pw, pwd
--force: don't give the warning about list length

Sposób użycia


Tworzymy plik z hasłami np:
  1. echo security >> passwd.txt && echo hacking >> passwd.txt && echo linux >> passwd.txt

Można teraz przejść do generowania np. permutacji tych wyrazów
  1. ./rsmangler.rb -f passwd.txt -p

security
hacking
linux
securityhacking
securitylinux
hackingsecurity
hackinglinux
linuxsecurity
linuxhacking
securityhackinglinux
securitylinuxhacking
hackingsecuritylinux
hackinglinuxsecurity
linuxsecurityhacking
linuxhackingsecurity

Jak widać zostały wygenerowane wszystkie kombinacje pojedyncze i podwójne również :) Radzę unikać więcej niż 6 słów, bo wyjdzie tego naprawdę dużo.

Urozmaićmy troszkę poprzez dodanie kilku parametrów
  1. ./rsmangler.rb -f passwd.txt -p -t -c

otrzymamy m.in:
11nuxh4ck1ng
Hackinglinux
11nuxs3cur1tyh4ck1ng

Ciekawą opcją jest wmieszanie do generowanych haseł roku od 1990 do aktualnego
  1. ./rsmangler.rb -f passwd.txt --years

Wynikiem będzie m.in
2003hacking
hacking2003


Wszystkie parametry można dowolnie ze sobą mieszać co daje naprawdę dobre rezultaty.

Ale co w przypadku, gdy chcemy zapisać te hasła do pliku?

Wystarczy przekierować wyjście do pliku robiąc to w ten sposób:
  1. ./rsmangler.rb -f passwd.txt -p -t -c > haselka.txt


Jeżeli chcemy dołączyć do poprzednio wygenerowanych haseł następne hasła
  1. ./rsmangler.rb -f passwd.txt -p -t -c >> haselka.txt


Parametry -p -t -c są opcjonalne chodzi o końcówkę >> haselka.txt

Common User Passwords Profiler (CUPP)


Jest programem napisanym w Pythonie, w którym hasła są generowane na podstawie wprowadzonych informacji o ofierze. Podajemy jej m.in imię, nazwisko, rok urodzenia, nazwę zwierzaka a nawet kilka słów, które mogą być powiązane z hasłem.

Konfiguracja


Konfigurować można edytując plik cupp.cfg ale nie jest to konieczne.

Sposób użycia


  1. ./cuppy.py -h # Wyświetli wszystkie parametry
  2. ./cuppy.py -i # Zada kilka pytań i na tej podstawie wygeneruje sporą listę prawdopodobnych haseł
  3. ./cuppy.py -l # Pobierze dużą listę słów z repozytorium (będzie można wybrać kategorię)
  4. ./cuppy.py -a # Pobiera standardowe hasła i loginy z Alecto DB


Download


crunch2.9.zip
cupp-3.1.zip
rsmangler_1.1_modified_by_ShutDown.zip Wersja modyfikowana przeze mnie
rsmangler_1.1.tar.bz2 Wersja oryginalna


Miłego łamania haseł ;)

Użycie pamięci: 1108472 | Szczytowe użycie pamięci: 1609320 | Czas generowania: 0.066534042358398