27 июля, 2018, BIS Journal №3(30)/2018

Безопасность блокчейна


Рахимов Марат

ведущий инженер (ООО «Газинформсервис»)

Уязвимости технологии и инструменты аудитора смарт-контрактов

ICO – НОВАЯ ЦЕЛЬ ХАКЕРОВ

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

Под блокчейном подразумевают распределенную peer-to-peer сеть для обмена транзакциями. О конечном состоянии сети в каждый момент времени её участники приходят с помощью специальных протоколов к консенсусу. Копия данных сети в виде неразрывной цепочки блоков с информацией о проведенных к настоящему моменту транзакциях хранится у каждого участника. Таким образом достигается высокая степень отказоустойчивости системы и неизменности хранящихся в ней данных.

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

С появлением в 2014 году платформы Ethereum технология блокчейн стала ассоциироваться не только с криптовалютами. С помощью смарт-контрактов, появившихся в платформе Ethereum, стало возможным реализовывать на блокчейне бизнес-логику, необходимую для проведения ICO (Initial coin offering) – проектов по привлечению инвестиций.

Рост экосистемы Ethereum за 2016 и 2017 годы был действительно впечатляющим. Как видно из диаграммы (Рис. 1), в ICO-проекты вкладываются большие суммы денег.

Рисунок 1. Вложения в Ethereum в 2015-2017 гг.

Фокус хакеров сместился с банковских систем на ICO-проекты, и за последние несколько лет было совершенно множество атак на ICO. Незрелость технологии и возможность относительно легко получить доступ к средствам, собираемым в ходе ICO проектов, привлекли внимание большого числа злоумышленников.

Ключевыми элементами любого ICO являются:

- команда;
- ИТ-инфраструктура: сайт и децентрализованное приложение (decentralized application или DApp);
- коммуникации (социальные сети, white paper, рекламные каналы).

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

- фишинг;
- дефейс сайта;
- хищение паролей;
- xss;
- взлом инфраструктуры, связанной с ICO проектом.

УЯЗВИМОСТИ ПЛАТФОРМЫ ETHEREUM

Но наиболее нашумевшие инциденты использовали уязвимости новой технологии.

Первой крупной атакой на блокчейн-проект стал взлом The DAO (decentralized autonomous organization) – проекта по децентрализованному управлению инвестициями. В июне 2016 года хакер, использовав уязвимость в смарт-контракте The DAO, смог вывести из проекта инвестиционные средства в виде криптовалюты Ethereum на сумму более чем 3,6 млн эфиров, что на тот момент было эквивалентно 60 млн долларов.

В 2017 году с интервалом в несколько месяцев произошли два резонансных инцидента с криптовалютным кошельком Parity. В июле 2017 года уязвимость в смарт-контракте кошелька Parity привела к убыткам в 30 млн долларов, а в ноябре 2017 года в результате эксплуатации уже другой уязвимости были заблокированы средства пользователей в размере 300 млн долларов.

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

Исходя из архитектуры блокчейна уязвимости могут возникнуть на одном из трёх уровней:

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

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

- Уровень языка Solidity, который используется для программирования смарт-контрактов. Уязвимости в коде Solidity представляют самый широкий класс уязвимостей. Самым распространённым примером уязвимости в смарт-контрактах является уязвимость re-entrancy (именно ее использовали при взломе The DAO).

ИНСТРУМЕНТЫ АУДИТОРА СМАРТ-КОНТРАКТОВ

Для поиска уязвимостей в смарт-контрактах Ethereum применяются различные инструменты.

«Mythril»

Одним из широко используемых является инструмент «Mythril» от компании ConsenSys. Это анализатор безопасности, который работает с так называемым байт-кодом, который программа предварительно компилирует из исходного кода. На вход принимается байт-код, который затем анализируется с использованием связки статического анализа, символического анализа и проверки control flow.

В «Mythril» реализована собственная EVM на Python. Внутреннее устройство этой виртуальной машины состоит из глобального состояния, содержащего в себе еще три - Machine State, Environment и World State. Каждое из состояний обозначается буквами, используя которые можно создавать формулы для проверки с помощью инструментов автоматического доказательства теорем. (Рис. 2).

Рисунок 2. Модель состояний «Mythril»

«Mythril» на основе байт-кода строит control-граф выполнения программы.  Все условия в смарт-контракте представляются в виде байт-кода и в виде ограничений путей. Стоит отметить, что такое представление позволяет использовать Z3 solver. Он позволяет визуально представить все возможные состояния контракта для дальнейшего решения прикладных задач.

«Oyente»

Второй инструмент - «Oyente» - начал активно развиваться после взлома The DAO. Это анализатор кода, который также основан на символьном выполнении. Есть его онлайн-версия, которая работает в связке с Remix - самой распространённой IDE для написания смарт-контрактов. 

«Oyente» состоит из нескольких модулей и содержит в том числе builder для построения потока выполнения программы и анализатор путей выполнения программы. Также анализатор дает визуальные отображения и валидирует найденные уязвимости, доказывая, что они действительно «true», а не «false positive». «Oyente», так же как и «Mythril», использует Z3 solver. (Рис. 3).

Рисунок 3. Архитектура «Oyente»

Анализатор автоматически проверяет, нарушаются ли утверждения (assert), а также поддерживает работу с циклами. Кроме того, инструмент позволяет настраивать состояние блокчейн-окружения для анализа внешних контрактов. «Oyente» генерирует тесты для проверки условий пути, которые можно использовать в других фреймворках, например, Truffle. Анализатор для оптимизации и ускорения работы может упрощать символьные переменные. Из плюсов стоит отметить возможность работы с большинством контрактов, однако требует большого числа вычислительных ресурсов

«Manticore»

Изначально создавался как анализатор для Linux, затем к нему добавился анализатор EVM-машины. Он выявляет все функции в смарт-контракте, генерирует наборы транзакций, соответствующих различным путям выполнения смарт-контракта и проверяет наличие ошибок в соответствующих путях.

РЕКОМЕНДАЦИИ

В заключение – несколько рекомендаций по безопасной разработке смарт-контрактов:

При разработке смарт-контрактов необходимо пользоваться уже проверенными библиотеками, кодом и накопленным сообществом Ethereum опытом. Многие типовые задачи уже безопасно реализованы профессиональными разработчиками и компаниями лидерами в области безопасности смарт-контрактов (Zeppelen, ConsenSys).
Обязательно необходимо проводить аудиты блокчейн-проектов силами сторонних аудиторов и реализовывать программу bug-bounty, тем самым мотивировать white-хакеров искать уязвимости в вашем проекте.
Также для безопасной разработки необходимо глубоко погружаться в язык Solidity и платформу Ethereum.

 

Смотрите также

На смену SSO

21 мая, 2018

БанКИИ

11 мая, 2018
Подпишись на новости!
Подписаться