20:17
19/6/2016

W piątek wieczorem, ktoś wykorzystał błąd programistyczny w funduszu DAO opartym na kryptowalutcie Ethereum (alternatywa dla Bitcoina) i “wykradł” 56 milionów dolarów. Ze względu na specyfikę tej waluty, atakujący nie może wypłacić środków jeszcze przez 27 dni. Twórcy waluty chcą załatać dziurę i cofnąć historię transakcji do momentu sprzed ataku. Do tego jednak potrzebują wsparcia tzw. górników, czyli osób wydobywających walutę. Górnicy z kolei są przekupywani przez atakującego, który obiecuje im 15 milionów dolarów, jeśli nie zainstalują aktualizacji “cofającej” log transakcji w sieci i umożliwią tym samym wypłatę środków atakującemu… W międzyczasie, wartość monet ETH spada o 20%.

Krach ETH

Krach waluty ETH spowodowany hackiem społeczności TheDAO

Czym jest Ethereum i TheDAO?

Kiedy Bitcoin stał się popularny, pojawiły się alternatywne do niego waluty bazujące na tym samym pomyśle, czyli koncepcji tzw. block-chaina, publicznie dostępnego logu z każdej transakcji w sieci (ten Bitcoinowy ma obecnie 80GB). Większość z walut nie wprowadziła żadnych innowacji (ich twórcy po prostu liczyli na to, że kiedyś waluta stanie się tak popularna jak Bitcoin, a oni bogaci), ale waluta Ethereum (ETH) posiada istotne różnice w stosunku do Bitcoina. Jedną z nich jest wykorzystywanie w pełni programowalnego języka do obsługi block-chaina oraz wynikająca z tego funkcja tzw. inteligentnych kontraktów (ang. smart contracts). Czym one są?

Inteligentne kontrakty najlepiej zwizualizować na przykładzie publicznej zbiórki. 100 osób chce zorganizować konferencję i potrzebują na to środków. Każda z nich musi do konkretnego dnia wpłacić jakąś sumę, aby można było pokryć koszty sali i cateringu. Jeśli nie wszyscy wpłacą, kontrakt nie zostanie zamknięty i pieniądze zostaną wszystkim zwrócone.

Zamiast zbiórek na konferencje można oczywiście tworzyć społeczności i wniesione środki przekształcać na udziały/wpływy/głosy. Jedną z takich społeczności jest TheDAO — fundusz inwestycyjny oparty o Ethereumowy blockchain. Wpłacasz, głosujesz w co fundusz ma inwestować i partycypujesz w zyskach. Dlaczego TheDAO jest istotne? Ponieważ w ramach tej społeczności udało się zgromadzić 10% wszystkich monet Ethereum o wartości 100 milionów dolarów.

Należy tu zaznaczyć, że logika danego inteligentnego kontraktu (smart contract) jest opisana w języku programowania Solidity. Wejście, wyjście do funduszu czy wykonanie w nim jakiejś akcji, to po prostu wykonanie odpowiedniej funkcji. A jak wiemy, programiści popełniają błędy

Jak zhackowano The DAO?

Kiedy ktoś opuszcza fundusz The DAO, wyjście realizowane jest przez wywołanie fukcji splitDAO(). Funkcja ta może wywołać kod użytkownika mówiący np. gdzie przesłać zarówno monety Ethereum, które jeszcze nie zostały w nic zainwestowane jak i tokeny reprezentujące udziały w trwających jeszcze inwestycjach.

Osoba, która “okradła” TheDAO zrobiła to w następujący sposób. Wywołała funkcję splitDAO(), która odwołała się do kodu złodzieja, a kod złodzieja odwołał się do funkcji splitDAO(), powodując rekurencyjne wywołania funkcji przelewającej monety na rachunek złodzieja, zanim bieg programu docierał do bloku sprawdzającego, czy saldo w ogóle pozwala na wykonanie transferu (szczegółowy opis wykorzystanego błędu znajdziecie tu i tu). W ten sposób, atakujący pozyskał 3,641,694 ETH o wartości 56 milionów dolarów.

Na szczęście, w przypadku Ethereum, wychodzący musi czekać 27 dni na otrzymanie pieniędzy. To oznacza, że chociaż atakujący wyprowadził środki, przez 27 dni nie może z nich skorzystać.

Jest tylko jeden problem — aby cofnąć jakąś transakcję w przypadku walut opartych o block-chain, trzeba go “sforkować“, czyli wrócić do momentu sprzed wykonania “niechcianej” transakcji i rozpocząć naliczanie salda danego rachunku (adresu) “od nowa”, blokując powtórzenie wystąpienie takiej akcji, która pozwoliła na kradzież. Aby to doszło do skutku, aktualizację w kodzie muszą zaakceptować klienty Ethereum (tzw. górnicy, “kopiący/wydobywający” monetę). Jeśli proponowanej zmiany nie zaakceptuje 51% górników, część sieci Ethereum wciąż będzie pracowała na starym, oryginalnym block-chainie.

Sugestia zmiany w kliencie

Sugestia zmiany w kliencie

Atakujący daje górnikom solidne podstawy do odrzucenia aktualizacji — mówiąc wprost, przekupuje ich, obiecując 30% pozyskanych monet ETH (ok. 16 milionów dolarów) w zamian za nieaktualizowanie klientów Ethereum i umożliwienie wypłaty środków.

przekupstwo-eth

przekupstwo-eth2

Ciekawa jest też konwersacja “administratorów” Ethereum, którzy rozważali ponowienie ataku, aby okraść nim okradającego :)

Dylematy, dylematy… prawne i technologiczne

Konstrukcja The DAO oznacza, że jedyną umową warunkującą korzystanie z kontraktów jest …ich kod źródłowy. Nie ma zapisów licencyjnych, warunków i zasad małym drukiem, itp. Taką prostotą “the contract is the code” DAO się szczyciło. To oznacza jednak, że jeśli ktoś wykonał możliwą z punktu widzenia kodu operację, jest ona legalna.

hackers-contracts

Atakujący, tuż po swojej akcji na Pastebinie opublikował manifest, w którym przeczytać możemy:

I’am disappointed by those who are characterizing the use of this intentional feature as “theft”. I am making use of this explicitly coded feature as per the smart contract terms and my law firm has advised me that my action is fully compliant with United States criminal and tort law. For reference please review the terms of the DAO:

“The terms of The DAO Creation are set forth in the smart contract code existing on the Ethereum blockchain at 0xbb9bc244d798123fde783fcc1c72d3bb8c189413. Nothing in this explanation of terms or in any other document or communication may modify or add any additional obligations or guarantees beyond those set forth in The DAO’s code. (…) The DAO’s code controls and sets forth all terms of The DAO Creation.

Dalej, atakujący grozi, że próba sforkowania block-chainu i pozbawienie go pozyskanych legalnie monet spowoduje 2 katastrofy. Pierwszą z nich ma być powszechna utrata wiarygodności do waluty ETH, która straci swoją najcenniejszą zaletę — przestanie być zdecentralizowana i niesterowana ręcznie przez człowieka. Drugą katastrofą będzie pozew, jaki atakujący wytoczy osobom odpowiedzialnym za podjęcie decyzji o forkowaniu block-chaina ETH.

Apel atakującego

Apel atakującego

Żeby było śmieszniej, na kilka dni przed atakiem, założyciele DAO oświadczyli, że błąd z rekurencją przy wychodzeniu z kontraktów im nie grozi… Sam błąd związany z funkcją przesyłania środków przy wychodzeniu z kontraktów był zaś publicznie znany od 9 czerwca i wiele kontraktów było podatnych na atak.

code-broken

PS. Polecamy wywiad z atakujacym, w którym niektórzy upatrują Mircea Popescu jednego z ewangelistów Bitcoina. Z wywiadu, jeśli prowadzony jest z faktycznym atakującym, dowiedzieć można się że za “kradzieżą” stało kilka osób, które są gotowe pójść na ugodę (tj. oddać trochę pieniędzy) o ile nie będzie forka.

PPS. Inteligentne kontrakty można też realizować przy pomocy Bitcoina

Przeczytaj także:

28 komentarzy

Dodaj komentarz
  1. Skoro kontrakt na taki zabieg pozwolił, to nie widzę tu niczego “nielegalnego”. Nielegalna to będzie dopiero każda czynność próbująca odwrócić powyższe wyprowadzenie środków

    • To nie tak, w wielu państwach jest odpowiednik naszego art. 5 kc (a w zasadzie to odpowiednik art 226 niemieckiego kodeksu cywilnego, na którym to kodeksie wzoruje się duża część kodeksów cywilnych innych państw).
      W Polsce brzmi to tak:
      > Nie można czynić ze swego prawa użytku, który by był sprzeczny ze społeczno-gospodarczym przeznaczeniem tego prawa lub z zasadami współżycia społecznego. Takie działanie lub zaniechanie uprawnionego nie jest uważane za wykonywanie prawa i nie korzysta z ochrony.
      W Niemczech tak:
      > Die Ausübung eines Rechts ist unzulässig, wenn sie nur den Zweck haben kann, einem anderen Schaden zuzufügen.
      (tłumaczenie: Wykonywanie prawa nie jest dopuszczalne, gdy może mieć jedynie na celu wyrządzenie szkody drugiemu.)

    • Kiedyś było prosto, sprawiedliwością nazywano niezłomną wolą oddawania każdemu co się mu należy, dzisiaj sprawiedliwością się nazywa niezłomną wolę rozstrzygania sporów poprzez interpretacje zapisów prawnych tworzonych przez biznes dla biznesu…

    • @trolo – dobrze napisane. No i jeszcze poza prawem mamy moralność. Jeśli ktoś dokona kradzieży. która jest legalna, to nie znaczy, że nie jest złodziejem. Bo co, jak ktoś ukradnie auto, porzuci je po miesiącu, to nie jest złodziejem, tylko… zaborcą?

      Wszystko to klasyczne “gaming the system” – szkoda, że włamywacz podpina pod to swój narcyzm.

    • @Krzysiu: podatki są taką legalną kradzieżą ;-)

  2. No cóż, chciałbym coś inteligentnego powiedzieć, ale wciąż nie rozumiem idei inteligentnych kontraktów.

    • @Tomasz: inteligentne kontrakty zdejmują kosz notariusza – normalnie takie uzgodnienia trzeba by kodyfikować notarialnie.

  3. Wygląda na to, że osoba podająca się za hakera to oszust

    Vitalik (CEO ETH) napisał, na reddicie, że podpis się nie zgadza
    https://www.reddit.com/r/btc/comments/4oo35k/signed_message_from_the_ethereum_hacker/d4e7qi3

  4. Sledze to od piatku jako posiadacz eth i ciekawe jak to sie skonczy. jest sporo opcji w grze, ale wychodzi, ze jeszcze kilka razy bedzie zmiana sytuacji. Ci od DAO beda blokowac wyplate itd.. Druga strona tez cos bedzie wymyslac i w ten sposob to sie bedzie przeciagac i przeciagac.
    Bardzo ciekawe jest tez obserwowanie reakcji ludzi zwiazanych z bitcoinem i bardzo duzy hejt z ich strony (przynajmniej takie mam wrazenie)… tak jakby bardzo bali sie sukcesu eth.

  5. Witam,
    Albo ja czegoś nie rozumiem albo autor źlevtłumaczy. Z tego co jest napisane wynika, że The Dao jest instytucją niezależną od kryptowaluty a tylko używającej jaj tak samo jak każda giełda, bank fundusz używają zwykłaych walut.W zwaiązku z tym czy jakiś fundusz,który skrewił miałby prosić banki narodowe i inne żeby wycofywały transakcje? Bzdura! Niech wygra złodziej – może ludzie zrozumieją, że nie można powierzać środków byle jakiej organizacji nie majacej audytów i certyfikatów. Gdyby The Dao zapłaciło za analiże i certyfikację kodu,może błąd byłby wykryty wcześniej.

    • Dao miało certyfikaty kodu i to robione przez firmy, które siedzą w tej branży.
      Cały kod był też na githubie, więc społeczność także analizowała ten kod i sprawdzała jego zgodność z bytecode znajdującym się na blockchainie.
      Jak widać, ten konkretny błąd jakoś się prześlizgnął, bo jak możemy przeczytać w analizach współodpowiedzialnych było kilka funkcji na raz, a osoby audytujące sprawdzały każdą z osobna.
      Jak widać, ktoś ze społeczności błąd znalazł, jednak zamiast się nim podzielić sam zgarnął korzyści dla siebie, a biorąc pod uwagę sumy, jakie wchodziły tu w grę nie ma się co człowiekowi dziwić.

    • Ja bym się jednak zdziwił, bo złodziej to złodziej – jak rozumiem też byś ukradł te pieniądze?

  6. A podobno instrumenty tworzone przez “tradycyjnych” banksterow sa skomplikowane i niegodne zaufania ;)

  7. Stracilem noge w wypadku samochodowym, chcialbym normalnie funkcjonowac. Proteza kosztuje bardzo duzo a ja staram sie zbierać na wszelkie sposoby interesując ostatnio się wlasnie BitCoinem. Przepraszam was, po prostu przytłacza mnie bezsilność.

    Portfel: 1HqvHWpUZuGRC4MmmY5evYuMkKtYKt6Kug

  8. Droga redakcjo,
    Napisaliscie zdanie ktore jest nieprawdziwe: “Na szczęście, w przypadku Ethereum, wychodzący musi czekać 27 dni na otrzymanie pieniędzy.”

    W przypadku Ethereum na otzymanie pieniedzy trzeba czekac srednio 15 sekund bo tyle wynosi sredni czas bloku. Owe 27 dni wynikaja z konkretnej implementacji smart contractu “The DAO”, a konkretnie tego jak realizowany jest “split DAO”, a nie bezposrednio z waluty Ethereum.

    Uprzejmie prosze o korekte tej dezinformacji :)

  9. “(…) trzeba go “sforkować“, czyli wrócić do momentu sprzed wykonania “niechcianej” transakcji i rozpocząć naliczanie salda danego rachunku (adresu) “od nowa”, blokując powtórzenie wystąpienie takiej akcji, która pozwoliła na kradzież.”

    Spolecznosc nie rozwaza proponowanego w tym zdaniu “forka z rollbackiem” poniewaz cofneloby to wszystkie transakcji dokonane od momentu ataku, a na to zgodzilby sie praktycznie nikt. Proponowany fork ma wystapic w przyszlosci, nie cofajac transakcji a jedynie blokujac adres na ktorym przechowyane sa skradzione tokeny.

    Zrodlo: https://blog.ethereum.org/2016/06/17/critical-update-re-dao-vulnerability/

  10. “powodując rekurencyjne wywołania funkcji przelewającej monety na rachunek złodzieja, zanim bieg programu docierał do bloku sprawdzającego, czy saldo w ogóle pozwala na wykonanie transferu” – czyli taka “afera Art-B z oscylatorem ekonomicznym” tylko w nowoczesnym wydaniu :-)
    https://pl.wikipedia.org/wiki/Oscylator_ekonomiczny

  11. Złote dolary / złote ruble tanio kupię.
    Zabezpieczę w skarpecie.

  12. Ile jeszcze będziemy dokładać do nie rentownych kopalń i składać się na przywileje górników ? ? ?

    • @Xavery You made my day :D

    • Jak to mówią – “you made my day” ;)

      Zamknąć kopalnie :P

    • Nierentownych pisze sie razem!

  13. Licencji gość nie złamał, ale skoro kod jest licencją, to można go zawsze zmienić i w pełni legalnie doebrać pieniądze.
    Tu nie ma żadnego problemu.

  14. Nie pozostaje nic innego jak dołączyć do TheDAO, nie aktualizować i czekać na przelew ETH :D

  15. Oczywiście haker po tym jak dostanie te miliony, grzecznie przeleje każdemu jego dolę ;-).
    Wiadomo honor dla złodzieja to rzecz święta.

Twój komentarz

Zamieszczając komentarz akceptujesz regulamin dodawania komentarzy. Przez moderację nie przejdą: wycieczki osobiste, komentarze nie na temat, wulgaryzmy.