9 Populárních typů injekcí webových aplikací

Webové aplikace jsou neustále vystaveny riziku, protože jsou dostupné milionům uživatelů internetu. Mnozí z nich se pokoušejí prolomit jejich zabezpečení z různých pohnutek.

V počátcích internetu byly útoky hrubou silou, založené na opakovaném zkoušení různých kombinací uživatelských jmen a hesel, velmi běžné. Tyto útoky prováděli automatizovaní boti nebo jednotlivci s dostatkem volného času, kteří zkoušeli miliony kombinací, dokud nezískali přístup.

Díky zavedení silných hesel, omezení počtu pokusů o přihlášení a CAPTCHA se útoky hrubou silou staly méně efektivními. Nicméně kybernetičtí zločinci neustále hledají nové způsoby, jak zneužít systémy. Zjistili, že textová pole v aplikacích a na webových stránkách mohou být zneužita vložením neočekávaného textu, který donutí aplikaci provést nežádoucí akce. Tím se objevily injekční útoky.

Injekční útoky se nepoužívají jen pro neautorizované přihlášení do aplikace bez znalosti přihlašovacích údajů. Mohou také odhalit soukromé, důvěrné nebo citlivé informace, nebo dokonce převzít kontrolu nad celým serverem. Tyto útoky představují riziko pro webové aplikace, jejich uživatele a v nejhorších případech i pro další propojené aplikace a služby.

Vkládání kódu

Vkládání kódu je jedním z nejběžnějších typů injekčních útoků. Pokud útočníci znají programovací jazyk, framework, databázi nebo operační systém, který aplikace používá, mohou vložením kódu do textových vstupních polí přinutit webový server, aby provedl požadovanou akci.

Tyto útoky jsou možné u aplikací, které nedostatečně ověřují vstupní data. Pokud textové pole umožňuje uživatelům zadat libovolný text, je aplikace zranitelná. Pro zabránění těmto útokům je nutné omezit rozsah vstupních dat, kontrolovat jejich formát před zpracováním a omezit povolené znaky.

Chyby zabezpečení vkládání kódu lze snadno odhalit testováním vstupních polí aplikace různými typy dat. Jejich zneužití může být středně obtížné, ale v případě úspěchu může mít závažné důsledky, jako je ztráta důvěrnosti, integrity, dostupnosti nebo funkčnosti aplikace.

SQL injekce

Útok SQL injection je podobný vkládání kódu, ale namísto toho vkládá skript SQL – jazyk používaný databázemi pro dotazování. Tento skript je odeslán aplikaci, která ho přímo spustí v databázi. Útočník tak může obejít přihlašovací obrazovku, číst citlivá data, upravovat nebo ničit data v databázi nebo provádět administrátorské operace.

Aplikace využívající PHP a ASP jsou náchylnější k útokům SQL injection kvůli starším rozhraním. Aplikace J2EE a ASP.Net jsou obvykle lépe chráněny. Pokud je zranitelnost SQL injection nalezena, možnosti útoku jsou omezeny pouze schopnostmi a fantazií útočníka. Dopad takového útoku je proto velmi významný.

Příkazová injekce

I tento typ útoků je způsoben nedostatečnou validací vstupu. Na rozdíl od vkládání kódu vkládá útočník systémové příkazy. Útočník nemusí znát programovací jazyk aplikace, ani jazyk databáze. Musí však znát operační systém serveru.

Vložené systémové příkazy jsou prováděny operačním systémem s oprávněními aplikace, což může vést k zpřístupnění obsahu souborů, zobrazení struktury adresářů serveru nebo změně uživatelských hesel.

Správci systémů mohou těmto útokům zabránit omezením přístupových práv webových aplikací.

Skriptování napříč weby (XSS)

Pokud aplikace vkládá uživatelský vstup do výstupu bez jeho ověření nebo kódování, otevírá se možnost útoku Cross-Site Scripting (XSS). Útočník tak může vložit škodlivý kód do důvěryhodné webové stránky, který bude odeslán dalším uživatelům aplikace.

Prohlížeč oběti spustí škodlivý skript bez podezření, čímž útočník získá přístup k relacím, cookies nebo citlivým informacím uloženým v prohlížeči. Správně napsané skripty mohou dokonce přepsat obsah HTML souboru.

Útoky XSS se dělí na uložené a odražené. V uložených útocích je škodlivý skript uložen na serveru, ve fóru, v databázi nebo v logu návštěvníků. Oběť ho získá, když si prohlížeč vyžádá uloženou informaci. V odražených útocích se skript objeví v odpovědi serveru na odeslaný vstup, například v chybové zprávě nebo výsledku hledání.

Injekce XPath

Tento typ útoku je možný, pokud webová aplikace používá vstup uživatele k vytváření dotazů XPath na data XML. Princip je podobný SQL injection – útočníci vkládají chybná data, aby zjistili strukturu XML dat, a následně se k těmto datům dostali.

XPath je standardní jazyk pro definování atributů, které se mají vyhledat. Webové aplikace používají vstup uživatele k nastavení vzoru, který má odpovídat datům XML. Zadáním nesprávného vstupu může útočník změnit tento vzor v operaci, kterou chce na data použít.

Na rozdíl od SQL, XPath nemá různé verze, což znamená, že vkládání XPath je možné v jakékoli aplikaci, která používá XML data, bez ohledu na implementaci. Tento fakt také umožňuje automatizovat útok a provádět ho na velkém množství cílů.

Vložení příkazu pošty

Tato metoda útoku zneužívá e-mailové servery a aplikace, které vytvářejí příkazy IMAP nebo SMTP s nedostatečně ověřeným uživatelským vstupem. Servery IMAP a SMTP bývají méně zabezpečené než webové servery, a proto jsou náchylnější k zneužití. Útočníci mohou obejít omezení, jako jsou CAPTCHA a omezení počtu požadavků.

Pro zneužití SMTP serveru potřebuje útočník platný e-mailový účet pro odesílání zpráv s vloženými příkazy. Pokud je server zranitelný, bude reagovat na požadavky útočníka a umožní mu například obejít omezení a zneužít server k rozesílání spamu.

Injekce IMAP může být provedena hlavně v aplikacích webové pošty pomocí funkce čtení zpráv. V tomto případě může útočník vložit URL adresu s příkazy přímo do adresního řádku prohlížeče.

Injekce CRLF

Vkládání znaků pro návrat vozíku (carriage return) a odřádkování (line feed) – kombinace známá jako CRLF – do vstupních polí webových formulářů představuje metodu útoku zvanou CRLF injection. Tyto znaky označují konec řádku v mnoha internetových protokolech, jako je HTTP, MIME nebo NNTP.

Například vložení CRLF do požadavku HTTP a za něj HTML kód by mohlo uživatelům zobrazit upravenou webovou stránku.

Tento útok lze provést na webové aplikace, které nefiltrují správně vstup uživatele. Tato zranitelnost umožňuje další typy injekčních útoků, jako jsou XSS a vkládání kódu, a také může vést ke kompromitaci webových stránek.

Vložení hlavičky hostitele

Na serverech, které hostují více webových stránek, je hlavička Host nezbytná pro identifikaci, která stránka má zpracovat požadavek. Hodnota hlavičky sděluje serveru, kterému virtuálnímu hostiteli má požadavek odeslat. Pokud server obdrží neplatnou hlavičku, obvykle předá požadavek prvnímu hostiteli na seznamu. Tuto zranitelnost mohou útočníci zneužít k manipulaci s hlavičkou hostitele.

Manipulace s hlavičkou Host je běžná u aplikací v PHP, ale dá se použít i u jiných webových technologií. Útoky manipulující s hlavičkou hostitele slouží jako aktivátory pro další útoky, jako je otrávení webové mezipaměti a mohou vést k neoprávněnému provedení citlivých operací, například resetování hesla.

Injekce LDAP

LDAP je protokol pro vyhledávání zdrojů (zařízení, souborů, uživatelů) v síti. Často se používá v intranetech a systémech jednotného přihlašování. Dotazy LDAP používají speciální řídicí znaky, které ovlivňují jejich chování. Útočníci mohou změnit chování dotazu, pokud do něj vloží řídicí znaky.

Hlavní příčinou útoků LDAP injection je nedostatečně ověřený vstup uživatele. Pokud je text, který uživatel zadá, použit jako součást dotazu LDAP bez dezinfekce, může dotaz načíst seznam všech uživatelů a zobrazit ho útočníkovi.

Prevence injekčních útoků

Jak jsme viděli, injekční útoky cílí na servery a aplikace, které jsou dostupné všem uživatelům internetu. Zodpovědnost za prevenci těchto útoků je rozdělena mezi vývojáře aplikací a správce serverů.

Vývojáři aplikací musí znát rizika spojená s nedostatečným ověřováním uživatelských vstupů a musí se naučit, jak správně dezinfikovat uživatelské vstupy. Správci serverů musí pravidelně kontrolovat své systémy, odhalovat zranitelnosti a co nejrychleji je opravovat. Existuje mnoho možností pro provedení těchto auditů, buď na vyžádání, nebo automaticky.