[twitter-follow username="btctip_cz" scheme="dark"].
Určitě jste si stačili všimnout, že je v kryptosvětě opět živo, ačkoliv to tentokrát nejsou zrovna dobré zprávy. Po nepodařeném hard forku Etherea a zavedením Ethereum Classic na burzách, doprovázeném problémy při implementaci a jedním hackem ETH směnárny (uskutečněném pomocí tzv. „replay-attack“) stojíme na začátku mnohem většího skandálu.
Bitfinex přišel hackerským útokem o více než 100 tisíc bitcoinů
Jedna z předních bitcoinových směnáren byla (opět) hacknuta a tentokrát si navzdory vysokému zabezpečení této burzy útočník odnesl tučnou prémii. Samozřejmě v bitcoinech - zatím druhou nejvyšší, tedy hned po Mt.Goxu. Jde o směnárnu Bitfinex, která kromě obchodování s Bitcoinem nabízí ještě obchody s Litecoiny, Ethereum a Ethereum Classic, to vše v měnovém páru proti americkému dolaru nebo proti Bitcoinu.
Obecné informace o útoku „pro běžného čtenáře“ si můžete vyhledat v mainstreamových médiích. V tomto článku se pokusím shrnout některé známé, veřejně dostupné, nebo oficiálně potvrzené informace o pozadí útoku, přestože v době psaní článku je informací velice málo. Komunitní manager Zane Tackett, který na sebe vzal nelehký a nevděčný úkol skrze sociální sítě uklidňovat nervozní klienty, bohužel nechce prozradit detaily o právě probíhajícím vyšetřování.
Selhalo i vícenásobné zabezpečení peněženek
Bitfinex oznámil prolomení zabezpečení v úterý ve 20:00 středoevropského letního času. Současně s tím došlo k zastavení obchodování a ukončení provozu obchodní platformy. Na úvodní stránce „svítí“ pouze aktuální prohlášení o útoku a o probíhajícím vyšetřování. Ve většině případů takto končí většina hacknutých směnáren, a tato prohlášení lze se špetkou černého humoru považovat za jakési vyvěšené parte.
Bitfinex nejprve prostřednictvím komunitního managera Zanea Tacketta prohlašoval, že byly bitcoiny ukradeny pouze některým uživatelům. Napadení se týká pouze bitcoinových účtů, prostředky na jiných účtech (LTC, ETH, ETC, USD) jsou prý v bezpečí. Zpočátku to vypadalo, že útok není většího rozsahu a mohl být úspěšně zastaven díky tomu, že své bitcoiny drží Bitfinex na walletách společností BitGo. Ta by měla sledovat limity výběrů a hlídat nezvyklé aktivity. Teprve pozdě večer se na Twitteru objevil obrázek ze statistiky počtu bitcoinů uložených na P2SH adresách.
Jak už bylo řečeno, Bitfinex držel Bitcoiny v peněženkách společnosti BitGo. Jedná se multisig peněženky (a adresy), kde je k uvolnění prostředků třeba dva a více podpisů. Pro přesnost, tyto peněženky byly napůl ve vlastnictví Bitfinexu a napůl společnosti BitGo. K samotnému mechanismu podepisování se ještě vrátím, pro vysvětlení výše uvedeného obrázku stačí vědět to, že peněženky jsou právě realizované na P2SH adresách (Pay To Script Hash).
Čas tak rapidního poklesu prostředků na P2SH adresách odpovídá času, kdy si jednotliví uživatelé všimli, že jim z účtu mizí bitcoiny (a začali to hlásit). Bylo to kolem 11 hodiny středoevropského letního času. Celkově došlo k poklesu o zhruba 157.000 BTC. V tu chvíli se o tom však jen spekulovalo, mohlo se zrovna tak jednat o legální převod prostředků probíhající právě v době útoku na Bitfinex.
Bohužel, o legální převod nešlo. Okolnosti naopak donutily Zanea Tacketta přiznat, že došlo ke ztrátě 119.756 BTC. V českých korunách při kurzu 566 USD to činí 1.64 mld Kč. To už nejsou drobné, jak se na začátku zdálo. Co je ovšem zarážející, že Bitfinex oznámil útok až 9 hodin po tom, co se uskutečnil. Nešlo tedy ani o žádné rychlé zastavení, útočníkovi se zřejmě podařilo vyvést maximum toho, co bylo při jeho akci aktuálně k dispozici (spekulace).
Detaily pravděpodobného scénáře útoku
Jak je možné, že se i přes zabezpečení adres vícero podpisy a transakce kontrasignované třetí stranou podařil útok takového rozsahu? Teoreticky by útočník měl napadnou obě společnosti (Bitfinex a BitGo) současně. Pokusím se nastínit možnosti, které připadají v úvahu.
BitGo funguje jako kontrasignační autorita, která by měla podepsat každou transakci splňující určité náležitosti. Zatímco u běžné transakce stačí mít klíč a podepsanou transakci odeslat do bitcoinové sítě, transakci přes BitGo by nemělo jít tak snadno propašovat. Na účtu (jemuž peněženky patří) mohou být nastaveny další podmínky, limity, cíle výběru, další ověření, atd, které mohou způsobit, že BitGo transakci odmítne podepsat. Zároveň se společnost BitGo chlubí různými automatizovanými systémy pro detekci podvodů, heuristické filtry a podobně. Ty by by měly ochránit majitele Bitcoinů před nenadálou ztrátou, způsobenou třeba vlivem špatného zabezpečení jeho peněženky na jeho straně.
Asi se ptáte, jak mohlo dojít k tak masivní ztrátě, která přes BitGo prošla bez sebemenšího zádrhelu? První možností, která se automaticky nabízí je to,že transakce nebyly vůbec odeslány přes BitGo. To se může stát, k vysvětlení je ale potřeba objasnit, jak vlastně BitGo funguje:
Každá adresa multisig peněženky je složena ze tří veřejných klíčů. K sestavení validní transakce jsou přitom potřeba pouze dva platné podpisy. Při generování adresy se tedy generují tři soukromé klíče. Dva klíče drží Bitfinex, to pro případ, že by bylo potřeba v některých naléhavých případech prostředky vyvést bez účasti BitGo. Má se za to, že jeden z klíčků se používá aktivně a druhý je uložen kdesi v trezoru. Dnes se k tomuto účelu používají HD klíče, které mají schopnost odvozovat (jednosměrně) veřejné klíče bez nutnosti znát soukromý klíč. Skutečný HD soukromý klíč, který lze použít stejným způsobem (ovšem k odvození soukromých klíčů), je zavřen v nějakém trezoru. Třetí klíč adresy pak vlastní BitGo. Při sestavení transakce si Bitfinex pouze odvodí veřejný klíč BitGo a transakci odešle do společnosti BitGo ke kontrasignaci a následné zveřejnění v síti.
Za normálních okolností se tedy používají dva klíče ze tří a třetí klíč by měl být pro útočníka fyzicky nedostupný. Proto se objevily spekulace, že Bitfinex v tomto selhal a umožnil tak útočníkovi získat třetí klíč a obejít tím restrikce definované v BitGo. Nicméně, k překvapení všech Zane prohlásil, že třetí klíč kompromitován nebyl a všechny transakce útočníka byly odeslány přes BitGo. Kolem půlnoci se pak na Redittu objevily první důkazy o tom, že jsou jeho prohlášení pravdivá.
Dotyčný uživatel na Redittu (/u/oscarguindzberg) stihl provést rychlou analýzu transakcí, o kterých bylo známo, že patří útočníkovi. Na těch ověřil, že jsou skutečně podepsány klíčem společnosti BitGo. Analýzu provedl na základě znalosti schématu, jakým probíhá generování těchto transakcí.
Detailně: Transakce (v tomto případě) má pořadí klíčů následující: bitfinex 1. klíč, bitfinex 2. klíč, bitgo klíč. Z analýzy vyplynulo, že žádná z transakcí, které velmi pravděpodobně provedl útočník, nepoužívá druhý klíč, jsou přítomny pouze podpisy prvního a třetího klíče. Navíc každá taková transakce má pokaždé stejný tvar. Utrácí několik vstupů. Majoritní část Bitcoinů odchází na adresu s jedničkou na začátku (klasická adresa pay-to-public-key-hash) a transakce také obsahuje return adresu na jinou trojkovou adresu, která pravděpodobně patří BitGo (kam se také pravděpodobně odvádí poplatek za službu). Všechny výstupy jsou v době psaní článku neutracené.
Zajímavé je, že útočník neposílá bitcoiny na jednu adresu, jak bylo běžné při jiných útocích. Důvodem může být snaha nevzbudit podezření u BitGo, nebo ztížit identifikaci všech uniklých bitcoinů a udělat tak jejich sledování složitější – ovšem podle Zaneho byly identifikovány všechny transakce a jsou sledovány.
Zůstává však nezodpovězena otázka, jak se podařilo útočníkovi obejít ochrany a limity, které prý byly na účtu v BitGo aktivovány. Na tuto otázku zatím neznáme odpověď. Podle Zaneho probíhá vyšetřování právě tímto směrem.
Prostor pro spekulace
Na tomto místě se pokusím o spekulaci. Navzdory všem zabezpečením mohlo do hry vstoupit obyčejné selhání lidského faktoru. I nejzabezpečenější systémy (a známe to z jiných oblastí) často selžou jen díky tomu, že citlivé informace, zejména pak klíče, zůstávají v počítačích zaměstnanců bez dalšího zabezpečení. A pak stačí, aby sekretářce, nebo přímo řediteli přišel nějaké roztomilý e-mail s virem.
Na tento způsob útoku doplatil nedávno i BitPay. V tomto případě dokonce stačil pouhý falešný požadavek o výběr prostředků a spustil se „manuální“ vir. Obvykle to vypadá tak, že do vaší schránky přijde e-mail, nebo do telefonu SMS, která vás vyzve k vykonání nějakého velice nebezpečného úkonu. Třeba opsání zaslaného kódu, nebo vymazání souboru na disku, nebo naopak nainstalování nějakého pluginu do prohlížeče. Způsoby útoku mohou být rozmanité. Pokud požadavek bezhlavě uposlechnete, zpravidla Vám to způsobí nějakou škodu).
V případě Bitfinexu se mohlo jednat například o instalaci trojského koně do počítače některého systémového administrátora. Tento trojský kůň pak posloužil jako zadní vrátka do systému a umožnil útočníkům přístup na vnitřní síť. A záleželo na tom, co se na vnitřní síti dalo najít. Opět z historie víme o citlivých e-mailech, heslech do informačních systémů, klíčích k serverům apod., určitě by se tedy daly najít i přístupové údaje do BitGo. A tam právě možná najdeme způsob, jakým útočník překonal ochrany společnosti BitGo.
Otevřený konec?
Jak jsem napsal výše, jedná se pouze o spekulaci. Skutečný způsob útoku se dozvíme doufejme brzo (pokud tedy vůbec). Osobně si myslím, že útok tohoto rozsahu mohl být zastaven ať už Bitfinexem (selhání vnitřních kontrolních mechanismu), tak společností BitGo, jejíž heurestické filtry existují možná jen v reklamních letácích.
Pro Bitfinex to bude drahá lekce a doufejme, že ho to poučí a nesrazí. Pro ostatní klienty je zejména zabezpečení od BitGo výstrahou a společnost BitGo by měla začít pracovat na skutečném zabezpečení. Zejména na vyloučení možnosti selhání lidského faktoru. Tak jako v autech přibývají zabezpečovací prvky (vždyť nehoda není většinou chybou auta, ale řidiče, ne?), tak by takovou službu jistě ocenili i uživatelé Bitcoinu.
[easy-social-share buttons="facebook,twitter,google,linkedin" counters=1 counter_pos="inside" hide_names="no" template="tiny-retina"]