Používejte silná, a tedy bezpečnější hesla: kolikrát jste to už slyšeli? Při vytváření hesel jsme stále častěji nabádáni, abychom dbali o složitost a bezpečnost svých hesel, ale ruku na srdce – kolik z vás se o to skutečně snaží? A důsledek je nasnadě: neustále tak vesele dochází ke zcizení, prolomení či úniku hesel.
Co se dozvíte v článku
Proto tentokrát zkusíme na problematiku síly a bezpečnosti hesel jít poněkud z jiné strany a pokusíme se vás namotivovat k vytváření silných a bezpečných hesel trochu jinak: podíváme se totiž na hesla z pohledu útočníka! Ukážeme vám, jak jsou hesla vlastně vůbec prolamují, a dokonce i to, jak můžete heslo prolomit sami, abyste se sami přesvědčili, jak je důležité mít všechna vaše hesla bylo silná a bezpečná.
Jak se budete moci přesvědčit z naší ukázky, kde použijeme nástroj pro prolamování hesel, existuje jediná spolehlivá ochrana proti nástrojům pro prolamování hesla, a to použít jako heslo dostatečně dlouhý řetězec alespoň deseti náhodných znaků. Jakýkoliv kratší řetězec, navíc obsahující pouze základní znaky, se dá prolomit skutečně velmi snadno. Jak ale takové vhodné heslo vytvořit? Máte dvě možnosti: buď jej vymyslíte sami, nebo, což je možná daleko efektivnější, použijete správce hesel. Takový správce hesel totiž není v žádném případě k zahození!
Na následujících řádcích se dozvíte mimo jiné i to, jak je možné hesla před potenciálními útočníky skrýt a o způsobech, které tito útočníci používají, aby takové ochrany hesla překonali.
Poznámka: Při psaní tohoto článku jsme sami zkoušeli nástroje pro prolamování hesel, které jsme ale používali pouze pro naše hesla. Důrazně vás chceme upozornit, že používání takových nástrojů pro získání přístupu na web, k nějaké službě nebo souborům, které nejsou vaše, je přinejmenším neetické – a v nejhorším případě nezákonné. Vezměte si proto tuto poznámku k srdci a ať vás nic takového ani nenapadne!
Jak hashování chrání vaše heslo
Pokud má nějaký web odradit případné útočníky od jejich snah získat hesla, zachová se zodpovědně a nebude ukládat heslo v původní podobě, tj. v podobě prostého textu, ale použije tzv. hashování. Hashování, které se označuje také jako jednosměrné šifrování, používá nějaký hashovací algoritmus, například MD5, SHA2 nebo SHA3 (nicméně existuje celá řada dalších), kterým převede heslo na řetězec zdánlivě náhodných čísel a znaků, který se označuje výrazem hash.
Web samozřejmě nebude prozrazovat, jaký hashovací algoritmus používá, protože by tím jen útočníkům usnadnil práci. Může dokonce použít vytvořený hash a hashovat jej znovu, popřípadě přidat tzv. salt (sůl), což je soubor několika znaků, které odhalení již hashovaného hesla dále podstatně zkomplikuje.
Pokud si chcete hashování vytvořit sami, není v tom žádný problém. Jestliže chcete vyzkoušet například hashovací algoritmus MD5, postačí, když navštívíte nějaký web typu www.md5hashgenerator.com a do něj zadáte výraz, který chcete hashovat. (Z bezpečnostních důvodů vám doporučujeme, abyste sem nezadávali heslo, které skutečně budete chtít později použít). Algoritmus MD5 ovšem patří mezi starší algoritmy, a není z mnoha důvodů považován za bezpečný. Na druhou stranu je velmi vhodný k tomu, aby vám předvedl, jak takové hashování hesel a jejich prolamování funguje.
Například heslo maverick se hashuje do řetězce 55f9c405bd87ba23896f34011ffce8da.
Jak bylo uvedeno výše, označuje se hashování jako jednosměrné šifrování, což znamená, že šifrování jde provést jen v jednom směru. V principu tedy není již zahashované heslo znovu odhashovat zpět. Výhodou hashování je i to, že díky hashování se web nebo služba, která hesla používá, nedozví, jaké heslo vlastně používáte.
Web či služba tedy vezme vámi zadané heslo, zahashuje je, a výsledný hash porovná s hodnotou hashe uloženou v souboru. Pokud se oba řetězce shodují, zadali jste správné heslo a můžete web či službu používat. A právě tady začneme s naším prolamováním hesel.
Prolomit je přesto možné i zahashovaná hesla
Hashování je při ochraně vašeho hesla velmi důležitým a zásadním krokem, ale je třeba si současně uvědomit, že hashování jako takové vám jeho ochranu nezajistí. Každému, kdo bude chtít prolomit vaše heslo, stačí jediné: neustále opakovat následující kroky: vymyslet heslo, vytvořit jeho hash a tento hash porovnat s uniklým hashem vašeho hesla.
Pokud se bude hash hesla, které útočník vymyslel, shodovat s uniklým hashem vašeho hesla, pak právě (bohužel) uhádl vaše heslo. V opačném případě se může pokusit vymyslet jiné heslo a celý postup opakovat třeba donekonečna, tj. tak dlouho, dokud se netrefí.
Existují ovšem ochranné mechanismy, které útočníkům tento způsob prolamování hesel komplikují. Nelze se tak například neustále pokoušet přihlašovat na web Amazonu, předstíraje, že jste Bill Gates, a donekonečna hádat hesla, dokud nebudete mít štěstí. To samé platí i pro weby bank.
Chytře navržený web bude velmi pravděpodobně mít proti tomuto způsobu hádání hesla integrovánu nějakou kontrolu. Pokud tedy budete příliš často zadávat nesprávné heslo, bude web pravděpodobně váš účet nebo vaši IP adresu považovat za účet nebo IP adresu potenciálního útočníka a vaše pokusy o přihlášení buď omezí, nebo rovnou úplně zablokuje.
Jakmile ale vaše přihlašovací údaje včetně hesla uniknou na internet, je vše ztraceno. Jeden příklad za všechny: V roce 2019 unikl do internetu obrovský soubor celkem 2,19 miliard kombinací e-mailových adres/ uživatelských jmen a hesel, a to jako součást tzv. Collections breach. Jakmile byly zveřejněny hashe těchto hesel, již neexistoval způsob, jak zabránit těm, kteří k nim získali přístup, aby si je stáhli do svého počítače a pak se je pokusili zneužít, přičemž vzhledem k povaze dat současně obešli i veškeré již zmiňované ochranné mechanismy proti opakovaným pokusům při zadávání hesla případně nasazené na daném webu.
V tomto případě každému, kdo chce zjistit heslo, postačí, aby věděl, jaký algoritmus se při hashování používá, pak použije nějaký velmi výkonný počítač, který dokáže provést několik milionů odhadů hesla za sekundu, a tak heslo odhalí. Největšími nepřáteli hashe vašeho hesla tak jsou čas, výpočetní výkon a inteligentní odhady hesla.
Jak obtížné je prolomit heslo?
Prolomení hesla může být jak velmi jednoduché, tak velmi obtížné až nemožné. Při použití jednoznakového hesla máte 26 možností (popřípadě 52 možností, pokud zahrnete i velká písmena). Pokud budete předpokládat, že takové heslo může obsahovat i číslice 0 až 9, jste na celkem 62 možnostech a pokud přidáte speciální znaky, pak jste na 96 možnostech. (Tyto hodnoty se mohou pro klávesnice různých cizích jazyků lišit, navíc některé weby dokážou používat pouze nějakou podmnožinu dostupných speciálních znaků). Pokud budeme předpokládat, že pro vytvoření hesla můžeme použít celkem 96 znaků, by bylo třeba pro uhádnutí hesla o délce čtyř znaků, jako je třeba heslo t7G), provést celkem 964 (tj. 84 934 656) odhadů.
Znamená to tedy, že heslo o délce čtyř znaků je bezpečné? To tedy určitě ne.
Na obrázku níže je vidět tabulka, kterou v roce 2018 dala dohromady firma Terahash zabývající se na profesionální úrovni prolamováním hesel. V ní je vidět, jak na jednu stranu neuvěřitelně snadné – a na druhou stranu neuvěřitelně obtížné může být prolomení hesla. Na obrázku vlevo jsou vidět použité hlavní hashovací algoritmy.
Barva hned vedle názvu hashovacího algoritmu ukazuje, jak rychle je možné heslo zašifrované příslušným hashovacím algoritmem prolomit za použití technologie pro prolamování hesel vyvinuté firmou Terahash. Nejvýše se nachází algoritmus NTLM, který je obecně možné prolomit nejrychleji, což naznačuje i tmavě červená barva (která je samozřejmě i u některých dalších algoritmů). Nejobtížněji se prolamuje algoritmus Bitcoin / Litecoin ve spodní části obrázku, jehož prolomení trvalo nejdéle a který je na obrázku vyznačen žlutozelenou barvou.
Nicméně algoritmus představuje pouze jednu část celé této výzvy spočívající v prolomení hesla. Tou druhou pak je délka původního hesla. Barevné označení ostatních sloupců na obrázku říká, jak snadno je možné prolomit pro každý algoritmus zahashované heslo na základě původní délky tohoto hesla.
Ona záplava tyrkysově modré představuje na obrázku kratší hesla o čtyřech až osmi znacích, která lze prolomit prakticky okamžitě, nebo také za hodinu, a to v závislosti na použitém hashovacím algoritmu. Tmavě zelené oblasti odpovídají heslům, jejichž prolomení může trvat klidně až jeden den, jasně zelená hesla je možné prolomit až týden atd. Odstíny oranžové a červené pak představují hesla, jejichž prolomení by trvalo rok či déle.
Z popisovaného obrázku tak vyplynuly dva důležité závěry. Za prvé platí, že kratší hesla o čtyřech až šesti znacích byla pro Terahash snadno prolomitelná, a to bez ohledu na algoritmus. Za druhé, odolnost náhodného hesla vůči prolomení se dá velmi podstatně zvýšit prodloužením hesla na délku alespoň deseti znaků.
Pro prolamování hesel platí stejné principy jako pro těžbu kryptoměn: Používání CPU je efektivní jen částečně, daleko efektivnější je pro tyto činnosti používání GPU. Vývoj speciálních integrovaných obvodů určených konkrétně pro účely prolamování hesel (ASIC) připadá v úvahu pouze pro dobře financované vědce nebo státy. Například již zmiňovaná technologie firmy Terahash používá soubor výkonných GPU, takže je jasné, že jeho technologie bude daleko výkonnější než to, co může předvést váš domácí počítač.
Nicméně i přesto všechno platí, že pokud budete chtít vyzkoušet prolamování hesel, budete ve skutečnosti potřebovat pouze počítač se samostatným (vyhrazeným) GPU. V našem případě jsme pro testování použili Microsoft Surface Book 3 s GeForce GTX 1660 Ti GPU, který za sekundu dokáže odhadnout 6 959 milionů hashů, tj. téměř 7 miliard hashů. Jen mimochodem: stolní počítače zvládnou ještě více.
Prolamování hesel pomocí nástroje Hashcat
Na prolamování hesel se dá použít celá řada softwarových nástrojů: my se v tomto článku zaměříme pouze na jeden, který se jmenuje Hashcat. Tento nástroj používá pro odhadování hashů kombinaci hrubé síly (brute force), pravidel, masek a slovníkových útoků – všechny tyto pojmy vysvětlíme později.
Nástroj Hashcat původně běžel pouze na speciálních linuxových distribucích navržených pro penetrační testování, jako je například Kali Linux. Konkrétně Kali Linux si můžete stáhnout prostřednictvím aplikace Microsoft Store a vložit jej do subsystému Windows Subsystem for Linux shell. (Jen se ujistěte, že se jedná o subsystém Windows Subsystem for Linux 2, který umožňuje vašemu GPU provádět výpočty.)
Existuje ovšem i jednodušší způsob: nástroj Hashcat existuje i v podobě binárního souboru pro operační systém Windows, což jinými slovy znamená, že si jej můžete stáhnout i ve verzi pro operační systém pro Windows. Běží tak v prostředí příkazového řádku operačního systému Windows a využívá buď rozhraní CUDA API firmy Nvidia, nebo obecnější ovladač OpenCL.
Program Hashcat se skládá ze tří hlavních částí: samotného programu a dalších dvou textových souborů, které ale musíte vytvořit. Jeden soubor obsahuje hashe, které mají být odhadnuty, druhý soubor slouží jako úložiště pro již odhadnuté hashe. V tomto článku jsme souborům přiřadili názvy hash.txt a cracked.txt. Vytvořili jsme jednoduchý hash snadno uhodnutelného hesla, zkopírovali tento hash do souboru hash.txt, soubor jame uložili a zavřeli textový editor. Následně jsme spustili program Příkazový řádek systému Windows s oprávněními správce a v něm jsme přešli do adresáře, v němž je program Hashcat uložen a program jsme spustili.
Při prolamování hesel pomocí programu Hashcat můžeme začít metodou brute-force (hrubé síly), která spočívá v tom, že se hádáme všechna možná hesla v naději, že narazíme na to správné. Pokud byste chtěli, můžete si v sekci FAQ programu Hashcat přečíst dokumentaci k programu, nicméně začít můžete i následujícím příkazem zadaným na příkazový řádek:
hashcat -m0 -a3 -o cracked.txt hash.txt
U tak krátkého a jednoduchého hesla, jako je například heslo fred, by mělo prolamování hesla trvat jen chvíli, což se také potvrdilo.
Po skončení činnosti programu pak máte prolomené heslo uloženo včetně jeho hashe, z něhož bylo prolomeno, v souboru, který byl nastaven jako soubor pro ukládání prolomených hesel.
Zkusili jsme otestovat funkčnost programu na hashích čtyř jednoduchých čtyřznakových hesel, konkrétně 4289, yniu, tg5f a Trxc. Poslední dvě hesla byla poněkud složitější, nicméně i přesto byla všechna tato hesla prolomena do čtyř sekund. Ale pak jsme se pokusili z hashe prolomit heslo jRtw a stalo se něco velmi zajímavého: při použití výchozího nastavení nebyl najednou program Hashcat schopen prolomit hash tohoto hesla ani za několik sekund, ani za několik minut, a dokonce ani za víc než hodinu.
Ptáte se proč? Osobně se domníváme, že došlo k narušení masky, což je pro nás jen dobře.
Pravidla, masky a slovníkové útoky
Nástroje pro prolamování hesel vědí stejně dobře jako my, že delší a složitější hesla se prolamují daleko hůře. Ale také vědí, že lidé podvádějí a že používají pro vytváření hesel namísto dlouhých a náhodných řetězců často slova nebo známé řetězce. To znamená, že nástroje pro prolamování hesel mohou tak trochu podvádět také. A využívají k tomu taktiky označované jako pravidla a masky, v kombinaci se slovníky běžných hesel.
Například taková tabulka nejméně bezpečných hesel za léta 2018 a 2019 od SplashData, která je vidět na obrázku níže, by měla být součástí jakéhokoli slušnějšího slovníkového útoku všech těch, kdo chtějí prolamovat hesla. Současně poukazuje také na nebezpečí opakovaného používání hesel, protože jakmile se útočníkovi podaří prolomit vaše heslo, buďte si takřka jisti, že stejné heslo zkusí použít i pro přihlášení na jiných vašich účtech, aby si vyzkoušel, zda kvůli své lenosti náhodou nepoužíváte pro přístup ke všem vámi používaným službám stejné heslo.
Slovníkový útok používá konkrétní slova či řetězce slov v kombinaci se seznamem běžných křestních jmen a nejčastějších hesel. V roce 2009 byl například napaden dodavatel aplikace RockYou a na web unikla databáze nezašifrovaných hesel, která údajně obsahovala 30 milionů hesel. Jen pro zajímavost: dnes tato databáze patří mezi nejčastěji používané databáze při vedení slovníkových útoků.
Další variantou používanou při prolamování hesel, která mimochodem nemá se slovníkovým útokem nic společného, pak patří používání masky. Zde se pro zjednodušení procesu prolamování hesla používají určité vzorové řetězce. Ptáte se, co se takovým řetězcem vlastně myslí? Pak si odpovězte třeba na tyto otázky: Začínali jste někdy své heslo velkým písmenem a končili interpunkčním znaménkem? A co takhle ukončit heslo dvěma číselnými znaky? Právě toto jsou dva konkrétní příklady vzorových řetězců (masek), jak by například mohlo heslo vypadat. Takové a podobné masky (vzory) jsou pak v programu pro prolamování hesel přímo integrovány a do značné míry snižují počet možných hesel.
A konečně nesmíme zapomenout na pravidla. Pravidlem se zde rozumí nějaký složitější výraz, který často kombinuje masku a slovníkový útok. Pokud použijete heslo, které se skládá z nějakého běžného slova doplněného například dvěma číslicemi nebo kombinuje křestní jméno vaší tety s číslem a vykřičníkem na konci, může v takovém případě pravidlo velmi dobře zafungovat a zajistit daleko rychlejší prolomení hesla, než pokud by se heslo prolamovalo zkoušením všech možných kombinací znaků. A tady se naplno projevuje jedna z výhod používání správce hesel – ten totiž nejen vygeneruje heslo, které bude nejen dostatečně dlouhé, ale i mnohem náhodnější než heslo, které byste si obvykle vygenerovali sami.
V této souvislosti je však třeba zdůraznit a uvědomit si, že nástroj pro prolomení hesla vůbec netuší, zda má vaše heslo čtyři nebo čtrnáct znaků. U příkladu nečekaně obtížného čtyřznakového hesla, které jsme vygenerovali výše, zřejmě došlo k tomu, že program Hashcat usoudil, že v tomto případě nemá cenu používat masku, tj. to, že nejefektivnější bude jednoduše přeskočit vše, co není předem naprogramováno v jeho maskových souborech, a přejít od pokusů o prolomení čtyřznakových hesel k heslům o pěti znacích.
Hashcat tedy usoudil, že prolamované heslo nemá čtyři znaky, ale že je delší, a pokračoval s prolamováním hesla s tím, že prolamované heslo bude mít minimálně pět znaků – to ovšem nebyla pravda, protože ve skutečnosti heslo bylo čtyřznakové. Důsledkem pak bylo to, že program nedokázal na toto čtyřznakové heslo vůbec přijít.
Znamená to tedy, že heslo jRtw je neprolomitelné? To určitě ne. Kdyby zkoušel toto heslo prolomit někdo jiný, mohl by v programu Hashcat zadat pravidlo, aby tento program vyzkoušel všechny čtyřznaková hesla a teprve poté pokračoval s delšími hesly. Pak by bylo toto heslo odhaleno poměrně záhy. Z celého příkladu však nicméně plyne poučení, že pokud heslo dobře navrhnete, nemusí být vůbec odhaleno.
Poučení na závěr
Když už byste si z tohoto článku neměli odnést nic jiného, pak minimálně alespoň následující tři doporučení:
- Čím delší heslo použijete, tím lépe. Z výsledků experimentů s prolamováním hesel firmou Terahash popisovaných výše to vypadá, že bezpečné heslo je v současné době takové, které obsahuje alespoň deset znaků.
- Čím složitější heslo, tím lépe. Úplně nejlepší jsou skutečně náhodně generovaná hesla, nicméně pokud tato hesla používat nechcete, zajistěte alespoň to, aby každé vámi používané heslo obsahovalo minimálně jedno malé písmeno, jedno velké písmeno, číslo a speciální znak (například &, # nebo ]). Čím více různých typů znaků použijete, tím lépe.
- Nejlepším řešením pro správu hesel se v současnosti jeví správci hesel.
Už se sice opakujeme, ale myslíme, že je to na místě. Nejlepším a současně nejpohodlnějším řešením je používat nějakého správce hesel. Existují přitom jak placené, tak zdarma dostupné programy. Proč se tedy trápit s vymýšlením seznamu dlouhých a složitých hesel, když to za vás může udělat program?
Jak už bylo řečeno, může být prolamování hesel na jednu stranu až triviálně snadné, na stranu druhou může být současně téměř nemožné. Na základě toho, jaké heslo zvolíte, se pak pohybujete někde v tomto rozmezí. Možná právě to je na prolamování hesel tak fascinující.