Jak jsem si zaškodil

Mým klientům a partnerům umožňuji využívat některé služby poskytované z mého účtu na hostingu. Jednou z takových služeb je umístění některých doplňků stránek (videa, fotky, ap.) na rychlejší hosting, než je zbytek webu. Velikou výhodu spatřuji v tom, že tyto služby mohu monitorovat a spravovat jednotně.Příkladem takové slžby je třeba vložené video do prezentace Plzeňských ohýnků.Po delší době jsem se zašel podívat na statistiky návštěvnosti a nestačil jsem se divit. Služby byly neúměrně zneužívané více erotickými weby.

V první chvíli jsem zcela nechápal, jak je možné, že za poslední dva měsíce bylo staženo přes 3 GB dat, zatímco běžně se přenos pohyboval v řádů desítek MB.

Ilustrace: statistika za měsíc říjen 2007 v grafu

Až pohled níž, do seznamu stránek, které služby využívají, mi podal vysvětlující informace. Doslova stovky adres, které sprostě zneužívaly v několika posledních měsících mnou poskytované služby k účelům, se kterými nesouhlasím – dokonce jsou přímo v rozporu s podmínkami hostingu, na němž služby provozuji (v ilustraci níže jsou nežádoucí adresy označeny červeně).

Ilustrace: seznam připojení služeb za měsíc říjen 2007 v tabulce

Abych byl upřímný, před časem jsem s pardubickou rádoby erotickou agenturou spolupracoval na internetových projektech a v rámci spolupráce jsem umožnil použití mnou spravovaného přehrávače video-sekvencí. Již tehdy jsem zdůrazňoval, že si výslovně nepřeji, aby byl nasazován pro jiné použití, než jak jsem jej tehdy nastavil a zprovoznil. Přehrávač byl tehdy použit pro uvítací, erotiky zcela prostou, nahrávku.

Krátce po té jsem ukončil s agenturou spolupráci – o důvodech bych se zde nerad blíže zmiňoval. Náhodou jsem sice zaznamenal, že se přehrávač objevil i na sousedních stránkách agentury, přestože tam neměl co dělat, ale blíže jsem se tím nezabýval.

Jenomže přehrávač, jak jsem dnes zjistil, byl použitý na mnoha stránkách věnovaných erotice a byly skrz něj přehrávány pornografické záběry.

Jak se zbavit pijavice

Přemýšlel jsem, jak problém efektivně odstranit.

První nejjednodušší variantou bylo prosté smazání přehrávače z místa, odkud je stahován. Tím bych však poškodil asi desítku klientů a další desítky soukromých projektů – včetně tohoto blogu – bych citelně ochromil. Musel bych pak ručně obejít všechny stránky, kde je přehrávač umístěn a opravit je.

Další nevýhody tohoto řešení:

  • Uživatelé by byli zmateni a nedostatečně informováni,
  • poškodil bych své slušné klienty, kteří za nic nemohou,
  • viníci by nebyli dostatečně potrestáni,
  • snadno by se mohl problém opakovat
  • a hlavně, to prostě nebylo dost cool!

Vzpomněl jsem si, jak podobný problém řeší server blog.cz. Pokud je jejich obrázek vložen do cizí stránky, nezobrazí se. Namísto toho se však zobrazí nápis, že tohle se prostě nesmí.

V mém případě jsem však neměl situaci tak jednoduchou. Jediné, čím jsem mohl manipulovat byl přehrávač – flashová aplikace, která se stahovala z mých stránek. Nemohl jsem však již ovlivnit jeho nastavení, které bylo vepsáno přímo ve stránce, ke které jsem neměl přístup. Také jsem nemohl ovlivnit přehrávaná videa, protože tato jsou stahována z jiných serverů.

Neumím ani pracovat s Flashem, takže podvrhnout přehrávač nepřipadalo v úvahu.

Začal jsem tedy zkoumat způsob vložení přehrávače do stránky a hledal jsem, zda by se v některém místě nedala najít slabina, kterou mohu využít. Byla tam. Vzhledem k tomu, že, přehrávač je získáván protokolem HTTP z adresy //fotky.boucek.info/player/flvplayer.swf, lze přikázat prohlížeči, aby se přesměroval na jinou adresu.

Všiml jsem si, že existují dvě metody, jak v HTML definovat parametry, ze kterých přehrávač čte cestu k přehrávanému videu:

<embed src="http://fotky.boucek.info/player/flvplayer.swf?file=http://cesta/k/videu.flv"
width="320" height="260"
type="application/x-shockwave-flash" />

a nebo:

<embed src="http://fotky.boucek.info/player/flvplayer.swf"
width="320" height="260"
type="application/x-shockwave-flash"
flashvars="file=http://cesta/k/videu.flv" />

Bohužel všechny kradené prohlížeče jsou do stránek vkládány pomocí druhé varianty, tedy pomocí atributu flashvars. To je problém, protože pomocí přesměrování lze ovlivnit pouze parametry předané přímo v adrese přehrávače.

V zoufalství jsem zkusil ještě zkombinovat obě varianty a do kódu umístit cestu k videu oběma metodama a sledovat, která bude mít větší prioritu. Přehrávač totiž může pochopitelně v jednom okamžiku přehrávat pouze jedno video, proto si musí vybrat jedno z nich.

Naštěstí přehrávač dává přednost parametrům uvedeným přímo v adrese přehrávače, takže vhodným přesměrováním lze snadno změnit chování přehrávače.

Tím byla odstraněna poslední překážka a mohl jsem začít škodit :-)

Jdeme škodit

Ujasnil jsem si body, které musí akce splňovat:

  • Musí zasáhnout pouze nežádoucí kopie přehrávače,
  • ostatní musí zůstat bez změny funkce,
  • musí být funkční ve všech prohlížečích,
  • přesměrování musí jít ovlivňovat velmi rychle, být flexibilní – to pro případ, že by změna přeci jen zasáhla přehrávače na stránkách klientů.

Před začátkem programování jsem si připravil video, které budu prohlížeči podstrkovat. Volil jsem ostré viditelné a kontrastní barvy – červenou a bílou. Na konci videa jsem si neodpustil emotivní vyštěknutí :-)

(ukázka videa již bohužel není k dipozici)

Časově nejnáročnějším úkolem bylo naprogramování kódu, který bude dělat přesně to, co se po něm chce.

Sepsal jsem klíčová slova, kterými jsem odlišoval žádoucí a nežádoucí kopie. Tato slova se mohla vyskytovat v adrese, kterou byl přehrávač volán, nebo v adrese stránky, do které byl stahován (tzv. referer). Klíčová slova jsou tato:

  • papaya-agency.com,
  • q3.cz,
  • ceskeholky.cz,
  • sex,
  • erotic,
  • porno.

Dále bylo třeba zajistit, aby nedocházelo k nekonečnému přesměrovávání. To by se mohlo stát, protože když si prohlížeč zavolá přehrávač, dostane příkaz, aby se přesměroval na novou adresu. Prohlížeč musí poslechnout, tak volá přehrávač z nové adresy. Jenže obě adresy jsou skoro stejné, jen ta druhá je doplněná o cestu k nastrčenému videu, tudíž by prohlížeč dostával stále příkaz k přesměrování. Proto jsem nastrčenému videu dal neobvyklý název: „robber.fvl“ [zloděj, lupič] a zajistil, že pokud se volá přehrávač, který v adrese obsahuje slovo „robber“, nebude dále přesměrovávat.

Jak takové přesměrování praktikovat na serveru? Protože server soubor s příponou *.flv nijak nezpracovává, ale pouze posílá, je třeba pomocí Rewrite, nebo jiné funkce serveru přepsat volanou adresu na nějaký PHP soubor. K tomu postačuje řádek ve tvaru: RewriteRule ^.+$ index.php [L].

O zbytek už se postará PHP:


<?php//Get base name of GET address
$uri_orig=$_SERVER["REQUEST_URI"];
$uri_bases= array();
preg_match('/^[^?]*/',$uri_orig,$uri_bases);
$uri_base=basename($uri_bases[0]);
//Verify base path and fix it to default if need
if (!file_exists("./$uri_base") ||preg_match('/\.php$/',$uri_orig))
$uri_base="flvplayer.swf";
//Get referer URL
$uri_ref="";
if (isset(
$_SERVER['HTTP_REFERER']))
$uri_ref=$_SERVER['HTTP_REFERER'];
//Set block_it flag to default
$block_it=false;
//Find referer in blacklist
$uri_ref_blacklist= array('/papaya-agency\.com/','/q3\.cz/','/ceskeholky\.cz/','/sex/','/erotic/','/porno/');
foreach(
$uri_ref_blacklistas$uri_ref_bad)
$block_it=$block_it||preg_match($uri_ref_bad,$uri_ref) ||preg_match($uri_ref_bad,$uri_orig);
//Disable if already fixed
$block_it=$block_it&& (!preg_match('/robber/',$uri_orig));
//Pokud se má blokovat
if($block_it) {
//...blokuj
header("HTTP/1.1 307 Temporary Redirect");
header("Location: http://fotky.boucek.info/player/$uri_base?image=http://fotky.boucek.info/robber.gif&file=http://fotky.boucek.info/robber.flv");
} else {
//...když ne, tak pošli původní soubor, kterej byl žádanej
if (preg_match('/\.swf$/',$uri_base))
header('Content-Type: application/x-shockwave-flash');
header('Content-Length: '.filesize("./$uri_base"));
readfile("./$uri_base");
}

?>

A stránky jsou rázem ozdobené:

Ilustrace: Náhled na stránku obsazenou červenobílým obdélníkem
Ilustrace: Náhled na stránku obsazenou červenobílým obdélníkem

3 komentáře u „Jak jsem si zaškodil“

  1. Bezpečnostní díra No já to vidím spíše na bezpečnostní díru. Pokud webserver má povoleno vkládat do parametru URL adresu, tak přesměrování může být zneužito nejen k přehrání videa přehrávačem z jiného webu, ale také podstrčení skriptu z hackerova serveru a tím získání přístupu na web. Pokud se zakáže použití URL v parametrech, potom by toto zneužití videa prostě nebylo možné.

  2. Re: Bezpečnostní díra Dobrý den, zdá se, že jste zcela nepochopil problém, který článek vyjadřuje. Problém byl v tom, že jsem na svém hostingu provozoval přehrávač FLV videa. Stejně tak, jak na něj mohu odkazovat ze stránek na svém webu, mohou ho snadno volat i aplikace na cizích webech. Je už pak na nich, na co jej použijí, nicméně na svém prostoru porno nestrpím.To, že jsem ho přebil pomocí URL… to není taková díra, jako spíš jen štěstí (že má vyšší váhu) a vlastnost. Protože se stahoval přehrávač z prostředí, které plně ovládám, nevidím důvod, proč bych nemohl měnit jeho vlastnosti.

Komentáře nejsou povoleny.