Prakticky: Vyhýbáme se podezřelým stránkám

Provozujete diskusní fórum, blog nebo jinou službu, kam mohou lidé vložit odkaz? Pokud ano, tak jste se jistě setkali se spamovými odkazy na hotely, kasina či léky. V poslední době se ale rozmáhají i odkazy na kompromitované stránky či stránky s malware. V článku si ukážeme, jak takový podezřelý odkaz poznat.
Nálepky:
Problém kompromitovaných webových stránek nabývá na významnosti. Většinou jde o případy, kdy byl napaden počítač, z něhož někdo k webu přistupoval přes FTP. Jisté druhy malware dokáží tohoto přístupu zneužít a na web nahrát upravenou verzi stránek – většinou bývá do patičky přidán obfuskovaný (znečitelněný) <script>, který načítá přímo či zprostředkovaně stránku, na níž je nějaký útočný kód – většinou kód, který využívá nějaké známé zranitelnosti webových prohlížečů. „Zavirovat si počítač“ pak člověk může naprosto běžným brouzdáním po neškodných stránkách, ne jen obligátním „pornem a warezem“.
Ruku na srdce – kdo z nás pravidelně záplatuje svůj prohlížeč a má defaultně vypnutý JavaScript a potlačené všechny embedded prvky? Třeba právě vy to děláte, ostatně já taky, ale co ta většina, pro kterou „aktualizace“ představuje neznámé slovo a JavaScript vypnutý mít nemůže, protože „se nikam bez toho nedostane a stránky nefungujou!“ Pokud provozujeme server, kam lze vložit odkaz na cizí stránku (tedy i běžný blog s komentáři nebo diskusní fórum), je vhodné zkontrolovat, zda vložený odkaz nevede na nějakou stránku, která by mohla uživatele poškodit.
Nové prohlížeče se snaží uživatele varovat. Například prohlížeč Firefox řeší podobné případy tím, že ukáže výstražnou stránku:
Jak ale zjistit na straně serveru, která stránka je nebezpečná? Odpověď je podobná jako u spamu: Lze použít seznamy podezřelých odkazů, stránek, domén… Dva nejpoužívanější seznamy jsou SURBL a Google Safe Browsing. V dalším textu si ukážeme, jak s nimi pracovat.
SURBL
Databáze SURBL je používána i antispamovými programy, a to při vyhodnocování obsahu mailů a rozhodování, zda odkazy v textu obsažené vedou nebo nevedou na podezřelé stránky. Nerozhoduje přímo o jednotlivých stránkách, obsahuje pouze seznam blokovaných domén. Na rozdíl od známých antispamových blacklistů nepodchycuje domény odesilatelů spamu, ale naopak „cílové“ domény, tj. takové, na které nejčastěji směřují podezřelé odkazy. (Doménu si můžete otestovat i pomocí webového formuláře.)
SURBL obsahuje několik blacklistů – viz jejich seznam. Naleznete mezi nimi databázi SpamCopu stejně jako seznam phishingových domén.
Zjistit, jestli SURBL považuje určitou doménu za podezřelou, je velmi prosté. Stačí položit dotaz do DNS. Název domény připojíme před „multi.surbl.org“, např. takto: „testovanadomena.com.multi.surbl.org“, a zeptáme se na A záznam. Pokud DNS oznámí, že adresa neexistuje, znamená to, že doména v seznamu není. Pokud doména v seznamu je, vrátí hodnotu, např. 127.0.0.8, kde poslední číslo IP adresy udává, v jakých seznamech (viz výše) se doména vyskytuje (8 je např. seznam phishingových domén).
Můžete položit dotaz na konkrétní seznam – stačí slovo „multi“ nahradit patřičnou zkratkou pro daný seznam, takže dotaz pak bude směřovat např. na „testovanadomena.com.ab.surbl.org“
Před testem je potřeba z odkazu vypreparovat pouze TLD a doménu druhé úrovně (např. „root.cz“). Pokud je TLD dvojúrovňová (např. co.uk – zde je seznam dvojúrovňových TLD), je potřeba s tím počítat.
Vlastní test je pak opravdu jednoduchý – dotaz do DNS lze v PHP položit jedním voláním funkce: $result = @dns_get_record($host.'.multi.surbl.org', DNS_A);
Výsledkem je buď prázdné pole (pak tedy doména v seznamech není), nebo asociativní pole, z něhož lze zjistit výslednou IP adresu ( $ip = $result[0]['ip'];
) Pozn.: Na serverech, běžících na Windows, nejsou DNS funkce dostupné a je potřeba je řešit jinak (příklad).
Google Safe Browsing
Další seznam podezřelých stránek spravuje Google a dává ho k dispozici přes testovací API s názvem Safe Browsing. Seznam Googlu rozlišuje až jednotlivé stránky (tzn. kvůli jednomu uživateli např. estránek nezablokuje celou doménu), na druhou stranu s ním není práce tak triviální, jako s předchozím seznamem.
Seznam Safe Browsing obsahuje MD5 hashe podezřelých adres. Google neumožňuje (z pochopitelných důvodů) přímé dotazy na jednotlivé adresy, namísto toho si zájemce musí udržovat lokální kopii databáze MD5 hashů (v tuto chvíli obsahuje přes 300 000 záznamů) a pravidelně, např. každou hodinu, stahovat změnové soubory a podle nich měnit své záznamy.
Pokud chceme databázi Googlu používat, musíme nejprve požádat o API Key. S tímto klíčem pak žádáme o seznam MD5 hashů z jednoho ze dvou seznamů – black a malware. Získání je prosté – stačí požádat o data na následující adrese.
http://sb.google.com/safebrowsing/update?client=api&apikey=<api key>&version=goog-black-hash:1:-1
Tato adresa obsahuje jednak náš klíč k přístupu, jednak požadovanou verzi databáze. Jedna databáze se jmsnuje „goog-black-hash“, druhá „goog-malware-hash“. Číslo verze, kterou máme k dispozici, a vůči níž tedy chceme rozdílový soubor, je uvedeno za dvojtečkami. Major verze je v tuto chvíli vždy 1. Pokud nemáme zatím žádná data, uvedeme jako číslo minor verze „-1“. Počítejte s tím, že pak je zejména goog-malware-hash je docela obrovský.
Google vrátí prostý textový soubor, který začíná identifikátorem ve tvaru: [název verze update], kde název je goog-black-hash
nebo goog-malware-hash
a verze je např. 1.14662. Pokud jde o rozdílový soubor, je za verzí ještě uvedeno slovo „ update
“. Tedy například:
[goog-black-hash 1.372 update]
[goog-malware-hash 1.372]
Po hlavičce následují záznamy – co řádek, to jeden MD5 hash. První znak na řádku je vždy + nebo -, podle toho, zda se jedná o nový záznam, nebo zda je potřeba nějaký hash z databáze naopak odstranit, a za tímto znakem následuje konkrétní hash. Například:
-5a76ceebafdc7b72883e5c8212d0b046
+76fa3d25e1dd28913ff829143fec7aa3
+a1b2324852d1368fbe14df5920881a08
-b3c780524ac86cdfe51fe6709c49e8a6
Po úvodním naplnění databáze (tedy dotaz na verzi 1:-1) si poznamenáme verzi souboru, kterou jsme dostali (viz první řádek), a při dalších aktualizacích uvádíme číslo verze, kterou máme poslední staženou, jako součást dotazu (nezapomeňme nahradit tečku dvojtečkou).
Jak v databázi hledat?
Předpokládejme, že kontrolujeme odkaz http://www.xyz.cz/stranka/test.html. Z adresy odstraníme identifikaci protokolu (http://) a připravíme si všechny možné „nadřazené“ adresy:
www.xyz.cz/stranka/test.html
www.xyz.cz/stranka/
www.xyz.cz/
xyz.cz/stranka/test.html
xyz.cz/stranka/
xyz.cz/
Získáme tedy šest řetězců. Pro každý spočítáme MD5 hash a hledáme jej v databázi. Pokud nalezneme, jde s nejvyšší pravděpodobností o podezřelý odkaz. Bližší informace o tom, jak z odkazu vytvořit testované řetězce, např. jak pracovat s URL, které obsahuje query string, nalezneme v Developer’s Guide.
Závěr
Ukázali jsme si, že otestovat odkaz, který uživatel vloží do systému, není příliš obtížné. Pokud provozujete web, kam mohou uživatelé vkládat odkazy, budou se vám zmíněné postupy rozhodně hodit jako jedna z úrovní ochrany webu a uživatelů. (Stejnou ochranu implementovaly i některé systémy na zkracování odkazů, protože právě strach ze zamaskovaného škodlivého odkazu je jednou z nejsilnějších výhrad proti těmto službám.)
Uvedené příklady nejsou jediné možné, existují i další volně dostupné databáze pochybných stránek – např. PhishTank.
Jinak bychom se ani nedozvěděli, že předsedovic stránky jsou
zavirované. Račte ozkoušet, Google Chrome spolehlivě nalezne: http://www.paroubek.cz
LOL………
A co varianty s lomítkem a bez (na konci adresy)? tím mám ze 6ti variant
12… Nebo se mají testovat pouze varianty s/bez lomítka na konci?
A co treba http://www.xyz.cz./, je to vlastne
totez co http://www.xyz.cz ale md5 bude jine..
Jak se píše v dokumentaci k Safe Browsing, před výpočtem MD5 je
potřeba provést kanonizaci, která má mimojiné udělat to, že doména musí
být následována lomítkem, vícenásobné tečky mají být zdrcnuty do
jedné a tečky před a za doménou mají být odstraněné. Tedy
„www.xyz.cz./“ bude generovat stejné MD5ky jako „www.xyz.cz“, protože
se oboje zkanonizuje na „www.xyz.cz/“.
je nejaka implementace, ktera by tak rozsirila nejaky proxy server?