Контрольный список по безопасности умных контрактов
Контрольный список по разработке умных контрактов
Вот общий процесс, которому мы рекомендуем следовать при написании ваших умных контрактов.
Проверьте на наличие известных проблем безопасности:
- Проверьте свои контракты с помощью 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). Этот инструмент мгновенно выявляет отклонения от шести распространенных спецификаций. - Вы интегрируетесь с токенами сторонних разработчиков? Ознакомьтесь с нашим контрольным списком интеграции токенов, прежде чем полагаться на внешние контракты.
Визуально проверьте критически важные функции безопасности вашего кода:
- Изучите принтер графа наследования (opens in a new tab) от Slither. Избегайте непреднамеренного затенения (shadowing) и проблем с C3-линеаризацией.
- Изучите принтер сводки функций (opens in a new tab) от Slither. Он сообщает о видимости функций и средствах контроля доступа.
- Изучите принтер переменных и авторизации (opens in a new tab) от Slither. Он сообщает о средствах контроля доступа к переменным состояния.
Документируйте критически важные свойства безопасности и используйте автоматические генераторы тестов для их оценки:
- Научитесь документировать свойства безопасности для вашего кода. Сначала это сложно, но это самое важное действие для достижения хорошего результата. Это также является необходимым условием для использования любых продвинутых техник, описанных в этом руководстве.
- Определите свойства безопасности в 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 г.