Máte MD5 hash a nevíte, jak z něj dostat heslo? Tento článek vám poví, jak na to.
V případě úspěšného proniknutí do webové aplikace / databáze, se můžeme často setkat s hesly v tomto tvaru: 02fec283a4a59afa3678c49d09cc7805. Nejedná se o vlastní heslo, ale o tzv. otisk hesla vytvořený pomocí hashovací funkce MD5. Hashovací funkce jsou jednosměrné. To znamená, že z řetězce vytvoříme hash jednoduše, ale pokud známe pouze hash, mělo by být odhalení původního řetezce (hesla) nemožné. U MD5 je to pravda pouze z části.
Od srpna roku 2004 je znám postup k nalezení kolize dvou řetězců. V praxi to vypadá tak, že vám program vyplivne dva řetězce, které mají stejný hash (to by se hashovacím funkcím stávat nemělo). To je ale nám, kteří chceme z hashe dostat původní řetězec, na nic. Tyto vygenerované řetězce jsou velice dlouhé a často obsahují i netisknutelné znaky. Tato metoda trvala dříve asi 8 hodin, ale díky objevu předního českého kryptoanalytika Vlastimila Klímy se tato doba snížila na cca jednu minutu. Zde je homepage jeho projektu. V případě, že tedy někde uslyšíte, že "MD5 byla prolomena" nemluví se o ničem jiném, než o kolizi dvou řetězců. Zjistit ale z hashe původní řetězec pomocí určitého algoritmu, je však nadále nemožné.
My ale máme hash a potřebujeme zjistit původní řetězec. Jaké tedy máme možnosti? V podstatě jsou asi čtyři. A pokud tyto selžou, není prakticky šance, že původní řetězec naleznete. Podívejme se tedy podrobněji na jednotlivé metody.
Tento způsob luštění je založen na testování všech možných řetězců o zvolené délce nad zvolenou znakovou sadou. Tou může být velká a malá abeceda, číslice a speciální znaky. Dejme tomu, že si zvolíme, že chceme generovat řetězce o délce 1 - 5 a v nich používat pouze malá písmena anglické abecedy. Těch je 26. Celkový počet vygenerovaných řetězců tedy bude 26ˆ1 + 26ˆ2 + 26ˆ3 + 26^4 + 26ˆ5 + 26ˆ6. Vyjde nám obrovské číslo. Z každého vygenerovaného řetězce je vytvořen hash a ten je porovnán s naším hashem. Pokud původní řetězec (heslo), který hledáme, byl dlouhý 1 až 5 znaků a obsahoval pouze malá písmena anglické abecedy, program ho během několika sekund odhalí. Tímto způsobem pracuje brute-force attack. Vypadá to ideálně, ale praxe není tak růžová. Hesla jsou většinou delší než pouhých pět znaků a obsahují i velká písmena, číslice a znaky. Vygenerování a porovnání tak obrovského množství řetězců trvá celkem dlouhou dobu. Zkuste si vypočítat počet kombinací, který je potřeba na prolomení devítimístného hesla, složeného z čísel a velkých a malých písmen. Dostanete tak obrovské číslo, že by vygenerování takového počet kombinací řetězců zabralo klidně i několik desítek let. Tato metoda je v praxi tedy využitelná na hesla tak do 6 až 7 znaků - záleží na tom, jak dlouho jste ochotni čekat. Programem, který zvládne louskat MD5 (brute-force i dictionary(viz dále)) je například Cain & Abel.
Pro představu jsem sestavil tabulku, ze které je zřejmá časová náročnost louskání MD5 hashů různě dlouhých hesel programem Cain & Abel (předpokládal jsem, že hesla obsahují pouze malá písmena anglické abecedy a číslice):
| Heslo | Znaků | Hash | Čas |
|---|---|---|---|
| a2b | 3 | 47cf26c17f2ef17fb3d3a5967b83dbbd | zlomek vteřiny |
| xs3o | 4 | 689101f13c29393b4cfa696662433e3f | zlomek vteřiny |
| d9u2k | 5 | beb6bb3b5cf6abdc9c915c71fc3d5290 | 6 s |
| ak74ka | 6 | 9b9b12c2fe191e341d8a88159c6f8d33 | 26 s |
| heslo12 | 7 | 1d7efc5be9a522837bd7880072dd0042 | 3 h |
| heslo123 | 8 | 6a284155906c26cbca20c53376bc63ac | > 10 h |
Neboli také slovníkový útok je metoda podobná té předchozí až na to, že řetězce nejsou generovány, ale jsou brány z externího souboru. Ten se nazývá slovník a většinou to je obyčejný textový soubor, který na každém řádku obsahuje jedno slovo. Při tomto typu louskání záleží hlavně na slovníku jaký použijete a také hodně na štěstí.
Rainbow tables jsou tabulky s předgenerovanými hashi. To znamená, že hashe se nemusí generovat z náhodně zkoušených řetězců, ale rovnou se vyhledávají v tabulce. Velikost tabulek se pohybuje od 700MB (3-14 znaků: malá písmena) až třeba po 40GB (1-14 znaků latin1) a každý si může předgerovat svoji tabulku přesně na míru. Může si vybrat rozsah, typ hashe (md5) a znakovou sadu. Prolomení hashe se pak pohybuje kolem 10 minut. Tak to byla teorie. Já Rainbow tables v praxi nezkoušel, hlavně kvůli nedostaku místa na disku. Tabulka, která by za něco stála by totiž měla asi 64 GB, což by bylo ještě snesitelné, jenže na Pentiu 3 GHz by se generovala asi tři týdny, což si v reálu nedovedu představit. Pokud někdo s Rainbow tables máte zkušenosti, uvítám je v Názorech. Ještě přidám odkaz na Project RainbowCrack, kde se dozvíte více.
Toto je vlastně spojení rainbow tables a databáze hashů, ke kterým ze známý původní řetězec. Vše navíc funguje přes webový prohlížeč jako webová aplikace, do které pouze vložíte hash a aplikace vám vyplivne původní řetězec. No nezní to krásně? Samozřejmě, že to nefunguje vždy. Tipuji, že například takový hash pro řetězec A.x4a&/s4-s5 v online databázi nenajdete, ale zase na druhou strany si přiznejme, jak dlouho by trvalo jeho odhalení pomocí brute-force. Webů, zaměřujících se na tuto "službu" je více. Zde je několik příkladů:
http://passcracking.ru
http://www.milw0rm.com/cracker/insert.php
http://www.gdataonline.com/seekhash.php
http://md5.rednoize.com/
Nyní si pojďme shrnout, jaké máme tedy možnosti v případě, že získáme hash a potřebujeme z něj zjistit původní řetězec. Nejprve se určitě vyplatí navštívit několik webů s online MD5 crackery (viz linky nahoře). Nestojí to téměř žádný čas a v případě, že se daný hash už nachází v databázi, dostanete okamžitě původní řetězec. V případě, že zde s hashem neuspějete, nezbývá vám nic jiného než brute-force / dictionary attack.
Z tohoto článku vyplývá také jisté ponaučení. Že nevíte jaké? Z tabulky nahoře jasně vyplývá závislost délky hesla a použitých znaků na době louskání. Jako minimální délku hesla bych zvolil 8 znaků. Pokud tedy použijete heslo například 'heslo1' a útočník se dostane k jeho MD5 hashi, nebude pro něj velký problém heslo zjistit. Naproti tomu hash takovéhoto hesla 'h0Es0_k_M4ilU' bude pro útočníka neprolomitelný.

Předcházející článek: Netradiční metoda násobení
Následující článek: Kubuntu - Instalace a konfigurace
| sedaha | sedaha(zavinac)seznam.cz |
|
| kde bereš tu jistotu že hash je vždy MD5 a ne např. SHA ??? | ||
25.10.2007 8:06:28 |
158.196.64.* |
|
| sedaha | sedaha(zavinac)seznam.cz |
|
není trochu blbost předpokládat, že moje netmaska je typu C ? vlastně ve skutečnosti tomu tak není... ![]() |
||
25.10.2007 8:08:50 |
158.196.64.* |
|
| skic | ||
| a co kdyz se hesla ukladaji jako: md5(password."neco neco neco") ? | ||
7.12.2007 23:36:08 |
62.204.226.* |
|
| sg11.tk | ||
| sedaha: zkus si porovnat MD5 hash a SHA1 hash.
2D47AE7E4D6786BFDBCD541E3236DBB0 2D7844A8FE1BFA496F33B503463FFD6767A8951F a hadej ktery je ktery
skic: tomu "neco neco neco" se rika sul. Pak si musis upravit cracker pro BF, nebo vytvorit upraveny wordlist. killeer: myslis SYSKEY? video Husny: co sem tak cetl, tak pry na prihlaseni staci 16 bajtu z hashe hesla. Proto se mozna ten zbyten nejak doplnuje... Pak je moznost ze se pouziva challenge-response. btw cim si to odchytil? Tomasko: staci cist a premyslet, ten program je jednoduchy. Popřípadě manuál |
||
7.2.2009 22:31:38 |
83.208.167.* |
|
| josm | josm(zavinac)azet.sk |
|
| a nevis jak pomocu teho programu zistim heslo na PC? anglicky neumim | ||
22.3.2009 21:13:21 |
91.127.63.* |
|
| kenty | kentx(zavinac)seznam.cz |
|
| ahoj lidi ci se naucit hekovat a stahl sem si program cain a abel pls napiste mi na mail a pomozte mi s tim diky | ||
19.5.2009 17:07:47 |
212.158.129.* |
|
| nwm | d4ag(zavinac)seznam.cz |
|
| ahoj potřebuju zjistit heslo icq 445292571 ..strašně ho potřebují...jinak kdby něco tak se mi ozvete .. | ||
19.9.2009 14:15:11 |
94.112.109.* |
|