Bitcoin Színes

Mesteri kriptohack játszhatott közre a bitcoin zuhanásában

Node.js fertőzés miatt kerültek veszélybe a BitPayen tárolt 100 BTC feletti tárcák. A cég tagad, a közösség nyomoz, a kár ismeretlen.


Összefoglaló


Hatalmas esemény tartja már napok óta lázban az egész kriptovilágot – legalábbis annak szakmai közösségét. Az élet a legjobb forgatókönyvíró, szokták mondani, és erre a sztorira ez hatványozottan igaz. Van itt minden, ami egy igazi hekkerkrimi kelléke; zseniális mesterterv, Kuala Lumpur-i bérelt szerver, nagyhalak BTC-címeinek megcsapolása – csupa filmbe illő jelenet. Ráadásul a sztori megismerésével talán még az elmúlt hetek óriási zuhanásra is választ kapunk.

Ha megéri a Bitcoin, hogy olyan filmek készüljenek róla mint a „Margin Call” vagy a „Too Big To Fail”, akkor biztosra veszem, hogy ez a kis történet fog kapni néhány jelenetet

fogalmaz a Variance blog.

De mi is történt pontosan, amiből konkrétan egy teljes Mr. Robot évad kijönne? (Na jó, 2-3 rész biztosan.)

Hogy volt

A dolog lényege, hogy rosszindulatú kriptospecifikus kóddal fertőztek meg egy népszerű, harmadik féltől származó Node.js modult. A közel kétmillió heti letöltéssel rendelkező, nyílt forráskódú programcsomagba egy magát fejlesztőnek álcázott hekker olyan vírust csempészett, amely képes bizonyos bitcointárcákban tárolt egyenlegek lecsapolására.

Node.js

A Node.js egy szoftverrendszer, melyet skálázható internetes alkalmazások, főként webszerverek részére hoztak létre. A programok JavaScriptben írhatók, eseményalapú, aszinkron I/O-val a túlterhelés minimalizálására és a skálázhatóság maximalizálására. Eredeti célja az volt, hogy push technológiával lehessen weboldalakat létrehozni. A legtöbb JavaScript programmal ellentétben nem a webböngésző futtatja, hanem a szerveroldalon alkalmazásként fut.

A Node.js fejlesztése a GitHubon zajlik, fejlesztői közössége leginkább két levelezőlistán, továbbá a #node.js IRC csatornán található meg. A közösség a NodeConf fejlesztői konferenciákon is összegyűlik. Magyarországon évente többször tartanak találkozót Nodebp néven. (Wikipédia)

A szóban forgó Node.js könyvtár az „event-stream”, egy eszköztár, amely megkönnyíti a fejlesztők számára a streamek létrehozását és az azokkal való munkát. A rosszindulatú kódot néhány napja fedezték fel, és az event-stream 3.3.6-os verziójában jelent meg, amelyet szeptember 9-én tettek közzé az NPM-gyűjteményen belül. Azóta nyolcmilliószor töltötték már le.

A Mesterterv

Az event-stream modult eredetileg Dominic Tarr hozta létre, aki sokáig volt a csomag karbantartója, de néhány hónapja átadta a projekt fejlesztését és karbantartását egy „right9ctrl” nevű ismeretlen programozónak. Ez a felhasználó úgy szerezte meg Dominic bizalmát, hogy több, érdemi hozzájárulással segítette a projektet.

Hogy még világosabb legyen a történet, DNReNTi fórumtárs plasztikus leírásait hívjuk segítségül:

Na most jött ez a koma, right9ctrl, aki bepromózta magát az eredeti készítőnél, hogy folytatná a package fejlesztését, ha nem bánja. Nos, nem bánta, megtette hát hősünket ‘közreműködővé’ a projektben, azaz fejleszthette, és adhatott ki belőle új verziót, verziókat.

Miután megszerezte a teljes hozzáférést, az új fejlesztő publikálta az event-stream 3.3.6-os verzióját, amely tartalmazta az új, „flatmap-stream” könyvtárat, amelyet kifejezetten a támadás céljából hozott létre.

Hogy ne legyen túl feltűnő, behúzott ebbe a projektbe egy újabb függőséget, ez a flatmap-stream, amelyet egy másik GitHub accounttal vélhetőleg szinten ő hozott létre. Ebben volt a backdoor.

Mivel a flatmap-stream modult titkosította, így a rosszindulatú kód több mint két hónapig felderítetlen maradt. Végül Ayrton Sparling (FallingSnow), a California State University egy számítástechnikát hallgató diákja tette közzé a problémát a GitHubon.

Miután a titkosított kódot dekódolták és elemezték, megtalálták a rosszindulatú modult, amelyet célzottan a BitPay nyílt forráskódú tárcáján, a Copay-en tárolt egyenleg leemelésére terveztek. A vállalat ugyanis az event-stream-et is felhasználta az alkalmazás kódjában.

Mit csinált a kód?

A rosszindulatú kód a Dash Copay bitcointárcákról volt képes coinokat lopni, amelyet a Node Package Manageren (NPM) keresztül egy Kuala Lumpur-i szerverre küldött.

A rosszindulatú kód belehívott a BitPay/CoPay profiljába (Credentials.getKeys) és megnézte, hogy van-e ott legalább 100 BTC-t, vagy 1000 BCH-t tartalmazó wallet. Ha igen, akkor nemes egyszerűséggel elküldte a privát kulcsot egy Kuala Lumpur-i (111.90.151.134) szerver 8000-es portján figyelő szolgáltatásnak

részletezte a mechanizmust Csabai Csaba.

Az NPM – egy nyílt forráskódú projektkezelő, amely az event-stream könyvtárát is hosztolta – hétfőn eltávolította a backdoort a listából.

Megszólalt a BitPay

A BitPay kiadott egy közleményt, amelyben azt mondják, hogy a Copay 5.0.2-től 5.1.0-ig terjedő verziói érintettek, és hogy ezen változatok felhasználóinak nem javasolják az alkalmazás futtatását vagy megnyitását, amíg nem telepítik a Copay 5.2.0-ás verzióját.

A felhasználóknak feltételezniük kell, hogy privát kulcsaik is érintettek lehetnek, ebből kifolyólag egyenlegüket azonnal az új tárcákba (v5.2.0) kell mozgatniuk

– írja ajánlásában a BitPay.

Azt javasolják, hogy a felhasználók először frissítsék az érintett tárcákat (5.0.2-5.1.0), majd ezután az összes pénzt mozgassák át az 5.2.0-ás tárcába a Send Max funkciót használva, hogy teljes egyenlegük biztonságban legyen.

A BitPay azt is elmondta, hogy csapatuk folytatja az eset kivizsgálását, illetve a sebezhetőség kiterjedését, hogy megtudják, egyáltalán használták-e a kódot a Copay felhasználói ellen. Ezenfelül biztosították felhasználóikat, hogy a BitPay alkalmazás nem volt sebezhető a rosszindulatú kód által.

Ettől szakadt be az árfolyam?

Nem tudjuk, de nem elképzelhetetlen. A Variance blog ezzel kapcsolatos írásában Csabai Csaba szakértő kiemelte, hogy „alig 12 órával a BitPay release után már be is szakadt az árfolyam 1000 dollárt, majd 3 napnyi szünet után szinte azonnal további 1500 dollárt”.

Külön érdekesség, hogy szeptember 9-én commitolt csomag a BitPaynél november 13-án élesedett, szinte teljesen egyidőben a Bitcoin Cash csata indulásával. Ezt így megtervezni szinte lehetetlen, ezért még a körülmények is a hekker kezére játszhattak.

A privát kulcsokhoz viszont nem fért egyből hozzá, ehhez az kellett, hogy a user valamit tranzaktáljon, amihez az app behívja a privát kulcsot.

A nagyobb szakadások szabályszerűsége arra enged következtetni, hogy a támadó kötegelten dolgozta fel a privát kulcsokat, amibe bejátszott az is, hogy a felhasználók is csak a release után némi idővel (napokkal) rakják fel az újabb verziókat

– olvasható a Variance blogon.

Az, hogy mennyit sikerült ellopnia, még mindig nem tisztázott, a szakértők viszont abban egytől egyig egyetértenek, hogy a hack megtervezése, előkészítése és kivitelezése professzionális volt. Éppen ezért nehéz elképzelni, hogy a támadó ne járt volna sikerrel néhány cím esetében.

Konklúzió?

Ez az eset is a kriptotechnológia sérülékenységét jelzi, viszont reméljük, hogy egyben a fejlődéshez is hozzájárul a későbbiekben. Maga a támadásfajta sajnos nem valószínű, hogy megszűnik egyhamar. A JavaScript jelenleg a legnépszerűbb nyelv, emiatt továbbra is vonzó célpont lesz a hekkerek számára. A viszonylag kevés szabványos kényelmi funkció arra ösztönzi a fejlesztőket, hogy importálják őket NPM-csomagokból – ez pedig azt is jelenti, hogy a JavaScript-projektek nagyfokú kitettséggel rendelkeznek.

A szakértők védekezésnek azt ajánlják, hogy a fejlesztők ragaszkodjanak a népszerű, jól karbantartott csomagokhoz, új modul telepítése előtt tegyék fel a kérdést maguknak, hogy valóban szükség van-e rá? A legjobb a saját kód, ennek hiányában pedig marad a fokozott óvatosság.

(CoinColors, a The Hacker News és a Variance blog alapján. További források: ZDNetZach Schneider, GitHub. Special thanks: DNReNTi, butch3r)