Přeskočit na obsah
Trading Academy

Lekce 13 z 25 · 7 min čtení

Hack The DAO: chyba, která rozdělila Ethereum

V červnu 2016 útočník vysál z The DAO 3,6 milionu ETH přes chybu typu reentrancy. Ethereum odpovědělo hard forkem – a tak vzniklo Ethereum Classic.

Na této stránce

V této lekci

  • zjistíš, co byla The DAO a jak jedna chyba vysála třetinu jejích peněz
  • pochopíš reentrancy na bankomatu, který vyplácí dřív, než ti odečte zůstatek
  • uvidíš, proč záchrana rozdělila Ethereum na Ethereum a Ethereum Classic

Co se stalo s The DAO? 17. června 2016 využil neznámý útočník chybu v The DAO – investičním fondu vybraném od davu a řízeném jen chytrým kontraktem – a vysál z něj asi 3,6 milionu ETH. To byla zhruba třetina peněz fondu, tehdy v hodnotě asi 50–70 milionů dolarů. 20. července 2016 Ethereum hard forkem změnilo vlastní historii a vrátilo mince investorům; část komunity, která fork odmítla, zůstala na původním řetězci, kterému se dnes říká Ethereum Classic.

The DAO slibovala fond bez manažerů, bez kanceláře a bez lidí, kteří by mohli udělat chybu. Ukázalo se, že lidé tu chybu prostě udělali předem – rovnou do kódu.

The DAOZůstatek: 100Ještě jednou, prosím!
Reentrancy v jednom obrázku: automat nejdřív vyplatí a zůstatek upraví až potom – útočník si tak prostě říkal znovu a znovu.

Co byla The DAO?#

DAO znamená „decentralizovaná autonomní organizace“. The DAO (ano, i s tím „The“) byl fond postavený jako chytrý kontrakt na Ethereu. Kdokoli mohl poslat ETH a dostat za ně tokeny DAO. Držitelé tokenů pak měli hlasovat o tom, které projekty fond zafinancuje.

  • Prodej tokenů běžel od 30. dubna do 28. května 2016.
  • Vybral asi 12 milionů ETH – tehdy kolem 150 milionů dolarů a zhruba 14 % veškerého existujícího etheru. Zapojilo se přes 11 000 lidí.
  • Do té doby to byl největší crowdfunding v historii. A všechny peníze ležely v jednom kontraktu.

Aby byli chránění menšinoví investoři, měla The DAO funkci „split“: kdo nesouhlasil s většinou, mohl odejít, vzít si svůj podíl ETH a přesunout ho do nové „dceřiné DAO“. Právě tenhle nouzový východ se stal vchodem pro útočníka.

Jak útok fungoval? Reentrancy jednoduše#

Představ si bankomat se zvláštním zvykem: když si vybereš 100 dolarů, nejdřív vydá hotovost a teprve potom si do sešitu zapíše, že máš na účtu nulu. Když stihneš zmáčknout „vybrat“ znovu v té chvilce mezi výplatou a zápisem, automat pořád vidí tvůj starý zůstatek – a vyplatí znovu. A znovu.

To je reentrancy a přesně to se stalo The DAO:

  1. Útočník si vytvořil vlastní kontrakt a požádal The DAO, aby jeho podíl oddělila do dceřiné DAO.
  2. The DAO poslala ETH dřív, než útočníkovi upravila zůstatek.
  3. Přijetí ETH spustilo kód v útočníkově kontraktu, který okamžitě zavolal funkci split znovu – „vstoupil znovu“ do The DAO.
  4. The DAO zkontrolovala zůstatek, pořád viděla staré číslo a vyplatila znovu. Smyčka se v rámci stejných transakcí opakovala mnohokrát.

Nic se „nehacklo“ jako ve filmu. Kontrakt udělal přesně to, co stálo v kódu. Jen v kódu stálo něco úplně jiného, než autoři mysleli.

Proč útočník s penězi prostě neodešel?#

Dceřiná DAO měla stejná pravidla jako rodičovská a ta držela peníze zamčené zhruba čtyři týdny, než si je kdokoli mohl vybrat. Útočník byl bohatý na papíře, ale zaseknutý v čekárně – a celá komunita Etherea ty týdny strávila hádkou, co dělat.

Mezitím skupina dobrovolných „white hat“ hackerů použila úplně stejnou chybu, aby zbytek peněz z The DAO převedla do bezpečných kontraktů dřív, než si útočník vezme víc. Bránit bankovní loupeži tím, že banku vykradeš jako první, se v žádné učebnici bezpečnosti nedočteš – ale zafungovalo to.

Hard fork: Ethereum proti Ethereum Classic#

Takzvaný hard fork je změna pravidel blockchainu, kterou starý software nepřijme. 20. července 2016 v bloku 1 920 000 zapnulo Ethereum jednorázovou změnu pravidel: všechny ETH z The DAO a jejích dceřiných DAO se přesunuly do jednoduchého výběrového kontraktu, kde si investoři mohli vyměnit 100 tokenů DAO za 1 ETH. Útočníkova kořist na tomhle řetězci z jeho adresy prostě zmizela.

Většina sítě – ve hlasování komunity přes 85 % – fork následovala. Menšina odmítla. Jejich argument: blockchain musí být neměnný; když to kód dovolil, transakce platí, tečka. „Code is law“ – kód je zákon. Dál provozovali původní řetězec a z něj se stalo Ethereum Classic (ETC). Tam útok nikdo nevrátil, takže útočníkovi mince na tomhle řetězci zůstaly.

Debata nikdy úplně neskončila:

  • Pro fork: peníze patřily tisícům běžných lidí, krádež byla zjevná a mladá síť by takovou ránu možná nepřežila.
  • Proti forku: když komunita jednou přepíše historii, může to udělat znovu – pod tlakem vlád, velkých držitelů nebo kohokoli dost hlasitého.

Časová osa#

DatumCo se stalo
30. dubna 2016Začíná prodej tokenů The DAO
28. května 2016Prodej končí s asi 12 miliony ETH (tehdy ~150 milionů USD)
květen–červen 2016Výzkumníci zveřejňují varování před slabinami v návrhu The DAO
17. června 2016Útočník vysává asi 3,6 milionu ETH do dceřiné DAO
červen–červenec 2016White hati zachraňují zbytek; komunita se hádá: soft fork, nebo hard fork
20. července 2016Hard fork v bloku 1 920 000; původní řetězec pokračuje jako Ethereum Classic
25. července 2017Americká SEC uvádí, že tokeny DAO byly cennými papíry, ale nikoho neobviňuje
2022Novinářka veřejně jmenuje podezřelého; ten to popírá a nikdo nebyl obviněn

Kdo byl útočník?#

Oficiálně to nikdo neví. V roce 2022 krypto novinářka Laura Shin při práci na knize The Cryptopians zveřejnila ve Forbesu jméno člověka, o kterém se domnívala, že za útokem stál; opírala se o analýzu blockchainu, kterou dělala s firmou Chainalysis. Dotyčný to popřel. K říjnu 2026 nebyl nikdo obviněn ani odsouzen, takže útočník zůstává z právního pohledu neznámý.

Varovné signály, které šly vidět#

  • Obrovské peníze v úplně novém kódu. 150 milionů dolarů v jednom kontraktu, který existoval pár týdnů. Čím větší hrnec, tím pečlivěji se na něj dívají ti nejlepší útočníci.
  • Varování už byla veřejná. Týdny před útokem výzkumníci vyzývali k pauze a o slabině „rekurzivního volání“ se otevřeně mluvilo. Kdo četl jen marketing, nevěděl o tom.
  • Marketing „žádní lidé, žádné riziko“. Když odstraníš manažery, chyby nezmizí – jen se přestěhují do kódu, který nejde rychle opravit.
  • Žádná jednoduchá cesta ven. Peníze byly v bezpečí jen tak, jak byla bezpečná logika kontraktu – bez zákaznické podpory a bez tlačítka „zpět“.

Riziko chytrých kontraktů je skutečné

Pokaždé, když vložíš kryptoměny do DeFi protokolu, poolu nebo trezoru, věříš jeho kódu. Audit nebo slavné jméno riziko snižuje, ale nikdy ho neodstraní. Nedávej do jednoho kontraktu víc, než si můžeš dovolit ztratit, a buď nejopatrnější u nových protokolů s velkými částkami.

Časté mýty#

  • „Hacknuli samotné Ethereum.“ Ne. Síť Ethereum fungovala, jak měla; chybu měl jeden kontrakt postavený nad ní.
  • „Hard fork vrátil všechny transakce.“ Ne. Jen přesunul ETH z The DAO a jejích dceřiných DAO do výběrového kontraktu. Všechno ostatní zůstalo, jak bylo.
  • „Ethereum Classic je řetězec hackera.“ Ne. Je to řetězec lidí, kteří z principu odmítli měnit historii – i když si tam útočník jako vedlejší efekt mince nechal.

Shrnutí

  • The DAO vybrala v roce 2016 asi 12 milionů ETH; 17. června z ní útočník vysál asi 3,6 milionu ETH.
  • Chybou byla reentrancy: kontrakt vyplatil dřív, než upravil zůstatek.
  • Čtyřtýdenní zámek dal komunitě čas; 20. července 2016 vrátil mince hard fork.
  • Menšina, která fork odmítla, zůstala na původním řetězci – Ethereum Classic.
  • Pro tebe: velké peníze v novém kódu přitahují útočníky – omez, kolik vložíš do jednoho kontraktu.

Chceš vědět víc o tom, jak chytré kontrakty fungují? Podívej se na lekci Ethereum a chytré kontrakty.

Zdroje#