Эфирный вор (часть вторая)

Год назад хакер совершил хищение виртуальной валюты, называемой «эфиром», на сумму 55 миллионов долларов. Это история дерзкой попытки переписать историю со взломом.

Но кем был тот, кому они противостояли?

Этого никто не знает, хотя есть некоторые подсказки. Адрес использовавшегося злоумышленником кошелька – 0xF35e2cC8E6523d683eD44870f5B7cC785051a77D. Уловили? Как и всё остальное в блокчейне, адрес пользователя представляет собой анонимную строку символов. Но каждая транзакция каждого адреса записана в публичном реестре блокчейна и открыта для изучения. Не то чтобы это имело смысл для 99,9 процента людей, но имело для Грина.

Для того чтобы совершить эту кражу, злоумышленнику необходимо было создать контракт, который будет взаимодействовать с DAO. По словам Грина, он создал его 15 июня и развернул ранним утром два дня спустя. После активации, этот контракт начал выводить из DAO через аккаунт атакующего эфиры на сумму около 4 000 долларов каждые три или четыре минуты.

Но каков источник финансирования атаки? Для того чтобы контракт мог взаимодействовать с блокчейном Эфириума, вычислительные мощности, необходимые для его исполнения, должны быть оплачены определённой суммой эфиров. Контракт атакующего финансировался с двух адресов, но отследить происхождение средств дальше оказалось непросто, так как второй из использованных адресов принадлежал обменнику ShapeShift, через который 14 июня на аккаунт злоумышленника поступило 52 эфира. ShapeShift не собирает никакой информации о своих пользователях и, по утверждению владельцев, производит обмен одной виртуальной валюты – например, биткойны – на другую – например, эфиры – менее чем за 10 секунд. И хотя для использования ShapeShift может быть немало законных причин, это также и отличный способ отмывания цифровых активов и заметания цифровых следов.

По словам Грина, после того как атакующий контракт перестал выполняться, вору было нужно развернуть его заново. Он предпринимал такие попытки, но неудачно, и после ещё нескольких транзакций, взлом был остановлен. (Одна из возможных причин остановки атаки, по словам Грина, заключается в том, что токены хакера оказались повреждены, а это значит, что у него не было возможности продолжить использовать уязвимость.)

У нас была только эта неполная информация из публичного блокчейна. Сервисы обмена цифровых активов видят и ту, и другую сторону. Внутреннее расследование одного из таких обменников показало, что атаковавший DAO злоумышленник, скорее всего, был частью группы, а не одиноким волком, и находился в Швейцарии. (Со слов руководителя, который отказался говорить под запись и возражал против упоминания названия его компании.) Обменники находятся в уникальном положении, позволяющим им анализировать торговую активность клиентов, поскольку они знают своих клиентов, даже если в блокчейне те анонимны. По словам руководителя обменника, он поделился результатами анализа с бостонским офисом ФБР, но с октября прошлого года никаких контактов не последовало.

Гюн из Корнеллского университета говорит, что он тоже связывался с бостонским офисом ФБР, с агентами в нью-йоркском офисе, а также с офисом генерального прокурора штата Нью-Йорк. «Очень сложно скоординировать такого рода атаку, не оставив за собой никаких следов», – говорит Гюн. Он призвал ФБР изучить тестовую сеть Эфириума, в которой программисты могут запускать свой код в безопасной среде, чтобы выявить и устранить недочёты. Гюн сказал федералам, что злоумышленник не стал бы запускать настолько сложный смарт-контракт, не протестировав его, и в тестовой сети федералы могли найти необходимые для его идентификации данные. По словам Гюна, он также передал федералам связанные со злоумышленником адреса (как тот, что был указан выше), которые перечислил в своём блоге его аспирант Дайан. (ФБР от комментариев отказались.)

«Я не понимаю, почему никто не взялся проследить эту цепочку и найти того, кто это сделал, – говорит Стефан Туаль (Stephan Tual), третий сооснователь Slock.it. – Это не даёт мне покоя и по сей день, так как то, что этот человек совершил, крайне неэтично».


 

Во вторник, через четыре дня после первой атаки, хакер вернулся и каким-то образом возобновил вывод средств.

Группа «Робин Гуд» предвидела такую вероятность и была к этому готова. В воскресенье, ранним утром, им, наконец, удалось собраться вместе онлайн и успешно проникнуть в спасательную капсулу, но они отложили свою контратаку. Теперь же у них не было выбора.

Одним из факторов, работавших против группы, была их удалённость друг от друга – один в Рио, другие разбросаны по Европе. (Некоторые из участников группы не захотели, чтобы их упоминали в этой статье.) При этом им было важно координировать свои действия, потому что, как в «Ангелах Чарли», у всех них была разная специализация: Грин – организатор группы, Ван де Санде – публичное лицо, остальные работали над смарт-контрактами, используемыми в контратаке. Поэтому Ван де Санде нужно было шаг за шагом провести через всю намеченную процедуру взлома, поскольку это находилось вне его компетенции.

«Скажу честно, я был взволнован, – говорит Грин. – Это самая сумасшедшая история из всех, что со мной случались. Это самая сумасшедшая история из всех, что случались вообще с кем-либо.»

Вопрос о том, насколько их действия законны, оставался без ответа.

«Они были как кибер-ниндзя, ведущие борьбу за блокчейн, – говорит Вессенес, эксперт в области программирования. – То, что они делали, почти наверняка было незаконно, но они утверждают, что поступали таким образом ради общего блага».

И теперь Ван де Санде должен был объяснить сообществу, что контратака группы «Робин Гуд» проводится из благих побуждений. Он написал в твиттере: «ДЕНЕЖНЫЕ СРЕДСТВА ВЫВОДЯТСЯ ИЗ DAO ИЗ СООБРАЖЕНИЙ БЕЗОПАСНОСТИ! НЕ ПОДДАВАЙТЕСЬ ПАНИКЕ».

Его просьба не поддаваться панике с отсылкой к классическому «Автостопом по галактике» была встречена со всем сарказмом и искренним сомнением, на какие только способен Twitter. Однако когда атака группы «Робин Гуд» набрала обороты, они заметили кое-что странное и тревожное: злоумышленник был с ними в каждой спасательной капсуле.

«Мы сбежали с космического корабля, но теперь мы были в космосе, один на один с пришельцем, от которого пытались сбежать», – рассказывает Ван де Санде. Это было большой проблемой. Код Йентча был написан таким образом, что группе «Робин Гуд» пришлось бы ждать несколько недель, прежде чем они смогут полностью обезопасить выведенные эфиры. К тому же, если злоумышленник был в одной спасательной капсуле с группой, то он мог просто повторять их действия – так называемая атака преследования. Если хакер преследовал группу «Робин Гуд», эфиры всё ещё не были в безопасности.

«Игра заканчивается только тогда, когда одна из этих сторон не появляется для того, чтобы продолжить борьбу», – говорит Ван де Санде. В этом и заключается суть DAO-войн, бесконечной битвы, которую придётся вести для того, чтобы сохранить в безопасности выведенные эфиры. Если бы только существовал способ отменить кражу раз и навсегда!


 

То, что произошло дальше, стало одним из самых спорных эпизодов в ранней истории блокчейн-технологии.

Утро 20 июля в Итаке, штат Нью-Йорк, где находится Корнеллский университет, было прохладным и ясным. Для участия в недельном учебном лагере Эфириума, который проводился в университете, в город приехали разработчики и программисты со всего мира. Настроение было тревожным, но не из-за того, что семинары и мастер-классы должны были вот-вот начаться. Это был день, в который сообщество Эфириума приняло решение переписать прошлое.

Несколько недель, прошедшие с момента взлома DAO, были полны ожесточённых прений, поскольку разработчики, кодеры, инвесторы и другие участники сообщества рассматривали различные предлагаемые варианты отмены кражи. В то время как группа «Робин Гуд» вела свою борьбу со злоумышленником, преимущественно, скрытно, вокруг бушевали публичные дискуссии. Whitehat-хакеры были не единственными, кто пытался спасти DAO. Йентч работал почти круглосуточно, отвечая на сотни вопросов от инвесторов DAO в отношении того, что им следует предпринять. 23-летний Виталик Бутерин, создавший блокчейн Эфириума ещё до того, как ему исполнилось 20, стал основным координатором, который организовывал и вёл сообщество через имевшиеся варианты действий.

В двух словах, у них была возможность изменить блокчейн Эфириума для того, чтобы исправить проблему с DAO, но только в том случае, если большая часть владельцев составляющих сеть компьютеров согласится перейти на соответствующее обновление программного обеспечения. Сделай они так – и атаки как будто никогда и не было.

Это называется хард-форком. Это решение вызвало бурную реакцию и воспринимается как спорное и год спустя – как в сообществе Эфириума, так и среди биткойнеров, которые настаивают на том, что блокчейн должен оставаться неизменным. В интервью, данном в октябре, Бутерин не выразил ни малейших сожалений о том, что настаивал на изменении блокчейна.

«Некоторые пользователи Биткойна воспринимают хард-форк как нечто, противоречащее их самым фундаментальным ценностям, – сказал Бутерин, отказавшись говорить непосредственно о произошедших событиях, – но я считаю, что доводить значение этих фундаментальных ценностей до таких крайностей глупо».

По крайней мере, внутри сообщества Эфириума точка зрения Бутерина взяла верх, и вычислительные узлы сети по всему миру приняли хард-форк. Исправления, которые содержались в блоке номер 1 920 000, были просты и заключались только в том, что теперь инвесторы могли забрать вложенные в DAO эфиры.

Но почему злоумышленник не исчез с выведенными деньгами? Ведь прошло уже больше месяца. Тот же код, который позволил злоумышленнику вывести деньги из DAO, в конце концов, позволил вернуть эти эфиры. Всё, что представляет собой DAO – это параметры: операторы if-then и другие правила, каждое из которых должно быть выполнено, прежде чем программа будет остановлена. В одном из таких параметров было заложено, что любой, кто захочет вывести свои эфиры из DAO, может это сделать только через 27 дней после первоначального запроса, и затем ещё семь дней спустя.

Этот механизм страховки от ошибок в полной мере действовал и в отношении средств, выводимых злоумышленником. Это как если бы кому-то после успешного ограбления банка пришлось выждать 34 дня, прежде чем пересечь улицу и пуститься в бега. Пока он ждал, деньги были выкрадены обратно. Через месяц после первоначального ограбления, от добычи эфирного вора ничего не осталось.

В кампусе Корнеллского университета все участники учебного лагеря праздновали победу. На следующий день Гюн принёс на занятие, где он был преподавателем, шампанское. Он наклеил на бутылки Chandon импровизированные наклейки с изображением вилки и подписью «Поздравляем с успешным форком!»

Но затем произошло нечто неожиданное. Исходная цепочка Эфириума, включающая кражу DAO, продолжила расти. Представьте, что хард-форк – это ветка дерева, которая начинает свой рост в другом направлении от конца основной ветви. Ожидалось, что основная ветвь после хард-форка будет просто заброшена, однако она продолжила свой рост, так как небольшая группа пользователей продолжила осуществлять транзакции на этой версии блокчейна. Вместо того чтобы умереть, эта ветвь стала второй разновидностью Эфириума, вскоре названной Эфириумом Классик, со своей цифровой валютой, которая теперь имела ценность. Даже для научно-фантастического мира блокчейн-технологий это был беспрецедентный поворот событий. Это означало, что у вора, атаковавшего DAO, внезапно оказалось около 3,6 миллиона монет Эфириума Классик, находящихся на счёте его учётной записи в DAO, известной как DarkDAO, и постепенно растущих в цене. Группе «Робин Гуд» принадлежало около 8,4 миллиона монет, так как в этой параллельной вселенной они по-прежнему контролировали 70 процентов средств DAO, которые они вывели.

Участники группы «Робин Гуд» не могли в это поверить. «Мы сделали всё, чтобы этого избежать, но нас снова втягивали в этот бой», – говорит Ван де Санде.

Теперь пользователи, усматривавшие в хард-форке нарушение фундаментальных ценностей блокчейна, могли выразить свои убеждения путём поддержки Эфириума Классик. Именно так поступил Барри Зилберт (Barry Silbert), супертяжеловес в мире Биткойна. «Не путайте: оригинальная цепочка – это Эфириум Классик, – говорит он. – Форком является Эфириум». Подкрепляя слова делом, компания Зилберта, Grayscale Investments, недавно опубликовала инвестиционную декларацию, в которой подчёркиваются преимущества Эфириума Классик перед Эфириумом. В заголовке соответствующего раздела кратко формулируется основной аргумент: «DAO и смерть принципов».

Алексис Руссел (Alexis Roussel), сооснователь Bity.com, швейцарского цифрового валютного брокера, не перестаёт удивляться последствиям хард-форка и дикому миру блокчейн-технологий. «Ничего подобного невозможно представить в традиционной финансовой сфере, – говорит он. – Если что-то случится с Apple, это не приведёт к внезапному появлению клона Apple».


 

Со дня атаки на DAO прошло больше года – достаточно времени для того, чтобы понять и оценить, что пошло не так.

Ван де Санде хочет двигаться дальше. «То, что произошло, было аномалией, – говорит он. – Мы готовы двигаться дальше и оставить историю с DAO позади».

Грин, организующий этим летом конференцию Эфириума на фестивале Burning Man, который проходит ежегодно в пустыне Невада, видит в прошедшем и комичную сторону. «Группа «Робин Гуд» – это было то ещё шоу, – смеётся он. – Надеюсь, в фильме это будет показано более складно, чем было на самом деле».

Что же касается самой ошибки, то очевидно, что и до Гюна этот код был проверен множеством умных людей, но, тем не менее, они упустили одну крупную уязвимость. Порядок команд, заложенных в коде, позволял держателям токенов DAO выводить любую прибыль, которую они получали со своих инвестиций. Строка выглядит так: “withdrawRewardFor(msg.sender)”, и снабжена совершенно невероятным комментарием для всех читающих этот код: «будь умницей и получи его вознаграждение». Это строка номер 667. По словам Йентча, если бы строка вывода средств была расположена после этих строк:

totalSupply -= balances[msg.sender];

balances[msg.sender] = 0;

paidOut[msg.sender] = 0;

return true;

то атака была бы невозможна. Но если бы код был в корректном порядке, параметр получения вознаграждения не работал бы. Что касается примечания, то эта строка кода должна была позволить пользователям выводить любую прибыль – вознаграждение – которую они получали со своих инвестиций. Но вместо этого она стала самым грандиозным бэкдором в истории. По словам Йентча, лучше было бы не выплачивать вознаграждений во время функции split, которую мы здесь метафорически называли спасательными капсулами.

Ещё одно решение, принятое им, когда он ещё понятия не имел об ошибке, показывает, насколько причудливым и не прощающим ошибок может быть код. «Даже если бы заглавная буква «T» в строке 666 была строчной «t», это тоже предотвратило бы взлом», – говорит Йентч.

Йентч видит много причин для сожалений, но настаивает на том, что никто не знал о проблемах в строках 666–667 (все наблюдатели указывали на недостатки в других строках, но не в этих). «Даже если бы код проверили ещё больше людей, это ничего не изменило бы, – говорит он. – Если вы не знаете, что искать при аудите безопасности, то вы этого не найдёте».

Даже Гюн, заметив ошибку, оставил всё как есть. Грин до сих пор не может ему этого простить. «Гюн меня серьёзно разозлил, – говорит Грин. – Он начал хвастать тем, что он нашёл ошибку». По словам Грина, Гюн «поступил крайне безответственно, не сказав никому о своих подозрениях». Тем не менее, Грин говорит о том, что с уважением относится к Гюну и что с тех пор они уладили свои разногласия.

На просьбу рассказать подробнее о той ночи в прошлом июне, когда он лежал в постели больной, Гюн ответил: «Я отбросил мысль о том, что это потенциально может оказаться проблемой». Однако он проконсультировал Дайана, своего аспиранта, которому, по его словам, он доверяет. Дайан ответил, что «это не получится использовать во вред». По словам Гюна, если бы он был уверен в опасности, то рассказал бы об этом.

В своём блоге, в посте, объясняющем механизм ограбления DAO и опубликованном ночью после атаки, Дайан отдал должное своему профессору и признал его правоту. «Гюн, мы были так чертовски близко! Жаль, на сей раз этого оказалось недостаточно», – писал Дайан.

Что же касается злоумышленника (кем бы он, она или они ни были) и принадлежащих им теперь токенов Эфириума Классик, то Гюн говорит: «Что ж, отлично! Теперь он сможет обналичить награбленное». Хард-форк показал, что исправления были необходимы не только коду DAO, но и самому блокчейну Эфириума. По словам Гюна, «ошибка кроется также и где-то на стороне системы».

Однако опасения того, что смарт-контракты – а значит, и сам блокчейн Эфириума – чрезмерно сложны, доминировавшие в первые дни после взлома DAO, постепенно рассеялись. По крайней мере, таков вердикт рынка, если судить по цене эфира. После атаки, он в течение девяти месяцев торговался в диапазоне от 10 до 12 долларов. Затем, в марте этого года его цена резко пошла вверх и в середине июня эфир торговался уже по цене 340 долларов и выше. (Собранные DAO средства в этом случае оценивались бы более чем в 4 млрд долларов, но давайте не будем даже думать об этом.)

Цена Эфириума Классик тоже выросла и в июне достигала уровня свыше 20 долларов. Иными словами, обе версии Эфириума остаются жизнеспособными. Вор владеет одним эфиром, ревизионисты – другим. Развивая эту мысль, выбор, в действительности, заключается в том, кому вы предпочитаете верить.

После хард-форка, злоумышленник в конечном итоге сумел присвоить себе деньги благодаря существованию Эфириума Классик. Это означает, что ему удалось уйти с суммой около 67,4 миллиона долларов, учитывая, что деньги на его счету пока остаются нетронутыми. Совсем неплохо, 0xF35e2cC8E6523d683eD44870f5B7cC785051a77D.

Источник: Bloomberg.com



Рубрики:DAO, Виталик Бутерин, ДАО, Новичкам, Проишествия, Сообщество, ETC, ETH, Ethereum, смарт-контракты, спорный форк, эфир

Метки: , , ,

2 replies

  1. Одна из самых захватывающих статей, которые приходилось читать. И первая и вторая часть очень понравились.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s