Фото Benoit Tessier / Reuters
Каждое ICO является объектом пристального внимания хакеров, поэтому залогом успеха является не только сам проект или технология, но и обеспечение безопасности
Смарт-контракты — одна из самых интересных возможностей блокчейна. Для понимания того, зачем их придумали, надо вспомнить популярный способ продажи квартиры через банковскую ячейку. После успешной сделки деньги забирает продавец, в противном случае доступ к ячейке остается только у покупателя. Сделка вроде бы застрахована, но обеим сторонам приходится возиться с наличными и опасаться за сохранность ячейки.
Безналичным аналогом такой сделки является аккредитив, однако в довесок идут расходы на юридическое и нотариальное сопровождение. Получается, как в трюизме: «быстро, качественно, недорого — выберете любые два пункта». Смарт-контракты позволяют ничего не выбирать. Тут можно и быстро, и качественно, и недорого. Исполнение таких контрактов гарантируют не правовые нормы, банкиры и юристы, а зашитый в программу алгоритм с условиями сделки. Алгоритм же защищают криптография и децентрализация.
Читайте такжеКриптотехнологии и криминал вокруг них: как избежать мошенничества на блокчейне
Первую сделку с использованием смарт-контрактов среди российских компаний осуществили Альфа-Банк и S7 Airlines. По договору S7 Airlines осуществлял расчеты с одним из контрагентов. Денежные средства сначала списывались со счета заказчика на специальный промежуточный счет (счет покрытия) в Альфа-Банке в момент подачи заявки. Когда же контрагент предоставлял документы об исполнении работ — деньги поступали на счет исполнителя. Основные этапы сделки — открытие и исполнение — фиксировались в распределенной системе на базе платформы Ethereum, обеспечивая прозрачность и исполнение контракта. Ethereum многие знают лишь как криптовалюту, хотя это самый известный конструктор умных контрактов.
Читайте такжеБанки применили Ethereum: национальные особенности блокчейна
Идея создания умных контрактов была предложена ученым в области информатики Ником Сабо в 1994 году, а практическая реализация появилась в 2015 году. Сегодня применение цифровых контрактов возможно практически во всех сферах бизнеса: менеджменте, логистике, юриспруденции. Главное их достоинство — отсутствие расходов на нотариусов и юристов. Кроме того, смарт-контракты обеспечивают прозрачность и своевременное выполнение сделки. Они не только содержат информацию об обязательствах сторон, но и сами автоматически обеспечивают выполнение всех условий договора.
- Утечка эфира: как хакеры одним махом похитили криптовалюту на $32 млн
Недостаток у смарт-контрактов по сути один — эти программы написаны людьми, а значит они могут быть уязвимы, специально или ненамеренно. Ошибки в коде приводят ко многомилионным потерям: к примеру, в 2016 году неизвестный пользователь, хитро зациклив легитимную функцию автономного инвестфонда Decentralized Autonomous Organization (DAO), вывел сумму в Ethereum, эквивалентную на тот период времени $43,9 млн. А ведь DAO — это не просто смарт-контракт, но один из важнейших проектов на базе Ethereum и первая в своем роде самоуправляемая организация со слоганом «DAO is the code»: ее акционером может стать любой человек, а выбор направлений деятельности определяется голосованием. Украденная сумма составляла 15% от всего «эфира», что вынудило Бутерина нажать волшебную кнопку и вернуть систему в состояние до взлома. Деньги вернули, а вот репутационные потери — нет. Это привело к расколу Ethereum. Часть пользователей посчитали «возврат в прошлое» самоуправством и продолжили использовать старый блокчейн «эфира».
Разработка смарт-контрактов крайне ответственный процесс по двум причинам. Во-первых, создаваемый код будет совершать настоящие денежные операции, хоть и в криптовалюте. Во-вторых, опубликованный в блокчейн контракт нельзя изменить. Цена ошибки слишком велика, поэтому при создании смарт-контрактов нужно стараться использовать уже существующий безопасный код, чтобы снизить вероятность собственной ошибки.
Найти слабое место
Уязвимости в умных контрактах могут быть следствием простой невнимательности. Так, в июле 2017 года была совершена кража около $30 миллионов с кошелька Parity, на котором хранились средства множества клиентов, включая несколько крупных ICO проектов. Функция, которая устанавливает владельца кошелька, была доступна для вызова любому пользователю сети Ethereum. Разработчик использовал один из шаблонов, но применил его неправильно, не указав область видимости функции. Примечательно, что даже в ходе внешнего аудита уязвимость не была обнаружена. Данный взлом показал хрупкость экосистемы Ethereum в плане безопасности.
Язык, на котором пишутся смарт-контракты, имеет множество тонкостей. Из нашей практики наиболее распространены ошибки при числовых арифметических операциях, связанных с переполнением. Встречается и неверное использование встроенных переменных языка Solidity; имеются неочевидные вещи, которые можно упустить, даже внимательно прочитав документацию. К слову, одна такая особенность недавно позволила неизвестному «выиграть» большой куш в лотерее SmartBillions. Разработчики выложили код контракта и пополнили баланс кошелька лотереи на 1500 эфира (это примерно полмиллиона долларов на момент написания статьи). Создатели были настолько уверены в своем коде, что объявили баг баунти: любой, кто сможет найти уязвимость в коде, может забрать все средства себе. И буквально через два дня с кошелька начали совершаться странные транзакции по 200 эфира — выяснилось, что контракт содержал ошибку, о которой предупреждает документация. Но свое слово разработчики не сдержали — прежде чем хакер успел воспользоваться багом в полной мере, разработчики перевели остаток баланса себе.
Для создания безопасного контракта недостаточно знать лишь язык, необходимо понимать особенности низлежащей платформы, в данном случае виртуальной машины Ethereum. Показательный пример — это взлом DAO.
Разработка смарт-контрактов отличается от создания обычных приложений, требуется иное мышление. Сейчас появляются проекты, цель которых поднять осведомленность в направлении безопасности. В частности, компания OpenZeppelin создала набор безопасных шаблонов кода, которыми можно бесплатно пользоваться для разработки своих контрактов. Без подобных инициатив мир блокчейна полностью охватил бы хаос, как это произошло с популярным языком программирования PHP в начале своего развития, когда из-за неправильных архитектурных решений и плохой документации почти каждое веб-приложение на нем содержало критические уязвимости.
Блокчейн для всех
Сегодня любой человек может создать смарт-контракт на базе «эфира» и провести краудфандинговый сбор средств с целью финансирования своего проекта (ICO, или Initial Coin Offering), выпустив собственные монеты (токены). До недавних пор реализация монет целиком возлагалась на разработчика. Но около месяца назад стандарт токена с открытым исходным кодом ERC20 был, наконец, формализован виде EIP (Ethereum Improvement Proposal). Это означает, что в скором будущем соответствие стандарту будет проверяться на уровне протокола, а это повысит безопасность токенов.
Отдельные проекты ICO привлекают гигантские суммы, и участникам этого рынка необходимо быть готовым ко всему: злоумышленники могут подменить на сайте ICO адрес кошелька для сбора средств на свой, зарегистрировать похожий адрес с целью фишинга, начать DDoS-атаку и много чего другого. Например, у одного из наших заказчиков мы смогли получить доступ к критически важной почте, так как у генерального директора был простой контрольный вопрос для восстановления доступа.
Пока Ethereum — это «дикий запад», и каждое ICO является объектом пристального внимания хакеров, поэтому залогом успеха является не только сам проект или технология, но и обеспечение всесторонней безопасности. Сейчас, чтобы выйти на ICO, обязательным требованием является внешний аудит кода контракта. Иначе никто не доверит свои деньги, каким бы хорошим не был ваш продукт или технология.