Hlavní navigace

Injekce s dávkou jedu mohou být i smrtelné

22. 3. 2011
Doba čtení: 3 minuty

Sdílet

K nejzávažnějším útokům může dojít i po použití malé dávky řetězce znaků. Šikovnou dávkou můžete získat veškerá data anebo sprovodit web (a nejen ten) z virtuálního světa. Dnes útočníkem používajícím injekce může být téměř kdokoliv – injekce i s návodem jsou k sehnání na každém „rohu“ internetu.

V minulém díle seriálu o OWASP – Deset nejběžnějších bezpečnostních chyb na webu jsme si vyjmenovali první desítku nejzávažnějších bezpečnostních slabin webových aplikací. Dnešním dílem se začneme blíže seznamovat s jednotlivými slabinami z OWASP Top 10.

OWASP Top 10 2010 – A1 – Injection

Obecné informace:

Základní informace na stránkách OWASP: Top 10 2010 – A1

Potenciální útočníci: Interní i externí uživatelé, administrátoři aj.; všichni, kdo do systému umí poslat nedůvěryhodná data.

Vektor útoku: Útočník posílá často jednoduché textové řetězce, které využívají syntaxi cíleného interpreteru. Prakticky každý zdroj dat může obsahovat „injekci“. Útočníci nezřídka používají pro odhalení slabin fuzery a skenery.

Slabina: Injektování nastává, když aplikace nechtěná data pošle do interpreteru. Náchylnost aplikací k útokům injektováním jsou velmi časté, zvláště u starších kódů – v dotazech SQL, LDAP, XPath, OS příkazech, programových argumentech atd. Chyby se poměrně snadno dají nalézt zkoumáním kódu, hůře testováním. Při testování mohou pomoci skenery a fuzzery.

Technické dopady: Dopady mohou být velice pestré. Může dojít ke ztrátě dat či k jejich poškození, ke ztrátě odpovědnosti, odepření přístupu atd. Někdy může dojít až k úplnému převzetí kontroly nad systémem.

Obchodní dopady: Zvažte obchodní dopady dotčených údajů a platformy interpreteru. Mohou být znehodnocena nebo ukradena všechna či jen některá data. Mohla by být poškozena vaše pověst? 

Příklady možných scénářů:

K simulaci útoku používám v minulých dílech zmiňované nástroje proxy WebScarab a „trenažér“ WebGoat.

Scénář 1. Injection Flaws – Numeric SQL Injection:

1. Spusťte WebGoat.

2. Spusťte WebScarab. Položku Proxy / Manual Edit / Intercept request mějte nastavenou na off.

3. WebGoat: Zobrazte si Injection Flaws / Numeric SQL Injection

4. WebScarab: Položku Proxy / Manual Edit / Intercept request nastavte na on. V nabídce Methods vyberte POST.

5. WebGoat: Vyberte možnost z výběrového pole („Select your local weather station“). Klikněte na GO. POST požadavek je odeslán. Požadavek se však na cestě k serveru zastaví v proxy WebScarab.

6. WebScarab: Zobrazilo se nové okno – Edit Request. V záložce Parsed / URL Encoded v proměnné station přepište hodnotu „101“ na „101 OR 1=1“. Změnu akceptujte potvrzením Accept changes – tím jste odeslali změněný požadavek na server.

7. WebGoat: Zobrazil se obsah celé tabulky weather_data. I data ve výběrovém poli nepovolených položek.

8. Webgoat: Prostřednictvím „Show Java“ zobrazíte zdrojový kód, v němž můžete zjistit, že příčina úspěchu injekce spočívá v neošetřeném SQL selektu

SELECT  * FROM weather_data WHERE station = 101

Přestože SQL Injection jistě patří mezi nejznámější a velmi časté útoky injektováním, je nutné poznamenat, že se nejedná o jedinou „injekční“ techniku – jak ostatně napovídá následující seznam, jenž zcela jistě není vyčerpávající:

Scénář 2. Injection Flaws – Command Injection

1. Spusťte WebGoat.

2. Spusťte WebScarab. Položku Proxy / Manual Edit / Intercept request mějte nastavenou na off.

3. WebGoat: Zobrazte si Injection Flaws / Command Injection

4. WebScarab: Položku Proxy / Manual Edit / Intercept request nastavte na on. V nabídce Methods vyberte POST.

5. WebGoat: Vyberte možnost z výběrového pole („Select the lesson plan to view:“). Klikněte na View. POST požadavek je odeslán. Požadavek se však na cestě k serveru zastaví v proxy WebScarab.

6. WebScarab: Zobrazilo se nové okno – Edit Request. V záložce Parsed / URL Encoded v proměnné HelpFile přepište hodnotu AccessControl­Matrix.help na AccessControl­Matrix.help “ & ping 127.0.0.1 (Předpokládám, že máte WebGoat na localhostu). Změnu akceptujte potvrzením Accept changes – tím jste odeslali změněný požadavek na server.

7. WebGoat: Zobrazil se výpis injektovaného příkazu.

UX DAy - tip 2

Samozřejmě se nemusíte omezovat jen na ping.

Závěr

Útoky vkládáním zákeřného kódu jsou snadné. Slabiny umožňující tyto útoky se vyskytují poměrně často. Technické dopady mohou být přitom kritické. Existuje ohromné množství webových aplikací, které slabiny typu injection obsahují – patří mezi ně úřady, nemocnice, vysoké školy atd., tedy weby, které by měly být maximálním možným způsobem zabezpečeny. Vážnější injection slabiny v kombinaci s nedostatečným zabezpečením serverů a síťové infrastruktury umožňují útočníkovi převzít kontrolu nejen nad samotným webem, ale také nad vnitřní sítí, servery a jednotlivými stanicemi.

Byl pro vás článek přínosný?

Autor článku

Petr Dušek se věnuje kvalitě a testování SW, inicioval také vznik projektů CAPTCHA Help a Skener webu či překlad OWASP Top 10.