České freemaily nejsou bezpečné!

Cizí člověk může získat přístup ke všem vašim emailům a osobním údajům. Chcete vědět víc?
Autor: Marek Blahuš, Uherské Hradiště, kontaktní email: blahus@seznam.cz

Služby poskytující emailovou schránku zdarma jsou hojně využívány, ovšem jejich uživatelé si vůbec neuvědomují nebo jaksi přehlíží fakt, že tyto služby nejsou příliš bezpečné a k jejich korespondenci se mohou bez větších problémů dostat nepovolané osoby. To dokazuje i případ, kdy se patnáctiletému studentovi uherskohradišťského gymnázia Marku Blahušovi podařilo objevit závažné bezpečnostní díry v pěti největších českých freemailech.

Tyto bezpečnostní díry umožňují cizímu člověku získat přístup k emailové schránce uživatele některé z následujících služeb: Centrum (http://mail.centrum.cz), Email.cz (http://www.email.cz/), Můj Mail (http://mujmail.atlas.cz), Post.cz (http://www.post.cz), Seznam Email (http://email.seznam.cz/). Jedinou akcí vyžadovanou od napadeného uživatele je přečtení speciální emailové zprávy, kterou mu útočník zašle, např. zamaskovanou jako nevinně vyhlížející upozornění na zajímavé WWW stránky. Bez toho, aby uživatel schránky cokoliv poznal, získá tak útočník přístup ke všem emailům a osobním údajům uživatele, které se vyplňují při registraci a jsou obvykle součástí nastavení schránky. Nebezpečí se sice týká pouze uživatelů, kteří si emaily prohlížejí přes WWW rozhraní, tak to ovšem dělá většina uživatelů.

Na existenci těchto bezpečnostních děr byli provozovatelé výše zmiňovaných služeb upozorněni dva dny před vydáním tiskové zprávy, aby měli dostatek času díry opravit. Přesto stále existuje reálné riziko, že se v systémech nacházejí další podobné chyby, které mohou ohrožovat soukromí uživatelů i nadále.

Bližší informace a podrobný popis bezpečnostních děr

Všechno začalo v prosinci 2001 když jsem v týdeníku ComputerWorld objevil zmínku o tom, že se člověku jménem Marc Slemko podařilo nabourat se do systému Microsoft Passport, který Microsoft plánuje zavést jako standard pro přihlašování k webovým službám (více o tom zde) a poukázat tak na vážné bezpečnostní díry v tomto systému. Naplánovat celý průnik mu prý trvalo pouhou půlhodinu. Připojil jsem se k internetu a stáhnul si článek, ve kterém vše podrobně popisuje. Po přečtení článku jsem o tom všem začal přemýšlet a dospěl jsem k názoru, že pokud je špatně zabezpečený emailový systém samotného Microsoftu (právě zasláním speciální emailové zprávy se Marc dostal k osobním údajům sloužícím pro přihlašování), je možné, že podobné bezpečnostní díry obsahují i české servery nabízející emailovou schránku zdarma (tzv. "freemaily"). Abych si to ověřil, začal jsem experimentovat.

Začal jsem službou Email Seznam (http://email.seznam.cz), protože právě u té mám zřízenou svoji emailovou schránku, kterou používám (na vlastní server nemám peníze). Na pokusy jsem si založil novou schránku uncle.hacker@seznam.cz. Poté jsem si vytvořil stránku, ze které lze pomocí formuláře zasílat emaily ve formátu HTML (formát, který se používá pro internetové stránky a je podporován i v emailových prohlížečích). Právě HTML je totiž mocný nástroj, jehož použitím ve zprávě, kterou si uživatel otevře, dokáži k prostému textu běžné zprávy přidat skript v jazyce JavaScript, který může zařídit zaslání patřičných informací zpět na můj počítač. V nedostatečné kontrole zobrazovaného cizího HTML kódu spočíval princip průniku Marca Slemka do systému Microsoftu a na tom samém jsem se rozhodnul stavět i já. Cílem bylo zaslat uživateli zprávu ve formátu HTML se skriptem, který kontrolní mechanismy služby "propustí" až na uživatelův monitor a skript mi zpět odešle adresu stránku, na které se nachází (tj. adresu stránky s otevřenou emailovou zprávou). Pokud pak tuto adresu zadám do svého prohlížeče, získám přístup k uživatelově emailové schránce - veškerým zprávám v ní a jejímu nastavení. Tato adresa samozřejmě není jednoduše uhodnutelná, obsahuje kód složený z několika desítek písmen a číslic, který se vygeneruje při přihlašování do služby a slouží jako prostředek pro ověření, že uživatel, který se pokouší se schránkou pracovat, je skutečně ten, za koho se vydává.

Už po prvním HTML emailu zaslaném na server Email Seznam mi bylo jasné, že všechno půjde překvapivě mnohem jednodušeji než jsem očekával. Přijatou HTML zprávu server po otevření zobrazí jako přílohu s ikonou HTML stránky, text těla zprávy se jeví jako prázdný. Poté, co zvědavý uživatel klikne na přílohu, otevře se mu tato do nového okna prohlížeče. Zarážející je to, že na takto otevřenou stránku nejsou aplikovány žádné omezení. Proto nebyl žádný problém poslat si do své testovací schránky druhou zprávu, tentokrát již s vloženým jednořádkovým JavaScriptem, který nedělá nic jiného, než že jednoduše přesměruje prohlížeč na adresu skriptu v jazyce PHP, který jsem umístil na jeden z českých freewebů (servery poskytující prostor pro umístění WWW stránek zdarma). Součástí této adresy je i adresa stránky, na které se JavaScript nachází. A protože tato stránka, stejně jako všechny ostatní, je chráněna zmíněným bezpečnostním kódem, který prohlížeč při vyžádání kterékoliv stránky zasílá serveru za adresou požadované stránky, získal můj skript spolu s bezcennou adresou i tento velmi cenný bezpečnostní kód. Skript kód uloží do souboru a mě už pak pouze stačí otevřít stránky Email Seznam s tímto kódem v adrese, a získám úplný přístup k uživatelově emailové schránce bez jeho vědomí. Protože platnost bezpečnostního kódu po určité době neaktivity sama vyprší, musím se do schránky přihlásit jakmile bezpečnostní kód obdržím. To znamená, že v systému pracuji ve stejnou dobu, kdy v něm pracuje i legální uživatel (technicky to nečiní žádný problém). Jediné nebezpečí spočívá v tom, že pokud uživatel po dokončení své práce klepne na odkaz "Konec práce", platnost bezpečnostního kódu je ihned ukončena a spolu s uživatelem ztratím možnost nadále s použitím tohoto kódu se schránkou pracovat i já. Většina uživatelů však práci se svou schránkou ukončuje prostým zavřením okna prohlížeče bez odhlašováním (buď o této možnosti a ni neví, anebo s tím prostě nechtějí ztrácet čas). Pokud uživatel ukončí svou práci bez řándého odhlášení, mohu s jeho schránkou pracovat neomezeně dlouhou dobu i po tom, co se on "odhlásil".

Překvapený, jak snadno lze získat přístup k cizí emailové schránce na Seznamu (pouhým přečtením emailové zprávy, která se navíc může tvářit třeba jako upozornění na zajímavé a skutečně existující WWW stránky, takže uživatel nepojme žádné podezření), řekl jsem si, že to zkusím i s jinými poskytovateli emailu zdarma. Další testovací schránku s uživatelským jménem uncle.hacker (které jsem si zvolil pro práci na tomto projektu), jsem si založil na serveru Email.cz (http://www.email.cz). Po zaslání testovací HTML zprávy skládající se z řady HTML značek různé potenciální nebezpečnosti (od nevinného <font> pro změnu barvy písma, přes <iframe> zneužitelný k vložení neviditelného vnořeného okna s jinou stránkou až ke značce <script>, která umožňuje provést na stránce skript v jazyce JavaScript - právě takový, kterým jsem si zpět zasílal adresu stránky na Emailu Seznam). Náhledem do zdrojového kódu této zprávy po jejím přijetí a otevření jsem zjistil, že úroveň zabezpečení serveru Email.cz vzhledem k interpretaci zpráv ve formátu HTML je vyšší než stejné zabezpečení u Emailu Seznam. HTML emaily se sice zobrazují přímo jako tělo zprávy (což je logičtější a pro mé potřeby i žádanější, ale je zde vynechán krok otevírání HTML přílohy), ale existuje zde filtrování zobrazovaného HTML kódu. Protože značku <script> server nenechá projít, ale nahradí ji tak, aby se zobrazila jako obyčejný text, prohlížeč ji neinterpretuje jako JavaScript vložený do stránky a já tak nemohu spustit kód svého "bonzáckého" skriptu. Se spouštění JavaScriptového kódu jsem na Email.cz neuspěl ani u atributu onload značky <img> (vkládá do stránky obrázek), která v HTML slouží k vyvolání JavaScriptového kódu poté, co se zobrazí obrázek, ke kterému se váže. Drobným prozkoumáním celého systému Email.cz se mi podařilo objevit, že odkazy umístěné na hlavní stránce serveru a sloužící pro změnu kódování češtiny, odkazují na adresu skriptu na email.cz, jehož parametrem je název žádaného kódování. Adresu jednoho z odkazů jsem si zkopíroval a namísto názvu kódování jsem do něj vložil svůj HTML kód vyvolávající "bonzácký" skript, který jsem umístil do externího souboru na svůj účet na freewebu. Skriptu pro změnu kódování češtiny na email.cz neošetřuje případ, kdy dostane jako parametr název neexistujícího kódování (obecně jakýkoliv text jiný než název kódování, tedy i HTML kód). V takovém případě je zobrazeno chybové hlášení o neexistenci souboru. Protože jsou informace o každém kódování na serveru Email.cz ukládána do zvláštního souboru, který ve svém názvu obsahuje název toho kterého kódování, zobrazí se při zadání neexistujícího názvu kódování chybová hláška "Nelze nalézt soubor <I>nazevsouboru</I>", kde <I>nazevsouboru</I> je název hledaného souboru obsahuje text předaný skriptu jako falešný název kódování. Protože chybová hláška nefiltruje znaménka < a >, která jsou základem pro jazyk HTML, když se jako název kódování skriptu pošle kus HTML kódu, vloží jej do stránky s chybovým hlášením bez jakýchkoliv úprav. To by ovšem nebyla zase tak veliká chyba, protože stránka pro změnu kódování češtiny je dostupná i bez přihlášení na server a není jí tedy zasílán bezpečnostní kód pro přístup ke schránce (podobný, jako se používá i na Email Seznam). Tuto stránku však lze šikovně využít jako prostředníka pro získání tohoto kódu ze stránky, která jím chráněná je. Filtrovací mechanismy Emailu.cz nefiltrují již zmiňovanou značku <iframe>. Pomocí ní lze vložit do emailové zprávy mrňavé okýnko, které navíc může být ještě nastaveno jako neviditelné, takže jej uživatel nemůže zaregistrovat, a do tohoto okýnka otevřít skript pro změnu kódování češtiny s HTML kódem podstrčeným jako falešný název kódování. Do tohoto kódu můžu vložit skript, který mému "sběračskému" PHP skriptu odešle adresu svého rodičovského okna (okna s emailovou zprávou) a získání bezpečnostního kódu a tím i přístup k emailové schránce mám zajištěný. Prohlížeč sice nepovolí přístup k informacím o rodičovském oknu stránce umístěné na jiném serveru (proto nemohu k získání bezpečnostního kódu do <iframu> jednoduše otevřít svou stránku umístěnou na freewebu, ale přístup k těmto informacím (a tedy i adrese rodičovského okna) povolí stránce umístěné na stejném serveru, kvůli možnému využití skriptování v rámci uživatelského rozhraní služby). To je důvod, proč jsem musel najít nějaký skript umístěný pod doménou email.cz, který mi povolí vložit do jím generovaného obsahu svůj vlastní HTML kód.

Jako další jsem si na mušku vzal email portálu Centrum (http://mail.centrum.cz). Testovací zpráva zaslaná na vytvořenou testovací emailovou schránku byla sice systémem přijata, ale po jejím otevření jsem na displeji viděl zdrojový HTML kód, nikoliv text uvedený v zasílané HTML zprávě spolu s formátováním písma, vloženým obrázkem či dalšími HTML prvky. Zprvu jsem byl překvapený a myslel si, že na Email.cz je přijímání zpráv ve formátu HTML zakázáno, což ale vyvrátila další zaslána testovací zpráva, která obsahovala pouze barevný text, pro ověření základní funkčnosti HTML zpráv. Tato zpráva se na monitoru zobrazila bez problémů, v červené barvě jak bylo zamýšleno. Po chvíli zkoušení jsem přišel na to, že příčinou "nefunkčnosti" první zprávy je přítomnost značky <script>. Zjistil jsem, že jakmile totiž filtrovací mechanismy Centra naleznou v kódu zprávy slovo <script> (ať už v jakémkoliv kontextu), vloží mezi jednotlivá písmena tohoto slova mezery, čímž si pojistí, že pokud je toto slovo obsaženo ve stejnojmenné HTML značce, nebude tato fungovat. Hlavně ale po nalezení takovéhoto textu přejde systém do "režimu ochrany", kdy blokuje jakékoliv HTML značky ve zprávě, i ty "nevinné" pro změnu barvu písma apod., které jinak fungují. Použití scriptu jsem však hravě obešel uvedením patřičného JavaScriptového kódu do atributy onload značky <img> (popsáno výše). Kód se pak zavolá po načtení obrázku, ke kterému se atribut onload váže. Pokud jako do stránky vložím průhledný obrázek o velikosti 1x1 bodů, nemá uživatel šanci prostým pohledem nic zjistit, ale po načtení tohoto obrázku (které vzhledem k malé velikosti netrvá nijak dlouho), se provede můj kód a zašle adresu stránky "sběračskému" skriptu. Bohužel však na Centru mysleli na bezpečnost a podmínili přístup k emailové schránce nejen bezpečnostním kódem, ale i kontrolou IP adresy. Tuto adresu má každý počítač připojený k internetu a pro každý připojený počítač je jedinečná, takže k emailové systému nelze přistoupit z jiného počítače než z toho, ze kterého bylo provedeno přihlášení do systému. Toto omezení by šlo sice obejít, pokud by se "útočník" nacházel ve stejné místní síti jako uživatel (např. školy mají všechny své počítače propojené do sítě a na internetu vystupují pod společnou IP adresu), to je ale mnohdy obtížně realizovatelné. Nic ale nebrání "útočníkovi" k tomu, aby vkládaný JavaScript upravil tak, aby namísto adresy stránky stáhnul zdrojové texty jiných stránek, ke kterým má uživatel přístup (např. seznam všech emailovýc zpráv ve schránce nebo texty konkrétních emailů), ty pak zaslal "sběračskému" skriptu a vykonal tak vlastně všechnu práci za "útočníka".

Další známý emailový server, který jsem se úspěšně pokusil nabourat, je server MůjMail (http://mujmail.atlas.cz) provozovaný portálem Atlas. Do schránky na tomto serveru se mi podařilo dostat velmi podobně, jako jsem to udělal na serveru Email Seznam, protože způsob zobrazování HTML zpráv je zde stejný (v novém okně bez jakékoliv filtrace). Přesto zde ale jsou dvě odlišnosti. Zaprvé, server zobrazuje na obrazovce po otevření zprávy její zdrojový kód, a pak teprve odkaz na přílohu, která se bez filtrování otevírá do nového okna. Aby si uživatel nepřečetl zprávu už ze zdrojového kódu a přílohu ponechal neotevřenou, vymyslel jsem jednoduchý postup, kterým samotný text zprávy primitivně zašifruji a HTML kód zprávy se pak skládá pouze z příkazu k dešifrování a zašifrovaného textu. Na začátek kódu jsem navíc přidal komentář (který se v HTML stránce neprojeví, ale ve zdrojovém kódu je na první pohled viditelný) říkající uživateli, že "ke správnému zobrazení této zprávy má kliknout na odkaz přílohy na konci stránky". Tak ovšem mimo děk aktivuje "bonzácký" skript, který zašle bezpečnostní kód skriptu "sběračskému". Bezpečnostní kód však u Atlasu není umístěn v adrese stránky, nýbrž v cookies (krátký textový soubor používaný webovými servery pro uchovávání informací specifických pro uživatele prohlížeče - v konečném důsledku tak slouží např. k automatickému vyplňování jména a hesla do formuláře při příštím přihlášení ke službě). Po překonání těchto dvou překážek už není nic jednoduššího než si počkat, až přijde bezpečnostní kód, pomocí speciálních, ale běžně dostupných programů (nebo svépomocí) vytvořit na svém počítači falešné cookie a vydávat se před serverem Atlasu za právoplatného uživatele.

Posledním, patým serverem, který jsem "poctil" svou návštěvou, se stal jeden z nejstarších českých freemailů, Post.cz (http://www.post.cz). Tento server po otevření zprávy ve formátu HTML její text sice zobrazuje jako přílohu, ale k jejímu otevření uživatele sám nabádá (textem "viz příloha"). Otevřená příloha není nijak filtrována, takže není problém do ní umístit JavaScript odesílající adresu "sběračskému" skriptu. Jedinou překážkou u Postu je přítomnot kontroly IP adresy, podobně jako u Centra. V tomto případě se sice dá při přihlašování vypnout, ale nikdo s tím asi nebude ztrácet čas a snižovat tak ještě svou bezpečnost. Přesto i na toto dokáži vyzrát, a to stejným způsobem, jako u Centra (skriptem, který sám získá požadované "zajímavé" informace a zašle jej "sběračskému" skriptu).

Bác, padl i poslední server a přede mnou stojí otázka, jak naložit se znalostí způsobu jak získat přístup do emailové schránky uživatele, který používá schránku kteréhokoliv z pěti největších českých freemailů. Samozřejmě by šla tato znalost zneužít a špehovat tak uživatele. To by ale bylo v rozporu s dobrými mravy, a proto jsem se rozhodl, že raději všechny informace zveřejním a upozorním na chyby správce serverů, aby je opravili. Proto jsem v úterý 8.1.2002 zaslal správcům všech pěti výše zmiňovaných serverů upozornění na bezpečnostní díry v jejich systému i s jejich popisem, aby mohli provést patřičnou opravu. Dal jsem jim dva dny na to, aby díry mohly opravit, a veřejně jsem informace o nalezených dírách oznámil formou tiskových zpráv až ve čtvrtek 10.1.2002. Do té doby jsem dostal odpovědi od správců všech serverů s výjimkou serveru Post.cz, veskrze s poděkováním za upozornění a příslibem, že nalezená chyba bude brzy opravena. Jsem rád, že se tak stalo, protože od nynějška to lidé dychtící po špehování emailové komunikace druhých budou mít zase o kapánek těžší.

Marek Blahuš (blahus@seznam.cz), 10.1.2001

Diskuze (103) Další článek: Externí vypalovačka pro USB i FireWire

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , ,