bezpečnostní útoky na webové aplikace

Download Bezpečnostní útoky na webové aplikace

If you can't read please download the document

Upload: michal-spacek

Post on 16-Apr-2017

3.616 views

Category:

Technology


1 download

TRANSCRIPT

Michal paek, Skype, #4IT445 2012
www.michalspacek.cz @spazef0rze

Vtejte na pednce Jmenuji sePracuji pro Skype jakoV souti WT100 jsem bylMl jsem za kol hodnotit webyJak?

toky na web

SQL InjectionCross-Site ScriptingFull Path Disclosure

tok 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 jednu spolenou vc zabrnn tmto tokm je jednoduch, jak facka.

Na zatku 10 bodOdetnDiskvalifikace

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, aby vyzradila kde na disku serveru jsou uloeny skripty dan aplikace. Vce o FPD si mete pest v mm lnku na uveden adrese.

10% web

Me to vypadat teba takto. Aplikace nm toho ovem vyzrad mnohem vce, ne jen to, kde na disku ije. Dozvme se napklad operan systm serveru, zjistme, e je povolen zobrazovn chybovch hlek a z adresov struktury odhadneme, e to nepouv Nette.

10% web

Jednou z nkolika monost, jak tento tok vyvolat, je zmna typu vstupnch parametr. Z klasickho etzce udlme pole pidnm hranatch zvorek za nzev parametru v URL (a ped rovntko). Nkter funkce vak um pracovat jenom s etzcem a nleit nm to oznm.

10% web

Dal variantou FPD toku je zobrazen vstupu phpinfo(). Na velk sti web psanch v PHP se takov vstup nachz na URL /info.php nebo /phpinfo.php. Tyto informace obsahuj teba i sla verz nebo kompletn nastaven PHP. Nikdy toto nedvejte na produkn servery.

10% web

een?

display_errors = Off

kal jsem, e een jsou jednoduch, e? Zakate zobrazovn chybovch hlek a hotovo. Hlky si samozejm nesmte vypisovat sami, teba v njakm error handleru. Zobrazovn zakate pokud mono u v .htaccess pomoc php_flag display_errors off.

Nepouiteln, neposl 404tvrtina web

log_errors = On

Co naopak povolte, je ukldn chybovch hlek do njakho souboru, abyste se vbec dozvdli, 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.

Nepouiteln, neposl 404tvrtina web

Cross-Site Scripting (XSS)

tonk vlo na nai strnku
vlastn JavaScript

Zbavnjm tokem na webov aplikace a na jejich nvtvnky je Cross-Site Scripting. tonk vloenm vlastnho JavaScriptu do strnky zskv kontrolu nad prohleem nvtvnka. Me s nm dlat ve, co JavaScript dovoluje, inspirujte se teba projektem BeEF http://beefproject.com/

10% web

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 praktick dopad. Vimnte si hodnoty parametru zb v URL adrese.

Vimnte si oznaenho textu. Tento HTML tag vloil tonk pravou adresy strnky (viz pedchoz obrzek) a webov aplikace jej zapomnla zabezpeit. tonkovi pak sta takovou adresu (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 neoet kme Permanent XSS, protoe je zkrtka permanentn, tonk nemus upravovat odkaz a nic nemus nikomu poslat, sta jenom navvit takovou napadenou strnku.

Pomoc vloenho JavaScriptu me tonk dlat spoustu vc, zde je napklad ukzka odchytvn uivatelskch jmen a hesel zadvanch do formule s id userform a jejich odesln na server tak, aby uivatel nic nepoznal, formul se nsledn normln odele.

een?

htmlspecialchars($string)

Dal jednoduch een. Pro ochranu ped XSS sta veker data (uivatelsk i aplikan), kter do HTML vypisujeme, nejdve prohnat skrz uvedenou funkci. Na vpis do JavaScriptu, kter m jin speciln znaky (trackovac kdy nap.) pouijte teba json_encode().

Nepouiteln, neposl 404tvrtina web

htmlspecialchars($string, ENT_QUOTES)

htmlspecialchars() standardn pevd na HTML entity pouze znaky &, ", < a >. Pokud HTML atributy uzavrte do jednoduchch uvozovek, muste pidat flag ENT_QUOTES. Nejjednodu je ale pout njak ablonovac systm, kter cel escapovn e za vs.

Nepouiteln, neposl 404tvrtina web

Nepouvat

strip_tags()

proti XSS

Nikdy nepouvejte na ochranu ped XSS funkci strip_tags(). Nen na to uren a navc neochrn ped tm, kdy tonk nebude vkldat cel tagy, ale jenom nov atributy (teba onmouseover). Nepouvejte ji ani na povolen nkterch tag, ponechv toti tagy i atributy.

Nepouiteln, neposl 404tvrtina web

SQL Injection

tonk modifikuje SQL dotaz

Dopad toku SQL Injection me bt pomrn znan. Pokud je spn, tak m tonk pod kontrolou celou databzi webov aplikace a me si s n dlat, co chce. Napklad zskvat uivatelsk jmna a hesla nebo finann vsledky majitele. A taky mnit uloen data, teba ceny.

10% web

tok spov v prav SQL dotazu, kter aplikace odesl do databzovho serveru. Napsnm specilnch znak do nkterho parametru v adrese (zde znacka) vyvolme chybu a zkoumnm a hlednm zadanho etezce (tet dek shora, vpravo) zjistme, jak parametr upravit.

" WHERE znacka = '{$_GET['znacka']}'"

Chyba vyvolan na tto strnce vznikla nejsp tak, e parametr znacka byl rovnou vloen do SQL dotazu, mezi jednoduch uvozovky, bez njakho oeten. Naznaen je kd v PHP skriptu, kter je chybn napsn a umouje provst SQL Injection tok.

Zde vidme podobnou chybu, jako na pedchozm obrzku. Parametr id pvodn obsahoval njak slo, ale uvedenm etezce se tonkovi podailo vyvolat tuto chybovou hlku, kterou na sebe aplikace vyzradila, e toku SQL Injection neodol.

' 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 nzev sloupce. I bez zobrazenho SQL dotazu tonk doke odhadnout, co m do parametru vloit.

een?

Prepared statements (PDO)

V ppad ochrany proti SQL Injection je een trochu nronj. Msto skldn etzc oddlme odesln SQL kdu od dat a neme se tedy stt, e modifikac dat zmnme kd. V PHP toto elegantn e extenze PDO. Nkdy se mete setkat s termnem vzn promnnch.

Nepouiteln, neposl 404tvrtina web

Takto njak vypad prce s rozenm PDO. Na dku 2 vytvome spojen s databzovm serverem. Na dku 3 je pak uveden SQL dotaz a msto hodnot jsou uvedena zstupn jmna parametr ve formtu :jmeno. Na dku 4 ekneme databzovmu serveru, aby si pipravil vykonn dotazu. Metodou bindValue() propojme zstupn jmno s hodnotou, vimte si, e hodnotu nikde nijak speciln neoetujeme a e v dotazu nejsou kolem :id uvozovky. Na dku 6 konen odeleme data na databzov server a tm efektivn vykonme dotaz.

mysql_set_charset()

mysql_real_escape_string()

Rozen mysql vzn promnnch nijak elegantn nepodporuje. Pro oeten hodnot v SQL dotazu pak musme pout funkci mysql_real_escape_string() a nesmme po pipojen zapomenout zavolat mysql_set_charset(). Uveden een ovem nevye problm, kter je ukzn na strnce 20, tedy ppad, kdy v SQL dotazu oekvme slo. Tyto funkce slou k zabrnn tku z etezce, ale pokud v dotazu oekvme slo, tak v dnm etezci nejsme a nemusme tedy z nieho utkat. Pro ochranu v tomto ppad zvolme petypovn na integer.

Nepouiteln, neposl 404tvrtina web

Nepouvat

addslashes()

proti SQLIA

Vbec nikdy nepouvejte funkci addslashes() pro oeten dat proti SQL Injection. Tato funkce, a zdnliv dl to sam, tak neslou pro ochranu proti SQL Injection. V nkterch asijskch znakovch sadch je i pes pouit addslashes() mon takov tok provst.

Nepouiteln, neposl 404tvrtina web

Hashovn hesel

Nepouvat MD5

Ani SHA-1

Pokud ve va aplikaci ukldte uivatelsk hesla, nikdy je neukldejte jen tak, v iteln podob. Hashujte je ped uloenm do databze. Ale pozor, nen hashovn, jako hashovn. Pro nov aplikace dnes u nepouvejte MD5 ani SHA-1.

Nepouiteln, neposl 404tvrtina web

Jak MD5, tak SHA-1 jsou u pekonan. Pedpotan hashe najdete na webu Googlem, take nemuste nic crackovat. A kdy nic nenajdete, tak oba algoritmy jsou tak rychl, e cracknut hesel je vtinou otzka nkolika minut.

een?

SHA-512 a salt?

hash_hmac()

Pokud budete hashovat hesla, tak pouvejte minimln SHA-512 a rozhodn je nutn pout salt jako obranu proti Birthday attacks. Salt me bt uloen v databzi ve specilnm sloupci, v iteln podob. Hash potejte HMAC algoritmem, mete tak pout opakovan hashovn.

Nepouiteln, neposl 404tvrtina web

Lep een?

bcrypt!

crypt() + Blowfish hashing
http://codahale.com/how-to-safely-store-a-password/

Existuje ale lep een a opt jednoduch, vcensobn hashovn i obranu proti hrub sle dky relativn vlastn pomalosti vye pouit funkce crypt() s Blowfish hashing algoritmem, kter se zapne saltem, kter zan na $2a$, vce v dokumentaci PHP. Tento hash doporuuje v dealer!

Nepouiteln, neposl 404tvrtina web

That's it. That's me.

Michal paekwww.michalspacek.cz@spazef0rze

Pijte na kolenhttp://www.michalspacek.cz/skoleni

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 se toho chcete dozvdt jet vce z uvedench oblast, pijte na kolen, kter vedu. Dky a zas nkdy!

Dky a te u abych radji bel pry

Michal paekwww.michalspacek.cz