• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Hashe hesla Develcz 2013
 

Hashe hesla Develcz 2013

on

  • 5,463 views

Ukládáš hesla do databáze jen tak, v čitelné podobě? Nebo používáš MD5? Nebo snad SHA-1? Vsadím se, že nevíš, co je to salt. Taky tajně doufám, že neposíláš hesla e-mailem. ...

Ukládáš hesla do databáze jen tak, v čitelné podobě? Nebo používáš MD5? Nebo snad SHA-1? Vsadím se, že nevíš, co je to salt. Taky tajně doufám, že neposíláš hesla e-mailem. Jednoho krásného dne se někde na webu objeví obsah databáze tvojí webové aplikace a její uživatelé nebudou mít radost. Nevystavuj je zbytečnému nebezpečí a raději si rezervuj místo v první řadě a já ti ukážu, jak se se svým webem nedostat do hlavního zpravodajství TV Nova.

Zajímá vás správné ukládání hesel? Přijďte si o tom popovídat na školení Bezpečnost PHP aplikací: http://www.michalspacek.cz/skoleni/bezpecnost-php-aplikaci

Statistics

Views

Total Views
5,463
Views on SlideShare
3,175
Embed Views
2,288

Actions

Likes
6
Downloads
20
Comments
2

7 Embeds 2,288

http://www.michalspacek.cz 2225
https://twitter.com 21
http://www.linkedin.com 17
http://plus.url.google.com 14
http://michalspacek.localhost 6
https://www.linkedin.com 3
http://fwcz.providentcz.local 2
More...

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

12 of 2 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • 25 GPU + oclHashcat-plus + Virtual OpenCL: http://arstechnica.com/security/2012/12/25-gpu-cluster-cracks-every-standard-windows-password-in-6-hours/
  • Rychlosti hashovacích funkcí viz oclHashcat benchmarking: http://thepasswordproject.com/oclhashcat_benchmarking
  • CRYPT_BLOWFISH security fix details: http://www.php.net/security/crypt_blowfish.php password_* funkce pro PHP 5.3.7 a novější: https://github.com/ircmaxell/password_compat

Hashe hesla Develcz 2013 Hashe hesla Develcz 2013 Presentation Transcript

  • Michal Špaček, Devel.cz Konference 2013 www.michalspacek.cz @spazef0rze
  • 323 loginů + SHA-1 hashů hesel crackstation.netProč je vůbec ukládání hesel tak důležité? Ukážeme si příklad z naší kotliny – na jednom maléme-shopu, který jsem zmiňoval na WebTop100 2012, se dal volně stáhnout soubor se zálohoudatabáze, ve které bylo přes 300 uživatelských jmen a hesel zahashovaných pomocí SHA-1. Michal Špaček www.michalspacek.cz
  • crackstation.net 111 cracknutých heselŘeknete si, lidský faktor, taková věc nemá být volně ke stažení. Ne, nemá, ale byla. Hashovanáhesla jsem předhodil online nástroji, který ve svém obrovském slovníku našel 111 shod, běhemchvíle jsem tak získal 111 uživatelských účtů i s hesly. Útok hrubou silou by počet jistě zvýšil. Michal Špaček www.michalspacek.cz
  • exoddus Tbvfs1 9plams P1ll3d NeznašovZde jsou některá zajímavá hesla, která CrackStation dokázal najít ve svém slovníku. Kromětypicky českých slov jsou to i hesla, která splní podmínky pro tvorbu hesel velké části služeba aplikací. Všimněte si hesla P1ll3d: obsahuje více než 6 znaků, malá i velká písmena a čísla. Michal Špaček www.michalspacek.cz
  • 111 cracknutých hesel 52 k loginu …@seznam.czZ těch 111 cracknutých a tedy čitelných hesel jich 52 patřilo k účtům, které měly e-mailovouschránku na doméně seznam.cz. Celkem takových uživatelů daného e-shopu s e-mailem naseznam.cz bylo 165, ale jen k 52 takovým účtům jsem znal heslo. Ale to mi stačilo. Michal Špaček www.michalspacek.cz
  • 52 loginů …@seznam.cz Kolik stejných hesel jako na Seznam?Chtěl jsem zjistit, jestli vůbec a jak moc se recyklují hesla. Je třeba vzít v potaz, že vzorek dat bylmalý, byl půl roku starý a také to, že firmě provozující daný e-shop jsem doporučil informovatzákazníky a doporučit jim změnu hesla. Výsledné číslo tedy ve skutečnosti může být vyšší. Michal Špaček www.michalspacek.cz
  • I přesto je výsledek zarážející. Z 52 hesel, která jsem měl k dispozici, jich 9 fungovalo propřihlášení k e-mailové schránce na seznam.cz. 9 uživatelů tedy mělo a má stejné heslo propřístup ke své e-mailové schránce, jako heslo pro příhlášení k onomu e-shopíku. Přístup keschránce je průser, už třeba jenom proto, že v ní lze nalézt registrační údaje k dalším službám(které si nikdo nikdy nezmění, pokud mu je vygenerujete a při registraci pošlete) a také třebaproto, že weby běžně e-mailem posílají zapomenutá hesla a instrukce k nastavení nového hesla.
  • …@email.cz 2z8 …@centrum.cz 3z9 …@gmail.com 1 z 15Přístup k 9 schránkám na seznam.cz není všechno. Z celkem 8 účtů s adresou na email.czpoužívalo stejné heslo jen pár uživatelů. Získat přístup k tomu jednomu účtu na Gmailu byl trochuoříšek, Gmail totiž detekoval, že se hlásím z divného umístění (přes anonymizér) a tak chtěl pomě potvrdit, že jsem to opravdu já, kdo se k účtu snaží přihlásit. No, kdo jiný než já by to asi takbyl, že. Chtěl po mě tedy telefonní číslo toho uživatele Gmailu, ale to nebylo problém najít, jakjinak než zadáním té e-mailové adresy do … wait for it … do Google. To je ochrana k ničemu. Michal Špaček www.michalspacek.cz
  • Domnívám se, že důvodem, proč uživatelé recyklují hesla může být částečně i to, že je k tomuwebové aplikace navádějí. Pokud v jednom políčku uživatel zadává svůj e-mail, tak je možné, žedo druhého políčka prostě napíše heslo k té schránce, aniž by nad tím nějak přemýšlel. Podívejtese na tento formulář ještě jednou. Trochu to dává smysl, ne? Zkuste tedy políčko pro zadání hesladoplnit například textem „nezadávejte heslo k vaší e-mailové schránce“. Třeba to uživateli dojde.
  • Vidíte, že pokud se hesla rozhodnete ukládat špatně, tak ohrožujete svoje uživatele. Útočník taknepřímo může získat přístup ke službám, ke kterým by jinak jména a hesla získával dost těžko.Můj skromný odhad je, že hesla špatně ukládá půlka z vás. Vy samozřejmě ne, jen Vaše druhé já.
  • v čitelné podobě (v plaintextu)Co to vlastně znamená, to „ukládat hesla špatně“? Nejjednodušším špatným způsobem uloženíhesla je ho uložit tak, jak do aplikace přišlo z prohlížeče, nedělat s ním žádné cviky, žádnéhashování, to je sprosté slovo. Naše aplikace je přece zabezpečená, ne? Michal Špaček www.michalspacek.cz
  • Pokud hesla uživatelů ukládáte do databáze jen tak, tak vaši aplikaci brzy navštíví tady ten pán naobrázku. Nikdy neukládejte hesla do databáze jen tak, v čitelné podobě! Pokud se někdonějak dostane k databázi nebo k zálohám databáze, data vašich uživatelů jsou v ohrožení.
  • MD5(heslo) SHA-1(heslo) CRC32(heslo)Možná jste slyšeli, že hesla se mají ukládat zahashovaná. Tedy že se mají nejdříve prohnatnějakou hashovací funkcí. To je správně, ale není to úplně správně. Jsou hashe lepší a horší.A i ty dobré se dají použít špatně. Uvedené hashe nejsou nejlepší a navíc jsou špatně použité. Michal Špaček www.michalspacek.cz
  • Funkce MD5, SHA-1 a CRC32 jsou dobré na kontrolu integrity dat, ale ne na hashování heseluvedeným způsobem. V příkladu na začátku jste viděli, že hesla byla hashována pomocí SHA-1,ale ničemu to nepomohlo, původní hesla nebyl problém získat. Takhle tedy také ne.
  • Existují totiž databáze předpočítaných MD5 a SHA-1 hashů pro různé možné i nemožné řetězce.Pokud do výpočtu hashe nepřidáte salt, viz dále, tak velkou část hesel lze v těchto databázíchnajít. Umí v nich hledat i Google, nalezení původního hesla je často otázka jednoho dotazu.
  • Pokud databáze předpočítaných hashů nestačí, tak třeba pomůže grafická karta a software, kterýna ní umí lámat hashe. Jeremi Gosney postavil cluster s celkem 25 GPU, který umí vytvořit třeba180 miliard MD5 hashů za vteřinu. Hrubá síla FTW. A ano, to nahoře je počítač.
  • 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ž pomáhá nejen při útoku hrubou silou. To ale probezpečné ukládání hesel není moc dobrá zpráva. Dobu nutnou pro výpočet hashe z heslamůžeme prodloužit vícenásobným voláním daných funkcí, ale nikdy ne takto jednoduše. Michal Špaček www.michalspacek.cz
  • Počet opakování musí být celkem vysoký (v tisících), navíc velmi záleží na použitém algoritmu, přivícenásobném hashování pomocí MD5 vzniká větší počet kolizních součtů napadnutelnýchútokem vedeným nějakým tunelem. Nebo tak něco. Tudy raději tedy ne, tunelů máme už tak dost.
  • Z doposud uvedeného tedy plyne, že potřebujeme nějakou pomalou hashovací funkci.Relativně pomalou, tedy takovou, aby výpočet jednoho hashe nebyl tak moc časově náročný, aleaby útok hrubou silou byl prakticky nemožný, protože by trval věčnost. Nebo dvě věčnosti.
  • MD5(heslo + salt) SHA-1(heslo + salt)Určitě jste slyšeli nebo četli o jakémsi saltu (sůl) a i já jsem ten pojem již zmínil. Používat salt přihashování hesel je nutné. Náhodně generovaný salt může být uložen v čitelné podobě v databázia jeho úkolem je zabránit vyhledávání v předpočítaných tabulkách a také znemožnit nalezeníuživatelů se stejným heslem (tzv. Birthday Attack). Stejné heslo by bez saltu mělo totiž stejnýhash a to by v databázi šlo velice jednoduše poznat. Stejně jako v kuchyni tak i u hashování heselzáleží na tom, jak se sůl použije. Uvedený příklad je často k vidění, nicméně není ideální. Michal Špaček www.michalspacek.cz
  • Nástroje pro crackování hesel, jako například oclHashcat, počítají s touto variantou solení hesel(tedy připojení saltu před, nebo za heslo) a rovnou ji uvádějí v seznamu algoritmů, které umílouskat. Útočník má tedy hash i salt a může zaútočit hrubou silou, jako kdyby žádný salt použitnebyl. To samé platí pro slovníkové útoky. Nicméně, řekli jsme si, že hlavní úlohou saltu je bránitnarozeninovým útokům a hledání v předpočítaných tabulkách, takže to moc nevadí. Jen trochu.
  • HMAC(heslo, salt) hash_hmac(sha512, heslo, salt)O trochu zajímavější způsob solení je implementován v algoritmu HMAC (Hash-based messageauthentication code). Se saltem se provede XOR, připojí se k heslu, zahashuje a poté ještějednou to samé v bledě modré. Pokud použijete pomalou hashovací funkci, dá se to i používat. Michal Špaček www.michalspacek.cz
  • Pomalá hashovací funkce je důležitá, 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 ukládání hesel přece musí existovat vhodnější algoritmus a funkce.
  • bcrypt! Blowfish hashingVšak určitě. Takovým algoritmem je třeba bcrypt, někdy též nazýván jako Blowfish hashing.Algoritmus je relativně pomalý, sám o sobě podporuje salt i vícenásobné hashování (má parametrcost, který říká kolikrát se má hashovat a určuje tak, jak dlouho má hashování hesla trvat). Michal Špaček www.michalspacek.cz
  • crypt() salt=$2y$… password_hash() password_verify()V PHP podporuje bcrypt funkce crypt(), pokud se jí předá salt, který začíná $2y$, to funguje ažod PHP 5.3.7, dřívější verze a salty začínající na $2a$ a $2x$ nepoužívejte. V PHP 5.5 jsoudostupné hezké a jednoduché funkce, pro starší PHP jsou tyto ke stažení jako uživatelské funkce. Michal Špaček www.michalspacek.cz
  • scrypt PBKDF2Podobně dobré jsou i algoritmy scrypt a PBKDF2 (Password-Based Key Derivation Function).scrypt znemožňuje útoky hrubou silou tím, že potřebuje hodně paměti, ale v PHP je funkcedostupná jen jako extension. Od PHP 5.5 existuje hash_pbkdf2(), ale použít bcrypt je jistější. Michal Špaček www.michalspacek.cz
  • Pár dobrých rad na závěr. Hesla z prohlížeče nepřenášejte jen přes HTTP, použijte HTTPS sesprávným certifikátem, znemožníte tak jejich odposlech. Rovněž samotný přihlašovací formulářpřenášejte přes HTTPS, jinak by ho po cestě mohl někdo upravit, třeba změnit atribut action.
  • Nikdy neposílejte hesla e-mailem. Nikdy, ani po registraci. Uživatelé si je nikdy nezmění, nechajísi to původní zaslané a e-mailová schránka je z dlouhodobého hlediska nezabezpečenéúložiště, stačí ztratit chytrý telefon nebo laptop a máte problém. Taky vůbec netušíte, kudy všudedaný e-mail prochází a spojení mezi poštovnímy servery jsou spíše nešifrovaná, disky v nich také.
  • Pokud máte na webu funkci pro připomenutí zapomenutého hesla, tak to heslo nikdy neposílejtee-mailem v čitelné podobě. To vlastně ani nemůžete, protože ho v databázi máte zahashovanébcryptem, že? Posílejte pouze za hodinu expirující jednorázový odkaz s náhodným tokenem,jiným pro každý takový pokus o reset hesla. Ten odkaz povede na stránku, kde si uživatel můženové heslo nastavit. Pokud uživatel zadá nesprávný e-mail, neříkejte mu to, vypište hlášku, jakokdyby zadal správnou adresu. Útočník by jinak mohl zjistit, jaké e-maily se v databázi nacházejí.
  • a76c8ba54d7be5d57daf858987c168a458009312 Michal Špaček www.michalspacek.cz @spazef0rze Přijďte na školení http://www.michalspacek.cz/skoleni/bezpecnost-php-aplikaciTak a to je vše, přátelé. Sledujte mě na Twitteru https://twitter.com/spazef0rze, pokud se chcetedozvědět, co se děje v mém světě PHP, bezpečnosti a výkonnosti. Pokud vás zajímá bezpečnéukládání hesel a vůbec webová bezpečnost, tak přijďte na školení, které vedu. Díky a zas někdy!
  • Použité fotografie a obrázky: 7. „Untitled“, Masaaki Miyara 19. „Snail in danger near Zadar, Croatia“, Robert Thomson 27. „QUIET...I want to eavesdrop.“, Nikos Providakis 28. „Postbox“, Schub@ 29. „Seguridad“, Juan J. MartínezMichal Špaček www.michalspacek.cz