Смарт-контракти — це адаптивні інструменти, які можуть відстежувати переміщення фізичних речей та інтелектуальної власності, а також полегшувати та перевіряти фінансові транзакції. Оскільки смарт-контракти мають повноваження розподіляти цінні ресурси між складними системами і здебільшого є автономними, безпека та узгодженість мають вирішальне значення.
Тому розуміння ймовірності та критичності можливих недоліків контракту або виявлених помилок має важливе значення для безпеки смарт-контрактів. Аудит безпеки смарт-контрактів поглиблено вивчає смарт-контракти проекту і необхідний для захисту інвестованих через них коштів.
Якщо кошти будуть викрадені, їх неможливо повернути, оскільки всі транзакції в блокчейні є незворотними.
Тому метод аудиту смарт-контрактів фокусується на вивченні коду, який лежить в основі умов смарт-контракту, щоб за допомогою такого аудиту розробники могли швидко виявити вразливості та недоліки перед розгортанням смарт-контрактів.
У цій статті ми обговоримо ключові вразливості смарт-контрактів і відповімо на різні питання про те, як проводиться аудит смарт-контрактів, чому він важливий і як стати аудитором смарт-контрактів.
Чому важливий аудит безпеки смарт-контрактів?
На сьогоднішній день однією з найактуальніших проблем розгортання смарт-контрактів є безпека. Занепокоєння з приводу неефективності, безпеки та неналежної поведінки існують тому, що ігнорування їх при використанні мережі блокчейн для створення смарт-контрактів може призвести до надзвичайно високих додаткових витрат.
Крім того, незначні недоліки кодування можуть призвести до крадіжки великих сум грошей. Наприклад, злом DAO у блокчейні Ethereum призвів до викрадення близько 60 мільйонів доларів США в ефірі (ETH) і спричинив хардфорк мережі Ethereum.
Як наслідок, бізнес занепокоєний щодо їх розгортання через незворотній характер смарт-контрактів. Крім того, через недоліки безпеки смарт-контрактів ви ризикуєте втратити весь контракт і пов’язані з ним активи. Тому аудит смарт-контрактів став критично важливою вимогою в останні роки з наступних причин:
- Уникнути дорогих помилок: Аудит вашого коду на ранній стадії життєвого циклу розробки може допомогти вам уникнути потенційно фатальних помилок після запуску.
- Експертна оцінка: Щоб виключити помилкові результати, досвідчені аудитори безпеки вручну повторно перевіряють ваш код.
- Запобігайте атакам на безпеку: Коли ви пишете та змінюєте код, відстежуючи будь-які недоліки безпеки, ви можете запобігти атакам.
- Підвищена безпека: Аудит безпеки смарт-контрактів гарантує власникам децентралізованих продуктів безпеку їхнього коду.
- Безперервна оцінка безпеки: Процес аудиту смарт-контрактів дозволяє проводити постійну оцінку безпеки, пропонуючи поліпшити ваше середовище розробки.
- Аналітичні звіти: Отримайте резюме, детальну інформацію про вразливості та поради щодо їх усунення у звіті про вразливості.
Як провести аудит смарт-контракту?
Послуга аудиту смарт-контрактів передбачає перевірку на наявність відомих вразливостей, які застосовуються до конкретної бізнес-логіки кожного смарт-контракту. Він також оцінює відповідність стилю коду Solidity Code Style Guide і перевіряє, чи немає в смарт-контракті логічних проблем і проблем з контролем доступу. Стандарти аудиту безпеки смарт-контрактів варіюються від проекту до проекту. Аудит смарт-контрактів можна проводити за допомогою ручного або автоматизованого підходу, як описано нижче.
Ручний аудит
Ручний аудит передбачає, що група експертів/аудиторів перевіряє кожен рядок коду на наявність проблем з компіляцією і повторним введенням. Це також може допомогти у виявленні інших вразливостей безпеки, які часто залишаються поза увагою, наприклад, погане шифрування.
Ручний аналіз коду може мати дві форми:
Оскільки він виявляє приховані дефекти, такі як труднощі проектування, а не тільки помилки в коді, цей метод вважається найбільш точним і повним.
Автоматизований аудит
Автоматизований підхід до аудиту смарт-контрактів, навпаки, використовує програмне забезпечення для виявлення помилок, яке допомагає аудиторам смарт-контрактів знайти точне місце, відповідальне за помилки. Проекти, які потребують швидкого виходу на ринок, часто віддають перевагу автоматизованому підходу, оскільки він допомагає знайти вразливості набагато швидше. Однак автоматизоване програмне забезпечення не завжди розуміє контекст і може пропустити вразливості під час перевірки коду.
Класифікація помилок коду
Кожна вада вихідного коду класифікується відповідно до її серйозності, враховуючи потенційний вплив експлоіту:
Складність експлуатації
Ще однією ключовою характеристикою кожного виявленого дефекту є складність, з якою він може бути використаний:
Процес аудиту смарт-контрактів
Аудит смарт-контрактів відбувається за дуже стандартною процедурою, яка може суттєво відрізнятися у різних аудиторів смарт-контрактів. Нижче наведена типова процедура:
Збір моделей дизайну коду
Щоб забезпечити гарантовану інтеграцію сторонніх смарт-контрактів, аудитори збирають специфікації коду і вивчають архітектуру. Це допомагає аудиторам зрозуміти цілі проекту та визначити його обсяг.
Запуск модульних тестів
Потім аудитори запускають тестові кейси, щоб перевірити кожну функцію смарт-контракту. Фахівці з аудиту використовують інструменти (як ручні, так і автоматизовані), щоб гарантувати, що модульні тестові кейси включають весь код смарт-контракту.
Вибір підходу до аудиту
Оскільки ручний аудит є більш ефективним, ніж автоматизований, аудитори часто перевіряють смарт-контракти без допомоги програмного забезпечення. Завдяки такому підходу можна ефективно виявляти атаки на кшталт фронт-раннінгу.
Складання початкового звіту
Посібник для початківців про різні типи мереж блокчейн
Блокчейн — це розподілений, незмінний реєстр, який робить запис транзакцій та управління активами (як матеріальними, так і нематеріальними) в…
Algorand (ALGO): Посібник для початківців з децентралізованої технології блокчейн
Algorand — це автономна, децентралізована блокчейн-мережа. Вона пропонує широкий спектр безпечних, ефективних і масштабованих додатків. Вона була…
Що таке альткоїн? Посібник для початківців про криптовалюти за межами біткоїна
Альткоїн — це поєднання слів alt , що означає альтернативний , і coin , що означає криптовалюта , тобто всі монети, які не є біткоїнами (BTC), є…
Як майнити Ethereum: Посібник для початківців з майнінгу ETH
Майнінг криптовалют — це процес розв’язання складних математичних задач. Майнери, по суті, є наріжним каменем багатьох криптовалютних мереж, оскільки…
Що таке біткоїн-гаманець? Посібник для початківців щодо зберігання BTC
Зараз купувати, продавати та обмінювати біткоїн (BTC) стало простіше, ніж будь-коли. Після того, як ви придбали BTC, наступний крок — забезпечити його…
Після завершення аудиту аудитори складають проект виявлених недоліків коду і надають зворотній зв’язок команді проекту для виправлення цих помилок. Деякі постачальники послуг смарт-контрактів мають команду експертів, які допомагають виправити кожну знайдену помилку.
Публікація фінального звіту про аудит
Після того, як помилки виправлені, аудитори публікують фінальний звіт, враховуючи будь-які дії, зроблені командою проекту або зовнішніми експертами для вирішення порушених питань.
Основні вразливості смарт-контрактів
У цьому розділі пояснюються поширені вразливості безпеки, знайдені в смарт-контрактах:
Залежність від мітки часу
На відміну від звичайних програм, середовище виконання смарт-контракту знаходиться на стороні майнера. Коли логіка контракту залежить від поточного часу, майнер може маніпулювати поточним часом, щоб вплинути на результат виконання і досягти заздалегідь визначеної мети.
Помилки видимості функцій
Властивість видимості функції в Solidity за замовчуванням є загальнодоступною. Це означає, що будь-хто може отримати доступ до неї, якщо розробник забув визначити приватну видимість функції. Наприклад, будь-хто може викликати функцію Destruct, щоб негайно знищити контракт.
Атаки на повторний вхід
Однією з найбільш руйнівних атак в смарт-контракті Solidity є атака на повторний вхід. Недбале ставлення розробника може потенційно призвести до проблем з повторним входом. Коли функція здійснює зовнішній виклик іншого ненадійного контракту, це називається атакою на вхід. Тоді, в спробі викачати кошти, ненадійна угода робить рекурсивний виклик назад до початкової функції.
Вразливість випадкових чисел
Зловмисник може точно вгадати випадкове число, згенероване контрактом, який використовує публічно відому змінну в якості початкової.
Неможливість розрізнити людей та контракти
Неможливість визначити, хто викликає смарт-контракт — людина чи контракт, може мати непередбачувані наслідки. Наприклад, правильно вгадавши блок у популярній грі Fomo3d, хакер може заробити гроші за допомогою функції airdrop (тобто, точно передбачивши часову мітку контракту).
Орфографічні помилки
Для ініціалізації контракту та визначення його власника зазвичай використовуються конструктори. Компілятор не помітить неправильного написання функції під час програмування, в результаті чого функція стає загальнодоступною, і будь-хто може її викликати.
У Solidity функція використовується для встановлення змінних стану контракту. Коли контракт вперше створюється, функція викликається, і її можна використовувати для встановлення початкових значень. Існує два типи конструкторів: публічні та внутрішні. Крім того, код Solidity компілюється за допомогою компілятора Solidity, який створює байт-код та інші артефакти, необхідні для розгортання смарт-контракту.
Розглянемо випадок, коли функція контракту HelloWorld неправильно написана як Helloworld; будь-який користувач може виконати функцію Helloworld, щоб змінити власника контракту.
Скільки коштує аудит смарт-контракту?
Провайдери аудиту смарт-контрактів в середньому беруть від $5,000 до $15,000, залежно від складності коду, хоча в окремих випадках ціна може бути значно вищою. В результаті аудиторська фірма складає звіт, в якому детально описує потенційні недоліки коду і дає додаткові рекомендації щодо підвищення його безпеки.
Фахівці також вивчають динаміку контрактів, щоб зрозуміти, наскільки вони відповідають сучасним тенденціям у сфері безпеки. Але чому аудит смарт-контрактів такий дорогий? Аудитор смарт-контрактів перевіряє код рядок за рядком, що є трудомістким і складним завданням, тому послуги аудиту смарт-контрактів коштують дуже дорого.
Незважаючи на свою вартість, процес аудиту смарт-контрактів необхідний для виправлення недоліків коду, які можуть призвести до набагато більших витрат і вразливостей в системі безпеки, як було сказано в попередньому розділі. Отже, скільки часу займає аудит смарт-контрактів? Залежно від проекту, розміру смарт-контракту та терміновості, процес аудиту смарт-контракту (перший аудит) може зайняти від двох до 14 днів.
Аудит може тривати до місяця для великих проектів або протоколів. Після завершення первинного аудиту клієнт отримує рекомендації щодо виправлення помилок, а тривалість часу, необхідного для виправлення помилок, визначається клієнтом. Після цього проводиться перевірка виправлення, яка зазвичай займає один день.
Як стати аудитором смарт-контрактів?
Аудит смарт-контрактів вимагає знань програмування, оскільки передбачає перевірку коду рядок за рядком. Якщо у вас немає попередніх навичок програмування, знайте, що знадобляться роки, щоб ваша критика коду стала значущою.
Ви повинні розуміти основи блокчейну Ethereum і Solidity (мова програмування, яка використовується для написання смарт-контрактів Ethereum). Читання документації по Ethereum і проходження курсів з основ технології блокчейн — хороші місця для початку. Ще один оптимальний спосіб вивчити будь-який блокчейн або мову програмування — це використовувати його на практиці.
Важливо відзначити, що блокчейни використовують різні мови програмування. Щоб ознайомитися з ними, будь ласка, прочитайте наш посібник: Посібник для початківців про популярні блокчейни, що використовуються в розробці NFT.
Наявність фінансової освіти є додатковою перевагою при проведенні аудиту проектів децентралізованого фінансування (DeFi). Більшість проектів DeFi використовують стандартні фінансові терміни, тому для ефективного аудиту смарт-контрактів аудитор повинен розуміти основні фінансові терміни, такі як крипто-деривативи.
Аудиторські фірми, що займаються аудитом смарт-контрактів
Тепер, коли ми усвідомили важливість процесу аудиту смарт-контрактів, давайте розглянемо деякі організації, що займаються аудитом смарт-контрактів, які забезпечують безпеку крипто-екосистеми.
Аудит безпеки смарт-контрактів був започаткований CertiK (організація, що займається питаннями безпеки в Інтернеті та блокчейні). BNB Smart Chain, Bancor і Huobi пройшли аудит від CertiK. Крім того, перед тим, як інвестувати в будь-який проект, акселераційний фонд Binance проводить аудит смарт-контрактів CertiK.
Chainsulting — відома аудиторська компанія, яка була заснована в 2017 році. 1inch, MakerDAO та інші відомі DeFi-протоколи є одними з її найбільших клієнтів. Крім того, OpenZeppelin надає аудиторські послуги Coinbase та Ethereum Foundation, двом найвідомішим компаніям у світі блокчейну. Крім того, платформа забезпечує створення безпечних смарт-контрактів Ethereum за допомогою своїх модульних шаблонів контрактів.