Lámání hesel
V tomto příspěvku se dozvíte, jak délka hesla a množina znaků ovlivňuje dobu potřebnou k prolomení hesla a jak tuto dobu výrazně zkrátit.
Útočník má v zásadě několik možností, jak přihlašovací údaje uživatele získat, a zpravidla volí tu nejjednodušší, nicméně my se zde budeme zabývat především útokem hrubou silou, protože u všech ostatních útoků je víceméně jedno, jak dlouhé a komplexní ono sdílené tajemství vlastně je. Je s podivem, že většina studií, které se zabývají odhadem doby potřebné na prolomení hesla, mylně předpokládá, že útočník ví, jaká dlouhé a komplexní dané sdílené tajemství vlastně je.
Skutečnost je taková, že útočník zpravidla netuší zhola nic o tom, jak dlouhé a komplexní je heslo, které chce prolomit. A to ani v případě, že si v daném systému též založí účet a zná tedy jak své heslo, tak i jeho hash včetně použitého algoritmu a soli. Útočník může vycházet jen z toho, jaké požadavky na něj systém kladl, když se registroval, tedy zda byla nějak omezena minimální a maximální délka hesla a množina povolených znaků.
Útočník se může pokusit heslo uhádnout (password guessing), vyzkoušet slovníkový útok (dictionary attack), při kterém se zkouší všechna možná slova obsažná ve slovníku a mnohé slovníky obsahují i hesla vytvořená za použití leet žargonu, s gramatickými chybami apod. A pokud tyto metody selžou, nezbývá mu než provést útok hrubou silou (brute force attack případně SMART brute force attack;-). Lámání hesel může probíhat online proti autentizační autoritě nebo offline, pokud je k dispozici hash hesla.
Lámání hesel online
Online útok probíhá v reálném čase proti autentizační autoritě a může být snadno odhalen, pokud se provádí monitoring, neboť může dojít k uzamčení hesla po x neúspěšných pokusech o přihlášení. V případě, že k uzamykání účtu po x pokusech nedochází a bezpečnostní monitoring neprobíhá, je vhodné alespoň zpomalovat rychlost vyhodnocování hesla samotným systémem. Uživateli jistě nebude vadit, pokud se bude heslo vyhodnocovat např. jednu sekundu, ale útočníka to značně zpomalí. Navíc doba ověření hesla se může s počtem pokusů prodlužovat. Stejně tak můžeme začít po určitém počtu neúspěšných pokusů zobrazovat Captchu.
Lámání hesel offline
V okamžiku, kdy máme k dispozici hash hesla, můžeme provést tzv. off-line útok. Takový útok není možné odhalit, protože probíhá na jiném počítači nebo počítačích a nemůže tak ani dojít k uzamčení účtu, jednoduše proto, že nevyužíváme služeb autentizační autority daného systému, resp. s daným systémem vůbec nekomunikujeme. Měli bychom proto učinit taková opatření, aby se útočník k hashům hesel vůbec nedostal, což může být např. v prostředí Windows problém. Na internetu lze nalézt mnoho programů na lámání hesel, z komerčních jsou asi nejznámější produkty společnosti Elcomsoft nebo L0phtCrack. Z produktů, které jsou k dispozici zdarma, jmenujme např. John The Ripper, Cain&Abel, LCP nebo ophcrack.
Poznámka: Pokud jde o lámání hesel on-line, bylo by možná správnější hovořit o hádání (password guessing) a v případě lámání hesel off-line pak o lámání (password cracking).
Délka hesla (Length)
Je třeba si uvědomit, že pokud jde o prolomení hesla hrubou silou, může útočníkovi značně pomoci, když odpozoruje nebo zaslechne, kolik bylo při zadávání hesla stisknuto kláves. Stanovení délky hesla a množiny znaků totiž útočníkovi umožní výrazně zkrátit celkovou dobu potřebnou k jeho prolomení. Útočník též může mít v systému účet, potom ví, jaké systém klade na uživatele při vytvoření hesla požadavky, např. jaká je minimální délka hesla apod.
Množina znaků (Keyspace)
Pokud máme určit znaky, které mohou být v hesle použity, vyjdeme z ASCII tabulky a znaky si rozdělíme do těchto skupin:
- 10 číslic: 0123456789
- 26 malých písmen: abcdefghijklmnopqrstuvwxyz
- 26 velkých písmen: ABCDEFGHIJKLMNOPQRSTUVWXYZ
- 33 speciálních symbolů: !”#$%&’()*+,-./:;<=>?@[\]^_`{|}~
- 33 netisknutelných kódů: pozice 0 až 31 a 127
- 128 znaků z rozšířené sady: pozice 128 až 255
Počet všech možných variací (Variation)
Počet všech možných variací, které musí útočník vyzkoušet, je dán exponenciální funkcí V=Keyspace^Length, kde V je počet všech možných variací, Length je délka hesla a Keyspace počet různých znaků, které v hesle mohou být použity. To znamená, že v případě kdy je délka hesla 7 znaků a heslo obsahuje jen malá písmena, je počet všech možných variací, které musí útočník vyzkoušet jen 26^7. Pokud si teď říkáte, že se jedná jen o teoretický příklad a v praxi nikdo takhle slabé heslo nepoužívá, mohu vás ujistit, že ještě pořád existují systémy, které nejsou, tzv. case sensitive a mají omezenou délku hesla.
Rychlost lámání hesel (Speed)
Pokud do proměnné Speed dosadíme kolik hesel za sekundu (password per second, dále jen pps) je systém schopen vyzkoušet, můžeme vypočíst přibližnou dobu, za kterou je možno heslo prolomit. V případě offline útoku zaleží jen na tom, jak velkou výpočetní silou útočník disponuje. K lámání hesel lze využít grafických karet obsahujících výkonné a rychlé GPU (Graphic Processing Unit) s velkým počtem jader v ceně několika málo tisíc a dosáhnout tak rychlosti několika set miliónů pps. Pokud by vás zajímalo, jak dlouho by trvalo prolomení vašeho hesla superpočítači, navštivte web top500 a podívejte se kolik instrukcí za sekundu je takový superpočítač schopen provést. A vězte, že tato rychlost se bude zvyšovat bez ohledu na to, zda bude nebo nebude platit Moorův zákon. V případě online útoku je počet hesel, který můžete vyzkoušet za jednotku času, závislý pouze na architektuře daného systému.
Pravidlo fifty-fifty (Probability)
K prolomení hesla dojde obvykle za mnohem kratší dobu, protože ne vždy je nutné vyzkoušet úplně všechny variace, které připadají v úvahu. Vzhledem k tomu, že máme 50% pravděpodobnost, že se heslo nachází buď v první, nebo ve druhé polovině, neuděláme příliš velkou chybu, když budeme dělit 2.
Distribuované lámání hesla (Distributed computing)
Útočník může k prolomení hesla využít výpočetní sílu i ostatních počítačů v síti, neboť tato úloha je velice dobře paralelizovatelná a tím dobu potřebnou k prolomení hesla výrazně zkrátit. Dělíme proto N, což je v tomto případě počet počítačů, které budou k lámání použity. Pro zjednodušení předpokládáme, že disponují stejným výpočetním výkonem a zanedbáváme též potřebnou režii na distribuovaný výpočet. Když bude heslo začínat znakem „z“ a algoritmus bude nastaven tak, aby od tohoto písmene začal zkoušet všechny možné variace, de facto lámeme heslo o jeden znak kratší. Už vás napadá jak lámání hesla distribuovat mezi více počítačů? Nehledě na to existují i komerční, cenově velice přijatelná řešení, která je možné za tímto účelem použít.
SMART brute force attack;-)
Vyjde-li útočník ze znalosti daného jazyka, může algoritmus, který generuje všechny možné variace optimalizovat tak, že využije skutečnosti, že frekvence výskytu určitých písmen po některých znacích je vyšší než po jiných a tudíž určité variace znaků bude zkoušet dříve a jiné bude zkoušet teprve tehdy, až když bude neúspěšný. Tím, že snížíme počet variací, které musíme vyzkoušet, podstatně zkrátíme čas potřebný k prolomení hesla. Vyjdeme-li z přirozené skladby věty, není např. moc pravděpodobné, že by dvě po sobě jdoucí písmena v hesle byly samohlásky. Stejně tak se dá předpokládat, že běžný uživatel jen málokdy použije speciální znak hned na začátku hesla, ale daleko spíš se bude stejně jako číslice nacházet někde na konci a na začátku se bude spíš nacházet velké písmeno. Je to dáno tím, že uživatel ve většině případů je k takovému chování nucen firemní bezpečnostní politikou a tak hledá jen způsob jak tento požadavek splnit, aniž by o něm hlouběji přemýšlel. Stejně tak používání znaků národních abeced nebo netisknutelných znaků v hesle nebývá až tak běžné. U českých uživatelů lze také očekávat, že jejich heslo nebude obsahovat písmena y a z.
Doba platnosti hesla (Time)
Pokud bude vypočtený čas nutný k prolomení hesla kratší, než je doba platnosti hesla, máme problém, neboť heslo bude prolomeno dříve, než skončí jeho platnost. To je ostatně důvod, proč by měla být nastavena doba platnosti hesla a proč by si měl uživatel heslo pravidelně měnit. Jinými slovy, uživatel by si měl heslo změnit dřív, než je možné ho teoreticky prolomit. Pokud by útočník délku hesla neznal, byla by délka trvání útoku dána součtem času potřebného k vyzkoušení všech možných variací pro 1, 2 až x-znakové heslo. V takovém případě se doba potřebná k prolomení hesla prodlužuje. Měli bychom tedy heslo zadávat tak, abychom útočníkovi jeho situaci nezjednodušovali.
Na tomto místě je nutné znovu upozornit na skutečnost, že pokud se útočníkovi podaří zmocnit se databáze hashů, tak neví, jak dlouhá a komplexní jednotlivá hesla jsou. To znamená, že útočník musí zkoušet všechny variace. Pokud systém vyžaduje zadání komplexního hesla, které musí obsahovat alespoň jedno velké a malé písmeno, číslo a speciální znak a musí být dlouhé minimálně 8 znaků, tak musí začít s lámáním 8znakového hesla a pokud žádná variace danému hashi neodpovídá, musí zkoušet všechny variace pro hesla 9znaková atd.
Doba potřebná k prolomení hesla je tedy dána součtem doby potřebné k vyzkoušení všech variací pro heslo o minimální délce vyžadované systém až po n-znakové heslo zadané uživatelem, jehož délka může být větší nebo rovna minimální požadované délce. Kromě toho nelze uvažovat o krácení doby potřebné na prolomení hesla na polovinu u hesel o délce předcházející skutečné délce lámaného hesla.
Jestliže je uživatel systémem donucen si vytvořit komplexní heslo, nemůžeme již počítat počet všech možností jako n^k, protože některé variace jsou prostě nepřípustné. Dejme tomu, že systém po uživateli požaduje zadání komplexního hesla o minimální délce 9 znaků, které obsahuje velká a malá písmena a čísla nebo speciální znaky. V tomto případě je n=95 a k=9. Počet variací ale není 95^9, nýbrž 95^9 – 2*59^9 – 52^9 – 43^9 – 2*36^9 – 33^9 – 2*26^9 – 10^9. Proč? Protože komplexní heslo musí obsahovat alespoň jedno velké a malé písmeno a číslo nebo speciální znak, a jestliže to útočník ví, tak je zbytečné, aby zkoušel hesla, která systém uživateli nikdy neumožní zadat.
Poznámka: Ve vzorci pro výpočet doby potřebné k prolomení hesla nicméně nebudeme tuto skutečnost zohledňovat, protože při délce hesla 9 znaků je zbytečně zkoušen prostor představující pouhá 3% z celkového počtu všech možných hesel a tento poměr s rostoucí délkou hesla zmenšuje.
Závěr
Závislost mezi délkou hesla, množinou použitých znaků, rychlostí, počtem počítačů použitých k lámání hesla nás vede k závěru, že pro výpočet doby potřebné k jeho prolomení můžeme použít následující vzorec:
Time=Keyspace^Length/Speed/N/2
A v případě, že nevíme, jaká je délka hesla, což je pravděpodobnější, pak tento:
Time = Keyspace^Lengthmin/Speed/N + Keyspace^Lengthmin+1/Speed/N + … + Keyspace^Lengthmax-1/Speed/N + Keyspace^Lengthmax/Speed/N/2
Ve spreadsheetu, který je k dispozici ve formě excelovského sešitu, si můžete spočítat, jak dlouho vydrží vaše heslo odolávat útoku hrubou silou.
ČERMÁK, Miroslav. Lámání hesel. Online. Clever and Smart. 2010. ISSN 2694-9830. Dostupné z: https://www.cleverandsmart.cz/lamani-hesel/. [cit. 2025-03-26].
Štítky: informační bezpečnost, lámání hesel
K článku “Lámání hesel” se zde nachází 1 komentář.
Diskuse na tomto webu je moderována. Pod článkem budou zobrazovány jen takové komentáře, které nebudou sloužit k propagaci konkrétní firmy, produktu nebo služby. V případě, že chcete, aby z těchto stránek vedl odkaz na váš web, kontaktujte nás, známe efektivnější způsoby propagace.
uff do banky mam 14 mistnym, takze je to OK
ale do posty nebio na FC je to uz horsi, protoze samotne FC umoznuje minilni 8 znaku coz je nic moc