Jak odzyskać hasło z
zaszyfrowanej postaci –
hash?
Przedstawiam Wam sposoby używa programów, dzięki którym będziemy
mogli łatwo i przyjemnie i czasochłonne (sometimes not) odzyskać
zakodowane hasło.
Tak haseł się nie łamie, a odzyskuje się, tytuł ma za zadanie przyciągnąć.
Będziemy się skupiali na ogólnej czynności jaką jest odzyskiwanie
zakodowanego hasła, głównie patrząc na funkcję skrótu MD5.
Program się instaluje, potem można przenieść go na pendriva zrobić
wersję portable z GUI umożliwiający łamanie wielu rodzai hashy.
1.
Hash, importowany przez program z pliku, u mnie txt, lista hashy w oknie
obok wzięta z forum, może być ich dużo jak widać.
2. Plik z saltami, zapisane tak samo jak hashe, w pliku, oddzielone
odpowiednikiem znaku n z systemów UNIX
3. Długość sprawdzanych haseł określamy w liczbach, które sami sobie
wpisujemy.
4. Charset, z którego program buduje hasła także wpisujemy sami
5. Outfile, plik do którego program zapisuje wynik, znalezione hasła,
niekonieczne bo w czasie działania programu hashe i znalezione hasła są
wyświetlane w oknie działania programu.
1.
Sposoby szukania hasła, o jejku, możesz sobie załadować słownik albo
walić brute-forcem, albo tworzyć słownik, albo cośtam jeszcze, sami sobie
sprawdzajcie co do czego jest.
1.
Lista hashy jest spora. To nie cała lista bo nie lubię nowego painta w
Win7 więc screeny zrobiłem nieco więcej niż połowy tego co program
oferuje.
Dobra, koniec teorii. Przechodzimy do praktyki, wygląda to tak:
1.
Ustawiasz sobie listę hashy w pliku, dodajesz do niego łącze w programie
2. Ustawiasz rodzaj ataku, długość hasła
3. Klikasz w ten większy prostokąt wyglądający jak przycisk
4. wait…
5. …Profit!
Tak to wyglądało u mnie, do pokazania użyłem pliku ukrytego pod linkiem
z cytatu. Cytat
1.
Zaimportowany plik z hashami
2. Użyty charset (tak, między z 0 jest spacja).
3. Znalezione w czasie trzech minut hashe.
4. Ilość znalezionych hashy.
2.1 +
link to BarsW Luncher (BawsWF 32bit +64bit + GUI),
to wersja z GUI, dzięki czemu każdy n00b^^ sobie poradzi z
zapuszczeniem łamacza. W lanczerze ustawia się czy mamy system x86
czy x64, czy użyć samego CPU czy GPU+CPU. Program do działania w
trybie CPU+GPU wymaga karty graficznej nVidia wraz z zainstalowanym
sterownikiem CUDA. Wadą programu jest to, że łamie tylko jeden hash.
Hasło do archiwum to domena tego forum.
1.
Wklejasz hash, albo przepisujesz jak wolisz
2. Ustawiasz charset z którego program łamie hash
3. Minimalna długość hasła
4. Czym atakować
5. Jeśli masz system x64 to zaznacz to, będzie trochę szybciej.
W pracy, zmienia hasła z prędkością 127.7 milionów hashy na sekundę
(najnowsze karty graficzne GF mają osiągi nawet miliarda!).
Przykład złamanego hasha przez BarsWF
:
Program bardzo FLOPSo-żerny, po włączeniu cracekra ciężo cokolwiek
zrobić, włączyć pauzę można zrobić klawiszem Esc, potem wrócić do
łamania.
3.
Szukajki
Wyszukiwanie w md5crackerach, pierwsze wyniki z Google:
http://md5crack.com/
http://md5.rednoize.com/
http://www.hashchecker.com/?_sls=search_hash
http://bokehman.com/cracker/
http://www.md5decrypter.co.uk/
http://md5hood.com/
4.
Tęczowe tablice
Możesz sobie je pobrać albo wygenerować. Jest tego tak gęsto w necie, że
nie chce mi się opisywać, zresztą widać wszystko na obrazkach. Ja używam
do generowania
Tęczowe tablice można samemu wygenerować w rok, albo pobrać w kilka
tygodni, nie wiele jest w sieci stron oferujących pobranie tęczowych tablic,
jak są linki to przeważnie nikt tego nie seeduje, jednak są w pewnych
źródłach do pobrania:
http://freerainbowtables.mirror.garr.it/mirrors/freerainbowtables/md5/
http://www.insidepro.com/tables.php
Wybieramy sobie rodzaj tablic i zasysamy. Gdy mamy już tęczowe tablice,
można przystąpić do łamania has… znaczy odzyskiwania hasła.
pobieramy odpowiadającą nam wersję RainbowCracka
Gdy mamy już zbudowany lub pobrane tęczowe tablice przystępujemy do
użycia ich w celu odkodowania zagubionego hasła.
Użycie RainbowCrack’a:
W tym przykładzie nie zależało mi na złamaniu tych hashy, tylko
pokazaniu programu.
Do programu hashe można ładować pojedynczo ręcznie albo masowo
dodać plik z listą hashy, tęczowe tablice tak samo ładujemy, w czasie
wybierania plików można użyć skrótów klawiaturowych.
Po jakimś czasie otrzymujemy wynik pracy:
statistics
——————————————————-
plaintext found: 0 of 3
total time: 57.91 s
time of chain traverse: 57.42 s
time of alarm check: 0.47 s
time of wait: 0.00 s
time of other operation: 0.01 s
time of disk read: 12.44 s
hash & reduce calculation of chain traverse: 149970000
hash & reduce calculation of alarm check: 958346
number of alarm: 252
speed of chain traverse: 2.61 million/s
speed of alarm check: 2.04 million/s
Potwierdzam też screenem:
Prędkość może nie oszałamia, ale jest to jeden ze skuteczniejszych
sposobów odzyskiwania haseł.
Program konsolowy nieco podobny do BarsWF, używa jednak tylko GPU
(Bars używa GPU+CPU), i ma większe możliwości (znacznie większe). Może
szukać hasła dla MD4, MD5 oraz SHA1, wspiera używanie salt’ów Potrafi
używać GPU nVidia i ATI. Sposób używa jest podobny do tego jak obsługuje
się programu konsolowe w systemach Linux, instrukcja jest zawarta w
pliku readme.htm, będącego w archiwum.
Wyróżnia się tym, że wspiera działanie kilku kart graficznych różnych
modeli, a nawet producentów, sam uznaję, że jest to najszybszy brute-
forcer.
1.
Ekran użycia programu:
2.
Opcje używania programu:
–
sf:<znaki_z_tablicy_ASCII> jest to program działający na zasadznie
inkrementacji znaków hasła, więc podajemy hasło, którego użyjemy jako
pierwsze do ataku.
–
salt:<hex> sól dorzucana do łamanego hasła w postaci znaków hex
–
asalt:<string_salt> jak wyżej z tą różnicą, że sól podajemy w postaci
znaków z tablicy ASCII
–
usalt:<string_Unicode> jak wyżej ale z tablicy znaków Unicode
–
min:<liczba> minimalna długość hasła, domyślnie 4.
–
max:<liczba> maksymalna długość hasła, max. 3.
–
h:<hash> hash, który chcemy odnaleźć
–
t:<rodzaj hashu> MD4, MD5, MD5X2, MD52S, MySQL5.
Obsługiwane typy:
md4
sha1
md5
md5x2 md5(md5($hasło).ascii)
md5x2s md5(md5($hasło).$sól)
mysql5 sha1(sha1($hasło))
ipb md5(md5($salt).$md5($pass))
dcc md4(md4($hasło).lowercase($user))
Budowa charset:
–
c: sdepa caps, smalls (default), digits, special, space, all)
Pierwsze litery oznaczają znaki, z których będą budowane hasła, sądzę, że
nie trzeba tłumaczyć.
–
u:<znaki> użytkownik sam definiuje zakres znaków
–
uf:<ścieżka_do_pliku> z zawartym charsetem.
3.
Przykłady polceń:
Sam zapisuje je w pliku w formacjie bat, używam skryptu windowsowego
by za każdym razem nie szukać programu przed cmd.
ighashgpu.exe -t:md5 -c:sd -min:9 -max:9 hash.txt
pause
Powyższe można wrzucić do pliku *.bat. Polecenie oznacza:
Znajdź hasło, zakodowane w MD5, od 9 do 9 znaków długie z pliku
hash.txt.
Program wieloplatformowy (Linux/OS X/ WIndows), konsolowy bardzo
rozbudowany, od prostego łamania hashy, potrafi tworzyć słowniki zgodnie
z opisanymi regułami. Rozróżnia wiele hashy(m in. MD5, DES, BSDI, AFS,
LM), potrafi je rozpoznać i przejść do ataku. Zajmiemy się podstawowymi
możliwościami programu. Zakładam, że każdy potrafi zainstalować ten
super-skomplikowany program, oraz że looknął w
chwilę.
Uruchamiamy program z konsoli john test. Polecenie to przeprowadzi
benchmark komputera:
1.
Test
Wykonywany w celu sprawdzenia poprawności działania JTR.
$
john -test
Benchmarking: Traditional DES [64/64 BS]… DONE
Many salts: 989215 c/s real, 1015K c/s virtual
Only one salt: 904913 c/s real, 926910 c/s virtual
Benchmarking: BSDI DES (x725) [64/64 BS]… DONE
Many salts: 36148 c/s real, 36705 c/s virtual
Only one salt: 35901 c/s real, 36349 c/s virtual
Benchmarking: FreeBSD MD5 [32/64 X2]… DONE
Raw: 8737 c/s real, 8820 c/s virtual
Benchmarking: OpenBSD Blowfish (x32) [32/64 X2]… DONE
Raw: 571 c/s real, 579 c/s virtual
Benchmarking: Kerberos AFS DES [48/64 4K]… DONE
Short: 301278 c/s real, 303458 c/s virtual
Long: 849023 c/s real, 855954 c/s virtual
Benchmarking: LM DES [64/64 BS]… DONE
Raw: 6295K c/s real, 6354K c/s virtual
Benchmarking: NT MD4 [Generic 1x]… DONE
Raw: 8017K c/s real, 8104K c/s virtual
Benchmarking: Eggdrop [blowfish]… DONE
Raw: 18832 c/s real, 18968 c/s virtual
Benchmarking: M$ Cache Hash [Generic 1x]… DONE
Many salts: 12782K c/s real, 12905K c/s virtual
Only one salt: 4821K c/s real, 4848K c/s virtual
Benchmarking: LM C/R DES [netlm]… DONE
Many salts: 383391 c/s real, 386215 c/s virtual
Only one salt: 371177 c/s real, 373823 c/s virtual
Benchmarking: NTLMv1 C/R MD4 DES [netntlm]… DONE
Many salts: 548274 c/s real, 551156 c/s virtual
Only one salt: 517176 c/s real, 520384 c/s virtual
2.
Pierwszy atak.
Żeby móc zapoczątkować atak na hash, musimy je wrzucić do pliku
tekstowego, u mnie nazywa się on hash.txt
Zawartość mojego pliku jest taka:
User1:d6a946959f517e8adaa212fe207f5cc8
User2:507199392f0d0b2550ab260c053af68a
Przed przystąpieniem do działania, należy podać rodzaj hash’a inaczej JTR
potraktuje User1:d6a946959f517e8adaa212fe207f5cc8 jako dwa kody,
które ma złamać, co jest zbędne.
Do typu hasha dodajemy przedrostek
raw (surowy), informuje to program,
że plik jest tylko dumpem bazy danych w formacie:
User:hash
dlatego podajemy rodzaj hashy jako raw-MD5
całość wygląda tak:
$
john –format:raw-MD5 hash.txt
agilob@agilob:~$ john –format=raw-MD5 hash.txt
Loaded 2 password hashes with no different salts (Raw MD5 [raw-md5])
3.
Charset
Z charsetem jest tak, że można go zbudować z podanych w pliku
tekstowym znaków, albo używać metody brute-force.
Zajmiemy się tą drugą opcją, gdyż jest znacznie skuteczniejsza.
Mamy do dyspozycji możliwości:
alpha – alfabet
digits – cyfry
lanman – litery, cyfry i kilka najczęściej spotykanych znaków specjalnych,
all – wszystkie znaki z tablicy ASCII
ścieżka_do_pliku – w pliku zawarty jest charset
Wszystkie każdą z powyższych możliwości można użyć do budowania
słownika, albo samego ataku.
do ataku z użyciem opcji wyboru charsetu używamy:
–
incremental # albo samo -i jedak uważam, że –incremental jest jakby
“czytelniejsze”
całość zawrzemy w jednym poleceniu:
$
john –format=raw-MD5 –incremental:alpha hash.txt
4.
Przywracanie sesji.
Janek ma możliwość zapisania przerwanej sesji, bez konieczności
powtarzania wcześniej wykonywanych prób (jak w BarsWF).
Jeśli czujemy, że atak potrwa długo dodajemy do polecenia:
–
session:<nazwa_pliku_z_logiem_sesji>
po przerwaniu pracy decryptera, w katalogu, w którym jesteśmy pojawi się
plik o nazwie określonej w poleceniu sesji.
Całość:
$
john –format=raw-MD5 –incremental:alpha –session:sejsa_janka
hash.txt
Przywracanie sesji jest jeszcze łatwiejsze.
Zamiast <nazwa_pliku_z_logiem_sesji> podajemy wyrazrestore.
$
john –restore:sesja_janka
Powyższe polecenie otworzy plik z logami JTR i będzie kontynuował pracę.