Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti. Přečtěte si více.

Jestli něco kyberzločinci milují, jsou to data. Ukradená data jsou na nezákonných tržištích velmi cenná a přístup k soukromým databázím může být pro zlomyslné subjekty skvělým způsobem, jak ze svých podniků vydělat. Jedním ze způsobů přístupu k soukromým datům je vložení SQL. Co to ale vlastně SQL injection je, jak funguje a dá se takovému útoku zabránit?

Co je SQL Injection?

Softwarové programy spoléhají na fungování kódu. Kód je také jazyk, který stroje používají k provádění operací, a může mít mnoho forem (Python, JavaScript, C++ atd.). Kyberzločinci mohou na oběti útočit často prostřednictvím kódu a injekce SQL (nebo SQLis) nejsou jiné. Ty umožňují zlomyslným aktérům „vložit“ škodlivý kód do příkazu SQL.

Nejprve si projdeme, co znamená SQL.

SQL je zkratka pro Structured Query Language. Toto je jiný druh programovacího jazyka používá se zejména při práci s databázemi. SQL, vyvinutý v 70. letech 20. století společností IBM, může manipulovat, ukládat a získávat databázové informace. Mnoho databázových komunikačních systémů po celém světě používá SQL, takže není žádným překvapením, že aktéři hrozeb vymysleli způsoby, jak jej zneužít k zacílení na databáze.

Příkazy SQL tvoří klíčovou část databázové komunikace. Příkaz SQL je příkaz který přichází v mnoha různých podobách. Některé pozměňují data, některé je načítají nebo vymazávají a některé mohou změnit strukturu samotné databáze. Když dojde k vložení SQL, škodlivý kód se vloží do příkazu SQL.

Web nebo aplikace musí samozřejmě používat programovací jazyk SQL, aby bylo možné vložení SQL. Jak ale tento vektor útoku funguje?

Řekněme, že aplikace používá běžný řádek kódu. Když kyberzločinec vloží škodlivou injekci SQL, přidá se řádek kódu, který může zasahovat do dotazů, které samotná aplikace zasílá do své databáze. Tímto způsobem lze databázi zneužít způsobem, který umožní aktérovi hrozby zobrazit data, ke kterým by jinak neměl přístup.

Odtud by kyberzločinec mohl ukrást data, aby je přímo zneužil resp prodat na temném webu nebo jinde. Mohou také měnit, přidávat nebo mazat data z cílové databáze. V závislosti na stupni útoku SQL injection by mohlo dojít k velkému poškození. Pokud dojde k přístupu k platebním údajům, číslům sociálního zabezpečení nebo jiným druhům soukromých údajů, mnoho lidí může být vystaveno riziku zneužití.

Na druhou stranu, pokud se útočníkovi podaří významně změnit databázi, může dojít k trvalé ztrátě velkého množství dat. Celkově vzato mohou injekce SQL zničit celé databáze pouze jedním útokem. I když existují již od roku 1998, jsou v dnešní době stále aktuální a nebezpečné.

Jak zjistil Open Web Application Security Project (OWASP)Při testování aplikací na přítomnost takového útoku v roce 2021 bylo identifikováno 274 000 instancí injekcí SQL.

Typy SQL injekce

Existuje několik různých druhů SQL injection, přičemž hlavní tři jsou slepé, in-band a out-of-band injections.

Slepá (nebo inferenční) injekce SQL nastane, když je aplikace nebo stránka napadena injekci, ale poskytnuté odpovědi HTTP (Hypertext Transfer Protocol) neobsahují výsledek SQL dotaz. Jinými slovy, žádná data z napadené databáze nejsou předána kyberzločinci. Takže, jaký to má smysl?

Pomocí slepé injekce SQL útočník odešle data na cílový server a poté může rozpoznat určité věci o databázi prostřednictvím povahy samotné odpovědi HTTP. Kromě toho mohou faktory spojené s odpovědí HTTP pomoci útočníkovi vytvořit další, účinnější injekci SQL pro přístup k databázi.

Existují dva klíčové typy slepé injekce SQL, známé jako time-based a boolean. Tyto dvě varianty jsou si svou povahou dost podobné. Jak booleovská, tak časově založená SQL injekce odešle řadu otázek s odpověďmi ano nebo ne, i když ty druhé budou vyžadovat, aby databáze chvíli počkala, než na dotazy zareaguje.

Další na řadě jsou in-band SQL injekce. In-band SQL injekce umožňují operátorovi provést útok a získat požadovaný výsledek pomocí stejného kanálu. In-band SQL injekce jsou nejběžněji používané, jednoduše proto, že je nejjednodušší je provést, protože vyžadují pouze jeden kanál.

A konečně, máte mimopásmovou SQL injekci. Toto je v podstatě alternativní verze in-band SQL injection, kde útočník nemůže provést útok celkem pomocí jednoho jediného kanálu. Případně může být nutné, aby se útok uchýlil k out-of-band SQL injection, pokud cílový server jednoduše není dostatečně rychlý, aby poskytoval výsledky.

Tyto faktory proces trochu ztěžují, což znamená, že pro úspěch musí spoléhat na určité funkce, aby byly aktivní v cílové databázi. Například platforma, na kterou se útočí, musí mít nedostatek vstupní sanitace. Z tohoto důvodu jsou in-band SQL injekce mnohem běžnější než out-of-band SQL injekce. Ale stále se dějí.

Lze se SQL injekcím vyhnout?

Injekce SQL znepokojují spíše podniky a organizace než běžné jednotlivce. Existují však věci, které mohou tyto potenciální cíle udělat, aby snížily šanci, že budou zasaženy takovým útokem.

Dezinfekce vstupů je klíčovou běžnou praxí, jak se vyhnout injekcím SQL. Toto je proces filtrování, který skenuje a čistí vstup od nebezpečných znaků. Pokud je kód SQL zpracován před dezinfekcí, šance na vložení SQL se přirozeně zvýší.

Parametrizované dotazy vám navíc mohou pomoci vyhnout se injekcím SQL. Jedná se o dotazy, které ke spuštění vyžadují alespoň jeden parametr. Použití parametrů ztěžuje kyberzločincům úspěšně provést útok SQL injection.

Neexistuje však žádný spolehlivý způsob, jak zabránit injekci SQL. Jako je tomu u mnoha kybernetických útoků, je v podstatě nemožné udržet vaše zařízení a systémy zcela vzduchotěsné. Pokud jde o injekce SQL, nejlepší, co můžete udělat, je dezinfikovat všechny vstupy a vytvořit parametrizované dotazy.

SQL injekce jsou staré, ale stále představují hrozbu

Zatímco injekce SQL existují již více než 20 let, stále představují riziko pro mnoho webových stránek a aplikací. Je tedy dobré mít na paměti tuto formu útoku a podniknout nezbytné kroky k tomu, abyste se mu pokusili zabránit, protože by mohl někdy v budoucnu představovat hrozbu pro vaše databáze.