Мышление о безопасности смарт-контрактов

блог 1НовостиДля разработчиковПредприятиеБлокчейн РазъяснениеМероприятия и конференцииПрессаИнформационные бюллетени

Подписывайтесь на нашу новостную рассылку.

Адрес электронной почты

Мы уважаем вашу конфиденциальность

ГлавнаяБлогРазработка блокчейна

Мышление о безопасности смарт-контрактов

5 принципов безопасности, которые должен знать каждый разработчик Ethereum, а также фундаментальные компромиссы. by ConsenSys17 июня, 2020Опубликовано 17 июня, 2020

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

Автор ConsenSys Diligence, наша команда экспертов по безопасности блокчейнов.

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

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

Подготовьтесь к неудаче

В любом нетривиальном контракте будут ошибки. Следовательно, ваш код должен уметь корректно реагировать на ошибки и уязвимости..

  • Приостановить контракт, если что-то пойдет не так («автоматический выключатель»).
  • Управляйте суммой денег, подверженной риску (ограничение скорости, максимальное использование).
  • Иметь эффективный способ обновления для исправления ошибок и улучшений.

Развертывайте осторожно

Всегда лучше вылавливать ошибки до полной версии продукта..

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

Держите контракты простыми

Сложность увеличивает вероятность ошибок.


  • Убедитесь, что логика контракта проста.
  • Модулируйте код, чтобы контракты и функции были небольшими.
  • По возможности используйте уже написанные инструменты или код (например, не используйте собственный генератор случайных чисел).
  • По возможности предпочитайте ясность производительности.
  • Используйте блокчейн только для тех частей вашей системы, которые требуют децентрализации..

Будьте в курсе

Следите за новыми разработками в области безопасности.

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

Помните об особенностях EVM

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

  • Будьте предельно осторожны с вызовами внешних контрактов, которые могут выполнить вредоносный код и изменить поток управления..
  • Помните, что ваши общедоступные функции являются общедоступными и могут быть вызваны злонамеренно и в любом порядке. Личные данные в смарт-контрактах также доступны для просмотра всем..
  • Помните о затратах на газ и блокировке лимита газа.
  • Имейте в виду, что временные метки в блокчейне неточные: майнеры могут влиять на время выполнения транзакции в пределах нескольких секунд..
  • Случайность нетривиальна в блокчейне, большинство подходов к генерации случайных чисел можно использовать в блокчейне..

Фундаментальные компромиссы

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

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

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

  • Жесткий или обновляемый
  • Монолитный против модульного
  • Дублирование против повторного использования
Жесткий или обновляемый

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

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

Монолитный против модульного

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

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

Дублирование против повторного использования

Система смарт-контрактов с точки зрения разработки программного обеспечения стремится к максимальному повторному использованию там, где это целесообразно. Есть много способов повторно использовать код контракта в Solidity. Использование проверенных ранее развернутых контрактов, которыми вы владеете, как правило, является самым безопасным способом повторного использования кода..

На дублирование часто полагаются в случаях, когда собственные ранее развернутые контракты недоступны. Такие усилия, как Библиотека Solidity OpenZeppelin стремятся предоставить шаблоны, позволяющие повторно использовать безопасный код без дублирования. Любой анализ безопасности контракта должен включать любой повторно используемый код, для которого ранее не был установлен уровень доверия, соизмеримый с рисками средств в целевой системе смарт-контрактов..

Создание и запуск приложений на Ethereum, возможно, является сегодня наиболее интересным рубежом для инженеров-программистов, но для этого требуется постоянное моделирование угроз, аудит безопасности и планирование реагирования на инциденты..

Команда Diligence поможет вам сохранять бдительность и укрепить уверенность в своих развертываниях..

Закажите выборочную проверку безопасности блокчейна

Наши однодневные обзоры помогут вам с самого начала встроить безопасность в код блокчейна, чтобы вы могли сэкономить время и деньги в долгосрочной перспективе. Забронируйте сегодня SecuritySmart ContractsНовостная рассылкаПодпишитесь на нашу новостную рассылку, чтобы получать последние новости Ethereum, корпоративные решения, ресурсы для разработчиков и многое другое.Адрес электронной почтыЭксклюзивный контентКак создать успешный блокчейн-продуктВебинар

Как создать успешный блокчейн-продукт

Как настроить и запустить узел EthereumВебинар

Как настроить и запустить узел Ethereum

Как создать собственный API EthereumВебинар

Как создать собственный API Ethereum

Как создать социальный токенВебинар

Как создать социальный токен

Использование инструментов безопасности при разработке смарт-контрактовВебинар

Использование инструментов безопасности при разработке смарт-контрактов

Будущее финансовых цифровых активов и DeFiВебинар

Будущее финансов: цифровые активы и DeFi

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
Adblock
detector
map