Атака на The DAO (Ethereum)
CRYPTOLOID (https://t.me/cryptoloid_official)
В начале 2016 года сети Ethereum не было и года, и в ней было только одно приложение, основанное на смарт-контракте (тогда революционной фишке в мире блокчейн).
Это приложение называлось The DAO (децентрализованный венчурный фонд), позволяющий владельцам токенов право участвовать в финансировании любого проекта либо регистрировать свои проекты и получать это финансирование. Круто!
Его создала компания под названием Slock.it, которая вместо того, чтобы искать традиционный венчурный капитал, решила основать The DAO и открыть его для краудфандинга — в расчете на то, что The DAO профинансирует и ее собственный проект. Команда Slock.it ожидала, что The DAO привлечет $5 млн. Но 30 апреля 2016, когда начались продажи, фонд собрал $9 млн всего за два дня. И пошло, поехало…
Множество проектов регистрировались и любой мог стать ранним инвестором в крутые стартапы, что раньше было доступно лишь крупным фондам. Так же любой мог создавать дочерние организации (со своим смарт-контрактом) и предлагать сообществу за них проголосовать (получать инвестиции). Так как все это анонимно, голосовать можно было за свои компании.
Где зарылась собака?
Все отлично, если бы небольшая досадная уязвимость в контракте The DAO. Об этой уязвимости, было известно тем, кто мог видеть и читать код на GitHub. И все это было известно задолго до атаки (вопрос неоднократно поднимался среди сторонних разработчиков) и был проигнорирован со стороны Slock.it.
В смарт-контракте The DAO была уязвимость (лаг по времени). В чем суть: когда инвестор голосовал (инвестировал) в компанию свои монеты, указанная сумма в ETH сначала передавалась из пула The DAO на смартконтракт проекта и только потом происходило списание средств со счета инвестора.
Еще раз!
Даже в банковских операциях есть такое понятие - как атомарность, то есть операция не может быть признана совершенной пока все отдельные инструкции в нее входящие не будут исполнены.
Но тут этого не было! Можно было в цикле отправить кучу транзакций на финансирование из одного и того же кошелька и все они будут дергать контракт, который списывает сначала средства инвесторов (из пула The DAO) в пользу проекта а потом пытается изменить баланс кошелька.

И так, 17 июня 2016 года злоумышленник внес 258 ETH в The DAO, а потом, получив право голоса, внес предложение о создании дочерней организации. В составленном им умном контракте этой организации в цикле, до подведения «баланса», посылались команды на перевод еще не обнуленной суммы в 258 монет. При этом полученные лишние деньги еще и перечислялись на другой кошелек, так что в итоге баланс сводился. Выведенные деньги использовались для умножения эффекта в следующем цикле атаки. Так 258 монет эфира превратились в 3,64 млн.
После горячих споров, было принято решение откатить состояние сети Ethereum до момента атаки. Но с этим были не согласны другие пользователи, которые не пострадали, и у которых уже успели пройти нормальные транзакции (например поступление денег на счет). Получается многие пользователи теряли свои деньги, но уже не от атаки, а от отката. Таким образом сеть разделилась, одна чаcть кошельков согласились с откатом (Ethereum), а другая переключилась на другую цепь (Ethereum Classic). В первой сети этой атаки не было, а в сети Ethereum Classic все было, все зафиксировано до сих пор.
Тогда получается, что злоумышленник смог вывести свои награбленный монеты из сети Ethereum Classic? Да, что он частично и сделал. Курс ETC конечно же был другим, но на тот момент получилось вывести почти 300 BTC, и еще на кошельке оставалось 3.2 млн. ETC (что по текущему курсу более $60 млн.).