Testování chyby zabezpečení SQL Injection

Útoky SQL Injection představují obrovské riziko pro webové aplikace, které závisí na databázovém backendu, který generuje dynamický obsah. V tomto typu útoku hackeři manipulují s webovou aplikací v pokusu o zavedení vlastních příkazů SQL do příkazů vydávaných databází. Příklad naleznete v článku SQL Injection Attacks on Databases. V tomto článku se podíváme na několik způsobů, jak můžete otestovat vaše webové aplikace, abyste zjistili, zda jsou zranitelní útoky SQL Injection.

Automatizované skenování pomocí vstřikování SQL

Jednou z možností je použití automatizovaného skeneru pro zranitelnost webových aplikací, jako je HP WebInspect, AppScan společnosti IBM nebo Chopic's Hailstorm. Tyto nástroje nabízejí snadné, automatizované způsoby analýzy vašich webových aplikací, které by mohly potenciálně způsobit chyby zabezpečení SQL Injection. Nicméně jsou poměrně drahé, běží až na 25 000 dolarů za sedadlo.

Manuální SQL Injection Testy

Co je špatný vývojář aplikace? Můžete vlastně spustit několik základních testů, které vyhodnotí vaše webové aplikace pro zranitelnosti SQL Injection, které používají pouze webový prohlížeč. Nejprve je to slovo opatrné: testy, které jsem popsal, pouze hledají základní vady SQL Injection. Neuvedou pokročilé techniky a jsou poněkud únavné k použití. Pokud si to můžete dovolit, jděte s automatizovaným skenerem. Pokud však tuto cenovou značku nemůžete zvládnout, manuální testování je skvělý první krok.

Nejjednodušší způsob, jak vyhodnotit, zda je aplikace zranitelná, je experimentovat s neškodnými injektážními útoky, které nebudou ve skutečnosti poškozovat vaši databázi, pokud uspějí, ale poskytnou vám důkaz, že je třeba opravit problém. Předpokládejme například, že jste měli jednoduchou webovou aplikaci, která vyhledává jednotlivce v databázi a jako výsledek poskytuje kontaktní informace. Tato stránka může používat následující formát adresy URL:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike

Můžeme předpokládat, že tato stránka provádí vyhledávání databáze pomocí dotazu podobného následujícímu:

ZVOLTE telefon z adresáře WHERE příjmení = 'chapple' a firstname = 'mike'

Pojďme to trochu experimentovat. S naším předpokladem výše můžeme provést jednoduchou změnu adresy URL, která testuje útoky SQL injection:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike'+AND+(select+count(*)+from+fake)+%3e0+OR+'1'%3d'1

Pokud nebyla webová aplikace správně chráněna proti injekci SQL, jednoduše zasílá toto falešné jméno do příkazu SQL, který provádí proti databázi, což má za následek:

VYBERTE telefon z adresáře WHERE příjmení = 'chapple' a firstname = 'mike' A (vybrat počítat (*) z falešného)> 0 NEBO '1'

Všimnete si, že výše uvedená syntaxe se trochu liší od původní syntaxe. Dostal jsem svobodu konverze proměnné kódované adresou URL pro své ekvivalenty ASCII, aby bylo jednodušší sledovat příklad. Například% 3d je kódování URL pro znak '='. K podobným účelům jsem také přidal některé linky.

Hodnocení výsledků

Test se zobrazí, když se pokusíte načíst webovou stránku s uvedenou adresou URL. Pokud se webová aplikace dobře chová, před odevzdáním dotazu do databáze bude ze vstupního údaje odstranit jednotlivé úryvky. To jednoduše vyústí v podivné vyhledávání pro někoho s křestním jménem, ​​který obsahuje banda SQL! Zobrazí se chybová zpráva z aplikace podobná následující:

Chyba: Nebyl nalezen uživatel s názvem mike + AND + (vyberte + počet (*) + od + falešný) +% 3e0 + OR + 1% 3d1 Chapple!

Na druhé straně, pokud je aplikace náchylná na SQL injekci, předá výkaz přímo do databáze, což má za následek jednu ze dvou možností. Za prvé, pokud váš server obsahuje podrobné chybové zprávy (které byste neměli!), Uvidíte něco podobného:

Poskytovatel Microsoft OLE DB pro ovladače ODBC chyba '80040e37' [Microsoft] [ovladač ODBC SQL Server] [SQL Server] Neplatný název objektu 'fake'. /directory.asp, řádek 13

Na druhou stranu, pokud váš webový server neobjeví podrobné chybové zprávy, získáte obecnější chybu, například:

Interní chyba serveru Server zaznamenal vnitřní chybu nebo nesprávnou konfiguraci a nebyl schopen žádost dokončit. Obraťte se na správce serveru, abyste informovali o době, kdy k chybě došlo, a o všech možnostech, které jste mohli udělat, které mohou způsobit chybu. Další informace o této chybě mohou být k dispozici v protokolu chyb serveru.

Pokud obdržíte jednu z výše uvedených dvou chyb, vaše aplikace je zranitelná útokem SQL injection! Některé kroky, které můžete použít k ochraně aplikací před útoky SQL Injection, zahrnují: