🇨🇿 Proč je snadné vysát Ethereum peněženku, narozdíl od Cardano peněženky?

V oblasti decentralizovaných aplikací (DApps) se uživatelé bohužel mohou stát obětí zlomyslných aktérů. Tito špatní aktéři mohou uživatele oklamat, aby podepsali transakce, které vedou k vyčerpání aktiv z jejich peněženek. Tento problém je zvláště rozšířený v ekosystému Ethereum a není to jen kvůli jeho větší velikosti. V Ethereu uživatelé obvykle předem autorizují DApps, aby v budoucnu přenesly jakékoli množství aktiv ze svých peněženek. I když se tato funkce může zdát pohodlná, často ji zneužívají škodlivé entity, běžně označované jako „Ethereum drainers“. Takové incidenty jsou v ekosystému Cardano méně časté. V článku si vysvětlíme, proč tomu tak je.

Předběžné schválení budoucího převodu aktiv je nebezpečné

V ideálním případě by inteligentní smlouva neměla mít vlastníka ani žádný mechanismus, který vlastníkovi umožňuje převádět aktiva z inteligentní smlouvy na externí adresu. Tento atribut dodává chytrým kontraktům určitou míru důvěry. Uživatelé mohou s jistotou delegovat svá aktiva na inteligentní smlouvu (trust the code, not people) s vědomím, že žádná třetí strana nemůže s těmito aktivy manipulovat. Uživatelé tedy nemusejí důvěřovat týmu, který inteligentní kontrakt nasadil.

Do smart kontraktu je však možné zakomponovat přenosovou funkci, která umožňuje majiteli přenést tokeny ze smart kontraktu na jinou adresu.

Taková funkce je obvykle spojena se škodlivými inteligentními smlouvami.

Ethereum drainers obsahují funkci „transferFrom“, která se používá k přesunu aktiv z peněženky uživatele do chytré smlouvy. Poté se použije funkce „transfer“ k převodu asetů na adresu útočníka.

Funkci „transferFrom“ běžně používá DApps a je součástí standardu tokenů ERC-20. Umožňuje smart kontraktu přenést určité množství tokenů z jedné adresy na druhou, za předpokladu, že zdrojová adresa k tomu smart kontrakt schválila. Více o schválení později.

Jakmile jsou aktiva ovládána (vlastněna) inteligentní smlouvou, lze použít funkci „transfer“ k jejich přesunutí z chytré smlouvy na jinou adresu.

Funkce ‚transfer‘ je také součástí standardu tokenů ERC-20. Používá se k přenosu tokenů přímo z adresy volajícího na jinou adresu.

Pokud je v kontextu inteligentní smlouvy přítomna funkce transfer, která umožňuje vlastníkovi smlouvy přenést tokeny ze smlouvy na jakoukoli externí adresu, může to být potenciálně známkou škodlivé smlouvy. Adresu by mohl ovládat útočník.

Ethereum wallet drainers zneužívají funkci „approve“.

Při interakci s inteligentní smlouvou v ekosystému Ethereum musí uživatelé často smlouvu schválit, aby mohli utratit určité množství tokenů ze své peněženky. Toto je známé jako „schválení transakce jež může utratit tokeny“.

Obvykle je to užitečné pro případy použití, které nejsou škodlivé. Uživatelé mohou schválit DApp k nákupu aktiv za cílovou cenu bez přesunu aktiv z peněženky předem. Převod se má uskutečnit ve vhodnou dobu.

Jakmile je podepsána ‘schválená’ transakce, smart contract může kdykoliv zavolat funkci ‘transferFrom’, aniž by od uživatele vyžadoval další schválení nebo akce. Funkce „transferFrom“ je onchain transakce a vyžaduje poplatky GAS, které jsou automaticky hrazeny z peněženky uživatele.

Transakce „approve“ i „transferFrom“ vyžadují poplatky GAS.

Útočníci často oklamou uživatele, aby zavolali funkci schvalování škodlivé smlouvy, což jí umožňuje později použít transferFrom k vyčerpání tokenů z peněženky uživatele. Funkce přenosu by mohla být potenciálně použita podobně, pokud je smlouva navržena tak, aby přijímala a držela tokeny.

Jak funguje vysátí peněženky krok za krokem

Útok začíná sociálním inženýrstvím. Útočník musí vytvořit přesvědčivý phishingový web nebo škodlivý DApp. Často platí Googlu za to, aby uživatelům jako první odkaz ukázal jejich podvodný web. Existuje mnoho způsobů jak uživatele napálit a vlákat ho do pasti.

Škodlivý DApp může být falešná verze oblíbené služby DeFi (DEX nebo platforma pro půjčdy) nebo nová DApp, která slibuje vysoké výnosy. Může to být také atraktivní ražba série NFT, staking tokenů pro výnosové farmaření nebo účast na prodeji tokenů.

Uživatel navštíví škodlivý web nebo DApp a rozhodne se s nimi interagovat.

Pro interakci s DApp je uživatel požádán, aby připojil svou Ethereum peněženku. Jakmile je peněženka připojena, DApp požádá uživatele, aby podepsal „schválení“ transakce. Uživatel je požádán o schválení útraty velkého množství tokenů, často maximální možné částky.

Uživatelům to nemusí připadat podezřelé, protože v případě nezávadných DApps běžně podepisují „schvalující“ transakce. Nemusí věnovat pozornost důležitým detailům.

Uživatel potvrdí transakci ve své peněžence, aniž by si uvědomil, že udělil škodlivé smart smlouvě povolení utratit všechny své tokeny.

Jakmile je transakce potvrzena, může škodlivý smart contract kdykoli zavolat funkci transfer (nebo transferFrom), aby vyčerpal všechny schválené tokeny z peněženky uživatele.

Je možné odvolat souhlas udělený smart kontraktu Ethereum. Tento proces je často označován jako rušení povolených tokenů nebo rušení schválení tokenů. Odvolání schválení je onchain transakce, takže uživatelé budou muset platit poplatky GAS. Někteří uživatelé mohou váhat se zrušením schválení tokenu kvůli souvisejícím poplatkům.

Ve většině případů však útočníci jednají rychle, takže uživatelé nemají čas si uvědomit, že udělali chybu.

Proč není možné tak snadno vyprázdnit peněženku Cardano?

V ekosystémech Cardano i Ethereum existuje riziko, že by vás útočník mohl oklamat, abyste podepsali transakci, která převede více aktiv, než jste zamýšleli.

Na rozdíl od Etherea nemají chytré smlouvy Cardano ekvivalentní schvalovací mechanismus. To znamená, že inteligentní smlouvě nelze poskytnout neomezený přístup k peněžence uživatele. Výsledkem je, že zákeřná inteligentní smlouva nemůže vyčerpat peněženku uživatele, aniž by uživatel výslovně podepsal transakci pro každý převod.

Inteligentní smlouvy v Cardano jsou v podstatě validační skripty. Tyto skripty automaticky spouští každý uzel Cardano při ověřování transakce, která se pokouší přesunout prostředky z adresy skriptu.

Rozdíl mezi modelem UTxO projektu Cardano a modelem založeným na účtu projektu Ethereum je významný, pokud jde o možnost vyčerpání peněženek.

Cardano používá model UTxO, kde jsou aktiva uložena v nevyčerpaných výstupech spíše než jako zůstatky na účtech. V tomto modelu má transakce vstupy a výstupy, přičemž vstupy jsou nevyčerpané výstupy z předchozích transakcí. Každý UTxO lze spotřebovat pouze jednou a jako celek. Proto neexistuje žádný ekvivalent funkce schvalování Etherea v modelu UTxO projektu Cardano.

Transakce obvykle zahrnuje pouze omezený počet nevyužitých transakčních výstupů (UTxO), které má uživatel ve své peněžence. Jakékoli UTxO, které nejsou zahrnuty jako vstupy v transakci, zůstávají podpisem transakce nedotčeny.

Z bezpečnostního hlediska lze tento model považovat za odolnější vůči útokům na peněženku.

Na obrázku můžete vidět, že Alice musí podepsat každou jednotlivou transakci, která utratí UTxO. Není možné, aby smart contract libovolně převáděl UTxO vlastněné Alicí.

Ethereum účet reprezentovaný jedinou adresou může obsahovat zůstatky několika různých typů tokenů, včetně různých tokenů ERC-20. Funkce schvalování obvykle neuděluje schválení výdajů pro celý účet. Místo toho uděluje konkrétní smart kontraktu souhlas s útratou určité částky konkrétního tokenu ERC-20 z uživatelského účtu.

Škodlivé chytré smlouvy však mohou být neúmyslně schváleny k utrácení tokenů z celého účtu uživatele. Schvalovací mechanismus lze zneužít škodlivými inteligentními smlouvami k vyčerpání tokenů z peněženky uživatele, aniž by uživatel vyžadoval další schválení nebo akce.

Na obrázku můžete vidět, že Alice podepsala pouze transakci ‚schválení‘. To umožnilo škodlivé smart smlouvě převést všechny tokeny z jejího účtu.

Aby uživatelé zabránili ztrátě všech aktiv ze svého účtu, měli by zajistit, že schvalování výdajů udělují pouze spolehlivým a důvěryhodným smlouvám na tokeny jejich peněženky.

Závěr

Funkce schvalování na Ethereum poskytuje vývojářům funkci podobnou povolení třetí straně pravidelně vybírat určitou částku z vašeho bankovního účtu. I když se jedná o užitečnou funkci, vyžaduje, aby uživatelé důvěřovali třetí straně, že nepřekročí limit pro výběr. Na druhou stranu Cardano podobnou funkci vývojářům nenabízí. Uživatelé jsou povinni výslovně podepsat každou transakci, která utrácí UTxO z jejich peněženky.

Oba přístupy mají své opodstatnění. Příslušné týmy musely najít rovnováhu mezi zajištěním bezpečnosti a poskytováním široké škály možností pro vývojáře při vytváření chytrých kontraktů. Zatímco skripty Cardana jsou navrženy tak, aby ověřovaly, zda byly splněny podmínky pro útratu UTxO, chytré smlouvy Ethereum mohou získat kontrolu nad uživatelskými účty.

Článek připravili Cardanians s podporou od Cexplorer.

Přečtěte si celý článek: https://cexplorer.io/article/why-is-simple-to-drain-the-ethereum-wallet-unlike-the-cardano-wallet