Autor: .cCuMiNn. | 20.11.2014 |
S největší pravděpodobností jste se již na webu někdy setkali se stránkou, která vám místo obsahu předhodila pouze jednoduché vyskakovací okno se žádostí o přihlášení:
Jedná se o HTTP autentizaci, kterou je velmi snadné implementovat do webové aplikace odesláním hlavičky WWW-Authenticate nebo využitím souboru .htaccess. Často se proto používá k zaheslovaní určité složky, k přihlášení na FTP (protokol ftp:// v prohlížeči) nebo při přihlašování k různým HW zařízením, například k routeru. Více se o HTTP autentizaci dočtete například zde: http://emp.wz.cz/htconfig/http-autorizace.html.
Nás bude v tomto článku zajímat právě HTTP hlavička WWW-Authenticate, která může v odpovědi ze serveru vypadat takto:
Podle specifikace by se měla stránka, která vyžaduje autentizaci, předávat se stavovým kódem 401 Unauthorized. Fungovat to ale bude i s kódem 200 OK.
Pokud se rozhodneme odeslat tuto hlavičku z PHP skriptu, stačí na jeho začátek uvést řádek:
OK, to jsme si stručně řekli něco o HTTP autentizaci, ale teď se jistě ptáte, jak by se toho dalo zneužít. Je velice jednouché. Prohlížeč totiž toto ověření nevyvolává pouze tehdy, když načítá webovou stránku, ale také v případě kdy čte jakýkoliv jiný vložený obsah, který si o autentizaci požádá. A to dokonce i v případě, kdy je tento externí obsah načítán z jiné domény. Pokud tedy budu vyžadovat autentizaci uživatele například při žádosti o obrázek, který začlením do HTML stránky, pak ve chvíli, kdy se webový prohlížeč pokusí tento obrázek umístěný ve webové stránce načíst, dojde k vyvolání dialogu se žádostí o autentizaci.
Nyní by tedy již mohly být možnosti zneužití zřejmé. Pokud máme možnost vkládat do cizích webových aplikací (diskuzní fóra, webmaily, apd.) externí obsah (třeba právě obrázky), pak uvedeným způsobem můžeme návštěvníky těchto aplikací požádat o autentizaci. Jedinou velkou nevýhodou tohoto útoku je, že před textem zprávy se zobrazuje informace o doméně, která autentizaci vyžaduje. Toho si pozorný uživatel může všimnout, a proto je pro útočníka výhodnější psát text zprávy velkými písmeny, místo názvů domény používat IP adresy, nebo si zaregistrovat doménu s velmi podobným názvem, jako má cílová aplikace, na jejíž uživatele je útok namířen. O něco níže v tomto článku si pak ukážeme ještě jeden způsob, jak lze uživatele téměř stoprocentně zmást.
POKUD CHCETE ZOBRAZIT CELY OBSAH STRANKY, MUSITE ZADAT PRIHLASOVACI UDAJE.
Dále je dobré upravit soubor .htaccess tak, aby na žádost o soubor picture.jpg vykonal a vracel soubor exploit.php. Toto podstrčení lze snadno provést následujícími řádky:
Další zlepšení by se mohlo týkat například kontroly, zda jsou vložené přihlašovací údaje platné.
Útočníkovi pak už zbývá pouze vložit do e-mailu, do soukromé zprávy, nebo do fóra externí obrázek picture.jpg, který se bude načítat z připravené stránky:
Ve chvíli kdy uživatel zprávu zobrazí, může být buďto okamžitě požádán o autentizaci, nebo bude muset nejprve povolit zobrazení externího obsahu, a o autentizaci bude požádán až následně (záleží na konkrétních bezpečnostních opatřeních dané aplikace).
Útočník může dále zvýšit důvěryhodnost tím, že zprvu nebude autorizaci vyžadovat. Teprve, až se kopie zprávy dostatečně rozšíří mezi uživateli, zapne ve skriptu na svém serveru nutnost autorizace a začne sklízet přihlašovací údaje uživatelů.
Pro zamaskování názvu domény, která o uživatelské heslo žádá, se skvěle hodí domény, podobné těmto:
Proč zrovna tyto domény? Protože můžete využívat i neomezený počet jejich subdomén a tvořit tak například tyto adresy:
Pokud uživatel uvidí v autentizační žádosti tyto domény, nebude v nich s největší pravděpodobností spatřovat nic podezřelého.
Oproti jiným typům útoků pro získání autentizačních údajů uživatelů, je použití HTTP autorizace pro útočníky výhodné díky její nezávislosti na použitém operačním systému, webovém prohlížeči, či jiném programu, ve kterém se vložený obrázek (nebo jiný druh externího obsahu) zobrazuje. Pokud tedy například uživatel neprohlíží doručené mailové zprávy prostřednictvím webmailu, ale stahuje si je do e-mailového klienta, i tak dojde při zobrazení zprávy k vyvolání HTTP autentizace.
Poznámka: Tak dlouho jsem se zveřejněním čekal na konferenci, až se teď dívám, že v Google Chrome načítání externího obsahu s HTTP Autentizací snad už zakázali… :)
Slajdy: Krádež přihlašovacích údajů obrázkem
Za námět a první verzi tohoto článku patří můj dík Fil-kunovi.