Hlavní navigace

Jak jsem crackoval hesla z úniku Mall.cz

Autor: Depositphotos
Michal Špaček

Unikla data Mallu v čitelné podobě? Mohla, ale taky nemusela, ukazuje experiment bezpečnostního experta Michala Špačka.

České internetové nákupní galerii Mall.cz unikla jakási data. Psala o tom i Lupa, která se k souboru s čitelnými hesly uloženému na Ulož.to dostala. Přečetl jsem snad všechny články (a komentáře pod nimi!), které se tématu týkají, a kromě jiného jsem se dozvěděl, že se muselo jednat o únik dat v čitelné podobě a že hesla se lámou pomocí předpočítaných tabulek a hrubou silou, tedy zkoušením všech možných kombinací. Nemuselo a takhle se hesla dnes fakt spíš nelámou.

Co víme

Malá rekapitulace faktů: již smazaný soubor na Ulož.to obsahoval 735 956 unikátních e-mailových adres (Troy Hunt jich do služby na prohledávání úniků Have I Been Pwned? importoval jen 735 405, vynechal adresy s diakritikou a s dalšími nevalidními znaky) a celkem 766 421 hesel v čitelné podobě, z nichž zhruba 216 tisíc vypadá jako náhodně generovaný řetězec šesti alfanumerických znaků (malá a velká písmena a číslice). Později se ukázalo, že to byla hesla generovaná a posílaná Mallem při prvním nákupu.

Dále také víme, že ten soubor na Ulož.to neobsahoval všechny účty, např. moje heslo vygenerované password managerem a používané od roku 2009 pouze na Mallu ( 97DS9WK14qMrAbzftnwd) v něm není, což může být proto, že ho do doby zveřejnění toho souboru nikdo necracknul. 

Ostatně domnívám se, že někdo si z Mallu odnesl více (hashů) hesel, než bylo v souboru na Ulož.to. Jednak Mall zresetoval i hesla, která v něm nebyla, viz třeba já, a jednak mi pár dní po zveřejnění incidentu jeden člověk, říkejme mu třeba Honza, napsal, že se mu někdo úspěšně přihlásil do jeho účtu na Steamu, což prý byla jediná služba, na které měl stejné heslo jako na Mallu. Jenže Honzův účet a (prý v hlavě vymyšlené) heslo ve zveřejněných datech Mallu nejsou. Všechno naštěstí dobře dopadlo, Honzu i jeho účet na Steamu zachránila dvou-faktorová autentizace.

Unikla data v čitelné podobě? Mohla, ale taky nemusela.

Cože, grafické karty?

Na lámání hesel z uniklých databází (tzv. offline útoky) se dnes nepoužívají tzv. předpočítané tabulky, známé také jako rainbow tables. Jejich vytváření je časově náročné, navíc zbytečně obsahují spoustu záznamů, které neodpovídají tomu, jak uživatelé hesla vytváří. S možností obecných výpočtů na grafických kartách (GPU) se na crackování hesel používají spíš ty. Programy jako např. hashcat nebo John the Ripper na GPU vytváří tzv. kandidáty, které porovnávají s dostupnými hashi. Když najdou shodu, tak kandidáta označí jako heslo, které danému hashi odpovídá. U hesel, tedy u krátkých řetězců s omezenou znakovou sadou, se nemůže stát, že by došlo ke kolizi a dvě různá hesla měla stejný hash. Jedna grafická karta dokáže vygenerovat třeba miliardy MD5 hashů za vteřinu, navíc lidé vytváří hesla předvídatelně, takže je možné efektivně vytvářet jen takové kandidáty, které odpovídají heslům vytvářeným v hlavách uživatelů.


Autor: Jeremi Gosney

Výkonné stroje na crackování hesel staví například Sagitta HPC

V současnosti nejvýkonnější grafická karta na crackování hesel NVIDIA GeForce GTX 1080 Ti umí spočítat 31 miliard MD5 hashů za vteřinu (GTX 1080 je o pětinu pomalejší). Když chcete crackovat hesla, tak chcete tzv. Founders Edition, tedy referenční kartu navrženou přímo výrobcem grafického čipu, která zvládne pod plnou zátěží běžet 24 hodin denně, 7 dní v týdnu. „Herní“ edice to nezvládnou, hry se hrají spíš nárazově, pár hodin denně, takže „herní“ karty mohou používat levnější a méně kvalitní komponenty (netýká se vlastního čipu, ten je stejný), což se tedy bohužel na výsledné ceně moc neprojevuje.

GTX 1080 Ti Founders Edition se u nás už nedá sehnat, co takhle zkusit cloud? Amazon AWS nabízí Elastic GPUs (které na crackování hesel nejspíš použít nejdou) a servery řady p2 a g3 s následujícími grafickými kartami (uvádím vždy maximální konfigurace):

  • NVIDIA Tesla K80p2.16×large instanci s 16× GPU za 14,4 $/h on-demand, 3,03 $/h spot
  • NVIDIA Tesla M60g3.16×large instanci s 4× GPU za 4,56 $/h on-demand, 1,25 $/h spot

Pro porovnání, Microsoft Azure nabízí následující servery s kartami NVIDIA Tesla:

  • Tesla K80 v NC series instanci NC24 s 4× GPU za 3,60 $/h
  • Tesla M60 v NV series instanci NV24 s 4× GPU za 4,37 $/h

OVH má v nabídce dedikované servery v následujících konfiguracích:

  • 4× NVIDIA GeForce GTX 1070 za 17 855 Kč bez DPH / měsíc
  • 4× NVIDIA GeForce GTX 1080 za 30 840 Kč bez DPH / měsíc
  • 2× NVIDIA Tesla M60 za 39 187 Kč bez DPH / měsíc

Karty Tesla nejsou na crackování hesel moc výkonné, jak ukazují počty spočítaných MD5 hashů (kde MH = milion hashů) v porovnání s kartami GTX:

  • 1× Tesla K80: 4558,4 MH/s, výkon p2.16×large instance s 16× GPU je 72 934,4 MH/s
  • 1× Tesla M60: 10 581,7 MH/s, výkon g3.16×large instance s 4× GPU je 42 326,8 MH/s
  • 1× GTX 1080: 24 809,8 MH/s
  • 1× GTX 1080 Ti: 30 963,5 MH/s

Crackování hesel

V tom souboru na Ulož.to bylo 381 908 unikátních hesel, všechna jsem je zahashoval pomocí algoritmu MD5 a zkusil zase cracknout. Chtěl jsem ověřit, jestli by to šlo a jak daleko se dostanu. Pokud by to šlo cracknout relativně rychle, tak to opravdu mohlo uniknout jako hashe a někdo to prostě cracknul. Tak jsem si od Amazonu pronajal p2.16×large, stáhl dva asi nejznámější seznamy uniklých hesel rockyou.txt a phpbb.txt a v podstatě bez přípravy jsem se do toho pustil. Profík by přípravu zcela jistě nepodcenil, hesla by nelámal na Amazonu, ale já to schválně ani jako profík dělat nechtěl. Používal jsem jen standardní pravidla pro další úpravu kandidátů dodávaná s hashcatem a seznam českých slov, jmen a příjmení jsem sestavoval až za běhu. Seznam českých ulic už se mi dělat nechtělo. Profík by si tohle všechno připravil a za stejný čas by měl cracknutých hesel přece jen více.

Kromě zmíněných seznamů jsem zkoušel hesla lámat následujícími způsoby:

  • kombinatorickým útokem, ten kombinuje data ze dvou seznamů (třeba jmena.txtprijmeni.txt)
  • útokem hrubou sílou (brute-force), protože vyzkoušet všechny kombinace z 8 malých písmen nebo 12 číslic bylo rychlé
  • útokem PRINCE, který generuje kandidáty kombinováním více slov z jednoho souboru

Všechny tyto útoky se navíc dají upravit a rozšířit pomocí pravidel, která například nahrazují písmena za čísla ( a → 4, e → 3, o → 0 a další, takže se zkusí heslo i h3sl0) nebo mění některá písmena za velká, přidávají do vygenerovaných hesel na různá místa čísla nebo speciální znaky, zdvojují slova apod. takže kandidátů je k dispozici habakuk.

Za 45 minut jsem měl vylámáno 165 tisíc hesel, tedy cca 43 %. Za 12 hodin jsem cracknul skoro všechna, zůstalo mi 935 nevylámaných hesel, a to jen proto, že jsem už chtěl jít spát. Nechat to běžet ještě pár hodin, tak jsem si celkem jistý, že bych dostal všechna.

Podařilo se cracknout i tato hesla, která v žádném použitém seznamu nebyla:

  • JK52jarka
  • lockap7gia  – anglické slovo („lock“) + hmm, něco
  • soyouitknow  – 4 anglická slova, „nesprávně“ seřazená
  • str3ela9133  – slovo strela upravené pravidly + číslo
  • Marketa19..  – jméno s velkým na začátku + číslo + dvě tečky
  • Renik2510!!  – to samé, jen s vykřičníky, obojí je klasika
  • 15zdenek1973
  • to neuhodnes  – hele, spíš asi jo (tohle je výjimka, bylo to v seznamu  rockyou.txt)
  • andalusan89T@
  • natoneprijdes  – no nekecej
  • čokoládamilka  – v seznamu rockyou.txt byla podobná varianta bez diakritiky  cokoladamilka
  • lindisfarne793
  • kobylamamalybok  – 4 česká slova, program palindromy nezkouší
  • asdfghjkl0123456789  – „procházka po klávesnici“ asdfghjkl + číselná řada

…a 380 961 dalších. Necracknutá zůstala třeba tato:

  • carolinepassword2680?  – jméno + password + číslo + otazník
  • passwordusuniversalis  – dvě slova rozšířená o -us-is
  • 3681913234731michal  – číslo (ve skutečnosti CD key ke hře) + jméno
  • Qawsedqawsed11+  – 2× „procházka po klávesnici“ qawsed + číslo + plus
  • j4 n3v1m v073  – ja nevim vole s předvídatelně nahrazenými znaky
  • PyQ7z4XwBf1o9  – tohle mi nejdřív přišlo jako asi nejsložitější heslo, ale už je v nějakém seznamu hashů, otázkou je, jak dlouho (jiná hesla z Mallu tam nejsou)
  • ●●●●●●●●●●●  – moc nechápu, jak se to tam dostalo, nicméně o tři znaky delší varianta ●●●●●●●●●●●●●● se cracknout podařila

V tom zbytku není ani jedno heslo generované správcem hesel a všechna jsou podobná těm, co se cracknout podařilo, takže si myslím, že by se podařilo relativně rychle cracknout i ten zbytek.

Co s tím

Myslím, že hesla mohla opravdu klidně uniknout nějak hashovaná. Lámání SHA-1 s kryptografickou solí (metoda, kterou Mall používal od 2012 do 2016) by zabralo o dost víc času, a to nejen proto, že rychlost generování SHA-1 je zhruba třetinová, ale také proto, že nelze použít porovnávání kandidáta se všemi možnými hashi, protože každý má jinou sůl

Z hesel uložených pomocí bcryptu (od 2016) by šla cracknout jen opravdu jednoduchá hesla typu password (GTX 1080 Ti pro bcrypt umí 646 hash/s s počtem opakování 210), ale sám Mall tvrdí, že „většina prolomených hesel pochází právě z doby, kdy byla používána [metoda MD5]“.

Na závěr dvě rady:

  1. Pokud hesla vymýšlíte v hlavě nebo pokud používáte jedno heslo na více místech, tak spíš asi přestaňte. Silné heslo nevypadá tak, že obsahuje minimálně jedno malé a jedno velké písmeno, jedno číslo a jeden speciální znak, protože velké dáte na začátek a číslo na konec a za něj dáte vykřičník. Síla hesla spočívá v jeho náhodnosti, která se dá částečně dohnat délkou, ale i když takové heslo použijete na více místech, tak se síla vytrácí. Zkuste použít správce hesel a hlavní heslo si vygenerujte třeba pomocí kostek, tedy metody diceware.
  2. Jestli provozujete nějakou aplikaci a uživatelská hesla ukládáte pomocí MD5 nebo SHA-1 či SHA-2, tak to změňte třeba na bcrypt nebo Argon2i a stávající hesla přehashujte. Hesla tak budou mnohem lépe chráněna.
Našli jste v článku chybu?