Перейти до основного вмісту

Контрольний список безпеки смарт-контрактів

смарт-контракти
безпека
Solidity
Середній рівень
Trailofbits
7 вересня 2020 р.
2 хвилин на читання

Контрольний список розробки смарт-контрактів

Ось високорівневий процес, якого ми рекомендуємо дотримуватися під час написання смарт-контрактів.

Перевірте на наявність відомих проблем безпеки:

  • Перевірте свої контракти за допомогою Слізер (відкривається в новій вкладці). Він має понад 40 вбудованих детекторів поширених вразливостей. Запускайте його під час кожного додавання нового коду та переконайтеся, що звіт не містить помилок (або використовуйте режим сортування, щоб приховати певні проблеми).
  • Перевірте свої контракти за допомогою Crytic (відкривається в новій вкладці). Він перевіряє на наявність 50 проблем, які не виявляє Слізер. Crytic також може допомогти вашій команді бути в курсі справ, легко виявляючи проблеми безпеки в Pull Requests на GitHub.

Враховуйте особливості вашого контракту:

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

Задокументуйте критичні властивості безпеки та використовуйте автоматизовані генератори тестів для їх оцінки:

  • Навчіться документувати властивості безпеки для вашого коду. Спочатку це складно, але це найважливіша діяльність для досягнення хорошого результату. Це також є передумовою для використання будь-яких передових методів у цьому посібнику.
  • Визначте властивості безпеки в Solidity для використання з Ехідна (відкривається в новій вкладці) та Мантікора (відкривається в новій вкладці). Зосередьтеся на вашій машині станів, контролі доступу, арифметичних операціях, зовнішніх взаємодіях та відповідності стандартам.
  • Визначте властивості безпеки за допомогою Python API інструменту Слізер. Зосередьтеся на успадкуванні, залежностях змінних, контролі доступу та інших структурних проблемах.
  • Запускайте тести властивостей під час кожного коміту за допомогою Crytic (відкривається в новій вкладці). Crytic може приймати та оцінювати тести властивостей безпеки, щоб кожен у вашій команді міг легко побачити, що вони проходять на GitHub. Тести, які не пройшли, можуть блокувати коміти.

Нарешті, пам'ятайте про проблеми, які автоматизовані інструменти не можуть легко знайти:

  • Відсутність приватності: всі інші можуть бачити ваші транзакції, поки вони стоять у черзі в пулі
  • Випередження транзакцій (front-running)
  • Криптографічні операції
  • Ризиковані взаємодії із зовнішніми компонентами децентралізованих фінансів (DeFi)

Зверніться по допомогу

Робочі години Етеріуму (відкривається в новій вкладці) проходять щовівторка у другій половині дня. Ці 1-годинні сесії у форматі 1-на-1 — це можливість поставити нам будь-які запитання щодо безпеки, вирішити проблеми за допомогою наших інструментів та отримати відгук від експертів щодо вашого поточного підходу. Ми допоможемо вам опрацювати цей посібник.

Приєднуйтесь до нашого Slack: Empire Hacking (відкривається в новій вкладці). Ми завжди доступні в каналах #crytic та #ethereum, якщо у вас виникнуть запитання.