Mobilní aplikace Seznam – zabezpečení neznám

25. 2. 2015
Doba čtení: 14 minut

Sdílet

Vytvořit bezpečný browser není jednoduchá a levná věc. Jak si v tomto ohledu vede mobilní prohlížeč Seznamu a jeho aplikace pro e-mail?

Že Seznam kromě přebarvených nebo jinak vylepšených verzí Opery, Firefoxu a Internet Exploreru nabízí svůj vlastní prohlížeč, to jste už asi zaslechli. Že v době vydání na tom byl se zabezpečením dost mizerně, to jste se možná už taky dočetli

A víte, že Seznam má i vlastní mobilní prohlížeče, jak pro Android, tak pro iOS? Přestaňte jásat a zadržte. Než si je do svých chytrých telefonů a jiných pádel nainstalujete, přečtěte si, co jsem o jednom z nich zjistil. Pojďme se tedy podívat, co je na webovém prohlížeči také důležitého a co může nepříjemně ovlivnit vaše soukromí. V závěru se lehce podíváme i na mobilní aplikaci Email.cz.

Aktualizace: Článek jsem po napsání poslal do Seznamu, jeho vývojáři si vyžádali necelé dva týdny na opravu chyb, které jsou níže popsány. V pátek 13. února byla vydána nová verze prohlížeče Seznam.cz pro Android, verze 2.0.4, která nalezené nedostatky řeší. Několik problémů nebylo vyřešeno zrovna nejlépe, ale věřím, že v příští verzi budou dotaženy i ty. V pátek třináctého vyšla i nová verze aplikace Email.cz pro Android, verze 1.2.3, která, až na jednu drobnost, také podstatně vylepšila ochranu soukromí svých uživatelů. Článek nechávám v původní podobě, doplnil jsem jen odstavce označené jako Aktualizace. Myslím, že Seznam předvedl, že mu jeho produkty a uživatelé nejsou fuk a v poměrně krátkém čase odvedl dobrou práci, za to si zaslouží uznání i poděkování.

Vždy jsem chtěl natočit nějaké unboxing video. Zaznamenat ten intimní okamžik, kdy přeříznete nožem pásku na originálně zabalené krabici. Když trháte všechny ty ochranné fólie. Když poprvé stisknete tlačítko a ono to nic neudělá. No jo, ale co takhle honosně rozbalovat? Můj nápad natočit rozbalování jídla objednaného přes DámeJídlo je sice revoluční, ale vždy si na něj vzpomenu, až když je po všem. A tak jsem se rozhodl rozbalit browser. A to konkrétně mobilní internetový prohlížeč Seznam.cz ve verzi 2.0.3 pro Android, který byl vydán 20. ledna 2015.

Prohlížeč dorazil do několika vteřin po objednání, v moc pěkném obalu (snad z recyklovatelných materiálů) ze samých jedniček a nul. Rozbalení, instalace i první spuštění proběhlo podle představ, na ploše se mi sice objevil nějaký pejsek a začal očůrávat ikonky, ale naštěstí se dá jednoduše zavřít do boudy.

HTTPS nepoznáte

Co s novým webovým prohlížečem od Seznamu? No přece prohlížet web! A jaký? No přece www.seznam.cz! Fajn, web se načetl, vypadá to, že je na něm vše, co tam má být. V adresním řádku je také napsáno www.seznam.cz, takže taky v pořá… moment, Seznam přece koncem minulého roku převedl svoji titulku na HTTPS, takže by v adresním řádku mělo být napsáno https://www.seznam.cz. Není. Ani, když do něj “kliknu.”

Rychlou kontrolou v Google Chrome zjišťuji, že titulka Seznamu opravdu běží na HTTPS. Všimněte si ikony zámku a https:// na začátku adresy.

Pro jistotu ještě zkouším v prohlížeči od Seznamu načíst svůj web, který také běží na HTTPS a opravdu, žádné https:// v adrese nevidím.

Mobilní prohlížeč od Seznamu vám neprozradí, jestli se web načetl po šifrovaném spojení nebo ne. Tím v podstatě dává zelenou útokům, kterým se říká HTTPS Stripping, protože si nemůžete vůbec nijak ověřit, jak se vlastně web načetl a jestli data po cestě do browseru nemohl třeba někdo modifikovat.

Aktualizace: Prohlížeč nyní zobrazí klasickou ikonku zámku, pokud se web načetl po zabezpečeném spojení. Po kliknutí na tu ikonku se zobrazí informace o certifikátu. Paráda, tak to má být.

Upozornění na chyby certifikátů 

Napadlo mě, jak asi seznamácký prohlížeč bude zobrazovat hlášku o chybném HTTPS certifikátu a jestli vůbec. Zkusil jsem zadat https://foo.bar.slevomat.cz (Slevomat takovou doménu nemá a celkem logicky pro ni tedy nemá ani certifikát) a čekal jsem, co se stane. Dobrá zpráva je, že prohlížeč hlášku zobrazil, špatná zpráva je, že velmi nevhodnou.

Neshodují? Certifikáty? A co jako, koho to zajímá, já chci načíst web, pomyslí si každý první uživatel tohoto prohlížeče a šmátne na Pokračovat. Nenačítat je moc přísné, navíc chybová hláška vůbec neříká, co se stalo a co uživateli hrozí. Porovnejte s hláškou z již zmiňovaného Chrome, verze 40 pro Android:

Chrome zobrazí poměrně jednoduchou a pravdivou hlášku o tom, že mizerové mohou odposlouchávat data zasílaná danému webu a nabádá vás, abyste na web nechodili. Tlačítko Jasně, vím, co dělám je skryto za odkazem Advanced a mnoho lidí ho tak ani nenajde, a to je dobře. 

Nějaké psaní o tom, jak uživatelé reagují na různé chybové hlášky týkající se HTTPS, naleznete třeba v dokumentu Experimenting At Scale With Google Chrome’s SSL Warning a v prezentaci Improving SSL warnings, obojí od Adrienne Porter Felt, dámy z Chrome Security týmu.

Pokud útočníci provedou útok Man-in-the-Middle (zjednodušeně vymění původní certifikát za svůj), tak mobilní prohlížeč od Seznamu nedělá v podstatě nic pro to, aby takový útok nebyl úspěšný. 

Měl bych dodat, že to není tak úplně pravda, browser skoro podporuje HTTP Strict Transport Security (HSTS), které takovým útokům má zabránit. Úkolem HSTS je neposlat nešifrovaný požadavek na server, ale přesměrovat na HTTPS vnitřně, v browseru. To prohlížeč od Seznamu na webech podporujících HSTS podle všeho dělá. v prohlížečích jako Chrome a Firefox je navíc zabudován seznam webů, které fungují pouze na HTTPS (preloaded list), ale prohlížeč Seznamu žádný takový seznam evidentně nemá. 

HTTP Strict Transport Security má ještě jeden velmi důležitý úkol: pokud prohlížeč při načítání webu, který HSTS podporuje, narazí na chybný certifikát, tak uživateli vůbec nedovolí ten web načíst, tlačítko Ano, opravdu ten web chci načíst na stránce s chybou není. Teda až na HSTS v prohlížeči od Seznamu. Ten dovolí uživateli pokračovat na web i přesto, že web umí HTTP Strict Transport Security.

Aktualizace: Seznam podstatně vylepšil hlášku upozorňující na problémy s certifikátem, posuďte sami na obrázku níže. Nepříjemná situace nastane ve chvíli, kdy se vám tahle hláška objeví na www.seznam.cz, to se jí pak nedá zbavit jinak, než kliknutím na Přesto pokračovat. V některé další verzi by bylo dobré to tlačítko ještě více schovat, aby ho uživatel neměl tolik na očích. Věřím, že brzy bude i lepší podpora HSTS.

Našeptávač adres 

Při experimentování s HTTPS jsem si všiml spousty různých požadavků, které mobilní prohlížeč Seznamu posílá. Zjistil jsem, že cokoliv zadáváte do adresního řádku, se posílá na servery Seznamu a ty vám v odpovědi vrátí nápovědu toho, co jste asi chtěli zadat. Potud asi v pohodě, to browsery dělají a uživatelé to mají rádi. Blbé je, že Seznam ty dotazy posílá jako parametry v URL (metoda GET) a navíc nešifrovaně po HTTP.

Kdokoliv, kdo má přístup k logům našeptávacích serverů, má přístup i k seznamu adres, které do prohlížeče píšete. Ke stejnému seznamu má přístup i ten, kdo spojení mezi vaším mobilním zařízením a servery Seznamu odposlouchává na bezdrátové síti třeba v nějaké kavárně. A je celkem jedno, že web funguje pouze na HTTPS, nebo že na něj nakonec ani nepřejdete, zkrátka browser vždy po každém zadaném písmenku pošle aktuální obsah adresního řádku po nešifrovaném spojení.

Aktualizace: Našeptávači se nyní data odesílají po šifrováním spojení HTTPS, takže není možný jejich odposlech.

Když už jsme narazili na to posílání požadavků, tipnete si, jakou hlavičku User-Agent mobilní browser Seznamu posílá? Zkuste to, ale stejně to neuhádnete. Koukejte:

User-Agent: Mozilla/5.0 (Linux; Android 4.4.2; HTC One mini Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36

Mazec, co? Ani slovo o Seznamu. A jak teda máte poznat, že se jedná o přístup z toho prohlížeče? No přece jednoduše: browser s každým požadavkem posílá hlavičku X-Requested-With: cz.seznam.sbrowser, takže nejspíš podle ní. Ale tak očmuchávání prohlížečů je stejně dávno za zenitem, takže no big deal.

Přehled nejnavštěvovanějších webů

Mobilní prohlížeč Seznamu má něco jako titulní stránku, která se objeví vždy, když klepnete do adresního řádku. Na téhle stránce jsou kromě ikon několika služeb Seznamu i ikony webů, které často navštěvujete.

Browser si pro ikony sahá na servery Seznamu a opět po nešifrovaném spojení a opět jsou parametry (v tomto případě názvy domén) v URL.

Případný útočník, který odposlechne váš provoz, tak ví, jaké weby často navštěvujete a ví to také správci serverů Seznamu, ti se to dočtou v logu.

Aktualizace: Ikonky se stahují po HTTPS, takže odposlechem tyto informace zjistit již nelze.

Diagnostická data

Když jsem si v nastavení prohlížeče všiml volby Odesílat data diagnostiky, tak mě napadlo, že když ji vypnu, tak že by se údaje o mých často navštěvovaných webech nebo o tom, co píšu do adresního řádku, nemusely z prohlížeče odesílat.

Tohle nastavení na zmíněné odesílání bohužel nemá žádný vliv, požadavky na ikonky a napovídání se posílají i při vypnutém odesílání dat diagnostiky. Mimochodem, ta diagnostická data se také odesílají po nešifrovaném spojení HTTP. V případě sesterské mobilní aplikace Email.cz verze 1.1.1 z 5. srpna 2014 obsahují i názvy složek, jejichž obsah si chcete nechat v aplikaci zobrazit. Vypnutí odesílání diagnostických dat jsem v nastavení aplikace Email.cz nenašel.

Aktualizace: Vypadá to, že diagnostická data v prohlížeči se již odesílají po HTTPS, ale nová verze mobilní aplikace Email.cz je stále odesílá v nezměněné podobě po HTTP, bohužel.

Používání webového e-mailu

Seznam je především vyhledávač a poskytovatel e-mailu, takže na pořadu dne bylo i přihlášení na web email.seznam.cz a zjišťování, jak to mobilní prohlížeč zvládá. Přihlášení sice probíhá zabezpečeně, formulář se nachází na stránce, která do prohlížeče dorazí po HTTPS (což nemáte šanci zjistit, protože prohlížeč stránky zabezpečené pomocí HTTPS nijak neodlišuje od těch nezabezpečených, pamatujete?) a pomocí stejného protokolu se přihlašovací údaje i odesílají, problém je ale v tom, že po přihlášení vás prohlížeč přesměruje na http://m.email.seznam.cz, čímž zahodí HTTPS, takže data ze serveru do vašeho prohlížeče a obráceně tečou jen tak, v čitelné podobě. Kdokoliv je po cestě také může změnit. I samotné odesílání mailu probíhá po nezabezpečeném spojení.

Mobilní browser od Seznamu bych nedoporučil na čtení a posílání e-mailových zpráv na serverech Seznamu. Po skrytě zabezpečeném přihlášení veškerou vaši komunikaci bez varování vystaví na obdiv celému světu. Útočník také může jednoduše získat přístup do vaší schránky. 

Můžete sice ručně URL přepsat a používat tak HTTPS variantu, ale po načtení stejně nepoznáte, kde jste. Již zmíněná mobilní aplikace Email.cz posílá data po HTTPS. Až tedy na diagnostická data, o kterých jsem již také psal. 

Seznam vás přesměruje na nezabezpečenou mobilní variantu http://m.email.seznam.cz, i když používáte jiný mobilní prohlížeč, takže tohle berte spíš jako výtku směrem k e-mailovému týmu Seznamu. V jiných prohlížečích si toho ale aspoň můžete všimnout. 

Aktualizace: Mobilní verze webu email.seznam.cz již funguje pouze na HTTPS, takže ji můžete v klidu používat v jakémkoliv prohlížeči. Dobrá práce, díky, Sezname! 

Našeptávač e-mailových adres 

Pokud tedy už nějakou náhodou zabloudíte na webový e-mail od Seznamu v nějakém mobilním prohlížeči a začnete někomu psát e-mail, bude vám našeptávač nabízet e-mailové adresy vašich kontaktů. Což vypadá jako fajn vlastnost, dokud nezjistíte, že našeptávač funguje také na nešifrovaném protokolu HTTP, a tak kdokoliv poslouchá na síti, vidí cokoliv, co do políčka Komu píšete.

Při ručním přepnutí na HTTPS se mi nepodařilo našeptávač donutit našeptávat. To je nejspíš způsobeno tím, že do zabezpečené varianty https://m.email.seznam.cz jsou některé skripty vkládány pomocí HTTP a tak je prohlížeč nenačte, tomu se říká mixed content

Ani zabezpečená varianta mobilního webu email.seznam.cz není tak zabezpečená nebo funkční, jak by měla být. Raději ten mobilní web vůbec nepoužívejte.

Aktualizace: Už zase můžete. Seznam chyby opravil a našeptávač už nešifrovaná data neposílá. 

Upozornění na e-maily 

Ale zpátky k prohlížeči. V něm si můžete zapnout upozornění na nové e-maily, resp. můžete ho vypnout, standardně je zapnuté. Upozornění na nově příchozí zprávu se potom objeví v notifikační liště telefonu. Ano, tušíte správně, i tento požadavek běží po nešifrovaném spojení.

Prohlížeč Seznamu při standardním nastavení vyzradí všechny vaše příchozí e-maily komukoliv, kdo odposlouchává váš provoz. A to ani nemusíte používat mobilní web m.email.seznam.cz, o kterém jsem psal před chvílí. 

Aktualizace: V nové verzi prohlížeče již dotaz na příchozí zprávy běží po šifrovaném HTTPS, to je ta dobrá zpráva. Špatná zpráva je, že při stahování obsahu zpráv pro zobrazení v notifikační liště vývojáři v Seznamu zapomněli kontrolovat certifikát, a tak se útočník pomocí útoku Man-in-the-middle stále dostane k nově příchozím zprávám. Aplikace vám z nějakého důvodu informaci o novém e-mailu nezobrazí, ale obsah té zprávy po síti do telefonu cestuje a v tu chvíli si útočník její obsah může přečíst. Škoda. 

Člověk uprostřed e-mailu 

mobilní aplikaci Email.cz jsem již psal v souvislosti s odesíláním diagnostických dat po nešifrovaném spojení. Také jsem zmiňoval, že tahle aplikace data odesílá správně po HTTPS. Zajímalo mě, jak moc správně. HTTPS se totiž dá podělat třeba tak, že aplikace nebude kontrolovat, komu patří certifikát nebo kdo ho vydal, data zašifruje a pošle na server. Nebo taky útočníkovi. Nebo komukoliv, kdo aplikaci nějaký certifikát poskytne. 

Tak přesně takhle aplikace Email.cz funguje. Certifikát nijak neověřuje, takže je možné spáchat útok Man-in-the-Middle a dostat se tak třeba k obsahu vašich e-mailů, které aplikace stahuje nebo které odesíláte. Na chování aplikace to nepoznáte, vše funguje a že máte uprostřed člověka, se nijak nedozvíte.

Pokud se útočník pokusí o provedení Man-in-the-Middle při přihlášení, tak aplikace vypíše chybu ověření uživatele, což dává alespoň malou naději, že alespoň při přihlašování se certifikáty ověřují.

Jenže k chybě dojde až po odeslání přihlašovacích údajů, při zpracovávání odpovědi serveru. Útočník tedy může přístupové údaje uživatele získat, protože aplikace je na server odešle bez jakéhokoliv ověření certifikátu. 

Všimněte si, že aplikace neposílá heslo v čitelné podobě, ale jako nějaký hash. Pouhým dotazem do Google zjistíme, že 6a284155906c26cbca20c53376bc63ac je nesolený MD5 hash mého testovacího hesla heslo123

Útočníkovi stačí tento hash zachytit a prostě ho použít. Nebo nějakým způsobem cracknout. Pokud se budete chtít v komentářích podělit třeba o vaše zkušenosti s louskáním hesel nebo nám sdělit, že nechápete, proč Seznam vyrobil prohlížeč, nezapomeňte do komentáře propašovat slovo meloun, ať víme, že jste článek dočetli aspoň sem.

Mobilní aplikace Email.cz aktuálně poskytuje mizerné zabezpečení přenášených dat a přihlašovacích údajů. Dávejte si pozor, k jakým sítím jste připojeni, když ji používáte. Jenže to se lehko řekne, tak ji asi raději nepoužívejte vůbec, dokud Seznam nevydá verzi, která bude správně ověřovat certifikáty. 

Aktualizace: Opravená verze Email.cz je již venku, takže nebezpečí odposlechu již nehrozí. I zjišťování nových e-mailů je v aplikaci Email.cz dostatečně zabezpečené. Díky, Sezname! V příští verzi by to chtělo ještě posílat i ta diagnostická data šifrovaným spojením a mobilní aplikace Email.cz je vcelku slušně proti odposlechům zabezpečena. 

Pár postřehů mimo 

Při hraní si s mobilním browserem od Seznamu jsem narazil na pár dalších zajímavostí, které se tak nějak víceméně k uvedenému hodí. Ondřej Š., nejmenovaný účastník mého školení webové bezpečnosti, mi napsal, že si začal více všímat, co se děje v jeho prohlížeči a že si všiml, že email.seznam.cz není na HTTPS. Zdálo se mi to divné, po přihlášení v klasickém desktopovém prohlížeči se přece ocitnete na zabezpečené variantě. 

No jo, jenže email.seznam.cz funguje opravdu jak na HTTPS, tak i na HTTP. Takže případnému útočníkovi stačí zbavit se HTTPS a začít odposlouchávat nebo modifikovat data tekoucí z nebo do uživatelova oblíbeného prohlížeče. Zbavit se HTTPS je v tomto případě velmi jednoduché, stačí uživateli třeba poslat odkaz nebo ho nějak donutit napsat adresu ručně. 

Aktualizace: email.seznam.cz již funguje jenom na HTTPS, palec nahoru!

Webový email.seznam.cz také stále přidává do odeslaných e-mailů hlavičku Received s IP adresou odesílatele, takže můžete zjistit, kde přesně váš kolega používající e-mail od Seznamu vykonává zadaný úkol.

Díky tomu, že Seznam nepodporuje STARTTLS, to vlastně může zjišťovat kdokoliv, kdo dokáže odposlechnout data procházející mezi jednotlivými poštovními servery nebo kdo poslouchá třeba uživatele používající mobilní browser od Seznamu, ve kterém si takové e-maily čte. 

Seznam umí šifrované SMTP na portu 465, takže pokud uživatel toto zabezpečení používá, tak je odesílaná poštovní zpráva chráněna po cestě z jeho poštovního programu na server Seznamu, ale dále, na cílové servery, již cestuje opět v čitelné podobě.

Aktualizace: Podle Ireny Zatloukalové, PR manažerky Seznamu, již vývojáři na podpoře STARTTLS pracují, ale bude to chvíli trvat, což je pochopitelné. Snad to bude brzy, držím palce, ať se to povede.

Bezpečný browser

Vytvořit bezpečný browser není jednoduchá a levná věc. Tým Chrome Security má přibližně 30 členů na plný úvazek, Chrome Privacy dalších asi 12. Jenom o bezpečnost Firefoxu se stará přes 30 lidí. K tomu všemu je potřeba ještě připočítat “klasické” vývojáře. 

Seznam by měl na bezpečnosti svých prohlížečů velmi podstatně zapracovat, jinak se za bezpečné opravdu považovat nedají. Pořádně zamakat by měl i na zabezpečení svého e-mailu, přece jen e-mailová schránka je branou k mnoha službám, které uživatelé využívají, a je tedy třeba ji velmi dobře chránit. 

Ale abychom tu nenaříkali jen nad Seznamem, stvořit bezpečný browser se nepovedlo ani firmě, která o webové bezpečnosti ví opravdu hodně. Prohlížeč WhiteHat Aviator, který vás prý na webu bude chránit lépe, než “velké browsery”, obsahoval chybu, která umožňovala vzdálené spuštění kódu.

Tak co, stále se chcete pustit do tvorby dalšího bezpečného prohlížeče?

Autor článku

Autor umí vyvíjet webové aplikace a zajímá se o jejich bezpečnost. Nebojí se o tom mluvit veřejně, hledá hranice tak, že je posouvá. Jeho cílem je naučit webové vývojáře stavět bezpečnější a výkonnější weby a aplikace.

Upozorníme vás na články, které by vám neměly uniknout (maximálně 2x týdně).