Jeremiah Grossman by vás rád upozornil na to, že firewally a SSL šifrování nezabrání žádnému hackerovi, aby se nedostal na vaše stránky e-commerce, nenaboural data vašich zákazníků a třeba vás neobral o peníze. Je tomu tak proto, že většina útoků na webové stránky dnes využívá "bugy" v samotné webové aplikaci a ne v operačním systému, na kterém tato aplikace funguje. Grossman je zakladatel a CTO společnosti WhiteHat Security, firmy se sídlem v Silicon Valley, která nabízí outsourcing služby označované jako Website Vulnerability Management. WhiteHat s využitím kombinace proprietárního skenování a tzv. etického hackingu vyhodnocuje bezpečnost internetových stránek svých klientů a hledá potenciálně využitelná zranitelná místa.
Firma WhiteHat provádí svoje skenování s použitím standardního webového http protokolu, aniž by měla přístup ke zdrojovému kódu klienta a zvenčí ve vztahu ke klientově firewallu.
Tento přístup bývá někdy označován jako "black box testing", protože obsah webových stránek při něm představuje pro ty, kdo vyhodnocují jejich bezpečnost, něco jako černou skříňku.
Problém u tohoto způsobu testování samozřejmě je, že nemůže postihnout řadu zranitelných míst a zadních vrátek, která jsou skryta ve zdrojovém kódu - testování "černé skříňky" může odhalit jen ty zranitelnosti, které jsou viditelné pro toho, kdo používá vaše internetové stránky. Výhodou tohoto přístupu ale je, že přesně napodobuje způsob, jakým by při svém průzkumu a průlomu postupoval hacker.
Setkal jsem se s Grossmannem na letošní konferenci RSA Data Security v San Francisku a pak ještě jednou na dohodnuté schůzce počátkem března. To, co mi řekl, nebylo zas tak překvapivé, ale přesto to bylo mimořádně znepokojivé. Podle Grossmana jde o následující:
- WhiteHat dokáže najít významná zranitelná místa u zhruba 80 procent webových stránek, které analyzuje.
- Oněch 20 procent, která zranitelná místa nemají, jsou obvykle jen internetové "brožury" - tedy stránky bez aktivních aplikací e-commerce.
- Většina vedoucích pracovníků je přesvědčena, že firewally chrání internetové stránky proti útokům na webové aplikace. (Nechrání.)
Předtím, než Grossman založil WhiteHat, pracoval dva roky v bezpečnostní skupině Yahoo. Otestovat každou ze stránek Yahoo zabralo jeho týmu zhruba týden. Tímto tempem by potřebovali přes 10 let k prověření všeho, co má Yahoo on-line - za předpokladu, že by se tyto stránky neměnily. Ale ony se mění. A pokaždé, když se webové stránky zásadním způsobem předělávají, je potřeba je testovat znovu, jinak by nově vzniklá zranitelná místa unikla bez povšimnutí.
Systémy Yahoo byly chráněny firewally a různými druhy přístupů k izolaci sítí. Tyto technologie však nebrání většině útoků zaměřených na webové aplikace. Firewally a izolované sítě brání útočníkovi na internetu, aby dosáhl interakce se službou. Webové aplikace musejí však ze své podstaty být otevřené pro kohokoliv na internetu. Pokud by obchodník měl používat firewall k tomu, aby zabránil v přístupu do svého systému nákupních košíků, nikdo z uživatelů internetových stránek by si nemohl nic koupit.
ZABUDOVANÁ, NE NAŠROUBOVANÁ
Protože nemůžete chránit své webové aplikace firewallem, jediný způsob, jak to udělat, je zabudování ochrany do samotné aplikace. Je to obtížnější, než by se zdálo, protože každá webová aplikace má dvě části: tu, která funguje na serverech, a tu, která běží ve webovém prohlížeči vašich zákazníků. Přidání ochrany k webové aplikaci znamená, že vývojář musí vyvinout program, kde jedna polovina nedůvěřuje té druhé. To je pro většinu vývojářů téměř nepřekonatelně obtížná představa.
Jedním z běžných typů zranitelnosti na dnešním internetu je něco, co se označuje jako zranitelnost v důsledku předvídatelného identifikátoru. Zpravidla se to děje takto: část webových stránek je nastavena tak, aby zobrazovala informace, kdykoliv webový prohlížeč požádá o nějakou informaci s použitím jistého identifikátoru. Například určitá URL by mohla zobrazit šek, jakmile by jí bylo poskytnuto číslo účtu a číslo šeku. Vývojář by se mohl domnívat, že to nepředstavuje problém, protože kdokoliv, kdo zná číslo účtu a číslo šeku, by měl mít právo ten šek vidět. Problém ale je, že čísla šeků se dají předvídat - jsou vydávána popořadě. Takže osoba, která obdržela od někoho jeden šek, si bude moci prostou metodou "pokus-omyl", při které bude zkoušet různá čísla šeků, zjednat přístup ke všem dalším šekům, které dotyčný vypsal.
Tato zranitelnost v důsledku předvídatelného identifikátoru se během času projevovala mnoha různými způsoby. Před lety se stal případ, kdy z jistých internetových stránek poslali zákazníkům URL, aby se mohli podívat na své stvrzenky. Na URL bylo číslo. Pokud by zákazníci tato čísla postupně zvyšovali nebo snižovali, mohli vidět data týkající se jiných zákazníků. A sotva před pár měsíci bezpečnostní inženýři WhiteHatu objevili webové stránky, kde uživatelé bezplatných služeb nabízených na těchto stránkách se mohli dostat i ke službám, které byly určeny jen uživatelům s placenými účty. Celkově se podle Grossmana zjistilo, že jedny ze čtyř webových stránek, které WhiteHat testoval, mají tento typ zranitelného místa.
Dalším běžným typem zranitelnosti je tzv. SQL Injection Attack (útok podsunutím části SQL dotazu). Tyto zranitelnosti vznikají, když informace poskytnuté uživatelem internetových stránek nejsou řádně ověřeny, než jsou použity k vytvoření dotazu, který je napsán tzv. Structure Query Language, jazykem rozhraní, který používá většina dnešních databázových systémů. Tento typ útoků může zasahovat jak soukromí zákazníka, tak integritu finančních informací. WhiteHat zjistila, že vůči tomuto typu zranitelnosti je náchylná jedna z pěti webových stránek.
Pak je tady ještě jeden typ zranitelnosti, a sice vůči útoku metodou cross-site scripting (XSS). Tyto útoky jsou možné tehdy, jestliže webová aplikace přijímá zprávu od jednoho uživatele a zobrazuje ji jinému uživateli bez řádného filtrování. To je problém, protože zprávy na webu mohou obsahovat JavaScript, přičemž JavaScript je programovací jazyk, ve kterém je napsána polovina klientovy webové aplikace. U cross-site scriptingu jeden uživatel může doslova převzít účet druhého uživatele jen díky tomu, že pošle tomuto uživateli zprávu a nechá ho, aby si ji přečetl.
Tyto útoky se objevily na stránkách, kde si uživatelé mohou vzájemně posílat zprávy, jako je LiveSpace and LinkedIn, na těch, kde uživatelé mohou posílat obsah, jako je eBay and Wikipedia, a dokonce na stránkách, které umožňují uživatelům uploadovat databáze linků (protože URL mohou obsahovat JavaScript). Vůči tomuto typu útoku je zranitelných sedm z deseti stránek, říká Grossman.
Existují dva způsoby, jak řešit systémové problémy jako předvídatelné identifikátory, SQL injection a cross-site scripting. První je vzdělávání vývojářů - je třeba naučit vývojáře, aby psali kódy bez "brouků". Grossman se domnívá, že tento způsob je nejlepší, ale varuje, že viditelnějších výsledků se nedočkáme dříve než za několik let. Důvodem je to, že velké společnosti, které zaměstnávají stovky vývojářů, mají velkou fluktuaci, takže budou nějakou dobu jen dohánět. Přitom k tomu, aby stránky byly zranitelné, stačí jediný bug.
Druhý bezpečnostní přístup spočívá v tom, že se legacy webové aplikace přepíší moderními vývojářskými nástroji, které jsou méně náchylné vůči tomuto typu problémů.
OTÁZKA TECHNOLOGIÍ
Ze své strategicky výhodné pozice u White--Hat už Grossman viděl řadu organizací migrovat webové stránky z původního ASP Microsoftu na ASP.Net. "Klasický ASP, první generace webových stránek ASP, je obvykle zamořen zranitelnými místy," říká. Ale když tyto organizace své aplikace přepsaly pomocí ASP.Net, co do bezpečnosti se ohromně zlepšily. "Titíž vývojáři, dva rozdílné rámce. Nebyl to problém vzdělávání, byla to otázka technologie."
Novější platformy jsou bezpečnější než ty staré, protože jejich rámec poskytuje vlastní bezpečné knihovny (native secure libraries) a aplikační rozhraní pro správu účtů, login a logout, session handling, ověřování vstupních dat atd. Je také důležité, aby firma standardizovala jeden systém vývoje aplikací. Tak bude moci rozšiřovat vlastní firemní expertizu a nebude ke každému novému projektu přistupovat zcela od nuly.
Jiné firmy mají problémy s procesy. Například skener společnosti WhiteHat někdy najde zranitelné místo, když stránky prohledává poprvé, ale podruhé už na ně nenarazí. "Naše systémy se domnívaly, že to bylo opraveno, a "případ" uzavřely." Ale napotřetí se zranitelné místo někdy objeví znovu.
V takovýchto případech je zvykem, že WhiteHat zákazníkovi zavolá. Vývojáři se podívají na své webové servery a konstatují, že zranitelné místo neexistuje. A skutečně, na některých skenech tam je, na jiných ne!
"Říkáme tomu klapání," vysvětluje Grossman. Řada webových stránek má systémy vyvažované podle vytížení na jediné URL. Každý z těchto systémů má používat přesně stejný kód, ale někdy tomu tak není. "Některé systémy se hned opraví, jiné ne," říká. Tyto "bugy" se dají jen velice těžko najít, protože to vyžaduje, aby zákazník prověřil každý z předpokládaně identických webových serverů a hledal rozdíly.
U další společnosti - jisté finanční instituce - WhiteHat objevil snadno zneužitelnou zranitelnost, která by umožňovala zákazníkům krást firmě peníze. WhiteHat do firmy zavolal a problém byl opraven do 24 hodin. O pár měsíců později byl ale zpátky.
"Vývojáři tou dobou pracovali na další verzi, která měla být uvedena během dvou tří měsíců. Někdo z nich ale nepřenesl opravu z produkčního serveru na vývojářský. Takže když pak o tři měsíce později provedli spuštění, spustili zároveň i ten původní problém.
Nikdy jsem nebyl velkým zastáncem penetračního testování, ale ty dvě hodiny, které jsem strávil hovorem s Grossmanem, mě přesvědčily, že je to nezbytná součást dnešních webových stránek e-commerce. Ano, bylo by krásné eliminovat tyto známé "brouky" lepším kódováním. Ale žijeme v reálném světě. Raději hledat brouky a opravovat je, než si jen držet palce a doufat, že tam nejsou.