Перейти к основному содержанию

Контрольный список по безопасности умных контрактов

смарт-контракты
безопасность
Solidity
Intermediate
Trailofbits
7 сентября 2020 г.
3 минута прочтения

Контрольный список по разработке умных контрактов

Вот общий процесс, которому мы рекомендуем следовать при написании ваших умных контрактов.

Проверьте на наличие известных проблем безопасности:

  • Проверьте свои контракты с помощью Slither (opens in a new tab). Он содержит более 40 встроенных детекторов для выявления распространенных уязвимостей. Запускайте его при каждой фиксации нового кода и убедитесь, что он выдает чистый отчет (или используйте режим triage для подавления определенных проблем).
  • Проверьте свои контракты с помощью Crytic (opens in a new tab). Он проверяет на наличие 50 проблем, которые не обнаруживает Slither. Crytic также может помочь вашей команде, легко выявляя проблемы безопасности в запросах на слияние на GitHub.

Учитывайте особые характеристики вашего контракта:

  • Ваши контракты можно обновлять? Проверьте свой код обновления на наличие недостатков с помощью slither-check-upgradeability (opens in a new tab) или Crytic (opens in a new tab). Мы задокументировали 17 способов, как обновления могут пойти не по плану.
  • Предполагается ли, что ваши контракты соответствуют стандартам ERC? Проверьте их с помощью slither-check-erc (opens in a new tab). Этот инструмент мгновенно выявляет отклонения от шести распространенных спецификаций.
  • Вы интегрируетесь с токенами сторонних разработчиков? Ознакомьтесь с нашим контрольным списком интеграции токенов, прежде чем полагаться на внешние контракты.

Визуально проверьте критически важные функции безопасности вашего кода:

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

  • Научитесь документировать свойства безопасности для вашего кода. Сначала это сложно, но это самое важное действие для достижения хорошего результата. Это также является необходимым условием для использования любых продвинутых техник, описанных в этом руководстве.
  • Определите свойства безопасности в Solidity для использования с Echidna (opens in a new tab) и Manticore (opens in a new tab). Сосредоточьтесь на своем конечном автомате, средствах контроля доступа, арифметических операциях, внешних взаимодействиях и соответствии стандартам.
  • Определите свойства безопасности с помощью Python API от Slither. Сосредоточьтесь на наследовании, зависимостях переменных, средствах контроля доступа и других структурных проблемах.
  • Запускайте тесты свойств при каждом коммите с помощью Crytic (opens in a new tab). Crytic может принимать и оценивать тесты свойств безопасности, чтобы каждый член вашей команды мог легко видеть, что они проходят на GitHub. Непройденные тесты могут блокировать коммиты.

Наконец, помните о проблемах, которые автоматизированные инструменты не могут легко найти:

  • Отсутствие конфиденциальности: все остальные могут видеть ваши транзакции, пока они находятся в очереди в пуле
  • Фронтраннинг транзакций
  • Криптографические операции
  • Рискованные взаимодействия с внешними компонентами DeFi

Обратитесь за помощью

Приемные часы Ethereum (opens in a new tab) проходят каждый вторник во второй половине дня. Эти часовые индивидуальные сессии — это возможность задать нам любые вопросы о безопасности, устранить неполадки при использовании наших инструментов и получить отзывы экспертов о вашем текущем подходе. Мы поможем вам в работе с этим руководством.

Присоединяйтесь к нашему Slack: Empire Hacking (opens in a new tab). Мы всегда на связи в каналах #crytic и #ethereum, если у вас возникнут вопросы.

Последнее обновление страницы: 7 февраля 2025 г.

Было ли это руководство полезным?