Výběr hesel o délce 12 nebo více znaků
S moderním hardwarem téměř jistě dokážeme dešifrovat rychlý hash jako MD5, NTLM, SHA1 atd. v rozumném čase.
Co mám na mysli, když mluvím o prolomení hesla, které má 12 nebo více znaků? Tvrdil bych, že s moderním hardwarem, jako je toto „rozpočtové“ nastavení, téměř jistě dokážeme dešifrovat rychlý hash jako MD5, NTLM, SHA1 atd. v rozumném čase. V praxi je náhodný výběr sekvencí o délce 8 nebo více znaků v případě běžných hashovacích algoritmů marný. Když se dotkneme zvláštností národního jazyka a lidské psychologie (například průměrné anglické slovo má délku 4,79 znaků a lidé dávají přednost použití více slov při vytváření hesel o 10 a více znacích), pak se otevírají zajímavější příležitosti v podmínky výběru takových hesel. Další podrobnosti o různých nástrojích pro výběr jsou popsány v knize Hash Crack.
Proč jsou hesla dlouhá 12 a více znaků zranitelná?
Lidé, kteří ručně vytvářejí hesla o 10 nebo více znacích, mají tendenci používat standardní slova a fráze. Proč? Protože zapamatovat si heslo „horsebattery123“ je mnohem jednodušší než „GFj27ef8%k$39“. Zde se setkáváme s instinktem jít cestou nejmenšího odporu, který v případě tvorby hesel přetrvá, dokud se správci hesel nerozšíří. Souhlasím s tím, že série kreseb věnovaných síle hesla má právo na život, ale pouze v případě pomalých hashovacích algoritmů, jako je bcrypt. Tento článek ukáže příklady Combo útoků (když se kombinují prvky slovníku) a Hybrid (když se ke Combo útoku přidá brutální síla) pomocí utility Hashcat, která snad rozšíří váš arzenál. Níže uvedené příklady demonstrují, jak může útočník účinně brutálně vynutit klíčový prostor a prolomit hesla, která se na první pohled zdají být silná.
Základní informace o typových útocíchKombinace aHybridní
Kombinovaný útok (combo): Všechny prvky ze dvou slovníků jsou zkombinovány.
Příklad
Vstupní data: dictionary1.txt dictionary2.txt
Kombinace hesel:
pass => heslo, passpass, passlion
slovo => wordpass, wordword, wordlion
lev => lionpass, lionword, lev
Hybridní útok (Hybridní): je slovníkový útok smíchaný s kombinacemi generovanými podle konkrétního vzoru.
Příklad
Vstupní data: dictionary.txt ?u?l?l
Kombinace hesel:
pass => passAbc, passBcd, passCde
slovo => wordAbc, wordBcd, wordCde
lev => lionAbc, lionBcd, lionCde
Poznámka 1: Sekvence generování hesla není zcela přesná a slouží k popisu obecné myšlenky.
Poznámka 2: Podrobnější vysvětlení jsou k dispozici na webových stránkách Hashcat.
Kombinovaný útok
Uvažujme kombinovaný útok pomocí slovníku skládajícího se z 10 tisíc nejběžnějších slov v sestupném pořadí podle oblíbenosti. Analýza byla provedena pomocí N-gramů a frekvenční analýzy založené na trilionté sbírce shromážděné vyhledávačem Google.
Zvažte příklad dvou náhodně vybraných slov spojených do 16znakového hesla, například shippingnovember, a proveďte kombinovaný útok na toto heslo, pokud byl použit algoritmus MD5:
Příklad
hashcat -a 1 -m 0 hash.txt google-10000.txt google-10000.txt
Při zkoušení všech kombinací slov, která jsou navzájem propojena pomocí moderního hardwaru, je heslo prolomeno za méně než jednu sekundu. Při práci s jinými, pomalejšími algoritmy je také heslo vybráno v rozumném čase.
Obrázek 1: Čas uhodnout heslo shippingnovember pomocí kombinovaného útoku
Kritici mohou namítat, že pokud každé slovo na začátku napíšete velkým písmenem nebo přidáte číslo nebo speciální znak, bude nové heslo (například ShippingNovember) stabilnější. Pojďme si tuto teorii otestovat v praxi a spojit slovník google-10000 do jediné velké pole hesel pomocí utility combinator.bin, která nám umožní výsledná slova kombinovat v kombinaci s pravidly.
Příklad
combinator.bin google-10000.txt google-10000.txt > google-10000-combined.txt
Nyní, když máme slovník kombinací, přidáme pravidla pro uhodnutí upraveného hesla (ShippingNovember).
Příklad
hashcat -a 0 -m 0 hash.txt google-10000-combined.txt -r best64.rule
Obrázek 2: ShippingNovember čas hádání hesla pomocí slovníku kombinací a pravidel
Nové heslo bylo dešifrováno za 28 sekund. Podobným způsobem jsou přidána pravidla, která berou v úvahu speciální znaky, různá umístění kombinací a tak dále. Myslím, že chápete pointu.
3 slovní hesla
Pomocí vytvořeného slovníku kombinací se pokusíme pomocí kombinovaného útoku najít heslo tří slov, například „securityobjectivesbulletin“.
Příklad
hashcat -a 1 -m 0 hash.txt google-10000-combined.txt google-10000.txt
Obrázek 3: Bulletin cílů zabezpečení času uhodnutí hesla
Podobné heslo s přidáním dalších znaků bude prolomeno o něco pomaleji. Chytáte nějaký trend?
4 slovní hesla
Nyní se podíváme na prolomení čtyřslovných hesel (příklad: „sourceinterfacesgatheredartists“). V tomto případě se klíčový prostor zvyšuje na 10 000 000 000 000 000 kandidátů, ale výběr nakonec zabere rozumnou dobu. Především proto, že je použit algoritmus MD5. Vytvoříme nový slovník kombinací a provedeme kombinační útok pomocí Hashcat.
Příklad
hashcat -a 1 -m 0 hash.txt google-10000-combined.txt google-10000-combined.txt
Obrázek 4: Rozhraní zdroje pro odhadování času shromážděných umělců
Proces hledání pomocí moderního hardwaru mohl trvat 4 dny, ale správný kandidát byl nalezen do 5 hodin 35 minut. Přidáním čísel nebo speciálních znaků by heslo bylo mimo náš dosah, ale použití pouze čtyř náhodných slov činí heslo zranitelným.
Hybridní útok
Hybridní útoky vyžadují větší vynalézavost, ale když je nalezen správný vzor, nález se podobá zlaté cihle. Zvláště nezapomenutelným zážitkem je procházení dešifrovaných hesel v terminálu.
Slovníkový útok Google-10000 + maska
V prvním příkladu použijeme stejný slovník 10 tisíc nejběžnějších slov jako základ pro generování kandidátů pro vyhledávání. Dále použijeme obslužný balíček PACK (Password Analysis and Cracking Kit) a slovník hashesorg251015.txt z webu slabépass.com. Tento konkrétní slovník jsem si vybral kvůli jeho vysoké úspěšnosti a relativně malé velikosti. Prostudujeme si hashesorg slovník a na základě výsledků analýzy vytvoříme masky na základě nejoblíbenějších hesel, omezené na určitou sadu znaků. Tyto masky budou použity na začátku a na konci základních slov ze slovníku google-10000.txt.
Příklad
Nejprve vygenerujeme statistiku masek na základě hesel o délce 5-6 znaků a výsledky zapíšeme do samostatného souboru (pozor, proces generování může nějakou dobu trvat).
python statsgen.py hashesorg251015.txt --minlength=5 --maxlength=6 --hiderare -o hashesorg_5or6.masks
Poté masky převedeme do formátu Hashcat (soubor .hcmasks) pro následné použití při hybridních útocích.
python maskgen.py hashesorg_5or6.masks --optindex -o hashesorg_5or6.hcmask
Dále v režimu 6 jsou jako parametry specifikovány slovník a sada masek. Algoritmus hledání bude vypadat takto: vezměte první masku a zkombinujte ji s každým slovem ze slovníku, pak druhou masku, třetí a tak dále, dokud celý seznam masek neskončí. Některé útoky mohou skončit velmi rychle, jiné trvají o něco déle. Během testování vybereme heslo „environmentsqaz472“
Příklad
hashcat -a 6 -m 0 hash.txt google-1000.txt hashesorg_5or6.hcmask
Obrázek 5: Heslo brute-force time environmentsqaz472
Výběr trval asi 20 minut. Nejprve jsme se dostali k masce?l?l?l?d?d?d a pak do 14 jsme prolomili heslo.
Slovníkový útokRockyou + Rockyou-1-60. hcmask
Nyní použijeme sadu masek, která je součástí nástroje Hashcat a je generována na základě hesel ze sady Rockyou. Tato sada masek je rozdělena na samostatné části, jejichž velikost se zvětšuje s rostoucím rozsahem čísel. Velikost, jak předpokládám, narůstá kvůli procentu hesel, na jejichž základě se generuje konkrétní část masek. Použijeme soubor s názvem rockyou-1-60.hcmask, protože obsahuje nejoblíbenější masky, které se osvědčily při hybridních útocích. Tuto sadu masek zkombinujeme s hesly ze slovníku Rockyou. U ostatních slovníků dávejte pozor, abyste nepoužívali příliš velké soubory. Jinak bude útok trvat PŘÍLIŠ dlouho. Obvykle používám slovníky, které jsou menší než 500 MB (nebo i menší) a přidávám masky na začátek a konec slov. Vezměte si náhodné heslo „sophia**!“ ze slovníku Rockyou a na začátek přidejte náhodné datum „1996“. V důsledku toho získáme heslo 1996sophia**!. Během testů bude každá maska kombinována s prvkem Rockyouova slovníku.
Příklad
hashcat -a 7 -m 0 hash.txt rockyou-1-60.hcmask rockyou.txt
Obrázek 5: Čas hádání hesla 1996sophia**!
Během pátrání po pár minutách došlo na masku?d?d?d?d. Tento příklad ukazuje proces a účinnost hybridních útoků. Soubor rockyou-1-60.hcmask obsahuje 836 masek vygenerovaných na základě nejběžnějších hesel ze slovníku rockyou.txt. Pokud vám tato sada nestačí, Hashcat přichází se všemi maskami vygenerovanými na základě zbývajících hesel.
Prvních 5 znaků + maska
Nyní vytvoříme nový slovník a sadu masek. Už víme, že průměrné anglické slovo trvá 4,79 postavy, a proto vytvoříme slovník obsahující prvky maximálně 5 znaků. Tento slovník bude vygenerován na základě souboru rockyou.txt, kde bude prvních 5 znaků oříznuto pro každý prvek. Dále jsou duplikáty odstraněny a výsledný seznam je setříděn a umístěn do souboru first5_dict.txt. Výsledný slovník zabírá 18 MB, což je příliš málo na útok na rychlý algoritmus MD5, ale pro pomalejší hash celkem přijatelné.
Příklad
cut -c 1-5 rockyou.txt | sort -u > first5_dict.txt
Poté zkombinujeme prvky ze slovníku first5_dict.txt a masky ze souboru rockyou-1-60, který je dodáván s Hashcat. Někteří kandidáti budou mít méně než 12 znaků, ale můžete vyloučit masky, které jsou kratší než 7 znaků, a vytvořit nový soubor s příponou .hcmask. Opět vezměte náhodné heslo Alty5 ze souboru first5_dict.txt a přidejte náhodnou sekvenci čísel 9402847. Výsledkem je heslo Alty59402847.
Příklad
hashcat -a 6 -m 0 hash.txt first5_dict.txt rockyou-1-60.hcmask
Obrázek 6: Čas hádání hesla Alty59402847
Tento útok je zvláště účinný proti uživatelům, kteří mají rádi hesla, kde je běžné slovo kombinováno s čísly pro účely randomizace. Podobné heslo je zvoleno do 30 minut.
Přímý útok masky na heslo o 12 nebo více znacích
Chápu, že tento typ útoku není hybridní, ale přesto použití masky 12 nebo více znaků stále přináší výsledky, zvláště pokud používáte nástroj PACK. Útok na heslo zakódované specifickým hashovacím algoritmem lze naplánovat tak, aby trval 1 den (86 400 sekund), s ohledem na rychlost hardwaru. Nejprve musíte změřit rychlost vyhledávání na základě možností vašeho hardwaru pomocí příkazu hashcat -b -m #type přímo v terminálu. Pojďme se rychle podívat na vytváření masek pro útok na hesla o délce 12-15 znaků pomocí nástroje PACK. Pro generování masek opět použijeme slovník rockyou.txt, nejdříve však vyhodnotíme rychlost prohledávání přes md5 hashe.
Příklad (MD5)
hashcat -
b -
m 0
Obrázek 7: Odhadovaná rychlost vyhledávání hashůmd5
Na základě výsledků testování se ukázalo, že rychlost vyhledávání je 76 000 000 000 klíčů za sekundu. Dále vytvoříme sadu masek na základě slovníku rockyou.txt pomocí utility PACK.
Příklad
python statsgen.py rockyou.txt -o rockyou.masks
Nyní vytvoříme soubor hcmask, pomocí kterého budou během 1 dne (86400 sekund) vyhledána některá hesla dlouhá 12-15 znaků.
Příklad
Obrázek 8: Postup výběru hesel pomocí masky
Poté můžeme spustit sérii útoků maskou pomocí souboru rockyou_12-15.hcmask k hrubému vynucení md5 hash. Průběžné vyhledávání bude dokončeno po 1 dni.
Příklad
hashcat -a 3 -m 0 hash.txt rockyou_12-15.hcmask
Závěr
Jak vidíte, hesla o délce 12 znaků nejsou tak nezranitelná. Chce to jen trochu mazanosti a kreativity, než vymyslet tu správnou strategii hrubé síly. Nepředpokládejte také, že pokud je heslo delší než 11 znaků, vaše oblíbená online služba vše správně hashuje.