bezpečnostní útoky na webové aplikace, Čtvrtkon 5

Download Bezpečnostní útoky na webové aplikace, Čtvrtkon 5

If you can't read please download the document

Upload: michal-spacek

Post on 19-Jun-2015

2.962 views

Category:

Technology


1 download

DESCRIPTION

Útoků na webové aplikace existují desítky. Představíme si tři základní, ukážeme si, jak takový útok provést a jak webovou aplikaci proti danému útoku zabezpečit. Na závěr si ukážeme, jak bezpečně ukládat uživatelská hesla a pár špeků, kterým byste se měli obloukem vyhnout.

TRANSCRIPT

  • 1. Michal paek, #ctvrkton 5, 2013www.michalspacek.cz @spazef0rze

2. toky na webSQL InjectionCross-Site ScriptingFull Path Disclosuretok na webov aplikace existuj destky. Local File Inclusion, Remote Code Execution a dal.Povme si o tchto tech, kde prvn dva jsou navc velice zvan. Vechny ti maj jednuspolenou vc zabrnn tmto tokm je jednoduch, jak facka. Michal paekwww.michalspacek.cz 3. Full Path Disclosure Vyzrazen pln cesty ke skriptu http://devblog.cz/2012/04/fpd-aneb-full-path-disclosure/Zaneme od konce. Full Path Disclosure (FPD) je tok, kterm donutte webovou aplikaci, abyvyzradila kde na disku serveru jsou uloeny skripty dan aplikace. Vce o FPD si mete pest vmm lnku na uveden adrese. Michal paekwww.michalspacek.cz 4. Me to vypadat teba takto. Aplikace nm toho ovem vyzrad mnohem vce, ne jen to, kde nadisku ije. Dozvme se napklad operan systm serveru, zjistme, e je povolen zobrazovnchybovch hlek a z adresov struktury odhadneme, e to nepouv Nette. Michal paek www.michalspacek.cz 5. Jednou z nkolika monost, jak tento tok vyvolat, je zmna typu vstupnch parametr. Zklasickho etzce udlme pole pidnm hranatch zvorek za nzev parametru v URL (a pedrovntko). Nkter funkce vak um pracovat jenom s etzcem a nleit nm to oznm. Michal paekwww.michalspacek.cz 6. Dal variantou FPD toku je zobrazen vstupu phpinfo(). Na velk sti web psanch v PHPse takov vstup nachz na URL /info.php nebo /phpinfo.php. Tyto informace obsahujteba i sla verz nebo kompletn nastaven PHP. Nikdy toto nedvejte na produkn servery. Michal paekwww.michalspacek.cz 7. een? display_errors = Offkal jsem, e een jsou jednoduch, e? Zakate zobrazovn chybovch hlek a hotovo.Hlky si samozejm nesmte vypisovat sami, teba v njakm error handleru. Zobrazovnzakate pokud mono u v .htaccess pomoc php_flag display_errors off. Michal paek www.michalspacek.cz 8. log_errors = OnCo naopak povolte, je ukldn chybovch hlek do njakho souboru, abyste se vbecdozvdli, e k njakm chybm dochz. To provedete tak nejlpe v souboru .htaccess takto:php_flag log_errors on, chybov hlky pak naleznete v error logu serveru. Michal paekwww.michalspacek.cz 9. Cross-Site Scripting (XSS)tonk vlo na nai strnku vlastn JavaScriptZbavnjm tokem na webov aplikace a na jejich nvtvnky je Cross-Site Scripting. tonkvloenm vlastnho JavaScriptu do strnky zskv kontrolu nad prohleem nvtvnka. Me snm dlat ve, co JavaScript dovoluje, inspirujte se teba projektem BeEF http://beefproject.com/ Michal paekwww.michalspacek.cz 10. spn tok Cross-Site Scripting me vypadat teba takto. Toto je pouze Proof-of-Concept kd,natajc JavaScript z cizho serveru, zobrazen identifiktoru session nem dn praktickdopad. Vimnte si hodnoty parametru zb v URL adrese. Michal paekwww.michalspacek.cz 11. Vimnte si oznaenho textu. Tento HTML tag vloil tonk pravou adresy strnky (vizpedchoz obrzek) a webov aplikace jej zapomnla zabezpeit. tonkovi pak sta takovouadresu (teba zkrcenou pomoc TinyURL) poslat obti, tto variant se k Reflected XSS.Variant, kdy tonk vlo HTML znaky napklad do diskuznho pspvku a aplikace jej neoetkme Permanent XSS, protoe je zkrtka permanentn, tonk nemus upravovat odkaz a nicnemus nikomu poslat, sta jenom navvit takovou napadenou strnku. Michal paek www.michalspacek.cz 12. Pomoc vloenho JavaScriptu me tonk dlat spoustu vc, zde je napklad ukzkaodchytvn uivatelskch jmen a hesel zadvanch do formule s id userform a jejichodesln na server tak, aby uivatel nic nepoznal, formul se nsledn normln odele. Michal paekwww.michalspacek.cz 13. een? htmlspecialchars($string)Dal jednoduch een. Pro ochranu ped XSS sta veker data (uivatelsk i aplikan), kterdo HTML vypisujeme, nejdve prohnat skrz uvedenou funkci. Na vpis do JavaScriptu, kter mjin speciln znaky (trackovac kdy nap.) pouijte teba json_encode(). Michal paekwww.michalspacek.cz 14. htmlspecialchars($string, ENT_QUOTES)htmlspecialchars() standardn pevd na HTML entity pouze znaky &, ", < a >. PokudHTML atributy uzavrte do jednoduchch uvozovek, muste pidat flag ENT_QUOTES.Nejjednodu je ale pout njak ablonovac systm, kter cel escapovn e za vs. Michal paek www.michalspacek.cz 15. Nepouvatstrip_tags() proti XSSNikdy nepouvejte na ochranu ped XSS funkci strip_tags(). Nen na to uren a navcneochrn ped tm, kdy tonk nebude vkldat cel tagy, ale jenom nov atributy (tebaonmouseover). Nepouvejte ji ani na povolen nkterch tag, ponechv toti tagy i atributy. Michal paekwww.michalspacek.cz 16. SQL Injectiontonk modifikuje SQL dotazDopad toku SQL Injection me bt pomrn znan. Pokud je spn, tak m tonk podkontrolou celou databzi webov aplikace a me si s n dlat, co chce. Napklad zskvatuivatelsk jmna a hesla nebo finann vsledky majitele. A taky mnit uloen data, teba ceny. Michal paekwww.michalspacek.cz 17. tok spov v prav SQL dotazu, kter aplikace odesl do databzovho serveru. Napsnmspecilnch znak do nkterho parametru v adrese (zde znacka) vyvolme chybu a zkoumnma hlednm zadanho etezce (tet dek shora, vpravo) zjistme, jak parametr upravit. Michal paek www.michalspacek.cz 18. " WHERE znacka = {$_GET[znacka]}"Chyba vyvolan na tto strnce vznikla nejsp tak, e parametr znacka byl rovnou vloen doSQL dotazu, mezi jednoduch uvozovky, bez njakho oeten. Naznaen je kd v PHP skriptu,kter je chybn napsn a umouje provst SQL Injection tok. Michal paekwww.michalspacek.cz 19. Zde vidme podobnou chybu, jako na pedchozm obrzku. Parametr id pvodn obsahovalnjak slo, ale uvedenm etezce se tonkovi podailo vyvolat tuto chybovou hlku, kterou nasebe aplikace vyzradila, e toku SQL Injection neodol. Michal paekwww.michalspacek.cz 20. WHERE id =. $_GET[id]Kd ve skriptu vypadal nejsp njak takto. Parametr id je rovnou pipojen na konec SQL dotazu,nen uzaven v jednoduchch uvozovkch a proto si databzov server mysl, e je to nzevsloupce. I bez zobrazenho SQL dotazu tonk doke odhadnout, co m do parametru vloit. Michal paekwww.michalspacek.cz 21. een?Prepared statements (PDO)V ppad ochrany proti SQL Injection je een trochu nronj. Msto skldn etzcoddlme odesln SQL kdu od dat a neme se tedy stt, e modifikac dat zmnme kd. VPHP toto elegantn e extenze PDO. Nkdy se mete setkat s termnem vzn promnnch. Michal paek www.michalspacek.cz 22. Takto njak vypad prce s rozenm PDO. Na dku 2 vytvome spojen s databzovmserverem. Na dku 3 je pak uveden SQL dotaz a msto hodnot jsou uvedena zstupn jmnaparametr ve formtu :jmeno. Na dku 4 ekneme databzovmu serveru, aby si pipravilvykonn dotazu. Metodou bindValue() propojme zstupn jmno s hodnotou, vimte si, ehodnotu nikde nijak speciln neoetujeme a e v dotazu nejsou kolem :id uvozovky. Na dku6 konen odeleme data na databzov server a tm efektivn vykonme dotaz. Michal paekwww.michalspacek.cz 23. mysql_set_charset()mysql_real_escape_string()Rozen mysql vzn promnnch nijak elegantn nepodporuje. Pro oeten hodnot v SQLdotazu pak musme pout funkci mysql_real_escape_string() a nesmme po pipojenzapomenout zavolat mysql_set_charset(). Uveden een ovem nevye problm, kter jeukzn na strnce 20, tedy ppad, kdy v SQL dotazu oekvme slo. Tyto funkce slou kzabrnn tku z etezce, ale pokud v dotazu oekvme slo, tak v dnm etezci nejsme anemusme tedy z nieho utkat. Pro ochranu v tomto ppad zvolme petypovn na integer. Michal paek www.michalspacek.cz 24. Nepouvataddslashes()proti SQLIAVbec nikdy nepouvejte funkci addslashes() pro oeten dat proti SQL Injection Attack.Tato funkce, a zdnliv dl to sam, tak neslou pro ochranu proti SQL Injection. V MySQL vnkterch asijskch znakovch sadch je i pes pouit addslashes() mon SQLIA provst. Michal paek www.michalspacek.cz 25. Hashovn hesel Nepouvat MD5Ani SHA-1Pokud v aplikaci ukldte hesla uivatel, nikdy je neukldejte jen tak, v iteln podob. Hashujteje ped uloenm do databze. Ovem nen hashovn, jako hashovn. Pro nov aplikace dnesu nepouvejte MD5 ani SHA-1 a to ani pokud hashujete vcensobn a u vbec ne bez saltu. Michal paek www.michalspacek.cz 26. Jak MD5, tak SHA-1 jsou u pekonan. Pedpotan hashe najdete na webu Googlem, takenemuste nic crackovat. A kdy nic nenajdete, tak oba algoritmy jsou tak rychl, e cracknut heselje vtinou otzka nkolika minut. Michal paek www.michalspacek.cz 27. een?SHA-512 a salt?hash_hmac()Pokud budete hashovat hesla, tak pouvejte minimln SHA-512 a rozhodn je nutn pout saltjako obranu proti Birthday attacks. Salt me bt uloen v databzi ve specilnm sloupci, viteln podob. Hash potejte HMAC algoritmem, mete tak pout opakovan hashovn. Michal paek www.michalspacek.cz 28. oclHashcat md5($pass.$salt) md5($salt.$pass) sha1($pass.$salt) sha1($salt.$pass)Nepouvejte salt uvedenm zpsobem, tedy pouhm pidnm za heslo. Salt je uloen v databzispolen s heslem a pouit algoritmus se d odhadnout nebo vyst ze zdrojovch kd.Nstroje na crackovn hesel (teba rychl oclHashcat) s tmto zpsobem saltovn um zachzet. Michal paekwww.michalspacek.cz 29. Lep een? bcrypt! crypt() + Blowfish hashinghttp://codahale.com/how-to-safely-store-a-password/Existuje ale lep een a opt jednoduch, vcensobn hashovn i obranu proti hrub sle dkyrelativn vlastn pomalosti vye pouit funkce crypt() s Blowfish hashing algoritmem, kter sezapne saltem, kter zan na $2y$, tato monost je dostupn v PHP 5.3.7 a novjm, varianta$2a$ nefunguje zcela korektn, vce v dokumentaci PHP. V PHP 5.5 jsou nov funkcepassword_hash() a password_verify(), kter ve elegantn e, do starch verz je pidknihovna https://github.com/ircmaxell/password_compat. Blowfish hash doporuuje v dealer! Michal paekwww.michalspacek.cz 30. Mete si vechno sprvn zahashovat a ochrnit proti vem monm tokm, ale kdyzapomenete njakou zlohu nebo logy na disku v adresi, kter je dostupn z prohlee a mpovolen vypisovn obsahu (tzv. open dir), mte nemal problm. To vypisovn radji zakate. Michal paek www.michalspacek.cz 31. V pstupnch a otevench adresch se d najt spousta vc. Teba statistiky zaslninformanch e-mail, vetn samotnch e-mailovch adres. Tohle na ulici nenajdete, databzeovench adres lid, kte se zajmaj o produkt, kter web nabz, stoj obvykle dost penz. Michal paekwww.michalspacek.cz 32. robots.txtMte u pln zuby dobrch skutk, kter jsou po zsluze potrestny? Napite evil bota, kterbude prochzet soubory robots.txt a bude stahovat obsah, ke ktermu maj roboti normlnzakzn pstup. Ale pozor, budete mt opravdu mnoho opravdu zajmavch dat. Michal paek www.michalspacek.cz 33. Uvidte-li v robots.txt uvedeny adrese jako jsou teba tmp nebo logs (nebo obojdohromady) urit se do nich podvejte. Kdy se to poda a adres prozrad svj obsah, bude tostt za to. Pamatujte, do robots.txt pat jen to, co nemaj vidt roboti, ne lid. Michal paek www.michalspacek.cz 34. /.svn/entriesDlte deployment z SVN? A mte na serveru kompletn working copy? A co se stane, kdyserver podte o soubor /.svn/entries? Kdy tento soubor dostanete, je velkpravdpodobnost, e dostanete celou working copy v pvodn podob, co znamen zdrojky! Michal paekwww.michalspacek.cz 35. http://hostname/.svn/text-base/index.php.svn-baseSubversion toti ve working copy dr kopie pvodnch soubor, kter maj speciln koncovku,take vtinou nejsou zpracovvny jako PHP skripty a server je normln nabdne ke staen.Podvejte se do adrese .svn a pak jej ze serveru smate nebo aspo do nj zakate pstup. Michal paek www.michalspacek.cz 36. Thats it. Thats me. Michal paek www.michalspacek.cz@spazef0rzePijte na kolen http://www.michalspacek.cz/skoleniTak a to je ve, ptel. Sledujte m na Twitteru https://twitter.com/spazef0rze, pokud se chcetedozvdt, co se dje v mm svt PHP, bezpenosti a vkonnosti. Pokud se toho chcetedozvdt jet vce z uvedench oblast, pijte teba na kolen, kter vedu. Dky a zas nkdy!