Hashování hesel

Embed Size (px)

Citation preview

Michal paekwww.michalspacek.cz

Michal paek
www.michalspacek.cz @spazef0rze

323 login
+
SHA-1 hash hesel

crackstation.net

Pro je vbec ukldn hesel tak dleit? Ukeme si pklad z na kotliny na jednom malm e-shopu, kter jsem zmioval na WebTop100 2012, se dal voln sthnout soubor se zlohou databze, ve kter bylo pes 300 uivatelskch jmen a hesel zahashovanch pomoc SHA-1.

crackstation.net

111 cracknutch hesel

eknete si, lidsk faktor, takov vc nem bt voln ke staen. Ne, nem, ale byla. Hashovan hesla jsem pedhodil online nstroji, kter ve svm obrovskm slovnku nael 111 shod, bhem chvle jsem tak zskal 111 uivatelskch t i s hesly. tok hrubou silou by poet jist zvil.

exoddusTbvfs19plamsP1ll3dNeznaov

Zde jsou nkter zajmav hesla, kter CrackStation dokzal najt ve svm slovnku. Krom typicky eskch slov jsou to i hesla, kter spln podmnky pro tvorbu hesel velk sti slueb aaplikac. Vimnte si hesla P1ll3d: obsahuje vce ne 6 znak, mal i velk psmena a sla.

111 cracknutch hesel

52 k loginu
@seznam.cz

Z tch 111 cracknutch a tedy itelnch hesel jich 52 patilo k tm, kter mly e-mailovou schrnku na domn seznam.cz. Celkem takovch uivatel danho e-shopu s e-mailem na seznam.cz bylo 165, ale jen k 52 takovm tm jsem znal heslo. Ale to mi stailo.

52 login @seznam.cz

Kolik stejnch hesel jako
na Seznam?

Chtl jsem zjistit, jestli vbec a jak moc se recykluj hesla. Je teba vzt v potaz, e vzorek dat byl mal, byl pl roku star a tak to, e firm provozujc dan e-shop jsem doporuil informovat zkaznky a doporuit jim zmnu hesla. Vsledn slo tedy ve skutenosti me bt vy.

I pesto je vsledek zarejc. Z 52 hesel, kter jsem ml k dispozici, jich 9 fungovalo pro pihlen k e-mailov schrnce na seznam.cz. 9 uivatel tedy mlo a m stejn heslo pro pstup ke sv e-mailov schrnce, jako heslo pro phlen k onomu e-shopku. Pstup ke schrnce je prser, u teba jenom proto, e v n lze nalzt registran daje k dalm slubm (kter si nikdo nikdy nezmn, pokud mu je vygenerujete a pi registraci polete) a tak teba proto, e weby bn e-mailem poslaj zapomenut hesla a instrukce k nastaven novho hesla.

Masaaki Miyara https://www.flickr.com/photos/argyle-street/5721058729/

@email.cz2 z [email protected] z 9
@gmail.com1 z 15

Pstup k 9 schrnkm na seznam.cz nen vechno. Z celkem 8 t s adresou na email.cz pouvalo stejn heslo jen pr uivatel. Zskat pstup k tomu jednomu tu na Gmailu byl trochu oek, Gmail toti detekoval, e se hlsm z divnho umstn (pes anonymizr) a tak chtl po m potvrdit, e jsem to opravdu j, kdo se k tu sna pihlsit. No, kdo jin ne j by to asi tak byl, e. Chtl po m tedy telefonn slo toho uivatele Gmailu, ale to nebylo problm najt, jak jinak ne zadnm t e-mailov adresy do wait for it do Google. To je ochrana k niemu.

Domnvm se, e dvodem, pro uivatel recykluj hesla me bt sten i to, e je k tomu webov aplikace navdj. Pokud v jednom polku uivatel zadv svj e-mail, tak je mon, e do druhho polka prost nape heslo k t schrnce, ani by nad tm njak pemlel. Podvejte se na tento formul jet jednou. Trochu to dv smysl, ne? Zkuste tedy polko pro zadn hesla doplnit napklad textem nezadvejte heslo k va e-mailov schrnce. Teba to uivateli dojde.

Vidte, e pokud se hesla rozhodnete ukldat patn, tak ohroujete svoje uivatele. tonk tak nepmo me zskat pstup ke slubm, ke kterm by jinak jmna a hesla zskval dost tko. Mj skromn odhad je, e hesla patn ukld plka z vs. Vy samozejm ne, jen Vae druh j.

v iteln podob (v plaintextu)

Co to vlastn znamen, to ukldat hesla patn? Nejjednodum patnm zpsobem uloen hesla je ho uloit tak, jak do aplikace pilo z prohlee, nedlat s nm dn cviky, dn hashovn, to je sprost slovo. Nae aplikace je pece zabezpeen, ne?

Pokud hesla uivatel ukldte do databze jen tak, tak vai aplikaci brzy navtv tady ten pn na obrzku. Nikdy neukldejte hesla do databze jen tak, v iteln podob! Pokud se nkdo njak dostane k databzi nebo k zlohm databze, data vaich uivatel jsou v ohroen.

MD5(heslo)SHA-1(heslo)CRC32(heslo)

Mon jste slyeli, e hesla se maj ukldat zahashovan. Tedy e se maj nejdve prohnat njakou hashovac funkc. To je sprvn, ale nen to pln sprvn. Jsou hashe lep a hor. Aity dobr se daj pout patn. Uveden hashe nejsou nejlep a navc jsou patn pouit.

Funkce MD5, SHA-1 a CRC32 jsou dobr na kontrolu integrity dat, ale ne na hashovn hesel uvedenm zpsobem. V pkladu na zatku jste vidli, e hesla byla hashovna pomoc SHA-1, ale niemu to nepomohlo, pvodn hesla nebyl problm zskat. Takhle tedy tak ne.

Existuj toti databze pedpotanch MD5 a SHA-1 hash pro rzn mon inemon etzce. Pokud do vpotu hashe nepidte salt, viz dle, tak velkou st hesel lze v tchto databzch najt. Um v nich hledat i Google, nalezen pvodnho hesla je asto otzka jednoho dotazu.

Pokud databze pedpotanch hash nesta, tak teba pome grafick karta a software, kter na n um lmat hashe. Jeremi Gosney postavil cluster s celkem 25 GPU, kter um vytvoit teba 180 miliard MD5 hash za vteinu. Hrub sla FTW. A ano, to nahoe je pota.

25 GPU + oclHashcat-plus + Virtual OpenCL:http://arstechnica.com/security/2012/12/25-gpu-cluster-cracks-every-standard-windows-password-in-6-hours/

Jak jde as, tak si Jeremi kupuje pod njak nov nejvkonnj grafick karty. dn z nich sice nikdy nezobraz ani jeden pixel, ale crackovn hesel na nich svit od rna do rna. Tohle je fotka z roku 2013, njakou dobu ped vnoci.

No jene jak jde as, tak si Jeremi kupuje pod nov a nov GPU a vc a vc. Tohle je fotka z roku 2013.

Jeremi Gosney
Sagitta HPC

V roce 2015 Jeremi Gosney stav cluster s 96 GPU a do konce 2016 v nm chce mt 192 GPU. Pokud hesla ukldte jako MD5 nebo SHA-1, tak je to stejn, jako kdyby byla v plaintextu. Jeremi takov stroje prodv, server s 8 GPU stoj $18499, ale na StarCraft si kupte nco levnjho.

MD5(MD5(MD5(MD5(MD5(MD5(MD5(
MD5(MD5(MD5(MD5(MD5(MD5(MD5(
MD5(MD5(MD5(MD5(MD5(MD5(MD5(
MD5(MD5(MD5(MD5(MD5(MD5(MD5(
heslo))))))))))))))))
))))))))))))))))

Algoritmy MD5 a SHA-1 jsou velice rychl, co pomh nejen pi toku hrubou silou. To ale pro bezpen ukldn hesel nen moc dobr zprva. Dobu nutnou pro vpoet hashe z hesla meme prodlouit vcensobnm volnm danch funkc, ale nikdy ne takto jednodue.

Poet opakovn mus bt celkem vysok (v tiscch), navc velmi zle na pouitm algoritmu, pi vcensobnm hashovn pomoc MD5 vznik vt poet koliznch sout napadnutelnch tokem vedenm njakm tunelem. Nebo tak nco. Tudy radji tedy ne, tunel mme u tak dost.

Z doposud uvedenho tedy plyne, e potebujeme njakou pomalou hashovac funkci. Relativn pomalou, tedy takovou, aby vpoet jednoho hashe nebyl tak moc asov nron, ale aby tok hrubou silou byl prakticky nemon, protoe by trval vnost. Nebo dv vnosti.

Robert Thomson, https://www.flickr.com/photos/14degrees/440515255/

MD5(heslo + salt)
SHA-1(heslo + salt)

Urit jste slyeli nebo etli o jakmsi saltu (sl) a i j jsem ten pojem ji zmnil. Pouvat salt pi hashovn hesel je nutn. Nhodn generovan salt me bt uloen v iteln podob v databzi a jeho kolem je zabrnit vyhledvn v pedpotanch tabulkch a tak znemonit nalezen uivatel se stejnm heslem (tzv. Birthday Attack). Stejn heslo by bez saltu mlo toti stejn hash a to by v databzi lo velice jednodue poznat. Stejn jako v kuchyni tak i u hashovn hesel zle na tom, jak se sl pouije. Uveden pklad je asto k vidn, nicmn nen ideln.

Nstroje pro crackovn hesel, jako napklad oclHashcat, potaj s touto variantou solen hesel (tedy pipojen saltu ped, nebo za heslo) a rovnou ji uvdj v seznamu algoritm, kter um louskat. tonk m tedy hash i salt a me zatoit hrubou silou, jako kdyby dn salt pouit nebyl. To sam plat pro slovnkov toky. Nicmn, ekli jsme si, e hlavn lohou saltu je brnit narozeninovm tokm a hledn v pedpotanch tabulkch, take to moc nevad. Jen trochu.

HMAC(heslo, salt)
hash_hmac(sha512, heslo, salt)

O trochu zajmavj zpsob solen je implementovn v algoritmu HMAC (Hash-based message authentication code). Se saltem se provede XOR, pipoj se k heslu, zahashuje a pot jet jednou to sam v bled modr. Pokud pouijete pomalou hashovac funkci, d se to i pouvat.

Pomal hashovac funkce je dleit, ale i takov SHA-512 je jen 10 pomalej, ne SHA-256, 30 pomalej, ne SHA-1 a 80 pomalej, ne MD5. To nen moc. HMAC tedy tak nen nejlep volba. Pro ukldn hesel pece mus existovat vhodnj algoritmus a funkce.

Rychlosti hashovacch funkc viz oclHashcat benchmarking:http://thepasswordproject.com/oclhashcat_benchmarking

bcrypt!

Blowfish hashing

Vak urit. Takovm algoritmem je teba bcrypt, nkdy t nazvn jako Blowfish hashing. Algoritmus je relativn pomal, sm o sob podporuje salt i vcensobn hashovn (m parametr cost, kter k kolikrt se m hashovat a uruje tak, jak dlouho m hashovn hesla trvat).

crypt() salt=$2y$
password_hash()
password_verify()

V PHP podporuje bcrypt funkce crypt(), pokud se j ped salt, kter zan $2y$, to funguje a od PHP 5.3.7, dvj verze a salty zanajc na $2a$ a $2x$ nepouvejte. V PHP 5.5 jsou dostupn hezk a jednoduch funkce, pro star PHP jsou tyto ke staen jako uivatelsk funkce.

CRYPT_BLOWFISH security fix details:http://www.php.net/security/crypt_blowfish.php

password_* funkce pro PHP 5.3.7 a novj:https://github.com/ircmaxell/password_compat

scrypt
PBKDF2

Podobn dobr jsou i algoritmy scrypt a PBKDF2 (Password-Based Key Derivation Function). scrypt znemouje toky hrubou silou tm, e potebuje hodn pamti, ale v PHP je funkce dostupn jen jako extension. Od PHP 5.5 existuje hash_pbkdf2(), ale pout bcrypt je jistj.

Argon2

Password Hashing Competition

Ale kad z tch uvedench funkc m njak drobn problm. V lt 2015 se vyhlsily vsledky soute PHC a vybral se vtz, Argon2, co bude absolutn nejlep hashovac funkce na hesla. Zatm jet nen pln dokonen, ale pak snad brzo bude i v PHP a bude se dt pouvat. (Aktualizace: v listopadu 2015 byl Argon2 dokonen, ale pokejte, a ho budou podporovat PHP funkce password_hash() a password_verify() a zatm je pouvejte v klidu dl.)

I pi pouit sprvnho hashovn mete leccos zkazit. Kontroverzn seznamka Ashley Madison mla hesla hashovan bcryptem, ale krom toho v jinm sloupci v databzi jen pomoc MD5. V lt 2015 byla hacknuta a data unikla na web. tonci samozejm toili na slab funkci MD5.

Pr dobrch rad na zvr. Hesla z prohlee nepenejte jen pes HTTP, pouijte HTTPS se sprvnm certifiktem, znemonte tak jejich odposlech. Rovn samotn pihlaovac formul penejte pes HTTPS, jinak by ho po cest mohl nkdo upravit, teba zmnit atribut action.

Nikos Providakis, https://www.flickr.com/photos/nikosprovidakis/5701097734/

Nikdy neposlejte hesla e-mailem. Nikdy, ani po registraci. Uivatel si je nikdy nezmn, nechaj si to pvodn zaslan a e-mailov schrnka je z dlouhodobho hlediska nezabezpeen loit, sta ztratit chytr telefon nebo laptop a mte problm. Taky vbec netute, kudy vude dan e-mail prochz a spojen mezi potovnmy servery jsou spe neifrovan, disky v nich tak.

Schub@, https://www.flickr.com/photos/schubi74/5439723004/

Pokud mte na webu funkci pro pipomenut zapomenutho hesla, tak to heslo nikdy neposlejte e-mailem v iteln podob. To vlastn ani nemete, protoe ho v databzi mte zahashovan bcryptem, e? Poslejte pouze za hodinu expirujc jednorzov odkaz s nhodnm tokenem, jinm pro kad takov pokus o reset hesla. Ten odkaz povede na strnku, kde si uivatel me nov heslo nastavit. Pokud uivatel zad nesprvn e-mail, nekejte mu to, vypite hlku, jako kdyby zadal sprvnou adresu. tonk by jinak mohl zjistit, jak e-maily se v databzi nachzej.

Juan J. Martnez, https://www.flickr.com/photos/reidrac/4696900602/

a76c8ba54d7be5d57daf858987c168a458009312

Michal paekwww.michalspacek.cz@spazef0rze

Pijte na kolenhttp://www.michalspacek.cz/skoleni/bezpecnost-php-aplikaci

Tak a to je ve, ptel. Sledujte m na Twitteru https://twitter.com/spazef0rze, pokud se chcete dozvdt, co se dje v mm svt PHP, bezpenosti a vkonnosti. Pokud vs zajm bezpen ukldn hesel a vbec webov bezpenost, tak pijte na kolen, kter vedu. Dky a zas nkdy!