Для начала разберемся с основными понятиями. Что такое DAO и DApp?

Пример DApp – виртуальная рулетка, логика которой целиком описана в смарт-контракте

DApp (Decentralized Application, распределенное приложение) – один или несколько смарт-контрактов, выполняющих функции доверенного лица между участниками или другими смарт-контрактами. Смарт-контракт – это, по сути, программа. Для того чтобы с ней могли взаимодействовать не только программисты, но и участники распределенного приложения, обычно имеется некий интерфейс, предназначенный для работы из Интернета. Пример DApp – виртуальная рулетка, логика которой целиком описана в смарт-контракте: каждый может «прочитать» условия смарт-контракта и убедиться, что казино его не обманывает.

Пример DAO – децентрализованная биржа на смарт-контрактах

DAO (Decentralized Autonomous Organization, распределенная автономная организация) – масса контрактов, описывающих участников организации (инвесторы, работники, потребители и т. д.), а также протокол взаимодействия между ними. В отличие от DApp DAO больше похожа на организацию, чем на сервис. И меньше зависит от людей (на это, собственно, указывает слово «автономная»). Пример DAO – децентрализованная биржа на смарт-контрактах: нет единой точки отказа, комиссии и вывод денег с биржи прописаны в неизменяемом смарт-контракте.

Почему уязвимости в смарт-контрактах опасны?

Если подпись ничего не гарантирует, ею можно заверить все что угодно

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

А в чем минус? Смарт-контракт – это программа. Программы пишут люди, а они могут ошибаться. Например, последняя крупная уязвимость в смарт-контракте MultiSig-кошелька (как раз туда и отправляются все средства инвесторов при ICO, отсюда такие потери) от Parity оставляет замороженными около 300 млн долларов. Хотя средства все еще находятся в кошельках, воспользоваться ими никто не может, поскольку один из разработчиков «убил» контракт-библиотеку, которую все эти кошельки используют, тем самым нарушив логику их работы.

Большой части сообщества это пришлось не по нраву, и была создана альтернативная валюта – Ethereum classic

Неужели ничего нельзя сделать? Можно. Вопрос в том, какой ценой. Широкую известность получил прошлогодний инцидент с TheDAO, когда разработчики выпустили новую версию клиента (кошелька) для Сети, в которой, грубо говоря, было прописано, что никто ничего не украл. Это стало прямым нарушением принципа неизменяемости блокчейна. Большой части сообщества это пришлось не по нраву, и была создана альтернативная валюта – Ethereum classic, развивающаяся и поныне.

Векторы атак

Взламывая смарт-контракт, злоумышленник получает прямой доступ к средствам. Однако фокусирование внимания только на нем может стать фатальной ошибкой. Здесь есть варианты. Как уже упоминалось, для взаимодействия со смарт-контрактом нужен некий интерфейс. И в этом плане пока нет варианта проще, чем веб-сайт. Поэтому для таких интерфейсов актуальны все те же атаки и уязвимости, что и для обычных веб-сайтов, которые вы посещаете каждый день.

Даже если на сайте нет никаких кнопок для совершения трансакций, а всего лишь записан адрес для ICO, такой веб-сайт также нужно относить к разряду интерфейсов (может быть, даже больше, чем другие).

Вот типичные векторы атак, реально или потенциально используемых с целью подмены адреса для ICO

Вот типичные векторы атак, реально или потенциально используемых с целью подмены адреса для ICO:

  • Фишинг – поддельный сайт, как две капли воды похожий на оригинал, с одним исключением: оригинальный адрес заменен адресом злоумышленника.
  • XSS – внедрение JavaScript-кода на страницу. Если злоумышленник может выполнять свой js-код на странице другого пользователя, то он способен делать все то же самое, что и пользователь. И даже больше – например, подменить какую-то информацию на странице.
  • Site Defacement – сайт уже взломан через одну из десятков различных уязвимостей, и если злоумышленник захватил управление бэк-эндом, он может контролировать всё, что видят пользователи на странице, в том числе и тот самый адрес.
  • Слабые пароли – стойкий пароль необходим не только аккаунту хостинг-провайдера, на котором крутится сайт, но и для защиты аккаунтов в соцсетях, смежной инфраструктуры компании, личных компьютеров разработчиков, директоров, PR-службы и т. д. Все эти узлы являются доверенными, и информации, поступающей от них, верят многие пользователи, даже когда она является противоречивой.

Digital Security удалось на практике продемонстрировать наличие опасных проблем в смарт-контрактах через реализацию собственного проекта «хакерского» ICO. Это не совсем обычное ICO прошло перед конференцией по кибербезопасности ZeroNights 2017. Мы не ставили целью привлечение средств, хотя в пересчете на фиатные деньги и собрали 32 тыс. долларов. Основная идея проекта заключалась в том, что в нашем ICO могли принять участие только хакеры, которые должны были его взломать. Чтобы получить возможность покупать HACK-коины, участникам ICO нужно было проэксплуатировать несколько уязвимостей и в самом смарт-контракте, и в интерфейсе. В итоге купить коины смогли как минимум пять человек. Тройка первых за свои коины получила приглашения на конференцию ZeroNights 2017.

Как защититься?

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

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

  • Следование лучшим практикам при написании смарт-контрактов и заимствование чужого кода, прошедшего «боевую» проверку.
  • Проведение аудита кода. Цена ошибки слишком высока, а исправить ее может быть невозможно или слишком поздно.
  • Проведение открытых программ по поиску уязвимостей – очень хорошая идея, в том числе потому, что награду можно назначить в коинах, которые будет выпускать данный контракт (если речь про ICO).

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