05.03.2018
О парне, который снёс $300 миллионов, пока играл со смарт-контрактами Эфириума

О парне, который удалил $300 миллионов, пока играл со смарт-контрактами Эфириума

В позапрошлом году из децентрализованного «автономного» инвестиционного фонда The DAO похитили $50 млн. В июле 2017 г. хакеру удалось украсть эфира на $31 млн, воспользовавшись багом в кошельках Parity. Теперь мы столкнулись с самым худшим взломом на данный момент, только в этот раз ставки ещё больше, и всё дело в одной большой ошибке.

6 ноября 2017 г. пользователь Devops199 открыл в депозитории Parity на Github ветку о проблеме под заголовком «Любой может убить ваш контракт», желая сообщить Parity, компании, предоставляющей смарт-контракты для пользователей сети Эфириума, об уязвимости в её смарт-контракте.

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

То, что после этого сделал Devops199, стало, возможно, самой дорогой ошибкой в истории:

«Я случайно прибил его»

Он «прибил» контракт.

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

1. Почему kill не будет работать? 2. Смогут ли владельцы перевести эфир?

«Смогут ли владельцы перевести эфир?»

Нет… Не смогут. Ты фактически удалил до хрена денег.

По сути, все, кто использовал этот кошелёк с мультиподписью, лишились доступа к своему эфиру. По разным оценкам, в этих контрактах было эфира на $150-300 млн.

Parity, чьи кошельки с мультиподписью уже взламывали в июле, в очередной раз опубликовала «Предупреждение безопасности», где говорится:

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

Последнее, что мы слышали от Devops199:

— Это ты прибил контракт?

— Да. Я новичок в Эфириуме… только учусь.
— Ты теперь знаменит, ахахах.
— Я просто отправил команду kill () destroy () в случайные контракты. Можешь посмотреть мою историю.

Решение

Стоит отметить, что эфир сам по себе не был полностью удалён. Он по-прежнему существует, только к нему нет доступа.

Представьте, что в банковской ячейке хранится $280 млн. Какой-то случайный парень заходит в банк и говорит, что он владелец ячейки. Ему без проблем дали полный доступ к ячейке, после чего он уничтожил ключ от неё. Ключ был совершенно уникальным, и его невозможно воссоздать.

По крайней мере, невозможно по правилам сети. Решение есть, но оно достаточно противоречивое.

После взлома децентрализованного инвестиционного инструмента The DAO ситуация была разрешена с помощью «хард-форка». Ethereum Foundation выпустил новую версию своего клиента, куда были внедрены новые транзакции, чтобы «отобрать» эфир из контролируемых хакерами смарт-контрактов. Конечно, формально эти новые транзакции нарушали правила сети Эфириума, но так как они были вписаны в код клиентов Эфириума, «правила» были изменены, чтобы допустить эти (и только эти!) противоправные транзакции.

Однако после принятия решения о хард-форке сети Эфириума для восстановления средств, потерянных при взломе The DAO, часть сети с таким решением не согласилась. Несогласные с предоставленным решением убеждены, что «код есть закон» и такие изменения незаконны. Поэтому они продолжили использовать «оригинальное» ПО. Так возникло две версии Эфириума: Ethereum и Ethereum Classic.

Ethereum Classic существует по сей день, и на момент написания этих строк его рыночная капитализация составляет примерно $1,3 млрд, тогда как «отколовшийся» блокчейн Эфириума (отменивший взлом) стоит около $30 млрд.

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

Возможно, пришло время переосмыслить модель смарт-контрактов. Уже не впервые баг в одном из таких контрактов привёл к потере гигантских денежных сумм. Ethereum Foundation любит хвастаться, что Эфириум, как платформа смарт-контрактов, является «полной по Тьюрингу», то есть поверх неё можно запрограммировать и реализовать практически что угодно. Но пока такая модель привела к потере в том или ином виде более чем полумиллиарда долларов.

Полнота по Тьюрингу закономерно ведёт к уязвимостям, потому что контракт не может быть лучше своего разработчика. Спросите любого разработчика, как часто он случайно допускает в своём коде баги, заметив их или нет, и вы, возможно, поймёте, что сама идея неаудируемых «полных по Тьюрингу» смарт-контрактов невероятно опасна, когда на кону такие большие деньги. Выбор модели имеет свои последствия, и рано или поздно необходимо подвергнуть его переоценке. Например, возможно, для платформы смарт-контрактов имеет смысл допускать реализацию только «предварительно одобренных» смарт-контрактов, созданных и проверенных профессионалами.

Конечно, это очень централизующий процесс в децентрализованной системе. И да, у централизованной разработки платформы смарт-контрактов есть недостатки. Но есть смысл об этом подумать, потому что, если ничего не изменится, Эфириум всегда будет страдать от проблем безопасности.

Сторонники Эфириума скажут, что мне не следует винить платформу в ошибках разработчиков смарт-контрактов, и в некоторой степени это верно. Но не стоит забывать, что смарт-контракты Parity разработал не какой-то неизвестный и некомпетентный подросток. Нет, их создал Гэвин Вуд, один из со-основателей Эфириума.

Если даже в его смарт-контрактах постоянно обнаруживаются такие изъяны, то насколько безопасным будет большинство полных по Тьюрингу смарт-контрактов в будущем?


Оригинал статьи

О парне, который снёс $300 миллионов, пока играл со смарт-контрактами Эфириума

О парне, который удалил $300 миллионов, пока играл со смарт-контрактами Эфириума

В позапрошлом году из децентрализованного «автономного» инвестиционного фонда The DAO похитили $50 млн. В июле 2017 г. хакеру удалось украсть эфира на $31 млн, воспользовавшись багом в кошельках Parity. Теперь мы столкнулись с самым худшим взломом на данный момент, только в этот раз ставки ещё больше, и всё дело в одной большой ошибке.

6 ноября 2017 г. пользователь Devops199 открыл в депозитории Parity на Github ветку о проблеме под заголовком «Любой может убить ваш контракт», желая сообщить Parity, компании, предоставляющей смарт-контракты для пользователей сети Эфириума, об уязвимости в её смарт-контракте.

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

То, что после этого сделал Devops199, стало, возможно, самой дорогой ошибкой в истории:

«Я случайно прибил его»

Он «прибил» контракт.

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

1. Почему kill не будет работать? 2. Смогут ли владельцы перевести эфир?

«Смогут ли владельцы перевести эфир?»

Нет… Не смогут. Ты фактически удалил до хрена денег.

По сути, все, кто использовал этот кошелёк с мультиподписью, лишились доступа к своему эфиру. По разным оценкам, в этих контрактах было эфира на $150-300 млн.

Parity, чьи кошельки с мультиподписью уже взламывали в июле, в очередной раз опубликовала «Предупреждение безопасности», где говорится:

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

Последнее, что мы слышали от Devops199:

— Это ты прибил контракт?

— Да. Я новичок в Эфириуме… только учусь.
— Ты теперь знаменит, ахахах.
— Я просто отправил команду kill () destroy () в случайные контракты. Можешь посмотреть мою историю.

Решение

Стоит отметить, что эфир сам по себе не был полностью удалён. Он по-прежнему существует, только к нему нет доступа.

Представьте, что в банковской ячейке хранится $280 млн. Какой-то случайный парень заходит в банк и говорит, что он владелец ячейки. Ему без проблем дали полный доступ к ячейке, после чего он уничтожил ключ от неё. Ключ был совершенно уникальным, и его невозможно воссоздать.

По крайней мере, невозможно по правилам сети. Решение есть, но оно достаточно противоречивое.

После взлома децентрализованного инвестиционного инструмента The DAO ситуация была разрешена с помощью «хард-форка». Ethereum Foundation выпустил новую версию своего клиента, куда были внедрены новые транзакции, чтобы «отобрать» эфир из контролируемых хакерами смарт-контрактов. Конечно, формально эти новые транзакции нарушали правила сети Эфириума, но так как они были вписаны в код клиентов Эфириума, «правила» были изменены, чтобы допустить эти (и только эти!) противоправные транзакции.

Однако после принятия решения о хард-форке сети Эфириума для восстановления средств, потерянных при взломе The DAO, часть сети с таким решением не согласилась. Несогласные с предоставленным решением убеждены, что «код есть закон» и такие изменения незаконны. Поэтому они продолжили использовать «оригинальное» ПО. Так возникло две версии Эфириума: Ethereum и Ethereum Classic.

Ethereum Classic существует по сей день, и на момент написания этих строк его рыночная капитализация составляет примерно $1,3 млрд, тогда как «отколовшийся» блокчейн Эфириума (отменивший взлом) стоит около $30 млрд.

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

Возможно, пришло время переосмыслить модель смарт-контрактов. Уже не впервые баг в одном из таких контрактов привёл к потере гигантских денежных сумм. Ethereum Foundation любит хвастаться, что Эфириум, как платформа смарт-контрактов, является «полной по Тьюрингу», то есть поверх неё можно запрограммировать и реализовать практически что угодно. Но пока такая модель привела к потере в том или ином виде более чем полумиллиарда долларов.

Полнота по Тьюрингу закономерно ведёт к уязвимостям, потому что контракт не может быть лучше своего разработчика. Спросите любого разработчика, как часто он случайно допускает в своём коде баги, заметив их или нет, и вы, возможно, поймёте, что сама идея неаудируемых «полных по Тьюрингу» смарт-контрактов невероятно опасна, когда на кону такие большие деньги. Выбор модели имеет свои последствия, и рано или поздно необходимо подвергнуть его переоценке. Например, возможно, для платформы смарт-контрактов имеет смысл допускать реализацию только «предварительно одобренных» смарт-контрактов, созданных и проверенных профессионалами.

Конечно, это очень централизующий процесс в децентрализованной системе. И да, у централизованной разработки платформы смарт-контрактов есть недостатки. Но есть смысл об этом подумать, потому что, если ничего не изменится, Эфириум всегда будет страдать от проблем безопасности.

Сторонники Эфириума скажут, что мне не следует винить платформу в ошибках разработчиков смарт-контрактов, и в некоторой степени это верно. Но не стоит забывать, что смарт-контракты Parity разработал не какой-то неизвестный и некомпетентный подросток. Нет, их создал Гэвин Вуд, один из со-основателей Эфириума.

Если даже в его смарт-контрактах постоянно обнаруживаются такие изъяны, то насколько безопасным будет большинство полных по Тьюрингу смарт-контрактов в будущем?


Оригинал статьи