Bezpečnost webových aplikací přitahuje stále více pozornost. Kyber-útoky se nevyhýbají ani českým a slovenským e-shopům. Pojďme se podívat na nejčastější typy útoků a na možnosti obrany proti nim.
Na internetové obchody mohou útočníci zkoušet různé typy útoků s různými cíli. Podíváme se však na ty nejčastější.
1. Cross-site scripting (skriptování mezi doménami)
Cross-site scripting (zkr. XSS) je útočná metoda založená na obejití tzv. mezidoménových omezení. Útočí na vstupy webu – nejčastěji vyhledávací pole. Snaží se jim podstrčit vlastní kód a tím:
- obejít bezpečnostní prvky;
- ukrást sezení administrátora;
- získat údaje návštěvníků stránek;
- znefunkčnit stránky;
- aplikovat phishing.
Náchylnost k XSS je nejrozšířenější slabinou webových aplikací. Mnohokrát se vyskytla např. na webech společností eBay, Amazon, Adobe.
Ochrana před XSS
- escapovat nebezpečné znaky (převést je na jiné znaky odpovídající tzv. escape sekvenci);
- validovat vstupy whitelisty povolených hodnot;
- detekovat potenciálně útočné konstrukce kódu aj.
2. SQL injection (injektování SQL dotazu)
SQL injection je útok manipulující s daty databáze e-shopu (citlivá jsou zejména data o zákaznících a objednávkách). Je založen na vsunutí kódu (SQL dotazu) do již existujících SQL dotazů. Napadnutelné jsou veškeré databáze užívající jazyk SQL a jeho mutace. Následkem takového úniku může být:
- ohrožení dat o objednávkách, zákaznících a přístupových údajů administrátora;
- umožnění přímého přístupu do databáze bez zadání hesla;
- podstrčení útočného kódu návštěvníkům stránek;
- kompletní zničení dat a kompromitace počítače provozujícího webovou aplikaci.
Asijští hackeři pomocí SQL injection v červenci 2010 ukradli a zneužili k nákupům data 12 191 zákazníků sítě internetových obchodů Neo Beat a jejích partnerů. V roce 2012 bylo portálu Yahoo ukradeno 453 tisíc uživatelských jmen a hesel. Injektáž se v roce 2013 stala jedničkou mezi útoky.
Ochrana před SQL Injection
- ošetřit vstupní parametry (vázání proměnných, pomocí sanitizace, konverze, filtrace);
- obecně zabezpečit vše, co je součástí HTTP požadavku (URI, formuláře, referer, cookies, user-agent);
- validovat vstupy whitelisty povolených hodnot;
- minimalizovat práva webové aplikace přistupující k SQL;
- důsledně používat tzv. uložené procedury;
- escapovat nebezpečné znaky.
3. Session hijacking (útoky na sezení)
Sezení je aktivní spojení klienta a serveru. Cílem útoků na sezení jsou sezení administrátora a zákazníka – tedy jejich spojení k e-shopu při administraci, či nákupu. Patří sem:
- session hijacking: útočník ukradne identifikátor sezení (zkr. SID) uživateli či serveru;
- session fixation (fixace na sezení): útočník získá oprávnění oběti pomocí podstrčené konstantní HTTP cookie;
- session sidejacking: útočník pomocí sledování komunikace uživatele se serverem získá SID a dokud trvá přihlášení oběti, je přihlášen i útočník.
Mnoho hijacking nástrojů bylo kupodivu dostupno přímo na Google Play (WhatsApp sniffer, DroidSheep aj.) Slavnými cíli hijackingu se v minulosti staly Facebook a Twitter. Nedávno i sám Google.
Ochrana před session hijacking
- změnit SID po přihlášení;
- používat náhodná a dostatečně dlouhá SID;
- sledovat IP adresu a user-agent;
- přizpůsobit timeout sezení;
- ověřovací údaje odesílat pouze přes šifrované spojení.
4. Brute force (útok hrubou silou)
Útok hrubou silu se snaží uhodnout dvojici uživatel a heslo. Uživatele buď nekale získává, či zkouší seznamy nejčastějších uživatelských jmen. Heslo se snaží prolomit pomocí kombinování možných znaků. Škody hrozí zejména při útoku na účet administrátora (české e-shopy ve své databázi zpravidla neukládají čísla platebních karet).
Ochrana před brute force útokem
- omezit počet pokusů o přihlášení v určitém čase;
- použít správné (a relativně pomalé) hashovací funkce;
- kryptograficky osolit heslo, pokud jde o útok na hashovací funkci;
- a na straně uživatele zvolit silné heslo (většina populace stále užívá primitivně slabá hesla, jak ukázal útok na Adobe z 09/2013).
Hesla uživatelů Adobe: podoba a četnost
Heslo | Počet uživatelů hesla |
123456 | 290731 |
123456789 | 79078 |
Password | 61958 |
iloveyou | 51622 |
princess | 35231 |
rockyou | 22588 |
1234567 | 21726 |
12345678 | 20553 |
abc123 | 17542 |
5. Nedostatečně chráněná citlivá data (Insecure Cryptographic Storage)
Mnoho e-shopů špatně chrání svá citlivá data – především vůči vnitřnímu zneužití. To potvrdil průzkum Harris Interactive: třetina zaměstnanců si plánovala odnést data o zákaznících, čtvrtina zkopírovat další soubory a jedna sedmina dokonce produktové informace vč. technických plánů, návrhů apod. Přitom 90 % z nich uvedlo, že tak neučiní, pokud to bude byť jen trochu komplikováno bezpečnostními opatřeními. Dalším rizikem zneužití je snadná přístupnost citlivých dat prostřednictvím webu: v minulosti se objevily případy, kdy je obchody měly volně přístupné, uchovávaly v podobě prostého textu, či v zastarale hashované podobě.
Ochrana zneužití citlivých dat
- minimalizovat oprávnění a rozsah přístupu k citlivým datům;
- zašifrovat citlivá data pomocí bezpečných šifer (např. blowfish);
- šifrovací klíče uchovávat odděleně od zašifrovaných dat;
- zahashovat a kryptograficky osolit hesla (např algoritmem bcrypt).
Je nutné se chránit?
I když se v českém a slovenském prostředí ještě příliš mnoho incidentů neodehrálo a/nebo se jim média příliš nevěnovala, je třeba vzít v úvahu několik fakt:
- zranitelnosti jsou velmi snadno zneužitelné;
- útok sám je jen otázkou času a slabého místa: kde je slabina a kořist, objeví se i útočník;
- prevence představuje pouhý zlomek nákladů na sanaci škod.
Krom toho základním principem prolomení obran zůstává: přišli jednou – přijdou znovu.
ShopSys a ochrana proti útokům hackerů
Přestože se z útoků na české a slovenské e-shopy ještě nestalo mediální téma, děláme v netdevelu maximum pro snížení jejich rizik a následků. Různé prvky ochrany implementujeme už od chvíle, kdy se v ČR objevily první incidenty. Od té doby úroveň ochrany neustále zvyšujeme a ověřujeme pomocí auditů bezpečnostních expertů. Základní audit poslední verzi ShopSys 5 auditoval Michal Špaček, porotce bezpečnosti soutěže WebTop100 a přednášející na konferenci PHP live.
Abychom drželi krok s riziky, neustále je monitorujeme, zkvalitňujeme ochrany ShopSys a vzděláváme zaměstnance předními odborníky na bezpečnost webových aplikací.
Velice mě těší, že se tématu bezpečnosti webových aplikací věnují i vývojářské firmy; prevence je přeci mnohem lepší a levnější než řešit následné problémy. Bezpečnost je velmi obsáhlé téma a každý rok se objeví několik desítek nových útočných technik. Ochrana proti skoro všem výše uvedeným útokům není příliš složitá a její implementace se vyplatí. Není vhodné se vymlouvat, že by to bylo drahé a že zákazník za ochranu proti např. SQL Injection nechce nic zaplatit. Zákazník ani nic takového požadovat nemusí.
Dodat produkt s alespoň uvedeným základním zabezpečením by mělo být samozřejmé – přeci jen je to vizitka samotných vývojářských firem, ty jsou za bezpečnost dat svých zákazníků také zodpovědné. Byl bych moc rád, kdyby se ještě více vývojářů nějakým způsobem zajímalo o zabezpečení vlastních webových aplikací a dat uživatelů – k tomu podobně zaměřené články jenom pomáhají, díky za něj.
— Michal Špaček
Autorem článku je Daniel Beránek. Faktickou správnost připomínkoval architekt vývoje netdevelo s.r.o. Petr Kadlec a expert na bezpečnost aplikací Michal Špaček (ten se zřekl své odměny ve prospěch Open SSL Software Foundation a sám přispěl navíc dvojnásobek částky. Chcete nadaci také podpořit?)
Zdroje
- ŠPAČEK, M. Jak jsem ukradl sezení administrátorovi. Lupa.cz, ISSN 1213-0702;
- ŠPAČEK, M. /admin. Přednáška pro PHP ;
- BERÁNEK, D. …a včera hijackli Google. SOOM.cz, ISSN 1804-7270;
- DOČEKAL, D. Adobe unikly údaje 130 milionů uživatelů, dva miliony měly heslo 123456. Lupa.cz, ISSN 1213-0702.;
- GOODIN, D. Amazon purges account hijacking threat from site. The Register;
- OWASP: Top 10 2013;
- SailPoint Survey Shows Employees Are More Apt to Take Company Data than a Stapler.
Autor: Mgr. Daniel Beránek – copywriter, SEO & OL MKT