IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 1 - Úvod do bezpečnosti webových aplikací

Bezpečnost webových aplikací je v dnešní době důležité, avšak často opomíjené téma. V tomto kurzu se nejdříve seznámíme s webovou aplikací a její architekturou, abychom měli například přehled, v jaké vrstvě útočník šťourá. Poté si povíme něco o konkrétních bezpečnostních hrozbách a u každé z nich si uvedeme možnosti, jak se před ní chránit. Uvedeme si například phishing, to je metoda, při které se z nás útočník snaží dostat citlivé informace. Další příklad může být útok zvaný SQL injection, při kterém se útočníkovi podaří získat či pozměnit data v databázové tabulce za využití chytře použitého příkazu SQL. To je jen pro kratší úvod, ukážeme si toho mnohem více :)

Webová aplikace

Webovou aplikací se rozumí taková aplikace, která je poskytována uživatelům z webového serveru přes počítačovou síť. Uživatel používá aplikaci skrze klienta, který je v tomto případě webový prohlížeč. V rámci webových aplikací je webový prohlížeč často označován jako tenký klient, protože prohlížeč sám o sobě nezná logiku aplikace.

V dnešní době jsou webové aplikace velice populární, hlavně díky řadě uživatelsky přívětivých výhod. Oproti protějšku webové aplikace v podobě aplikace typu klient-server nemusí uživatel nic instalovat, dokonce nemusí nic aktualizovat a pro práci s aplikací mu postačí obyčejný webový prohlížeč. Mezi další výhody také patří to, že jsou data uložena v databázovém serveru a jsou přístupná odkudkoliv. Mezi nevýhody webových aplikací může spadat nutnost připojení k internetu a s tím spojený možný pomalý tok dat při přetížení sítě. Jako další nevýhody lze považovat již zmíněné bezpečnostní rizika, o kterých si více povíme v dalších lekcích.

Webových aplikací je dnes celá řada, jako příklad si můžeme uvést e-mailové schránky, internetová bankovnictví, sociální sítě, e-shopy, informační systémy, diskuzní fóra nebo také síť ITnetwork.

Webové aplikace jsou typicky navrhnuty za užití třívrstvé architektury. První vrstva je prezentační, kterou tvoří webový prohlížeč. Druhá neboli střední vrstva je logická, která tvoří nástroj pro dynamické generování HTML stránek. Poslední vrstva je datová a tvoří ji databázový server. Webový prohlížeč komunikuje se střední vrstvou zasíláním požadavků, střední vrstva potom zasílá dotazy do databáze a generuje uživatelské rozhraní v podobě webových stránek:

Znázornění principu třívrstvé architektury webových aplikací. - Bezpečnost webových aplikací v PHP

Znázornění principu třívrstvé architektury webových aplikací.

Řada webových aplikací je napsána v čistém programovacím jazyce (například PHP). Optimálnější cestou pro tvorbu webové aplikace je použít tzv. framework, pro PHP je to například Nette, CodeIgniter, Laravel, Symfony, ... Frameworky nabízejí programátorům řadu výhod, jako je například vyvarování se různým bezpečnostním chybám.

Model ISO/OSI

Něž si něco povíme o bezpečnostních rizicích webových aplikací, pojďme si představit model ISO/OSI, který byl roku 1984 přijat jako mezinárodní norma. Účelem modelu ISO/OSI je poskytnout základ pro vypracování norem pro účely propojování systémů. V podstatě model nepopisuje implementaci, ale naopak zavádí principy sedmivrstvé síťové architektury. U každé z vrstev uvádí jejich funkce a služby:

  • Fyzická vrstva (Physical layer) - nejnižší vrstva komunikace, která udržuje, aktivuje a deaktivuje fyzické spoje mezi koncovými systémy.
  • Linková vrstva (Link layer) - poskytuje spojení mezi dvěma sousedními systémy. Stará se o uspořádání dat z fyzické vrstvy do tzv. rámců.
  • Síťová vrstva (Network layer) - zařizuje směrování v síti a síťové adresování. Poskytuje spojení dvou systému, které spolu přímo nesousedí.
  • Transportní vrstva (Transport layer) - poskytuje přenos dat mezi koncovými uzly, mezi nejznámější protokoly patří UDP a TCP.
  • Relační vrstva (Session layer) - zařizuje organizaci a synchronizaci dialogu mezi účastníky relační vrstvy obou systémů.
  • Prezentační vrstva (Presentation layer) - zařizuje transformaci dat do tvaru, který požaduje aplikace.
  • Aplikační vrstva (Application layer) - účelem vrstvy je poskytnout aplikacím přístup ke komunikačnímu systému a umožnit tak jejich spolupráci.

V praxi se spíše uplatňuje model TCP/IP, který obsahuje pouze čtyři vrstvy:

Rozdíly modelů ISO/OSI a TCP/IP. - Bezpečnost webových aplikací v PHP

Rozdíly modelů ISO/OSI a TCP/IP.

  • Vrstva síťového přístupu - nejnižší vrstva komunikace, umožňuje přístup k síťovému médiu.
  • Síťová vrstva - podobně jako v ISO/OSI zařizuje vrstva směrování v síti a síťové adresování.
  • Transportní vrstva - opět podobně jako v ISO/OSI zajišťuje přenos dat mezi koncovými uzly a jejich celistvost.
  • Aplikační vrstva - obsahuje protokoly k přenosu konkrétních dat, jsou to například FTP a HTTP.

Bezpečnost webových aplikací

V dnešní době většina firem chrání své infrastruktury pomocí bezpečnostních technologií. Celkem úspěšně tak chrání nižší vrstvy aplikační komunikace popsané v modelu ISO/OSI. Mezi tyto technologie spadají například firewally, které plní funkci paketových filtrů, nebo také IDS (Intrusion detection system), což je systém, který monitoruje síť a upozorňuje na podezřelou komunikaci. Bohužel ta nejvyšší vrstva, vrstva aplikační, je implementace bezpečnostních prvků zanedbávána. Mezi hlavní důvody patří nízké povědomí o možných chybách na straně vývojářů. Na druhé straně se také projevuje neschopnost zákazníka projevit jasné požadavky na vývoj aplikace a její bezpečnost. Mezi útoky na aplikační vrstvu se řadí zejména Cross-site scripting (XSS) a již zmíněný SQL injection o kterých se společně dozvíme v dalších lekcích.

Web application firewall

Web application firewall, zkráceně WAF, je nástroj pro ochranu webových aplikací před útoky na aplikační vrstvu. Od klasických firewallů se liší v tom, že WAF je schopen vyfiltrovat obsah specifických webových aplikací, zatímco obyčejný firewall slouží pouze jako jakýsi bezpečnostní checkpoint, který se na obsah nedívá. Díky filtrování obsahu je WAF schopen zabránit mnoha bezpečnostním útokům, tím že blokuje HTTP provoz obsahující podezřelý obsah. WAF není ultimátní ochranou aplikace před útokem. Snaží se ochránit pouze 7. aplikační vrstvu, měl by proto být použit spolu s běžnými firewally a jinými bezpečnostními technologiemi, které se starají o ochranu nižších vrstev.

Níže je pěkně znázorněný obrázek reprezentující firewall přímo od Cloudflare:

Web application firewall - Bezpečnost webových aplikací v PHP

WAF typicky používá pro ochranu aplikace takzvaný pozitivní či negativní bezpečnostní model nebo jejich kombinaci. Oba přístupy pracují na stejném principu, blokují či povolují komunikaci na základě předem nastaveného seznamu pravidel. Pozitivní bezpečnostní model přijímá pravidla v podobě povolených vstupů, s každým přidaným pravidlem se objem povolených vstupů zvětšuje. Pokud modelu nejsou zadána žádná pravidla, tak blokuje veškerou komunikaci. Na druhé straně spektra negativní bezpečnostní model přijímá pravidla v podobě vstupů, které jsou zakázané a s každým přidaným pravidlem se zvětšuje objem zakázaných vstupů. Na rozdíl od pozitivního modelu, pokud nejsou zadána žádná pravidla, model povoluje veškerou komunikaci. Oba modely jsou teoretické a v praxi se užívá přístup, který spadá někde na pomezí obou modelů.

Na trhu existují komerční WAFy mezi které patří například Sucuri Website Firewall, AppTrana či Cloudflare WAF. Existuje ale také pár open-source WAFů, mezi které můžeme zařadit Modsecurity, AQTRONiX WebKnight nebo NAXSI. WAF bez skupiny pravidel, kterými se bude řídit, je ale zbytečný. Existují proto také open-source sady pravidel. Jako příklad si můžeme uvést sadu pravidel společnosti OWASP, kterou je možno použít s open-source enginem ModSecurity.

V další lekci, Technika útoku SQL injection, se seznámíme s útokem SQL injection.


 

Všechny články v sekci
Bezpečnost webových aplikací v PHP
Přeskočit článek
(nedoporučujeme)
Technika útoku SQL injection
Článek pro vás napsal Jan Hranický
Avatar
Uživatelské hodnocení:
25 hlasů
Aktivity