Pred niekoľkými dňami zaznamenali bezpečnostní experti z mnohých spoločností nárast útoku, ktorý každý deň postihol niekoľko desiatok tisíc webových stránok. Útok je veľmi špecifický, nie však svojou podstatou, ale prevedením.
Jedná sa o veľmi bežný a dosť častý SQL Injection, teda útok, ktorý umožňuje útočníkovi pracovať s databázou webového servera. Tá najčastejšie obsahuje všetky dáta, ktoré sú na stránkach použité, vrátane prihlasovacích údajov, či publikovaných textov. Útoky však boli donedávna využívané jednotlivo a vysoko cielene na stránky, ktoré chybu obsahovali a málokedy v kombinácii s inou zraniteľnosťou, nazývanou Cross-site scripting (zjednodušene XSS). Tento útok však bol zameraný na jedinú zraniteľnosť, ktorú kombinoval s ďalšími, vďaka čomu sa útočníkom podarilo úspešne infikovať viac ako pol milióna webov, medzi ktorými sa objavili aj weby s obrovskou návštevnosťou (niektoré weby dosahujú denne niekoľko stoviek tisíc návštevníkov) a štátne weby z USA a UK. Útok postihuje výlučne portály postavené na systéme Microsoft IIS, MSSQL a ASP, nesúvisí však so zraniteľnosťou, ktorú len pred pár dňami prezentovali výskumníci na konferencii Hack In The Box v Dubaji.
Popis útoku
Útok zneužíva zraniteľnosť SQL Injection, ktorá bola identická na stovkách tisíc webov. Aby si útočníci uľahčili prácu a neboli nútení zraniteľnosť hľadať „ručne“, najčastejšie za pomoci robota, ktorý prechádza stránky a kontroluje ich zraniteľnosti, využili chytrejšieho robota, Google. Ten, ako je známe už niekoľko rokov, indexuje aj informácie, ktoré by mali byť skryté pred očami bežných ľudí. Túto skutočnosť si pred rokmi všimol bezpečnostný expert Johnny Long, ktorý začal zhromažďovať príkazy, vďaka ktorým je možné odhaliť mnoho zaujímavých informácií, na ktoré si tvorcovia stránok nedali pozor. Po čase vytvoril databázu tzv. Google Dork-ov (takto sú označované príkazy, ktoré zobrazia skryté informácie zaindexované práve robotom Googlu) a tú nazval GHDB (Google Hacking Database). Databáza sa rozrastá každý deň za pomoci mnohých prispievateľov.
Útočníci využili práve jeden z „dorkov“, ktorý odhaľuje chybu SQL databáze a ktorá je rovnaká pre niekoľko stoviek tisíc webov. Vďaka tomuto zoznamu nebol pre nich problém vytvoriť robota, ktorý túto chybu otestoval na funkčnosť a zneužil. Tento postup bol rozdelený do dvoch krokov, aby sa útočníci vyhli prílišnému vzbudeniu pozornosti. V prvom kroku bola zraniteľnosť otestovaná jednoduchými príkazmi, ktoré by aj pri odhalení nevzbudili žiadnu veľkú pozornosť, iba by viedli k „zaplátaniu“ zraniteľnosti na testovanom webe. Otestovanie bolo vykonané dvomi nezávislými príkazmi, ktoré potvrdili možnosť zneužitia zraniteľnosti. Ak sa zraniteľnosť potvrdila, bola vykonaná séria ďalších príkazov zakaždým ukončená jedným, ktorý stránku infikoval nebezpečným kódom.
Názorná ukážka príkladu:
id=z;DECLARE%20@S%20NVARCHAR(4000);SET%20@S=CAST(0×440045004300…7200%20AS%20NVARCHAR(4000));EXEC(@S);–čo znamená:
DECLARE @S NVARCHAR(4000);
SET @S=CAST(0×440045004300…7200 AS NVARCHAR(4000));
EXEC(@S);–
Príkaz je celkom dosť jednoduchý. Najskôr je určená premenná S ako NVARCHAR, čo v databázovom systéme MSSQL znamená, že dáta ukladané ako NVARCHAR budú vo formáte UNICODE, ktorý reprezentuje multijazyčné dáta, teda je najčastejšie používaný pre uchovávanie informácií v rôznych jazykoch. V tomto prípade sa do premennej uloží škodlivý kód. Ten je reprezentovaný reťazcom, ktorý je v hexadecimálnej sústave. Jediným dôvodom je sťaženie majiteľom a tvorcom webov analýza týchto znakov. Napriek tomu, že je ich dekódovanie dosť triviálne, mnoho menej skúsených programátorov ich ľahko prehliadne, alebo sa o ne prestane zaujímať po zistení, že s nimi nevedia nijako naložiť. Aj táto technika skrývania reťazcov pomáha útočníkom v prevencii proti odhaleniu ich zámeru. Aby som sa však vrátil k príkazu, funkcia CAST práve zmení kódovanie z hexadecimálneho na unicode, čím sa zo „zakódovaného“ reťazca stane bežný, ľahko čitateľný reťazec. Na konci sa celý príkaz vykoná, čo v tomto prípade znamená vloženie škodlivého kódu do databáze.
Dekódovaná hexadecimálna časť príkazu:
DECLARE @T varchar(255),@C varchar(255)
DECLARE Table_Cursor CURSOR FOR
select a.name,b.name from sysobjects a,syscolumns b where a.id=b.id and a.xtype=’u’ and (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167)
OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C
WHILE(@@FETCH_STATUS=0) BEGIN
exec(’update ['+@T+'] set ['+@C+']=rtrim(convert(varchar,['+@C+']))+””’)
FETCH NEXT FROM Table_Cursor INTO @T,@C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor
Ako môžete vidieť, do databázy je vložený kód napísaný v jazyku JavaScript, ktorý je uložený na inom serveri. Ten sa začne následne zobrazovať na infikovanej stránke, ktorá návštevníka presmeruje na web „http://www.211796*.net/“, kde sa ho pokúsi infikovať malwarom cez už známe zraniteľnosti v prehliadači Internet Explorer, na ktoré však už existujú záplaty. Bohužiaľ vysoké percento ilegálnych Windowsov a osôb, ktoré neaktualizujú svoj systém, pomáha útočníkom úspešne infikovať milióny užívateľov po celom svete.
Tento útok je výnimočný aj preto, že namiesto získania citlivých dát za pomoci SQL Injection, vkladá do databáze škodlivý kód. Tento typ útoku sa nazýva Cross-site Scripting (skrátene XSS).
XSS alebo Cross-site scripting je typ útoku, kedy sa za použitia client-side skriptov (JavaScript) pozmení časť kódu zobrazovanej web stránky tak, aby bol nebezpečný skript útočníka spustiteľný a vykonal určitú akciu, napríklad získal a odoslal dáta z cookies obete. Útočník tak po nahratí dát z cookies ktoré získal od obete, často získa prístup do aplikácie (webstránky) bez toho aby poznal vaše prihlasovacie údaje!
V tomto prípade sa však nesnažia útočníci získať citlivé dáta z prehliadača obete, ale naopak ju infikovať škodlivým malwarom, ktorý by po úspešnej inštalácii vytvoril časť obrovského botnetu.
Stále častejšie
Tento prípad je jedinečný precíznosťou a obrovskou úspešnosťou, pričom zasiahol obrovské množstvo veľkých portálov, vrátane desiatok štátnych webov (.gov a .gov.uk), nie je však prvý. Pred časom útok využívajúci práve zraniteľnosť XSS umožnil útočníkom infikovať webové fórum, ktoré navštevovali ľudia s epilepsiou. Zákerní útočníci na tomto fóre vložili kód, ktorý vyvolal šialené rôznofarebné blikanie stránok, čím vyvolal epileptické záchvaty u mnohých návštevníkov.
Podobný útok tomu dnešnému pred niekoľkými týždňami postihol weby ako news.com, ktoré boli taktiež infikované škodlivým kódom, práve vďaka zraniteľnosti XSS. Tento kód opätovne presmeroval návštevníkov webu na stránky, ktoré sa za pomoci sociálneho inžinierstva snažili infikovať počítač obete.
Záver
Zraniteľnosti XSS a CSRF boli dlhodobo podceňované, no dnes sa ukazuje ich skutočná sila. Bezpečnostní experti na tieto zraniteľnosti upozorňujú už dlhší čas, no len málokto ich počúval. Posledné útoky však dokonale ilustrujú ich silu a počet podobných útokov bude určite narastať až do doby, kým si tvorcovia webov neuvedomia ich zákernosť.
Článok bol napísaný pre portál Zive.sk.



0 Responses to “Masívny SQL Injection útok postihol tisíce MSSQL databáz”
Leave a Reply