Atak na The DAO: Hack, który podzielił Ethereum
Czerwiec 2016. $60 milionów skradzionych. Ethereum pęka na dwoje. Historia najbardziej brzemienna w skutki hacka crypto i narodziny Ethereum Classic.

Pogłęb temat z AI
Kliknij → prompt skopiowany → wklej w czacie AI
To jest historia hacka, który prawie zabił Ethereum.
Nie z powodu skradzionych $60 milionów. Ale z powodu tego, co stało się potem.
Społeczność się podzieliła. Blockchain się rozwidlił. I pytanie, które wciąż nawiedza crypto: czy kod to naprawdę prawo?
Czym było The DAO?
Kwiecień 2016. Ethereum ma niecały rok. Smart contracty to gorący temat.
Ktoś ma pomysł: co jeśli stworzymy zdecentralizowany fundusz venture? Bez VC. Bez partnerów. Tylko kod i posiadacze tokenów.
Nazywają to The DAO - The Decentralized Autonomous Organization.
Koncept:
- Każdy może kupić tokeny DAO za ETH
- Posiadacze tokenów głosują, które projekty finansować
- Sfinansowane projekty zwracają zyski do DAO
- Wszystko działa na smart contractach
To radykalny eksperyment w zdecentralizowanym zarządzaniu.
I działa. Jakoś.
$150 milionów wpływa podczas crowdsale. 14% całego istniejącego ETH. Największy crowdfund w historii w tamtym czasie.
Przyszłość jest tutaj.
Podatność
Jedna funkcja The DAO: możesz zrobić "split" - opuścić The DAO i zabrać swoje ETH. Demokratyczne wyjście.
Funkcja split działa tak:
function splitDAO(uint _proposalID) {
// Sprawdź czy split jest dozwolony
// ...
// Oblicz udział użytkownika
uint fundsToBeMoved = (balances[msg.sender] * address(this).balance) / totalSupply;
// Wyślij ETH do użytkownika
msg.sender.call.value(fundsToBeMoved)();
// Zaktualizuj saldo użytkownika
balances[msg.sender] = 0;
}
Widzisz problem?
ETH jest wysyłane przed aktualizacją salda.
To jest podręcznikowy reentrancy.
Atak
17 czerwca 2016. 3:34 AM UTC.
Nieznany atakujący zaczyna drenować The DAO.
Oto co zrobił:
Krok 1: Stwórz złośliwy kontrakt, który może otrzymywać ETH
Krok 2: Wywołaj splitDAO() z tym kontraktem
Krok 3: Gdy The DAO wysyła ETH, funkcja fallback złośliwego kontraktu się uruchamia
Krok 4: Funkcja fallback wywołuje splitDAO() ponownie
Krok 5: The DAO sprawdza saldo - wciąż oryginalna kwota (jeszcze nie zaktualizowane!)
Krok 6: The DAO wysyła ETH ponownie
Krok 7: Powtarzaj aż wyczerpane
Atakujący nie zrobił nic sprytnego. Po prostu wywołał tę samą funkcję raz za razem zanim pierwsze wywołanie się skończyło.
3.6 miliona ETH wyczerpane. $60 milionów w tamtym czasie. Dzisiaj byłyby to miliardy.
Dlaczego tego nie wychwycono?
Dobre pytanie. The DAO było audytowane. Wielokrotnie.
Ale:
- Reentrancy nie był jeszcze dobrze znanym wzorcem ataku
- Kod był skomplikowany (ponad 20 plików)
- Skupiano się na logice zarządzania, nie na edge case'ach
- "Zaudytowaliśmy to" stworzyło fałszywe poczucie bezpieczeństwa
Badacz bezpieczeństwa Peter Vessenes ostrzegał przed dokładnie tą podatnością dwa tygodnie wcześniej. Został zignorowany.
Reakcja społeczności
Atak postawił założycieli Ethereum w niemożliwej sytuacji.
Opcja 1: Nic nie rób. "Kod jest prawem." Atakujący wykorzystał bug uczciwie. Trudno.
Opcja 2: Soft fork. Umieść skradzione środki na czarnej liście. Atakujący nie może ich ruszyć.
Opcja 3: Hard fork. Cofnij blockchain. Zwróć środki oryginalnym właścicielom.
Opcja 1 oznaczała zaakceptowanie że $60M przepadło. A inwestorzy The DAO to m.in. członkowie Ethereum Foundation.
Opcja 2 miała problemy techniczne (wykryto wektor ataku DOS).
Opcja 3 oznaczała złamanie niezmienności. Całego sensu blockchaina.
Vitalik Buterin początkowo wspierał soft fork. Gdy okazał się wadliwy, społeczność zagłosowała za hard forkiem.
Fork
20 lipca 2016. Blok 1,920,000.
Ethereum wykonuje hard fork. Skradzione ETH wraca do oryginalnych właścicieli.
Ale nie wszyscy się zgadzają.
Mniejszość społeczności odmawia aktualizacji. "Kod jest prawem," mówią. Nie można po prostu cofać transakcji, które ci się nie podobają.
Kontynuują starą wersję łańcucha.
Ethereum Classic się rodzi.
Jeden blockchain staje się dwoma:
- Ethereum (ETH) - Rozwidlony łańcuch, środki zwrócone
- Ethereum Classic (ETC) - Oryginalny łańcuch, atakujący zachowuje środki
Atakujący ostatecznie wypłacił część ETC. Miliony dolarów. Legalnie, tak jakby.
Następstwa
Hack The DAO zmienił wszystko.
Dla bezpieczeństwa:
- "Checks-Effects-Interactions" staje się ewangelią
- Guardy reentrancy stają się standardem
- Bezpieczeństwo smart contractów staje się profesją
- Bug bounty stają się powszechne
Dla zarządzania:
- Hard forki stają się znanym narzędziem
- "Niezmienność" okazuje się negocjowalna
- Zarządzanie społecznością przechodzi test
Dla filozofii:
- "Kod jest prawem" się komplikuje
- Konsensus społeczny przeważa nad regułami technicznymi
- Decentralizacja ma granice gdy chodzi o pieniądze
Kim był atakujący?
Nieznany. Prawdopodobnie.
W 2022 dziennikarka Laura Shin twierdziła, że zidentyfikowała atakującego jako Toby'ego Hoenischa, programistę mieszkającego w Austrii. Zaprzeczył.
Brak oskarżenia. Atak wykorzystał bug w kodzie. Czy to była kradzież? Czy tylko użycie oprogramowania zgodnie z tym jak zostało napisane?
System prawny nie ma dobrej odpowiedzi.
Czy fork był słuszny?
Ta debata nigdy nie umiera.
Za forkiem:
- $60M skradzione niewinnym ludziom
- Bug był oczywisty, intencja była złośliwa
- Społeczność za tym zagłosowała
- Ethereum przetrwało i rozkwitło
Przeciw forkowi:
- Ustanawia precedens interwencji
- "Niezmienność" staje się warunkowa
- Kto decyduje które hacki są cofane?
- Atakujący postępował zgodnie z regułami kodu
Obie strony mają rację. Żadna nie przekonuje drugiej.
Fork się wydarzył. Ethereum jest warte 100x więcej niż było. Ale pytanie pozostaje: czy to było ratowanie czy naruszenie zasad?
Wyciągnięte wnioski
1. Prosty kod ma znaczenie. The DAO było skomplikowane. Złożoność ukrywa bugi. Preferuj prostotę.
2. Audyty to nie magia. Wiele audytów tego nie wyłapało. Audyty pomagają ale nie gwarantują bezpieczeństwa.
3. Nowe wzorce są ryzykowne. Reentrancy nie był jeszcze dobrze znany. Early adopterzy biorą na siebie wczesne ryzyko.
4. Niezmienność jest społeczna. Techniczna niezmienność nic nie znaczy jeśli społeczność zgodzi się na zmianę.
5. Testuj tryby awaryjne. The DAO nie miało planu na duży hack. Gdy się wydarzył, chaos.
The DAO dzisiaj
Kod The DAO wciąż jest na Ethereum. Pomnik lekcji za $60 milionów.
Współczesne DAO się nauczyły:
- Prostsze mechanizmy wypłat
- Time locki na środkach
- Stopniowe uwolnienia
- Awaryjne funkcje pauzy
Koncept DAO przetrwał. Stał się mainstreamowy. Ale wszyscy pamiętają: tak to się zaczęło.
Hack The DAO to kanoniczny przykład reentrancy. Jeśli chcesz dogłębnie zrozumieć podatność, zobacz nasze techniczne omówienie.
Dalsze czytanie:
- Odtworzenie Ataku na The DAO - Zobacz kod
- "The History of The DAO and Lessons Learned" - Vitalik Buterin
- "Thoughts on The DAO Hack" - Phil Daian