V posledních dnech evidujeme nárůst SQLi útoků, jak nám s tím pomůže WEDOS Global Protection

[gtranslate]

Díky centrálnímu monitoringu logů detailně sledujeme všechen provoz, který směřuje na weby našich zákazníků u služeb LowCost, NoLimit, WebSite a WMS. Ty, co jsou pod útokem dokážeme velmi rychle najít a schovat za WEDOS Global Protection (pokud používají naše DNS). Většinou jsou to L7 útoky s velkým počtem requestů (někdo prostě volá vaši stránku desítkami až stovkami tisíc dotazů za minutu). V posledních dnech ale roste počet SQLi útoků.

SQLi útoky

SQL (Structured Query Language) se používá pro komunikaci s databázovým serverem. V databázi máte uložená data jako například články, komentáře, informace o registrovaných uživatelích a pomocí SQL si můžete konkrétní data vytáhnout.

Pokud skript potřebuje získat nějaká data na základě toho, co obdrží od návštěvníka (jméno, heslo, dotaz vyhledávání, komentář atd.), tak musí návštěvníkův vstup vložit do SQL dotazu.

Zjednodušeně, pokud je uživatel třeba Ládík, který chce vědět, jaký má kredit, tak se přes SQL zeptá skript databázového serveru, jaký kredit má uživatel se jménem Ládík.

SQLi (SQL injection) útok je postavený na tom, že útočník předpokládá (hádá), jak SQL dotaz vypadá a zkusí upravit vstup, tak, aby získal požadovaný výsledek.

Například pokud by bylo “kdo je aktuálně přihlášený” uloženo v cookie, tak by útočník mohl zkusit hodnotu v cookie upravit (změnil by své jméno za Ládíka, či dalších uživatelů) a zjistit, kolik má který uživatel kreditu.

Aby se to nestalo, tak si programátor musí ošetřit všechny vstupy, které přijímá nejen od uživatele. Vložit škodlivý kus SQL lze totiž i do názvu prohlížeče. Ukázku takového útoku z ledna 2022 můžete vidět níže (škodlivý kód je odesílán v hlavičce useragent). Podvržená byla i informace, odkud uživatel přichází.

Ukázka SQLi útoku, který je schovaný useragent
Ukázka SQLi útoku, který je schovaný useragent

Nárůst počtu SQLi útoků

Se SQLi útoky se setkáváme denně. Většinou se však útočník snaží nevzbuzovat pozornost. Často jde na jistotu po určité konkrétní zranitelnosti (neošetřeném vstupu). Provede pár dotazů za hodinu z různých IP adres, takže pokud tento druh útoku výslovně nehledáte, tak se snadno ztratí ve statistikách. Nezpůsobuje většinou přetěžování serveru, občas končí na chybě 404 anebo 403 (pokud se programátor na tuto situaci připravil). Občas jej vidíte jako chybu 500, což už je nápadné a hlavně špatně.

Tento nenápadný přístup se však koncem července změnil. Na první pohled to vypadlo jako L7 flood útok. Tedy pokus o přetížení počtem dotazů.

SQLi útoky během 7 dnů (28.07.2022 -04.08.2022), 3h graf
SQLi útoky během 7 dnů (28.07.2022 -04.08.2022), 3h graf

Občas na to skripty zákazníků nebyly připravené a pak to vedlo k vyčerpání zdrojů webhostingu a chybám 503. Nicméně poté, co jsme začátkem roku u všech NoLimit navýšili počet PHP vláken na 25, tak webhostingy vydrží opravdu hodně 🙂

Na následujícím grafu je TOP 10 cílových webů podle domény, a jak si s útoky poradily. Graf je za 7 dní a je na něm jen specifický vzorek SQLi útoků, nejsou to tedy všechny.

TOP 10 cílových webů podle domény a jak si s útoky poradily. Graf je za 7 dní a je na něm jen specifický vzorek SQLi útoků, nejsou to tedy všechny.
TOP 10 cílových webů podle domény a jak si s útoky poradily. Graf je za 7 dní a je na něm jen specifický vzorek SQLi útoků, nejsou to tedy všechny.

Je opravdu velký rozdíl mezi webem, kde si programátor tento druh útoku ošetřil a nevalidní vstupy rovnou zahazuje (ukončuje běh skriptu) a tam, kde skript běží dál.

Tento konkrétní druh SQLi útoku je jako brute force útok. Útočník testuje velmi rychle za sebou různé varianty, takže to může dopadnout vyčerpáním serverových zdrojů. Rovnou to zahodit a ukončit skript s chybou 403 je to nejlepší, co můžete udělat.

Na následujícím grafu je TOP 10 útočících IP adres. Graf je za 7 dní a je na něm jen specifický vzorek SQLi útoků, nejsou to tedy všechny. Zajímavé je, že některé IP se snaží generovat náhodné prohlížeče a jiné si vystačí se vzorkem několik reálných.

TOP 10 útočících IP adres. Graf je za 7 dní a je na něm jen specifický vzorek SQLi útoků, nejsou to tedy všechny.
TOP 10 útočících IP adres. Graf je za 7 dní a je na něm jen specifický vzorek SQLi útoků, nejsou to tedy všechny.

Co se týká “škod”, tak pár IP adres se trefilo do webů, které neměly proti tomuto druhu útoku ochranu (nezahazovaly nesmyslné vstupy) a pokusily se je zpracovat. Když se jim to nakupilo, tak ani 25 PHP vláken nestačilo a vedlo to k chybám 503. Nicméně to nejelo jen chvilku. Máme automatické filtry, proti L7 flood útokům, které nápadné útočící IP adresy dávají na dočasné blacklisty. Navíc jakmile začnou chodit varování z monitoringu, tak technici útočící IP adresy dávají na permanentní blacklist, který do minuty začne všude danou IP adresu blokovat.

TOP 10 útočících IP adres podle 503. Graf je za 7 dní a je na něm jen specifický vzorek SQLi útoků, nejsou to tedy všechny.
TOP 10 útočících IP adres podle 503. Graf je za 7 dní a je na něm jen specifický vzorek SQLi útoků, nejsou to tedy všechny.

Jak se SQLi mohu sám bránit

Pokud těchto útoků na vás nejdou desítky tisíc za minutu, tak s naším webhostingem NoLimit se jim ubráníte tím, že dáte do .htacess pravidlo, které blokuje specifické řetězce v URL.

Když se podíváte na log jednoho z útoků, tak uvidíte, že se tam opakují klasické znaky SQLi.

Z těchto útoků jsme vybrali TOP 100 nejpoužívanějších útoků a následně zjistili, že pokud zablokujete v .htaccess dotazy na stránky se SELECT%20 a SELECT%2F, tak byste zablokovali 99,89 % ze všech útoků. To je na jedno pravidlo celkem slušné.

Samozřejmě pokud budete mít stránku, která obsahuje SELECT (mezera) anebo SELECT/, tak ta nebude návštěvníkům fungovat. Nicméně takové se běžně nepoužívají v URL (mezera se nahrazuje znakem – anebo _ a / může nadělat problémy, protože / se používá pro adresářovou strukturu).

Možná si říkáte, proč místo toho neblokovat útočící IP adresy? Bohužel útoky jdou ze dvou zdrojů. Jedno jsou zřejmě napadené VPS v datacentrech Microsoft a druhé jdou přes jednoho velkého providera VPN, který se chlubí, že má až 300 tisíc IP adres. Když jich dáte tolik do .htaccess, tak vám to výrazně zpomalí načítání všech stránek. Navíc pokud někdo tu VPN používá, tak se k vám nedostane.

WEDOS Global Protection

Nejpohodlnější bude, když necháte vše na nás. Respektive na WEDOS Global Protection. Jednak nemusíte sledovat aktuální dění, vymýšlet pravidla pro .htaccess, kde jeden překlep znamená chybu 500 pro celý web a hlavně si nezablokujete potenciální návštěvníky přicházející přes VPN.

My to totiž vyřešíme jednoduše. Dáme podezřelému provozu do cesty stránku, která vyzkouší, zda-li se jedná o robota anebo o skutečného návštěvníka. Buď přes Captcha, anebo jen jednoduché javascript přesměrování podmíněné uložením a přečtením cookie.

Do budoucna bychom také rádi všechny VPN a proxy servery seřadili do jedné skupiny a nabídli přímo zákazníkovi, jak s nimi chce na svých stránkách naložit (nekontrolovat, redirekt, captcha, blokovat).

Závěr

WEDOS Global Protection může používat každý. Nemusíte u nás mít hosting. Varianta pro osobní použití bude zdarma, pokud si chcete vytvářet vlastní pravidla anebo jste firma tak bude jen za pár set korun měsíčně. Už brzy 🙂