Zpět na seznam článků     Číst komentáře (37)     Verze pro tisk

Miliony Gmail účtů napospas spamerům

Autor: Emkei   
23.4.2009

Gmail je do značné míry nedobytým rájem spamerů. Prolomit captchu, jíž je vybaven registrační formulář, je považováno za takřka nemožné. Opravdu ale musíte captchu opisovat, nebo se jedná pouze o prvek, který zůstává ze strany spambotů bez povšimnutí?


GmailKdyž už jsem napsal články o neefektivních captcha systémech na serverech bux.to, paypal.com a společnosti O2, rozhodl jsem se i tento článek pojmout ve stejném duchu a tím tuto minisérii ukončit. V průběhu letošního roku jsme mohli zaznamenat úspěšné počítačové útoky na captchu gigantů Gmail, Yahoo a Hotmail (MS), přestože lidské oko mělo nezřídka problém jednotlivé znaky od sebe vůbec rozeznat. V článku se konkrétně zaměříme na ochranu proti zautomatizovaným botům tak, jak ji koncipovala společnost Google u své služby Gmail.

Přestože je služba Gmail již více jak 5 let v beta provozu, osobně ji považuji za jednu z top freemailových schránek na trhu. Samotná captcha, jíž je vybaven její registrační formulář, je navržena rozumně a splňuje většinu zásad sofistikované ochrany formou opisu obrázku. Její prolomení tudíž není jednoduchou záležitostí několika málo řádků kódu a aplikací typu GOCR, ImageMagick, Symseek atp., přesto tuto možnost nelze kategoricky vyloučit. Achillovou patou samotné aplikace je ověřování dostupnosti zvolené freemailové schránky, což je realizováno pomocí jednoduchého scriptu. Spameři si tak mohou snadno ověřit existenci schránky a tu následně zahltit nevyžádanou poštou. Na tuto metodu mě jako první upozornil .cCuMiNn., který o ní připravuje podrobný článek. Zní to jednoduše a nebýt prozřetelnosti vývojářů googlu, jednoduché by to i bylo. Registrační formulář totiž podobné zneužití nepovoluje a po ověření dostupnosti 10 e-mailových schránek vyžaduje pro ověření dalších deseti účtů opsat kód z captchy, přičemž se tento proces po každé dekádě opakuje. Pro běžného člověka to problém nepředstavuje, samotná vlastnost je poměrně známá a diskutovaná na mnoha serverech. Co mě však zaráží je fakt, že nikdo dál nezkoumal, jak je toto počítání 10 pokusů realizováno. Teoreticky by totiž musel google vyhradit pro tuto captchu zvláštní databázi, kde by se jednotlivé pokusy anonymních uživatelů (IP) inkrementovaly, což je sice z praktického hlediska možné, z toho racionálního ovšem naprostý nesmysl. Přitom fakt, že google žádnou vyhrazenou databázi kvůli captche nezřídil, si lze ověřit poměrně jednoduše. Jakmile nás google vyzve po deseti pokusech k opsání captchy, otevřeme si registrační formulář v jiném prohlížeči, kde již captcha vyžadována opět není. Z tohoto chování lze vydedukovat, že google realizuje počítání "pouze" na úrovní cookies.

Po několika pokusech s odesláním požadavku, jak bez cookies, tak s jednotlivými "sušenkami" zjistíme, že za počítáním uskutečněných pokusů stojí ta s označením 'PREF', jež nám server přidělí při návštěvě homepage vyhledávače google, respektive konkrétně stránky s Nastavením (Preferences). Nastavení ostatně obsahuje samotné cookie, jeho první část totiž tvoří náš unikátní identifikátor 'ID', 'TM' nese čas přidělení tohoto souboru, 'LM' čas poslední změny nastavení a 'S' je pravděpodobně kontrolní součet.

PREF=ID=1996a5418198c9c6:TM=1240414756:LM=1240414756:S=7pO3UrociZYvRwWs

Co z toho plyne pro spamery? Po ověření každých deseti e-mailových schránek si stačí nechat přidělit nové 'PREF' a v ověřování nerušeně pokračovat dál, aniž by bylo potřeba opisovat jakoukoliv captchu. Tu pak opět opisují pouze lidé, boti se jí úspěšně vyhnou, přestože je předurčena právě jim.

Pojďme se na danou problematiku podívat trochu blíže, a to z technického hlediska. Jak již bylo řečeno, ověřování dostupnosti freemailové schránky je zajišťováno pomocí jednoduchého scriptu, konkrétně pomocí následujícího requestu:

https://www.google.com/accounts/CheckAvailability?service=mail&hl=en&Email=jmeno_schranky

Za jmeno_schranky lze v primitivním cyklu postupně přiřazovat slova z wordlistu, a tak dosáhnout seznamu jak volných, tak obsazených e-mailových schránek. Wordlist by měl obsahovat pouze unikátní slova, 6 až 30 znaků dlouhá, složená z malých alfanumerických znaků doplněných případně o znak tečky. Slova vždy musejí začínat písmenem (nikdy číslicí nebo tečkou) a nesmějí být zakončeny tečkou, která se zároveň nikde nesmí nacházet ve skupinách (několik teček vedle sebe). Samotná tečka v podstatě nehraje v názvu e-mailové schránky žádnou roli, účty 'novakjan' a 'novak.jan' jsou totožné, ačkoliv si to spousta uživatelů neuvědomuje. Registrací účtu prostřednictvím služby Gmail totiž nezískáte pouze e-mailovou adresu ve tvaru cokoliv@gmail.com, nýbrž i cokoliv@googlemail.com, všechny povolené kombinace slova 'cokoliv' a znaku tečka (c.o.k.o.l.i.v, cok.oliv, co.ko.liv atd.) a nekonečně mnoho filtrů vytvářených pomocí znaménka plus. Ve výsledku tedy nemáte pouze jednu e-mailovou adresu, ale obrovské množství:

cokoliv@gmail.com
cokoliv@googlemail.com
co.ko.liv@gmail.com
c.okoliv@gmail.com
coko.l.iv@gmail.com
   ...
cokoliv+petr@gmail.com
cokoliv+prace@gmail.com
cokoliv+fuckyou@gmail.com
   ...

E-mail odeslaný na takové adresy vždy skončí ve Vaší schránce, přestože jste si registrovali pouze jedno jediné jméno 'cokoliv'. Slova ve wordlistu tedy mohou obsahovat i zmiňované tečky, to ovšem povede pouze k duplicitám, nikoliv ke sbírání unikátních adres.

Jako POC jsem nejprve vytvořil jednoduchý bash script, který sice pracoval správně, na danou práci se ovšem vůbec nehodil. Ono vysypat bezmála stomegový wordlist do paměti, aby jej bylo možné využít ve for-cyklu, se zákonitě projeví na běhu stroje, který daný script zpracovává. Jako demonstrace funkčnosti je to ovšem dostačující, proto jsem zmiňovaný kód přiložil i k tomuto článku.

Jelikož jsem ale chtěl vědět, jak rychle se dají e-mailové adresy z databáze gmailu "krást", přepsal jsem si zmiňovaný bash script za pomoci Qt knihovny do C++ a každé testované slovo ve wordlistu navíc rozšířil na pravé straně o sekvenci 0-9. Po týdnu běhu program nasbíral přes 5 milionů platných e-mailových adres a ještě stále pracoval, což jsou rozhodně čísla hodná zamyšlení. Na obhajobu vývojářů služby Gmail ovšem musím konstatovat, že osobně bych dané zabezpečení řešil naprosto stejným způsobem a nenapadá mě žádné jiné řešení, než captchu vyžadovat s každým ověřením e-mailové schránky (např. formou testované rotační captchy), na což však v konečném důsledku doplatí především regulérní uživatelé, jak už to ostatně u bezpečnostních opatření bývá.

Proof of concept


Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka

Social Bookmarking

     





Hodnocení/Hlasovalo: 1.3/80

1  2  3  4  5    
(známkování jako ve škole)