2. ledna 2018

Hesla se dnes již necrackují pomocí „rainbow tables“ ani hrubou silou. Takže tohle nejspíš nebyl únik hesel v čitelné podobě, ale někdo těch 750 tisíc hesel vylámal a nahrál na web. Taky jsem je zkusil cracknout.

České internetové nákupní galerii Mall.cz unikla jakási data. Rozebírá to Lupa, která se dostala k souboru s čitelnými hesly uloženému na Ulož.to. Data tam byla dostupná zhruba měsíc, přičemž se soubor na Ulož.to objevil koncem července 2017. 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.

8× GeForce GTX GPU

Výkonné stroje na crackování hesel staví Sagitta HPC, nyní Terahash, foto Jeremi Gosney

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ů.

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í“ (nebo OEM) 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, p3 a g3 s následujícími grafickými kartami (uvádím vždy maximální konfigurace, ceny jsou orientační, pro aktuální se podívejte do ceníku):

  • NVIDIA Tesla V100 v p3.16xlarge instanci s 8× GPU za $26,44/h on-demand, $5/h spot
  • NVIDIA Tesla K80 v p2.16xlarge instanci s 16× GPU za $14,4/h on-demand, $2,52/h spot
  • NVIDIA Tesla M60 v g3.16xlarge instanci s 4× GPU za $4,56/h on-demand, $1,35/h spot

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

  • Tesla V100 v NCv3 series instanci NC24s_v3 s 4× GPU za $6,12/h
  • 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,56/h

OVH má v nabídce pouze následující dedikovaný server:

  • 4× NVIDIA GeForce GTX 1080 za 30 944,99 Kč bez DPH / měsíc

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

  • 1× Tesla V100: 52 729,6 MH/s (!), výkon p3.16xlarge instance s 8× GPU je 421,8 GH/s (!!!)
  • 1× Tesla K80: 4558,4 MH/s, výkon p2.16xlarge instance s 16× GPU je 72,9 GH/s
  • 1× Tesla M60: 10 581,7 MH/s, výkon g3.16xlarge instance s 4× GPU je 42,3 GH/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.16xlarge s kartami Tesla K80 (P3 s Tesla V100 jsou dostupné až od října 2017, tento „příběh“ je ze začátku září), 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.txt a prijmeni.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 (a4, e3, o0 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ší
  • fm9fytmf7qkckct – prvních 15 znaků ze sériového čísla pro Microsoft Office
  • 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 p­očtem opakování 210, Tesla V100 1707 hashů/s), 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 (ale pozor, ne všechny jsou stejně dobré, líbí se mi 1Password, ačkoliv z historických důvodů stále používám KeePass) 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.

Článek původně vyšel na Lupě, tohle je má aktualizovaná původní verze bez redakčních úprav.


Mohlo by vás také zajímat

Michal Špaček

Michal Špaček

Vyvíjím webové aplikace, zajímá mě jejich bezpečnost. Nebojím se o tom mluvit veřejně, hledám hranice tak, že je posouvám. Chci naučit webové vývojáře stavět bezpečnější a výkonnější weby a aplikace.

Veřejná školení

Zvu vás na následující školení, která pořádám a vedu: