Bezpečnostní útoky na webové aplikace
Upcoming SlideShare
Loading in...5
×
 

Bezpečnostní útoky na webové aplikace

on

  • 3,775 views

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

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

Statistics

Views

Total Views
3,775
Views on SlideShare
3,660
Embed Views
115

Actions

Likes
4
Downloads
18
Comments
2

7 Embeds 115

http://www.michalspacek.cz 43
https://twitter.com 23
https://twimg0-a.akamaihd.net 20
https://si0.twimg.com 13
http://a0.twimg.com 11
http://www.linkedin.com 4
http://getpocket.com 1
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
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Dík za komentář, máš pravdu, že ta část je napsaná trochu demagogicky a zjednodušeně. Ale to je schválně. Když někomu řekneš, že MD5 je v pohodě, ale musí použít hash a milionkrát to zacyklit... tak si zapamatuje jen ten začátek a to není dobrý.

    MD5 ani SHA-1 (a nejspíš ani nic z rodiny SHA-2 a to i přesto, že je to 2-3 pomalejší, v případě SHA-512) bych dneska nepoužil ani se saltem, a asi už vůbec ne bez saltu. A ani několikanásobný zahashování nemusí pomoci. Jakmile to zjistím, tak mám omezený počet znaků (32x A-Z0-9 např.), ze kterých musím hashe nejdřív generovat. Takže to může odradit, ale taky nemusí.

    Na #27 jsou taky otazníky a na #28 je uvedeno, že nejjednodušší a nejlepší je použít bcrypt, který řeší rychlost, i několikanásobný hashování automaticky. Ovšem za nedoporučováním MD5/SHA-1 si stojím, z důvodu výše uvedeného. Je to jednodušší na pochopení, zvlášť v takto časově omezené přednášce.
    Are you sure you want to
    Your message goes here
    Processing…
  • Pěkné slajdy, jen ta část o heslech je ukázkový FUD. Na MD5 ani SHA-1 není při ukládání hesel nic závadného. Nejsou nijak významně rychlejší než SHA-512, možnost hledání kolizí není pro ukládání hesel podstatná a předpočítané hashe mě trápit nemusí, protože salt musím přidat tak jako tak, navíc mi nikdo nezaručí, že za chvíli nebudou stejně snadno dostupné i pro SHA-512.

    Naopak použití opakovaného hashování (nebo vyžadování dlouhých a složitých hesel) je nezbytné, protože jinak hesla (jakkoliv zahashovaná a s jakýmkoliv saltem) rozlouskne s dnešním hardwarem kdokoliv.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Bezpečnostní útoky na webové aplikace Bezpečnostní útoky na webové aplikace Presentation Transcript

  • Michal Špaček, Skype, #4IT445 2012www.michalspacek.cz @spazef0rze
  • Útoky na web SQL Injection Cross-Site Scripting Full Path DisclosureÚtoků na webové aplikace existují desítky. Local File Inclusion, Remote Code Execution a další.Povíme si o těchto třech, kde první dva jsou navíc velice závažné. Všechny tři mají jednuspolečnou věc – zabránění těmto útokům je jednoduché, jak facka. Michal Špaček www.michalspacek.cz
  • Full Path Disclosure Vyzrazení plné cesty ke skriptu http://devblog.cz/2012/04/fpd-aneb-full-path-disclosure/Začneme od konce. Full Path Disclosure (FPD) je útok, kterým donutíte webovou aplikaci, abyvyzradila kde na disku serveru jsou uloženy skripty dané aplikace. Více o FPD si můžete přečíst vmém článku na uvedené adrese. Michal Špaček www.michalspacek.cz
  • Může to vypadat třeba takto. Aplikace nám toho ovšem vyzradí mnohem více, než jen to, kde nadisku žije. Dozvíme se například operační systém serveru, zjistíme, že je povolené zobrazováníchybových hlášek a z adresářové struktury odhadneme, že to nepoužívá Nette. Michal Špaček www.michalspacek.cz
  • Jednou z několika možností, jak tento útok vyvolat, je změna typu vstupních parametrů. Zklasického řetězce uděláme pole přidáním hranatých závorek za název parametru v URL (a předrovnítko). Některé funkce však umí pracovat jenom s řetězcem a náležitě nám to oznámí. Michal Špaček www.michalspacek.cz
  • Další variantou FPD útoku je zobrazení výstupu phpinfo(). Na velké části webů psaných v PHPse takový výstup nachází na URL /info.php nebo /phpinfo.php. Tyto informace obsahujítřeba i čísla verzí nebo kompletní nastavení PHP. Nikdy toto nedávejte na produkční servery. Michal Špaček www.michalspacek.cz
  • Řešení? display_errors = OffŘíkal jsem, že řešení jsou jednoduchá, že? Zakažte zobrazování chybových hlášek a hotovo.Hlášky si samozřejmě nesmíte vypisovat sami, třeba v nějakém error handleru. Zobrazovánízakažte pokud možno už v .htaccess pomocí php_flag display_errors off. Michal Špaček www.michalspacek.cz
  • log_errors = OnCo naopak povolte, je ukládání chybových hlášek do nějakého souboru, abyste se vůbecdozvěděli, že k nějakým chybám dochází. To provedete také nejlépe v souboru .htaccess takto:php_flag log_errors on, chybové hlášky pak naleznete v error logu serveru. Michal Špaček www.michalspacek.cz
  • Cross-Site Scripting (XSS) Útočník vloží na naši stránku vlastní JavaScriptZábavnějším útokem na webové aplikace a na jejich návštěvníky je Cross-Site Scripting. Útočníkvložením vlastního JavaScriptu do stránky získává kontrolu nad prohlížečem návštěvníka. Může sním dělat vše, co JavaScript dovoluje, inspirujte se třeba projektem BeEF http://beefproject.com/ Michal Špaček www.michalspacek.cz
  • Úspěšný útok Cross-Site Scripting může vypadat třeba takto. Toto je pouze Proof-of-Concept kód,načítající JavaScript z cizího serveru, zobrazení identifikátoru session nemá žádný praktickýdopad. Všimněte si hodnoty parametru zb v URL adrese. Michal Špaček www.michalspacek.cz
  • Všimněte si označeného textu. Tento HTML tag vložil útočník úpravou adresy stránky (vizpředchozí obrázek) a webová aplikace jej zapomněla zabezpečit. Útočníkovi pak stačí takovouadresu (třeba zkrácenou pomocí TinyURL) poslat oběti, této variantě se říká Reflected XSS.Variantě, kdy útočník vloží HTML značky například do diskuzního příspěvku a aplikace jej neošetříříkáme Permanent XSS, protože je zkrátka permanentní, útočník nemusí upravovat odkaz a nicnemusí nikomu posílat, stačí jenom navšívit takovou napadenou stránku. Michal Špaček www.michalspacek.cz
  • Pomocí vloženého JavaScriptu může útočník dělat spoustu věcí, zde je například ukázkaodchytávání uživatelských jmen a hesel zadávaných do formuláře s id userform a jejichodesílání na server tak, aby uživatel nic nepoznal, formulář se následně normálně odešle. Michal Špaček www.michalspacek.cz
  • Řešení? htmlspecialchars($string)Další jednoduché řešení. Pro ochranu před XSS stačí veškerá data (uživatelská i aplikační), kterádo HTML vypisujeme, nejdříve prohnat skrz uvedenou funkci. Na výpis do JavaScriptu, který májiné speciální znaky (trackovací kódy např.) použijte třeba json_encode(). Michal Špaček www.michalspacek.cz
  • htmlspecialchars($string, ENT_QUOTES)htmlspecialchars() standardně převádí na HTML entity pouze znaky &, ", < a >. PokudHTML atributy uzavíráte do jednoduchých uvozovek, musíte přidat flag ENT_QUOTES.Nejjednodušší je ale použít nějaký šablonovací systém, který celé escapování řeší za vás. Michal Špaček www.michalspacek.cz
  • Nepoužívat strip_tags() proti XSSNikdy nepoužívejte na ochranu před XSS funkci strip_tags(). Není na to určená a navícneochrání před tím, když útočník nebude vkládat celé tagy, ale jenom nové atributy (třebaonmouseover). Nepoužívejte ji ani na povolení některých tagů, ponechává totiž tagy i atributy. Michal Špaček www.michalspacek.cz
  • SQL Injection Útočník modifikuje SQL dotazDopad útoku SQL Injection může být poměrně značný. Pokud je úspěšný, tak má útočník podkontrolou celou databázi webové aplikace a může si s ní dělat, co chce. Například získávatuživatelská jména a hesla nebo finanční výsledky majitele. A taky měnit uložená data, třeba ceny. Michal Špaček www.michalspacek.cz
  • Útok spočívá v úpravě SQL dotazu, který aplikace odesílá do databázového serveru. Napsánímspeciálních znaků do některého parametru v adrese (zde znacka) vyvoláme chybu a zkoumáníma hledáním zadaného řetezce (třetí řádek shora, vpravo) zjistíme, jak parametr upravit. Michal Špaček www.michalspacek.cz
  • "… WHERE znacka = {$_GET[znacka]}"Chyba vyvolaná na této stránce vznikla nejspíš tak, že parametr znacka byl rovnou vložen doSQL dotazu, mezi jednoduché uvozovky, bez nějakého ošetření. Naznačen je kód v PHP skriptu,který je chybně napsán a umožňuje provést SQL Injection útok. Michal Špaček www.michalspacek.cz
  • Zde vidíme podobnou chybu, jako na předchozím obrázku. Parametr id původně obsahovalnějaké číslo, ale uvedením řetezce se útočníkovi podařilo vyvolat tuto chybovou hlášku, kterou nasebe aplikace vyzradila, že útoku SQL Injection neodolá. Michal Špaček www.michalspacek.cz
  • … WHERE id = . $_GET[id]Kód ve skriptu vypadal nejspíš nějak takto. Parametr id je rovnou připojen na konec SQL dotazu,není uzavřen v jednoduchých uvozovkách a proto si databázový server myslí, že je to názevsloupce. I bez zobrazeného SQL dotazu útočník dokáže odhadnout, co má do parametru vložit. Michal Špaček www.michalspacek.cz
  • Řešení? Prepared statements (PDO)V případě ochrany proti SQL Injection je řešení trochu náročnější. Místo skládání řetězcůoddělíme odesílání SQL kódu od dat a nemůže se tedy stát, že modifikací dat změníme kód. VPHP toto elegantně řeší extenze PDO. Někdy se můžete setkat s termínem vázání proměnných. Michal Špaček www.michalspacek.cz
  • Takto nějak vypadá práce s rozšířením PDO. Na řádku 2 vytvoříme spojení s databázovýmserverem. Na řádku 3 je pak uveden SQL dotaz a místo hodnot jsou uvedena zástupná jménaparametrů ve formátu :jmeno. Na řádku 4 řekneme databázovému serveru, aby si připravilvykonání dotazu. Metodou bindValue() propojíme zástupné jméno s hodnotou, všiměte si, žehodnotu nikde nijak speciálně neošetřujeme a že v dotazu nejsou kolem :id uvozovky. Na řádku6 konečně odešleme data na databázový server a tím efektivně vykonáme dotaz. Michal Špaček www.michalspacek.cz
  • mysql_set_charset() mysql_real_escape_string()Rozšíření mysql vázání proměnných nijak elegantně nepodporuje. Pro ošetření hodnot v SQLdotazu pak musíme použít funkci mysql_real_escape_string() a nesmíme po připojenízapomenout zavolat mysql_set_charset(). Uvedené řešení ovšem nevyřeší problém, který jeukázán na stránce 20, tedy případ, kdy v SQL dotazu očekáváme číslo. Tyto funkce slouží kzabránění „útěku z řetezce“, ale pokud v dotazu očekáváme číslo, tak v žádném řetezci nejsme anemusíme tedy z ničeho utíkat. Pro ochranu v tomto případě zvolíme přetypování na integer. Michal Špaček www.michalspacek.cz
  • Nepoužívat addslashes() proti SQLIAVůbec nikdy nepoužívejte funkci addslashes() pro ošetření dat proti SQL Injection. Tatofunkce, ač zdánlivě dělá to samé, tak neslouží pro ochranu proti SQL Injection. V některýchasijských znakových sadách je i přes použití addslashes() možné takový útok provést. Michal Špaček www.michalspacek.cz
  • Hashování hesel Nepoužívat MD5 Ani SHA-1Pokud ve vaší aplikaci ukládáte uživatelská hesla, nikdy je neukládejte jen tak, v čitelné podobě.Hashujte je před uložením do databáze. Ale pozor, není hashování, jako hashování. Pro novéaplikace dnes už nepoužívejte MD5 ani SHA-1. Michal Špaček www.michalspacek.cz
  • Jak MD5, tak SHA-1 jsou už překonané. Předpočítané hashe najdete na webu Googlem, takženemusíte nic crackovat. A když nic nenajdete, tak oba algoritmy jsou tak rychlé, že cracknutí heselje většinou otázka několika minut. Michal Špaček www.michalspacek.cz
  • Řešení? SHA-512 a salt? hash_hmac()Pokud budete hashovat hesla, tak používejte minimálně SHA-512 a rozhodně je nutné použít saltjako obranu proti Birthday attacks. Salt může být uložen v databázi ve speciálním sloupci, včitelné podobě. Hash počítejte HMAC algoritmem, můžete také použít opakované hashování. Michal Špaček www.michalspacek.cz
  • Lepší řešení? bcrypt! crypt() + Blowfish hashing http://codahale.com/how-to-safely-store-a-password/Existuje ale lepší řešení a opět jednoduché, vícenásobné hashování i obranu proti hrubé síle díkyrelativní vlastní pomalosti vyřeší použití funkce crypt() s Blowfish hashing algoritmem, který sezapne saltem, který začíná na $2a$, více v dokumentaci PHP. Tento hash doporučuje váš dealer! Michal Špaček www.michalspacek.cz
  • Thats it. Thats me. Michal Špaček www.michalspacek.cz @spazef0rze Přijďte na školení http://www.michalspacek.cz/skoleniTak 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 se toho chcetedozvědět ještě více z uvedených oblastí, přijďte na školení, která vedu. Díky a zas někdy!