V minulosti sme hovorili o možnosti vytvorenia viacvrstvovej bezpečnostnej stratégie pre HydraDX protokol, ktorá by pripomínala cibuľu a jej cieľom by bolo udržanie likvidity v bezpečí. Jadrom tejto stratégie je náš opatrný prístup – k výskumu, k vývoju softvéru, a tiež k vypusteniu POL do Omnipoolu. Druhá vrstva zahŕňa ekonomické a bezpečnostné audity uskutočnené nezávislými tretími stranami, ktorých cieľom je zachytiť všetky chyby, ktoré by prekĺzli cez naše dôkladné kontroly a testy.
Predvídali sme, že aj pri takýchto opatreniach nám aj tak môže niečo uniknúť, a preto sme spustili štedrý program odmeňovania nájdenia chýb ako tretiu vrstvu, s našou ponukou až $1M za hlásenie kritických zraniteľných miest, s limitom 10% priamych ekonomických škôd. Posledná vrstva našej bezpečnostnej stratégie je reaktívna – keď zistíme nejakú bezpečnostnú slabinu alebo abnormálne správanie, spustí sa sled mechanizmov, ktoré pomôžu dané riziko eliminovať alebo zmierniť. Dodnes boli tieto mechanizmy manuálne (napr. cielená funkcia prerušenia od Odbornej komisie), no v tejto chvíli už máme pripravené aj nové automatizované opatrenia, ako napríklad „ističe“ a „obmedzovače rýchlosti“.
V tejto prvej aktualizácii zabezpečenia sa s vami chceme podeliť o fakt, že sme dostali a potvrdili hlásenie chyby (bug report) od whitehata, ktorý – ak by došlo na jeho zneužitie – by mohol viesť k strate prostriedkov z Omnipoolu. Dobrou správou je, že naša bezpečnostná stratégia popísaná vyššie sa ukázala ako veľmi účinná – slabé miesto sa podarilo odhaliť skôr, než ho ktokoľvek iný mohol využiť vo svoj prospech. Včas sme prijali potrebné opatrenia a dnes si môžeme byť istí, že v ohrození nie sú ani prostriedky používateľov, ani prostriedky protokolu.
Ak sa zaujímate o TLDR, aktuálny stav je, že sme dočasne zmiernili hrozbu pozastavením dopĺňania likvidity do Omnipoolu. Ako dlhodobé riešenie sme si pripravili kombináciu opatrení (oracle, ističe a limity na blok), ktoré odstránia vzniknutú plochu pre útok, vďaka čomu sa stane ekonomicky nerealizovateľným. Momentálne prebieha rozsiahle modelovanie a testy, aby sme si boli istí, že tieto opatrenia fungujú tak, ako to od nich očakávame. Keď bude všetko v poriadku, obnovíme dopĺňanie likvidity do Omnipoolu, čo znamená, že HydraDX bude čoskoro znova plne v prevádzke.
Ak sa chcete podrobnejšie dozvedieť, čo sa stalo a ako sme na to reagovali, čítajte ďalej.
Čo sa stalo?
Dostali sme správu od jedného z Top 10 whitehatov na Immunefi, ktorý nás upozornil na hrozbu, že prostriedky vložené do Omnipoolu je teoreticky možné vo veľkom množstve vybrať prostredníctvom kapitálovo-intenzívneho útoku. Potenciálna existencia slabého miesta u nás spustila núdzovú reakciu v súlade s našimi zaužívanými bezpečnostnými pravidlami. Členovia tímov z oddelení výskumu a runtime začali simulovať rôzne scenáre útokov, cieľom ktorých bolo buď potvrdiť alebo vyvrátiť hlásenie o chybe.
Záver vyšetrovania bol, že útok prostredníctvom manipulácie ceny Omnipoolu by bol možný, ak by ho útočník vedel uskutočniť pomocou veľmi veľkého kapitálu. Zjednodušene, útok by vyzeral nasledovne: Útočník by si najskôr kúpil veľmi veľké množstvo aktíva X z Omnipoolu. Potom by útočník poskytol veľké množstvo likvidity pre aktívum X. Nakoniec by útočník uzavrel arb, ktorý vytvoril v kroku č. 1 predajom celého množstva aktíva X, a teda vyťažil by zisk z umelo nízkeho sklzu, ktorý si vytvoril pre seba (na úkor iných LP) a svoju pozíciu by uzavrel. Tieto kroky sa mohli uskutočniť spolu – v jednom bloku, a mohli byť využité na výber pomerne veľkej hodnoty.
Naša bezpečnostná odpoveď
Ihneď po potvrdení existencie hrozby zasadla Odborná komisia HydraDX protokolu a rozhodla, že pozastaví dopĺňanie likvidity do Omnipoolu, čím sa odstráni (doteraz) najväčšia plocha pre útok. V súlade s našimi bezpečnostnými pravidlami sme sa rozhodli zatiaľ nezverejňovať túto slabú stránku našej komunite – najskôr sme si chceli byť istí, že odstránenie likvidity na existujúcich LP pozíciách nebude viesť k žiadnej extrakcii hodnoty.
V tejto chvíli náš tím už prešiel do núdzového režimu a asi polovica našich pracovníkov pracovala bez prestávky na získaní jasného obrazu o tom, aký veľký je tento problém, a aké opatrenia ho dokážu zmierniť alebo eliminovať z dlhodobého hľadiska. Rýchlo sme prišli k záveru, že takýto útok na odstránenie likvidity pri existujúcich LP pozíciách by si vyžadoval naozaj veľké množstvo kapitálu na extrahovanie pomerne nízkej hodnoty. Potenciálna nevýhoda takéhoto útoku neprevážila nad nevýhodami a potenciálnymi stratami, ktoré by prinieslo ďalšie možné opatrenie – dočasné zastavenie obchodovania v Omnipoole. Rozhodli sme sa, že zverejnenie odložíme, pokiaľ bude možná aj vzdialená možnosť extrakcie hodnoty prostredníctvom odstránenia likvidity. Situáciu sme samozrejme ďalej podrobne sledovali.
Spolu s rozsahom hrozby sme identifikovali rôzne opatrenia, ktoré by vo vzájomnej kombinácii pomohli odstrániť útočnú plochu a spravili by takýto počin ekonomicky nerealizovateľným. V prvom rade, implementácia on-chain oracles by nám umožnila automaticky spustiť istič, ktorý zablokuje pridávanie alebo odstraňovanie likvidity, ak sa cena aktíva Omnipoolu vychýli od trhovej ceny nad určitý limit. Toto opatrenie by bolo doplnené o limit na blok a množstvo likvidity, ktoré LP dokáže poskytnúť alebo vybrať, a to ako percento z celkového TVL Omnipoolu pre dané aktívum. Ako doplnkové opatrenie by mohol byť stanovený nejaký rozumný (teda nie príliš nízky) limit veľkosti obchodov – tento limit by zabránil útokom s príliš veľkým množstvom kapitálu.
Dobrou správou je, že on-chain oracles, ističe a limity na blok sú funkcie, ktoré sme už dlho mali na našom zozname, a ich implementácia by prebehla skôr či neskôr. Znamená to, že sme celé naše úsilie mohli sústrediť na ich vývoj a implementáciu do praxe. Do niekoľkých dní sa nám podarilo dokončiť vývoj a proces kontrol, spustiť na Rococo a uskutočniť testy pre potvrdenie účinnosti opráv. Následne sme vykonali rýchlu runtime inováciu HydraDX parachainu.
Pri týchto opatreniach nasadených na náš mainnet pevne veríme, že nie je možné extrahovať žiadnu hodnotu odstránením likvidity z existujúcich LP pozícií. No a následne sme mohli zverejniť túto aktualizáciu zabezpečenia aj vám – urobili sme to naozaj v ten najskorší a najbezpečnejší moment (práve teraz sme dokončili inováciu runtimu).
A čo sa týka dopĺňania likvidity do Omnipoolu – v súčasnosti sme presvedčení, že implementované opatrenia do veľkej miery poskytnú nápravu aj pre túto útočnú plochu. My však chceme dosiahnuť presvedčivé výsledky po uskutočnení extenzívnych modelových situácií a simulácií s rôznymi scenármi útoku – až potom obnovíme pridávanie likvidity do Omnipoolu. Je to otázka niekoľkých nasledujúcich dní.
Budeme vás informovať, keď budeme pripravení na obnovenie dopĺňania likvidity.
Oh, baby, baby, it's a wild world.
It's hard to get by just upon an audit.
Oh, baby, baby, it's a wild world.
Sometimes you need them whitehats.
– Tím HydraDX
Omnipool si môžete vyskúšať tu