passwordsHesla a uživatelské účty používáme denně ke své autentizaci a identifikaci do různých aplikací. Než se pustíme do popisu jednotlivých útoků, podívejme se nejdříve, jak aplikace obecně řídí přístup ke svým prostředkům, jaké typy účtů můžeme v aplikacích najít a co je to politika hesel.

Řízení přístupu a důvěrnost dat

Správné úživatelské jméno a heslo nám umožňuje získat přístup do systému pod určitou identitou. Při přihlašování a ověřování, zda jsme autorizováni provést určitou akci, vždy procházíme kontrolou aplikace, která povoluje nebo zamítne naši operaci. Této části aplikace se říká kontrola řízení přístupu (Access Control) a má jej každý software, který chrání prostředky aplikace a důvěrnost (Confidentiality) svých dat před neoprávněnými uživateli.

Typy účtů

Hesla jsou převážně spojena s uživatelskými účty jejichž název vystihuje identitu uživatele nebo použití účtu. Z hlediska použití můžeme rozlišovat následující typy účtů:

  • systémové účty sloužící k administraci systému nebo aplikace,
  • aplikační účty sloužící pro vlastní běh aplikace a přístup k datům,
  • uživatelské účty sloužící koncovým uživatelům.

Politika účtů a hesel

Pokročilé aplikace a operační systémy mají politiku účtů hesel (Account and Password Policy), která definuje jak mají hesla vypadat, jak často se musejí měnit, znemožňuje znovupoužití starých hesel nebo jejich velmi podobné variace. Politika především stanovuje minimální akceptovatelnou sílu hesla a to jak na jeho délku, tak na počet a typ použitých znaků. Politika účtů a hesel může také vynucovat zamknutí účtu po určitém počtu neúspěšných pokusů o přihlášení. Účet se může sám odemknout po určité době nebo se uzamkne navždy a na pomoc musí přispěchat administrátor.

Jak jsme již naznačili uživatelský a aplikační účet může být v několika stavech. Účet může být ve stavu zamčený (locked), odemčený (unlocked). Pokud si uživatel nezměnil včas heslo, dostane se do stavu expirované heslo (password expired). Systémové účty musejí být vždy dostupné pro samotnou správu aplikace nebo systému a nelze je tedy zamknout.

U kritických aplikací administrátoři explicitně ruší funkcionalitu uzamykání aplikačních účtů, protože je obtížné koordinovat pravidelné změny hesel. Některé staré aplikace změnu hesla ani neumožňují nebo se najde čas od času tlustý klient se starým heslem, který se opakovaně přihlašuje a aplikační účet zamkne.

Pro úplnost dodejme, že u webových aplikací často existuje možnost, jak si obnovit heslo pomocí doplňujících otázek nebo konfirmací emailu na primární nebo záložní emailovou adresu.

Způsob provedení útoku

Útoky na heslo (Password attacks) jsou automatizované pokusy o nalezení platného hesla z nějakého konečného prostoru hesel nebo jen jeho podmnožiny.  Rozlišujeme dva způsoby provedení útoku na hesla online a offline.

Password attackOffline útok na hesla připadá v úvahu, pokud jsme získali otisk hesla spolu s informací, jak aplikace vytváří tyto otisky. Následně simulujeme algoritmus aplikace a vytváříme sami otisky hesel a porovnáváme je s našim vzorkem dokud nenalezneme shodu. Tento typ útoku nevytváří žádné interakce s cílovým systémem (offline). Výpočty probíhají na vlastním hardwaru, můžeme výpočty paralelizovat a použít čipy grafických karet (GPU). Nepoužívá-li aplikace při uložení každého otisku hesla operaci „solení“ stačí jednou předpočítat všechny kombinace hesel a jejich otisky. Následné nalezení shody otisku je pak velmi rychlé a výsledky lze sdílet.

Online útok na hesla provádíme přímo proti cílové aplikaci (online). Výsledek ověření každého hesla je znatelně pomalejší, musíme detekovat odpověď aplikace. Nastavená politika hesel aplikace může testovaný účet po několika neúspěšných pokusech úplně zablokovat nebo umožnit další testování po časové prodlevě. Každá interakce se systémem má záznam v lozích aplikace a vytváří identifikovatelný provoz na síti. Je-li v infrastruktuře inspekční prvek například pokročilý firewall, IPS nebo IDS, pak opakované pokusy o přihlášení jistě identifikuje. V případě, že aplikace umožňuje kontinuální ověřování hesel bez omezení, je potřeba nezahltit cílovou aplikaci a posílat dotazy s ověřením hesel přiměřeně a s odstupem. Každý dotaz na ověření vyžaduje na straně aplikace a operačního systému svou režii. Příliš intenzivní dotazy mohou aplikaci výrazně zpomalit nebo ji úplně zahltit.

Při hádání hesel potřebujeme znát název účtu. Záleží na aplikaci, jak s hesly a s názvem účtu pracuje. Většina služeb vyžaduje úživatelské jméno a heslo, bez uvedení těchto přihlašovacích údajů není možné online útok provádět. U offline útoku se můžeme setkat s případem, kdy název účtu vstupuje do konstrukce otisku hesla. Názvy aplikačních a systémových účtů jsou většinou známé nebo bežně dostupné v dokumentaci dodavatele softwaru. V případě uživatelského účtu útočník tuto informaci většinou získá při průzkumu a enumeraci různých dobrosrdečných služeb.

Útok hrubou silou a slovníkový útok

Útok hrubou silou (Bruteforce attack) prochází všechna možná hesla z daného prostoru, který je definován abecedou symbolů (znaků) a maximalní délkou slova. Algoritmus prochází a ověří každé heslo z celého prostoru hesel (tj. všechny možné kombinace hesel). Pokud jste správně určili abecedu a maximální délku hesla, je tento algoritmus vždy úspěšný, ale musíte se výsledku dožít. Obecně i pro jiné problémy je algoritmus Bruteforce velmi úspěšný pro malé prostory. S rostoucí složitostí prostoru není možné všechny kombinace výpočetně pokořit v rozumném čase. Co je to dostatečně silné heslo je dnes vzhledem k výpočetní síle a paralelizaci pojem, který se neustále posunuje. Vzhledem k typické rotaci hesel každých 60 až 90 dní můžeme prohlásit, že praktická doba výpočtu by neměla překročit dva měsíce. Stačí pak dohledat, jak silná hesla pro daný algoritmus je možné za tuto dobu pokořit.

Slovníkový útok (Dictionary attack) zkouší ověřovat hesla definovaná ve slovníku (Wordlist). Slovník v tomto případě obsahuje pouze nějakou podmnožinu hesel, jinak by se jednalo o útok hrubou silou. Pro realizaci tohoto útoku vytvoříme slovník s kandidáty hesel a zkoušíme ověřit každé heslo ze slovníku. Tento typ algoritmu je vhodný pro online i offline útoky. U online útoku, vzhledem k jeho povaze, použiváme malé a cílené slovníky, řekněme do 500 hesel. U offline útoku si můžete tento algortimus představit jako předboj. Proč přeci nevyzkoušet již posbíraná hesla nebo přednastavená hesla výrobců softwaru, poté můžeme vyzkoušet útok hrubou silou a použít získané výsledky, až doběhne jejich výpočet.

Konstrukce slovníku

Metody stavby slovníku jsou asi tím nejzajimavějším na celé problematice útoku hesel. Výběr hesel do slovníku se bude pro každý případ lišit. Slovník ovlivňují získané informace o prostředí a osobě, která heslo používá. Slovník můžeme samozřejmně postavit sami ručně podle toho, co o cílové osobě víme.

Na internetu jsou dostupné čistě jazykové slovníky, top slovníky s nejprofláknutějšími hesly nebo specializované slovníky s tématikou SciFi filmů včetně názvů měst a postav. Pro zajímavost můžete prostudovat odkazy na slovníky uvedené v článku Password Cracking Wordlists and Tools for Brute Forcing.

Ke stavbě slovníků lze používat i slova z webových stránek, různé nástroje typu „webové sběrače“ nám mohou pomoci se sběrem slov určité délky a prozkoumají webové stránky do vybrané úrovně zanoření odkazů. Webové stránky mohou představovat sociální sítě nebo korporátní stránky organizace.

Další metodou na obohacení slovníků jsou různé operace nad existujícími slovníky, například použití transpozice vybraných znaků, přidávání letopočtů před a za heslo nebo použití jiných vzorů, které odhalují statistiky a analýzy publikovaných útoků.

Závěr

V úvodu do problematiky hádání hesel jsme vysvětlili souvislosti mezi účty, jejich stavy a politikou hesel. Diskutovali jsme dvě základní formy provedení útoku online a offline. Dále jsme zmínili dva algoritmy útok hrubou silou, který je vždy úspěšný, a útok používající slovník. V závěrů jsme se zabývali možnostmi, jak zkonstruovat vlastní slovník.

To je pro dnešek vše. Zvažujete-li cestu etického hackera od začátku, rád uvidím na hacking kurzech.