ÚROVEŇ BEZPEČNOSTI INTERNETOVÝCH APLIKACÍ V ČESKÉ REPUBLICE SECURITY OF INTERNET APPLICATIONS IN THE CZECH REPUBLIC. Petr Zelenka



Podobné dokumenty
Databázové aplikace pro internetové prostředí PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku

1 Webový server, instalace PHP a MySQL 13

ANOTACE vytvořených/inovovaných materiálů

Testování webových aplikací Seznam.cz

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

Úvodem 9. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10. Než začneme 11

1. Webový server, instalace PHP a MySQL 13

rychlý vývoj webových aplikací nezávislých na platformě Jiří Kosek

Tvorba internetových aplikací s využitím framework jquery

Střední odborná škola a Střední odborné učiliště, Hořovice

INOVACE PŘEDMĚTŮ ICT. MODUL 11: PROGRAMOVÁNÍ WEBOVÝCH APLIKLACÍ Metodika

Současný svět Projekt č. CZ.2.17/3.1.00/32038, podpořený Evropským sociálním fondem v rámci Operačního programu Praha adaptabilita

Úvod do aplikací internetu a přehled možností při tvorbě webu

STŘEDNÍ ŠKOLA INFORMAČNÍCH TECHNOLOGIÍ A SOCIÁLNÍ PÉČE

Úvod do tvorby internetových aplikací

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

DUM 15 téma: Příkazy pro řízení přístupu

Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal. Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni

1. Úvod do Ajaxu 11. Jak Ajax funguje? 13

PHP a bezpečnost. nejen veřejná

DELTA - STŘEDNÍ ŠKOLA INFORMATIKY A EKONOMIE, s.r.o. Obor informační technologie AJAX ESHOP. Maturitní projekt. Třída:

Obsah. Rozdíly mezi systémy Joomla 1.0 a Systém Joomla coby jednička online komunity...16 Shrnutí...16

================================================================================ =====

Střední odborná škola a Střední odborné učiliště, Hořovice

Elektronická podpora výuky předmětu Komprese dat

Vstupní požadavky, doporučení a metodické pokyny

Klíčová slova: dynamické internetové stránky, HTML, CSS, PHP, SQL, MySQL,

Střední odborná škola a Střední odborné učiliště, Hořovice

Služba Rychlý výpis umožňuje on-line službám získat elektronický a snadno zpracovatelný výpis z bankovního účtu klienta.

Kurz je rozdělen do čtyř bloků, které je možné absolvovat i samostatně. Podmínkou pro vstup do kurzu je znalost problematiky kurzů předešlých.

17. července :51 z moravec@yahoo.com

Dobrý SHOP Popis produktu a jeho rozšíření

Individuální projekt z předmětu webových stránek 2012/ Anketa

Databázové systémy. Doc.Ing.Miloš Koch,CSc.

VÝVOJ INTERNETOVÝCH APLIKACÍ - VIA

Instalace a konfigurace web serveru. WA1 Martin Klíma

Analýza zranitelností databází. Michal Lukanič, Database Specialist

Maturitní projekt do IVT Pavel Doleček

UNIVERZITA PARDUBICE. Fakulta elektrotechniky a informatiky. Informační systém realitní kanceláře Jan Šimůnek

Projekt z předmětu Testování softwarových systémů

Ukázka knihy z internetového knihkupectví

Otevřený katastr (OK)

Instalace. Produkt je odzkoušen pro MS SQL server 2008 a Windows XP a Windows 7. Pro jiné verze SQL server a Windows nebyl testován.

Internetové služby isenzor

Maturitní otázky z předmětu PROGRAMOVÁNÍ

POPIS TECHNICKÉHO ŘEŠENÍ INFORMAČNÍHO SYSTÉMU PRO SBĚR DAT V PROJEKTU SLEDOVÁNÍ DEKUBITŮ JAKO INDIKÁTORU KVALITY OŠETŘOVATELSKÉ PÉČE NA NÁRODNÍ ÚROVNI

Úvod do databázových systémů

WNC::WebNucleatCreator

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Manuál k systému RS4S. verze 1.2

Šifrování Autentizace Bezpečnostní slabiny. Bezpečnost. Lenka Kosková Třísková, NTI TUL. 22. března 2013

Penetrační testování

Richtext editory. Filip Dvořák

Maturitní témata Školní rok: 2015/2016

Nabídka internetového obchodu

Obsah Úvod 4. TF Wmake 1.5

Vyšší odborná škola a Střední škola,varnsdorf, příspěvková organizace. Šablona 4 VY 32 INOVACE

FAKULTA INFORMAČNÍCH TECHNOLOGIÍ SPOLEČNOST DECADIC PROJEKT FRAMETRIX

Dobrý CMS Popis produktu a jeho rozšíření

Obsah. Úvodem 9. Kapitola 1 Než začneme 11. Kapitola 2 Dynamické zobrazování obsahu 25. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10

Stručný manuál pro webový editor. Ukládáni základních informací, tvorba menu

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Kritéria hodnocení praktické maturitní zkoušky z databázových systémů

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

Střední odborná škola a Střední odborné učiliště, Hořovice

Základy databází. O autorech 17 PRVNÍ ČÁST. KAPITOLA 1 Začínáme 19

Olga Rudikova 2. ročník APIN

PRŮBĚHOVÝ TEST Z PŘEDNÁŠEK

SYLABUS IT V. Jiří Kubica. Ostrava 2011

Část IV - Bezpečnost 21. Kapitola 19 Bezpečnostní model ASP.NET 23

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

language="javascript">... </script>.

Webové stránky fotbalového klubu

Střední odborná škola a Střední odborné učiliště, Hořovice

PHP tutoriál (základy PHP snadno a rychle)

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Kritéria hodnocení praktické maturitní zkoušky z databázových systémů

INFORMAČNÍ SYSTÉMY NA WEBU

5. POČÍTAČOVÉ CVIČENÍ

Synchronizace CRM ESO9 a MS Exchange

SOFISTIKOVANÉ NÁSTROJE PRO JEDNODUCHOU TVORBU PROFESIONÁLNÍCH WEBOVÝCH PREZENTACÍ

Úvod do databázových systémů

Administrace Oracle. Práva a role, audit

Uživatelský modul. File Uploader

Dobrý FOTO Popis produktu a jeho rozšíření

FIO API PLUS. Verze 1.1.1

MBI - technologická realizace modelu

Zranitelnosti webových aplikací. Vlastimil Pečínka, Seznam.cz Roman Kümmel, Soom.cz

Použití databází na Webu

Snadný vývoj webových aplikací s Nette. Lukáš Jelínek

Měření teploty, tlaku a vlhkosti vzduchu s přenosem dat přes internet a zobrazování na WEB stránce

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Poznámky k verzi Remote support platform 3.1

Střední odborná škola a Střední odborné učiliště, Hořovice

DUM 14 téma: Interakce s uživatelem

Nastavení propojení s eshopem

6. blok část C Množinové operátory

Transkript:

ÚROVEŇ BEZPEČNOSTI INTERNETOVÝCH APLIKACÍ V ČESKÉ REPUBLICE SECURITY OF INTERNET APPLICATIONS IN THE CZECH REPUBLIC Petr Zelenka Anotace: Článek se věnuje problematice bezpečnosti internetových aplikací. V článku jsou stručně shrnuty základní techniky útoku na webovou prezentaci a chyby, kterých se mohou vývojáři při tvorbě internetové aplikace dopustit. Součástí článku je vyhodnocení testu několika vybraných českých internetových prezentací, které byly prověřeny z hlediska uvedených technik útoku. Klíčová slova: Bezpečnost, internetová aplikace, SQL injekce Abstract: This article deals with problems of Internet applications security. The article presents the basic techniques of attack upon the Internet application and the main bugs, which can be found in many web-based applications. The most important part of this article presents results of the test of several Czech Internet applications. Keywords: Security, internet application, SQL injection 1. ÚVOD Bezpečnost internetových aplikací je jedním z nejsledovanějších a nejčastěji diskutovaných témat z oblasti internetových technologií. Většinou se v tomto kontextu mluví o kryptografii, protokolu SSL nebo nejrůznějších způsobech autentizace a autorizace. Tento článek se zabývá jinými aspekty bezpečnosti internetových aplikací. Je zaměřen především na vývojáře a nejčastější prohřešky proti bezpečnosti, kterých se mohou dopoustit. V článku budou představeny některé velice rozšířené a nebezpečné chyby včetně způsobů, jakým se tyto chyby dají zneužít při případném útoku na webovou prezentaci. Součástí příspěvku bude prezentace výsledků menšího průzkumu, jehož cílem bylo zjistit úroveň zabezpečení vybraných českých internetových prezentací. 2. METODIKA PRÁCE V úvodu práce budou popsány nejčastější prohřešky proti bezpečnosti internetových prezentací včetně způsobů, jakým se dají tyto nedostatky využít při případném útoku na internetovou prezentaci. Příklady budou realizovány v jazyce PHP. Samotný průzkum úrovně zabezpečení bude představovat především výběr vhodných internetových prezentací a provedení pokusu o využití potenciálních nedostatků v jejich implementaci. Internetové prezentace budou vybrány pomocí katalogového vyhledávače

Seznam.cz velice jednoduchým způsobem. Budou zvoleny 4 sekce katalogu, které zde kvůli ochraně testovaných prezentací nebudou uvedeny. Z těchto sekcí budou vybrány prezentace, které se nacházejí na prvních pozicích. Vzhledem k obchodní politice společnosti Seznam.cz (první pozice v příslušných sekcích jsou placené) se tedy jedná o profesionální nebo alespoň poloprofesionální prezentace s poměrně vysokou návštěvností. U jednotlivých prezentací bude provedeno několik testů, upravených dle technologií, které byly použity pro tvorbu příslušné webové prezentace. Výsledky testů budou shrnuty v kapitole č. 4. Autor příspěvku prohlašuje, že veškerá slabá místa příslušných aplikací nezneužil žádným destruktivním způsobem a všechny chyby ihned nahlásil provozovatelům prezentace. 3. POPIS NEJČASTĚJŠÍCH PROHŘEŠKŮ PROTI BEZPEČNOSTI Testování bezpečnosti by mělo být samozřejmou součástí vývoje každé netriviální internetové aplikace. Bohužel tento typ testování představuje velice časově náročnou a tedy i nákladnou činnost, která nemá na první pohled pro autora ani zákazníka žádný efekt. Konkurence v oblasti tvorby internetových aplikací je velice vysoká a ceny tím pádem značně stlačené dolů. Výsledkem tohoto stavu je často záměrné opomenutí testování. Pokud na testování prostředky přesto zbydou, je testována především funkčnost aplikace a na bezpečnost se zapomíná. Následující odstavce budou věnovány jednotlivým prohřeškům proti bezpečnosti. 3. 1. SQL injekce SQL injekce je poměrně stará technika útoku na webovou prezentaci. Přesto stále patří k těm nejoblíbenějším a nejvíce nebezpečným. Je zřejmé, že tento způsob útoku se týká pouze dynamických internetových prezentací, tedy prezentací generovaných na základě dat uložených v databázi. SQL injekce využívá, jak již samotný název říká, k útoku jazyka SQL, respektive záměrné modifikace dynamicky generovaných SQL dotazů. Při generování dynamické webové prezentace se obvykle použije několika SQL dotazů, které jsou sestavovány na základě parametrů aktuální URL. Tyto parametry jsou v příslušném aplikačním kódu webové stránky přímo vkládány jako součást řetězce, který je posléze poslán jako SQL dotaz na databázový server. Pokud útočník ovládá jazyk SQL, zná použitý databázový server a odhalí fungování prezentace, na kterou útočí, může správným zápisem příslušného parametru URL převzít kontrolu nad databází. 3. 1. 1. Příklady SQL injekce Příklad č. 1 Celou problematiku ilustruje následující příklad. Jedná se o zjednodušený dotaz na seznam zboží pro příslušnou kategorii v elektronickém obchodě. Na první pohled je dotaz zcela neškodný, pokud jsou ovšem na všechna místa doplněny očekávané údaje. URL www stránky: http://www.web.cz/list.php?cat_id=4 Kód generovaného dotazu: $item_query= SELECT t_items.name FROM t_items WHERE t_items.t_items_cat_id=.$_get[ cat_id ]. ORDER BY t_items.name ; V parametru $_GET[ cat_id ] očekáváme celé číslo, které udává primární klíč záznamu příslušného záznamu. Pokud tento vstupní parametr, který přichází metodou GET pomocí požadavku na URL příslušné stránky, není ošetřen, můžeme provést například následující útok. Modifikované URL: http://www.web.cz/list.php?cat_id=4;drop%20table%20t_items;#

Vygenerovaný dotaz: SELECT t_items.name FROM t_items WHERE t_items.t_items_cat_id=4; DROP table t_items;# ORDER BY t_items.name ; Středníkem jsme ukončili první dotaz, poté jsme provedli výmaz databázové tabulky a pomocí # jsme zakomentovali zbytek dotazu, tak aby byl dotaz korektní. Komentáře se liší podle použitého SQL serveru. U MSSQL nebo PostgreSQL stačí # nahradit pomocí --. Příklad č. 2 Dalšími velice častými způsoby útoku pomocí SQL injekce je využití klauzule UNION. V tomto případě musíme znát počet atributů, které má mít výsledek vrácený databázovým serverem (lze zjistit postupem pokus omyl). Poté můžeme k původnímu dotazu připojit například následující dotaz, kterým si do výpisu zboží přidáme i seznam uživatelských účtů a hesel. Doplněný SQL dotaz: union select concat(uname,passwd) as name from user; Zápis příslušného URL: http://www.web.cz/list.php?cat_id=4%20union%20select%20concat(user, password)%20as%20name%20from%20user;# Je zřejmé, že útočník musí mít dobré znalosti syntaxe příslušného databázového serveru. Potřebné jsou někdy také dodatečné informace o struktuře databáze, názvech databázových tabulek a názvech jejich atributů. K těmto informacím se lze dostat většinou velice jednoduše. Pokud vyvoláme záměrně chybu v SQL dotazu vložením nekorektního obsahu do URL, je většinou vráceno chybové hlášení, které popisuje kde chyba nastala. Z popisu chyby se můžeme dozvědět dostatek informací pro provedení útoku. 3. 1. 2. Způsoby ochrany proti SQL injekci Způsoby ochrany proti SQL injekci jsou poměrně jednoduché. Obecně je můžeme rozdělit na dvě skupiny. Zabezpečení ze strany autorů databázového serveru. Společnosti zabývající se vývojem databázových systémů jsou si nebezpečí SQL injekce rovněž vědomi. Proto se snaží proti tomuto způsobu bránit nejrůznějšími způsoby. Například v MySQL nelze od verze 4.1 provádět mnohonásobné dotazy. Výše uvedený příklad by tedy u novější verze tohoto databázového serveru nefungoval. Zabezpečení ze strany vývojáře Testovat hodnoty vstupních parametrů pro generování dotazu pomocí metod, které testují datový typ vstupního parametru, případně pomocí regulárních výrazů. Omezovat práva uživatele, na kterého se připojujeme do databáze. Pro většinu tabulek stačí právo na SELECT. Nepřipojovat se jako administrátor. Ošetřit apostrofy escape sekvencí. V mnoha případech SQL injekce potřebuje útočník použí apostrof pro ukončení řetězce v SQL dotazu nebo dopsání nebezpečné části dotazu. Proto bychom měli na vstupu tyto hodnoty ošetřit. Nepoužívat neověřený a neotestovaný software jako součást naší aplikace. Mnoho zdarma dostupných systémů nemá ošetřenu možnost SQL injekce. Potlačení výpisu chybových hlášení na obrazovku. Lze využíl log soubory, ladění povolit pouze při vývoji a po nasazení do ostrého provozu ladění vypnout. 3. 2. Ošetření vstupních dat od uživatelů Každý uživatelský vstup, který je zpracováván v internetové aplikaci, je potenciálně nebezpečný. Velké nebezpečí pro webovou aplikaci představují především ty části prezentace,

kde je uživateli umožňěno určitým způsobem modifikovat obsah webu. Respektive z dat přijmutých od uživatele se generuje obsah prezentace. Typickým příkladem takových aplikací jsou diskuzní fóra, návštěvní knihy, online bazary atd. Zanesení škodlivého obsahu může zásadním způsobem ovlivnit chování prezentace nebo její vzhled. Obecně lze rozlišovat dva způsoby útoku. Prvním způsobem útoku je vložení klientského skriptu do vstupního textového pole (např. při přidávání inzerátu v online bazaru). Typickým příklad útoku, je vložení následujícího textu do jakéhokoliv vstupního pole webového formuláře. <script type= text/javascript >window.close();</script> Pokud je tento text uložen do databáze beze změny a je posléze použit pro generování stránky, je zřejmé, že si tuto stránku nepřečte již nikdo, kdo má v prohlížeči povolený JavaScript. Druhým typickým příkladem je zanesení (X)HTML kódu do webové stránky. Pro formátování a tvorbu layoutu webu se většinou používá tabulek <table> nebo bloků <div>. Velké nebezpečí potom představuje ukončení bloku nebo tabulky pomocí </div> nebo </table> kdekoliv uprostřed stránky. Nejčastějším způsobem útoku je například vložení následujícího kódu. </div></div></div></table></table></table> Tento kód může velice závažným způsobem narušit celkový vzhled stránky. Většinou vede k totálnímu rozpadnutí layoutu celého webu. Ochrana proti tomuto útoku je poměrně jednoduchá. Většina jazyků používaných pro tvorbu dynamických webů obsahuje funkce nebo metody pro převod těchto značek na html entity nebo minimálně na odstranění tagů uzavřených do špičatých závorek. Velice vhodným nástrojem pro ošetření vstupů od uživatele jsou regulární výrazy. 3. 3. Práce se soubory a adresáři Velmi nebezpečné může být také mazání souborů a adresářů na webovém serveru pomocí skriptů, které jsou řízeny požadavky z URL. Pokud například v URL předáváme název souboru, který má být smazán, může dojít k situaci popsané v následujícím příkladu. Aplikační kód: unlink( images/.$_get[ file ]); Bezpečné URL: http://www.web.cz/delete.php?file=image.jpg Nebezpečné URL: http://www.web.cz/delete.php?file=../../configuration/confi g.php Jak je vidět z ukázky, pokud neošetříme vstup $_GET[ file ], můžeme skrze URL mazat libovolné soubory, ke kterým má skript přístupová práva na zápis. Jednoduchým způsobem, kterým se dá těmto problémům předejít, je využívat pro ošetření vstupů regulární výrazy nebo speciální funkce či metody příslušného programovacího jazyka. 3. 4. Ukládání konfiguračních údajů Konfigurační údaje pro příslušnou webovou aplikaci se často ukládají do samostatných konfiguračních souborů, které jsou aplikací dle potřeby načítány. Součástí těchto souborů bývají většinou i přihlašovací údaje do databázového systému nebo na ftp server. Konfigurační údaje jsou většinou definovány v příslušném programovacím jazyce jako konstanty programu. Nejdůležitější krok, který může vést k zásadní snížení bezpečnosti aplikace, představuje pojmenování tohoto souboru. Při jeho pojmenování musíme brát ohled na použitý webový server a serverovou skriptovací technologii. Pokud totiž souboru dáme koncovku.ini nebo.conf a používáme například webový server Apache nebo ISS, je při požadavku na vystavení takového souboru zaslán do prohlížeče kompletní obsah souboru. Tzn. obsah souboru není

interpretován. Proto se pro pojmenování konfiguračních souborů doporučuje používat takové koncovky, které zaručí vykonání kódu i při požadavku na samostatný soubor. Konfigurační soubory pro PHP skripty by tedy měly mít koncovku.php, pro ASP skripty.asp atd. Zde záleží na konfiguraci webového serveru. 4. PRŮZKUM ÚROVNĚ ZABEZPEČENÍ VYBRANÝCH INTERNETOVÝCH PREZENTACÍ Celkem bylo otestováno 20 prezentací, které byly vybrány dle postupu popsaného v kapitole č. 2. Důležité je poznamenat, že výsledky testů jsou subjektivní a závisí především na znalostech a schopnostech testera. Testy probíhaly vždy na základě stejného scénáře, ovšem samotná konfigurace testu se pro každou prezentaci lišila, především na základě technologií použitých pro implementaci příslušného webu. Podrobnosti o jednotlivých testech zde nebudou z bezpečnostních důvodů uvedeny. Nicméně všechny vycházely z obecných principů popsaných v kapitole č. 3. Velice důležité je poznamenat, že při testech nedošlo k žádnému omezení činnosti příslušných prezentací a veškerá nalezená slabá místa byla ihned nahlášena provozovatelům prezentací. Typ testu Vyhovělo Nevyhovělo SQL injekce 15 5 Ošetření uživatelských vstupů 14 6 Nechráněná konfigurace 19 1 5. ZÁVĚR I přesto, že test popsaný ve 4. kapitole byl především z časových důvodů málo rozsáhlý a výběr testovaných prezentací byl proveden subjektivně, můžeme z výsledků částečně vyvodit určité závěry. Testování bezpečnosti je v českých firmách věnujících se vývoji webových aplikací stále nezvykle často opomíjeno. O prohřešcích proti bezepečnosti, které byly popsány ve 3. kapitole se můžeme dočíst v téměř každé kvalitní publikaci o webové tvorbě nebo manuálech k příslušným technologickým nástrojům. I přesto zůstává neúměrně velké množstí aplikací z bezpečnostního hlediska naprosto nevyhovujících. Důvody bychom mohli pravděpodobně hledat v malé kvalifikaci tvůrců webových aplikací a snahách snižovat náklady na vývoj za každou cenu. Pokud ovšem chceme provozovat tak kritické aplikace, kterými jsou například elektronické obchody, a chceme, aby uživatelé iternetovým aplikacím důvěřovali, nesmí být tato fáze vývoje v žádném případě opomíjena. Literatura: 1. WELLING, L.,THOMSON, L. PHP a MySQL: rozvoj webových aplikací. Praha: Soft Press, 2002. 718 s. ISBN 80-86497-20-8. 2. ANLEY, Chris. Advanced SQL Injection In SQL Server Applications [online]. 5. 10. 2002, [cit. 2004-05-05]. Dostupné z: <http://www.nextgenss.com/papers/advanced_sql_injection.pdf>. 3. HARPER, Mitchel. SQL Injection Attacks - Are You Safe? [online]. 17. 5. 2002, [cit. 2004-05-05]. Dostupné z: <http://www.sitepoint.com/article/794>. Kontaktní adresa autora: Ing. Petr Zelenka, Katedra informačního inženýrství, Provozně ekonomická fakulta, ČZU Praha, e-mail: zelenka@pef.czu.cz