A napokban súlyos támadás érte az egyik kriptovalutát kezelő oldalt, a Parity Walletet. Kiberbűnözők egy olyan sérülékenységet találtak, amivel lényegében teljesen kiüríthették volna. Három tranzakcióban összesen 31 millió dollárnyi ethert már sikerült is ellopni, amikor felfedezték a problémát. A Ethereum-közösség nagyon gyorsan reagált, kiderítették a hibát, majd ugyanazzal a módszerrel, mint a bűnözők, egyszerűen leemelték a megtámadott walleteken lévő 75 millió dollárnyi ethert.
Azóta megkezdték a kriptovaluta visszajuttatását is jogos tulajdonosaikhoz.
Az Ethereumot egyik fő fejlesztője hibázott
A támadásról azóta sikerült kideríteni, hogy nem az Ethereum, és nem is a Parity Wallet kódjában volt a hiba. Egy hibásan megírt okosszerződés volt a ludas, amelyet épp az Ethereum egyik társszerzője, valamint az okosszerződések programozási nyelvének, a Soliditynek a kitalálója, Gavin Wood írt. A Parity Wallet ezt kínálta fel alapértelmezetten az ún. több aláírású pénztárcákhoz. (A Redditen kapott is emiatt eleget amiatt, hogy sokan úgy ítélték meg, hogy amatőr hibát vétett.)
A probléma így kizárólag az ún. több aláírású (multisignature) pénztárcákat érintette. Ezek olyan pénztárcák, melyek szabályrendszerébe (azaz a pénztárca működését szabályzó, elvileg hamisíthatatlan okosszerződésbe) bele van kódolva, hogy az aláírások közül hánynak a megléte esetén lehet hozzáférni a tartalmukhoz. Például ha a tárcához három aláírást rendelnek, akkor kiköthető, hogy csak két aláírás együttes megléte esetén lehessen a benne tárolt kriptivalutával tranzakciót végrehajtani.
Az okosszerződésben kódjában volt azonban egy olyan hiba, amely miatt a támadók lényegében átírhatták a pénztárca-tulajdonosokat, és utána már szabadon garázdálkodhattak. (Akit érdekelnek a mélyebb technikai részletek, kódrészletekkel illusztrált alapos ismertetőt olvashat a freeCodeCamp oldalán.)
Újra kell gondolni az Ethereum biztonságát
A freeCodeCamp szerzője óva intett mindenkit attól, hogy az incidensből messze menő következtetést vonjon le az Ethereum biztonságát és jövőjét illetően. Ugyanakkor több olyan tényezőt is sorra vesz, amit át kell gondolni az Ethereummal kapcsolatban. Még akkor is, ha nincs hibátlan kód, és még a legjobb programozók is hibáznak olykor.
Először is a kód kérdése. Minél kifejezőbb egy programozási nyelv – a Solidity ilyen – annál komplexebb lesz a kód. A komplexitás azonban a biztonság ellensége, hiszen minél kevesebb támadási vektort kell figyelembe venni, annál biztosabban garantálható a program biztonságossága. Ha egyszerűbb a programozási modell, jobban lehet alkalmazni a formális ellenőrzést és az automatikus tesztelést.
Másodszor. Más programozói szemléletre van szükség az Ethereum esetében, azaz le kell számolni a webes szemlélettel. A webfejlesztőnek ugyanis megvan az az előnye, hogy egy hibát bármikor javíthat a szerveren, hiszen a kezében van az irányítás. Az Ethereum esetében azonban – éppen alapja, a blockchain technológiai miatt – minden tag, aki csatlakozik a rendszerhez, és futtatja a kliens, a szerver tulajdonosa. (Az Ethereumot úgy kell elképzelni, mint egy világméretű elosztott számítógép, aki futtaja a szoftvert, részévé válik az Ethereum Virtual Machine-nek.) Azaz ha egy sérülékenység fellép, azzal a rendszerben lévő összes szerződéshez és összes pénztárcához hozzá lehet férni. Egy sikeres támadás esetén ilyenkor nehéz védekezni, amit a mostani eset is jól mutat: az etikus hackerek is csak annyit tudtak tenni, hogy a kiberbűnözők módszerével kiürítették az érintett pénztárcákat. A szerződést ugyanis nem tudták felszámolni.
De az Ethereum még fiatal, alakuló ökoszisztéma, a hozzá csatlakozók pedig sokat tanulhatnak ebből a hibából is. De egyelőre banki rendszerként nem érdemes használni -- tette hozzá a szerző.
Nyílt forráskód: valóban ingyenes, de használatának szigorú szabályai vannak