ZenGo je bezpečná Web 3 peněženka využívající technologii multi-party computation (MPC).

Nedávno tým SkyFall společnosti CertiK provedl důkladný audit a průzkum mnoha mobilních peněženek a zjistil, že řešení MPC společnosti ZenGo poskytuje silnější bezpečnostní obranu než běžné mobilní peněženky – uživatelé peněženek ZenGo, zejména ti s peněženkami s vysokou hodnotou Uživatelé jsou chráněni před přímými útoky ze strany pokročilých útočníků: například zneužívání zranitelností zero-day nebo pokročilého malwaru k získání přístupu root na zařízení uživatele.

Tato hrozba je nejnovější a objevil ji až tým CertiK, takže vývojáři MPC peněženek musí věnovat pozornost detailům útoku!

Obrana proti privilegovaným útočníkům je náročná. Ve výsledcích zprávy navrhujeme novou metodu útoku a vektor útoku pro metodu MPC v ZenGo. Okamžitě jsme tedy tento bezpečnostní problém nahlásili ZenGo a ZenGo rychle zareagovalo a problém vyřešilo.

V tomto článku se ponoříme do technických detailů objevu a podělíme se o to, jak pracujeme se ZenGo na zlepšení celkového zabezpečení peněženky MPC.

Na základě našeho důkladného přezkoumání bezpečnostního návrhu ZenGo a jejich profesionálních reakcí na problémy se CertiK domnívá, že ZenGo lze označit za nejbezpečnější řešení peněženky, které je v současné době na trhu.

Co je MPC?

Multi-party computation (MPC), někdy také nazývaný bezpečný multi-party computation (SMPC), je oborem kryptografie. Umožňuje více stranám společně podepisovat transakce a zároveň zajišťuje, že klíče každé strany nebudou ohroženy.

Vzhledem k tomu, že technologie MPC může distribuovat klíče mezi více stran, čímž eliminuje jakýkoli jediný bod selhání, umožňuje uživatelům lépe chránit soukromé klíče Web 3. Tato metoda se také běžně nazývá „podepisování prahů“ a v současnosti ji používá mnoho uživatelů Web 3 správci a vývojáři peněženek k ochraně majetku Web 3. Mezi nimi je ZenGo jedním z nejznámějších a nejpoužívanějších vývojářů MPC peněženek.

Jak je znázorněno na obrázku níže, peněženka nepoužívá tradiční soukromý klíč k řízení podepisování transakcí, místo toho je několik soukromých klíčů sdíleno, aby se účastnily procesu podepisování transakcí a generovaly konečný podpis pro ověření.

Společný design MPC, který generuje podpisy

Prostřednictvím tohoto výzkumu jsme rozpoznali výzvy a potenciální bezpečnostní rizika spojená s přístupem MPC a důležitost ochrany majetku Web 3. Chceme tedy lépe chránit uživatele Web3 zkoumáním a řešením těchto problémů.

Můžeme se tedy zamyslet nad touto otázkou: proč mohou peněženky MPC poskytovat vyšší bezpečnost ve srovnání s tradičními kryptopeněženkami? jak se to dělá?

Design ZenGo MPC a zajištění bezpečnosti

Prostřednictvím tohoto výzkumu jsme rozpoznali výzvy a potenciální bezpečnostní rizika spojená s přístupem MPC a důležitost ochrany majetku Web 3. Chceme tedy lépe chránit uživatele Web3 zkoumáním a řešením těchto problémů.

Můžeme se tedy zamyslet nad touto otázkou: proč mohou peněženky MPC poskytovat vyšší bezpečnost ve srovnání s tradičními kryptopeněženkami? jak se to dělá?

Po vyhodnocení návrhů různých Web 3 peněženek jsme se podívali na MPC Web 3 peněženky – vyhodnotili jsme jednu z nejrespektovanějších MPC peněženek na trhu a přední MPC peněženku s vlastním hostitelem – ZenGo.

Pro toto hodnocení jsme použili stejný model hrozby jako v předchozí studii: „Pokud je vaše zařízení infikováno malwarem, ochrání tato peněženka stále váš majetek?“

Přehled bezpečnostní architektury ZenGo

Jak je znázorněno na obrázku výše, peněženka ZenGo má jedinečný bezpečnostní design a architektura zabezpečení a proces obnovy jsou více vrstvené než tradiční peněženky. Bezpečnostní funkce poskytované ZenGo zahrnují, ale nejsou omezeny na:

Schéma podpisu dvou stran: Návrh MPC společnosti ZenGo implementuje schéma podpisu dvou stran. Každý uživatel využívá při generování podpisu transakce dva úlomky klíče: jeden uložený na serverech ZenGo (hlavní klíč ①) a druhý uložený v zařízení uživatele (hlavní klíč ②). ZenGo ani uživatel neví, jaké klávesy ten druhý drží.

Ochrana založená na TEE: Kromě toho, aby se zabránilo útokům „man-in-the-middle“ a „APP hijacking“, aplikace ZenGo používá řešení TEE (Trusted Execution Environment) a používá soukromý klíč TEE k podepisování HTTPS. komunikační obsah pro vyžádání souvisejících API. Tento klíč zařízení založený na TEE je generován v TEE, když uživatel nastavuje zařízení, a nemůže být extrahován ani samotným operačním systémem.

S těmito bezpečnostními funkcemi již útočníci nemohou krást soukromé klíče uživatelů z paměti nebo úložných souborů a převzít kontrolu nad majetkem uživatelů ZenGo. ZenGo také používá TEE k ochraně interakce mezi serverem a klientem před neoprávněnou manipulací. To také znamená, že útoky typu „man-in-the-middle“ a „APP hijacking“ jsou účinně blokovány a bráněny.

Náš audit potvrdil, že ZenGo má bezpečný design a implementaci, která dokáže odolat těmto útokům, a toto je nejvyšší úroveň bezpečnostního designu mezi auditovanými peněženkami, se kterými jsme přišli do styku.

Návrh a implementace zabezpečení ZenGo úspěšně brání útokům včetně oprávnění a výše uvedených útoků. Vypořádat se se všemi typy privilegovaných útoků však není snadné, zvláště vezmeme-li v úvahu, že útočníci mohou číst (a v některých případech zapisovat) libovolnou paměť.

Auditováním celé peněženky se nám podařilo objevit problém s implementací v ZenGo, který nám umožnil jednat jako privilegovaný útočník a obejít určité ochrany.

Než však probereme podrobnosti, podívejme se na bezpečnostní mechanismus peněženky ZenGo.

Bezpečné postupy pro peněženku ZenGo

Prostřednictvím tohoto výzkumu jsme rozpoznali výzvy a potenciální bezpečnostní rizika spojená s přístupem MPC a důležitost ochrany majetku Web 3. Chceme tedy lépe chránit uživatele Web3 zkoumáním a řešením těchto problémů.

Můžeme se tedy zamyslet nad touto otázkou: proč mohou peněženky MPC poskytovat vyšší bezpečnost ve srovnání s tradičními kryptopeněženkami? jak se to dělá?

Klasická Web 3 peněženka vyžaduje pouze soukromý klíč. Vždy však existuje možnost, že uživatel odhalí soukromý klíč nebo mnemotechnickou frázi. Mohli by tak ztratit své soukromé klíče a pak sledovat, jak se útočník zmocní majetku.

MPC peněženka funguje jinak. Peněženka nemá jediný soukromý klíč. Uživatel nyní drží pouze jeden útržek soukromého klíče a neví nic o zbývajících útržcích soukromého klíče. Z tohoto pohledu, i když útočník získá osobní klíč uživatele, nemůže přímo převádět finanční prostředky. Za účelem další ochrany uživatelů používá ZenGo řadu prostředků k posílení jejich bezpečnostního designu: nejen výše zmíněné schéma podpisu dvou stran a ochranu zařízení na bázi TEE, ale také biometrické ověřování založené na skenování obličeje a dodatečné šifrování klíčů.

Ochranná opatření při registraci uživatele a obnovení uživatelského účtu

Během procesu registrace uživatele a obnovy účtu přijímá ZenGo následující ochranná opatření k ochraně majetku uživatele.

Ochrana identifikace uživatele: Schéma podpisu dvou stran vyžaduje, aby uživatelé měli přístup ke svým prostředkům pouze při interakci s jinou stranou (na straně serveru v nastavení ZenGo). Aby bylo možné identifikovat uživatele a související sdílené klíče uložené na serveru, vyžaduje ZenGo k registraci účtu e-mail uživatele.

Aby se zabránilo hackování e-mailů, používá ZenGo technologii skenování obličeje (Zoom by FaceTec) k propojení biometrických informací s uživatelskými účty. Během procesu obnovy účtu po registraci a ověření e-mailu musí uživatelé pro ověření „přetáhnout obličej“.

Ochrana komunikace mezi aplikací a serverem: Aby bylo zajištěno, že servery ZenGo budou komunikovat se zařízeními legitimních uživatelů, ZenGo vygeneruje a zaregistruje asymetrický klíč v prostředí TEE během procesu registrace a obnovy účtu. Všechny interakce mezi aplikací ZenGo a serverem musí být podepsány tímto specifickým klíčem. Protože je chráněn hardwarově podporovaným bezpečnostním řešením, nemůže být tento klíč přímo přečten útočníkem a klíč je obtížné zneužít.

Proces registrace uživatele ZenGo a obnovení účtu

Ochrana před sdílením uživatelských klíčů: Nechat uživatele ukládat a zálohovat své úlomky klíčů je riskantní, protože to může ohrozit všechna bezpečnostní opatření poskytovaná ZenGo. K vyřešení tohoto bezpečnostního problému generuje ZenGo během procesu registrace šifrovací klíč. Šifrovací klíč zašifruje sdílený klíč uživatele a uloží šifrovaný text na svém serveru.

Šifrovací klíče však nejsou sdíleny se ZenGo, místo toho je vynucena synchronizace s Google Drive nebo iCloud uživatele. Šifrovaný klíč lze sdílet a dále dešifrovat pouze poté, co uživatel projde ověřením e-mailu a biometrickou autentizací na serveru. Mezi nimi je téměř nemožné „oklamat“ serverovou biometrickou autentizaci (rozpoznávání obličeje FaceTec) běžnou 2D/3D rekonstrukcí obličeje.

Generování podpisu transakce Transakční proces ZenGo

Za účelem podepsání transakce provádí aplikace ZenGo řadu interakcí se serverem ZenGo. Během interakce využívá ZenGo své open source řešení pro podpisy dvou stran a sdílení uživatelských klíčů ke generování podpisů dvou stran. Server ZenGo pak jde o krok dále, aby transakci podepsal a vysílal. Všechny požadavky v tomto procesu jsou opatřeny časovým razítkem a podepsány v TEE, aby byla zachována integrita a nepřehratelnost informací.

Odhalování problémů v designu ZenGo MPC

Jak jsme již diskutovali dříve, návrh zabezpečení ZenGo zahrnuje mnoho šifrovacích klíčů, z nichž každý má jinou odpovědnost. V tabulce níže ukazujeme, které klíče používá ZenGo a jak jsou chráněny.

Prostřednictvím této tabulky vidíme, že na straně klienta se používají tři klíče: hlavní klíč ②, klíč zařízení a šifrovací klíč. Útočník potřebuje získat hlavní klíč② i klíč zařízení, aby mohl interagovat se serverem ZenGo a ukrást uživatelské prostředky.

Jak bylo uvedeno v předchozí sekci podrobností o transakci, hlavní klíč ② se podílí na generování podpisů obou stran jako text v paměti, což umožňuje útočníkovi číst paměť procesu a extrahovat hlavní klíč ②. Částečným řešením je, že všechny transakční požadavky na server ZenGo musí být podepsány klíčem zařízení, který nelze přečíst ani extrahovat. Tento proces se provádí v TEE a nemá žádnou kontrolu nad útočníkem.

Navzdory mnoha aspektům bezpečnostního designu ZenGo však tým SkyFall společnosti CertiK v něm stále objevil zranitelnost. Po provedení podrobného auditu všech rozhraní API v aplikaci ZenGo jsme si všimli, že některá rozhraní API umožňují útočníkovi podvrhnout servery ZenGo a snadno vygenerovat nový klíč zařízení pro použití na jiných zařízeních.

Toto API registrované pomocí klíče zařízení postrádá potřebnou bezpečnostní ochranu: útočník může vygenerovat nový klíč eliptické křivky NIST P-256 na jiném zařízení a poté může využít API registrované pomocí klíče zařízení a zaregistrovat nový Generovat pár klíčů. , předstírat, že jde o nové uživatelské zařízení a požádat o transakci.

Toto útočné zařízení nazýváme forking attack.

Útok na zařízení ZenGo na peněženku

Jak bylo uvedeno výše, útočník by musel mít hlavní klíč uživatele ZenGo ② a platný klíč zařízení, aby mohl ukrást jeho aktiva.

Hlavní klíč ②: Hlavní klíč ② je pevný klíč, který se používá jako prostý text v paměti pro účast v procesu podpisu obou stran. Vzhledem ke složitosti a jedinečnosti podpisových algoritmů obou stran nelze tento proces dokončit v TEE. Privilegovaný útočník by proto mohl jednoduše vypsat paměť procesu nebo unést určitá systémová rozhraní API a extrahovat hlavní klíč. Snímek obrazovky níže ukazuje hlavní klíč, který můžeme extrahovat na platformě iOS ②.

Klíč zařízení: Během procesu registrace nebo obnovy účtu je na zařízení uživatele v TEE vygenerován platný klíč zařízení jako řešení výše uvedené hrozby extrakce čistého textu. Klíč zařízení nemůže číst privilegovaný útočník. Útočník však může použít stejné rozhraní API pro registraci klíče zařízení k registraci dalšího páru klíčů a jeho použití.

API pro registraci klíče zařízení má pouze velmi základní ověřovací mechanismus: útočník může použít běžný prostý text lokálně uložený JWT token a extrahovaný hlavní klíč ② pro autentizaci API. Podle návrhu by měl být serverový kód zapojený do tohoto API také biometricky ověřený Face tec. V praxi však kód tento krok neprovede kvůli logickým chybám.

V našem simulovaném útoku jsme simulovali privilegovaného útočníka a nepřetržitě monitorovali zařízení oběti. Jakmile je aplikace ZenGo spuštěna, extrahujeme hlavní klíč z paměti a načteme API token z lokální databáze. A tyto informace stačí k tomu, aby útočník ukradl všechny prostředky uživatele!

Jakmile máme token API, vygenerujeme nový klíč zařízení a zavoláme rozhraní API pro registraci klíče zařízení, abychom zaregistrovali klíč zařízení na serveru ZenGo. Poté jsme vytvořili všechny požadavky API pro interakci se serverem ZenGo za účelem zahájení transakcí. Pro peněženku MPC je generování podpisů od obou stran velmi unikátní a komplexní proces. Naštěstí se vývojový proces ZenGo vždy držel ducha open source, takže jsme byli schopni sestavit knihovnu podpisů pro dvě strany používanou v oficiální aplikaci ZenGo a spustit ji lokálně.

Obrázek výše ukazuje, jak extrahujeme hlavní klíč ② a registrujeme nový klíč zařízení jménem oběti. Tyto dva klíče jsme pak použili k odeslání 0,00222 ETH na „útočníkův účet“. Celý proces trvá jen několik sekund a oběť si vůbec neuvědomuje.

K vyřešení tohoto problému ZenGo implementovalo biometrické ověřování FaceTec na straně serveru pro registraci zařízení. Řešení na úrovni serverového rozhraní API eliminují možnost tohoto útoku a nevyžadují aktualizace klientského kódu.

Shrnout

Při hodnocení ZenGo ze strany CertiK jsme důkladně prozkoumali a prověřili všechna bezpečnostní opatření, která má k ochraně uživatelských aktiv. Patří mezi ně schémata vzájemného podpisu, ochrana zařízení na bázi TEE a biometrie pro registraci a obnovu účtu.

Přestože má ZenGo vysokou úroveň povědomí o zabezpečení a přijal mnoho opatření ke zlepšení svého zabezpečení, CertiK objevil klíčové zneužitelné riziko autentizace přístupu k API v implementaci ZenGo. Tato chyba zabezpečení by mohla umožnit privilegovanému útočníkovi obejít stávající bezpečnostní opatření a ukrást prostředky uživatele, pokud je jeho zařízení kompromitováno.

ZenGo problém okamžitě vyřešil a nasadil opravu a CeritK následně provedl důkladný další audit a zjistil, že oprava opravuje rizika zmíněná ve zprávě.

S nasazením oprav věříme, že ZenGo může v budoucnu účinně zabránit privilegovaným uživatelům v nelegálním přístupu k uživatelským prostředkům. Obrana proti privilegovaným útočníkům je obtížný úkol a bezpečnostní postupy ZenGo nám ukazují komplexní přístup k ochraně uživatelů. Tato peněženka umí více než většina běžných peněženek v současnosti na trhu.

Jsme hrdí na partnerství se ZenGo a hrdí na to, že můžeme spolupracovat se ZenGo na ochraně bezpečnosti uživatelů Web 3 a řešení bezpečnostních problémů. Rádi bychom také poděkovali ZenGo za včasnou reakci na zranitelnosti, které jsme objevili, a za jejich efektivní záplatování zranitelností.

Jako praktici v bezpečnostním průmyslu jsme velmi rádi, že špičková společnost zabývající se webovými 3 peněženkami bere bezpečnost tak vážně a má tak vysoký smysl pro odpovědnost za uživatele a uživatelské prostředky. Doufáme, že na cestě k bezpečnosti v budoucnu dokážeme zlepšit bezpečnost pro více projektů a dát jejich uživatelům „klid“.