Аналіз вразливостей компілятора Solidity: потенційні ризики, які не слід ігнорувати розробникам

robot
Генерація анотацій у процесі

Аналіз вразливостей компілятора Solidity та стратегії реагування

Компилятор є важливою складовою сучасних комп'ютерних систем, його роль полягає в перетворенні вихідного коду програмного забезпечення високого рівня на інструкційний код, що може виконуватись комп'ютером. У порівнянні з кодом додатків, безпека самого компілятора часто може бути проігнорована. Проте, вразливості компілятора в деяких випадках можуть призвести до серйозних ризиків для безпеки.

Основна функція компілятора Solidity полягає в перетворенні коду смарт-контракту в команди Ethereum Virtual Machine (EVM). На відміну від вразливостей самого EVM, вразливості компілятора Solidity в основному впливають на розробників смарт-контрактів і не загрожують безпеці мережі Ethereum безпосередньо.

Вразливості компілятора можуть призвести до того, що згенерований EVM код не відповідатиме очікуванням розробника. Оскільки смарт-контракти зазвичай пов'язані з криптовалютними активами, будь-які помилки, викликані компілятором, можуть призвести до втрати активів користувачів. Лише через аудит вихідного коду контракту важко виявити такі проблеми, необхідно поєднувати аналіз з конкретними версіями компілятора та кодовими патернами.

Аналіз вразливостей компілятора Solidity та заходи реагування

Приклад вразливостей компілятора Solidity

SOL-2016-9 HighOrderByteCleanStorage

Ця вразливість існує в ранніх версіях компілятора Solidity (>=0.1.6 <0.4.4). У деяких випадках змінні storage можуть бути ненавмисно змінені, що призводить до невідповідності між значеннями, які повертаються з функцій, та очікуваними. Ця невідповідність може мати серйозні наслідки, коли йдеться про перевірку доступу або облік активів.

Причиною виникнення вразливості є те, що компілятор не очистив правильно старші біти даних при обробці типів даних менше 32 байтів, що призвело до неправильного запису старших бітів у сусідні змінні під час переповнення цілого числа.

SOL-2022-4 InlineAssemblyMemoryПобічні ефекти

Ця вразливість впливає на компілятори версій >=0.8.13 <0.8.15. Проблема виникає через неправильну обробку пам'яті під час оптимізації компілятора. У деяких випадках компілятор неправильно видаляє, здавалося б, зайві інструкції запису пам'яті, що призводить до ненормальних значень, які повертаються функцією.

SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup

Цей вразливість існує в компіляторах версій >= 0.5.8 < 0.8.16. Під час виконання операції abi.encode над масивом типу calldata компілятор помилково очищав певні дані, що призводило до зміни сусідніх даних і в результаті до несумісності між закодованими та декодованими даними.

Слід зазначити, що під час зовнішнього виклику та випуску події відбувається неявне виконання abi.encode, тому вплив цього вразливості може бути ширшим, ніж очікувалося.

Аналіз вразливостей компілятора Solidity та заходи реагування

Рекомендації щодо безпеки

Щодо вразливості компілятора Solidity, команда з безпеки блокчейну Cobo пропонує такі рекомендації:

Для розробників:

  • Використовуйте новішу версію компілятора Solidity
  • Покращити юніт-тести, підвищити покриття коду
  • Уникайте використання вбудованого асемблера, складних операцій кодування та декодування ABI тощо, обережно використовуйте нові функції та експериментальні можливості.

Для служби безпеки:

  • Під час аудиту звертайте увагу на можливі ризики безпеки, які можуть бути введені компілятором
  • Сприяти оновленню версії компілятора в процесі розробки, розглянути можливість впровадження автоматичної перевірки версії в CI/CD.
  • Оцінка фактичного впливу вразливості компілятора залежно від конкретного проєкту

Корисні ресурси:

  • Офіційний блог про безпеку Solidity
  • Список помилок у репозиторії Solidity на GitHub
  • Список помилок компіляторів різних версій
  • Повідомлення про вразливість компілятора на сторінці коду контракту Etherscan

Аналіз вразливостей компілятора Solidity та заходи реагування

Отже, розробники та фахівці з безпеки повинні звернути увагу на ризики, які можуть виникнути внаслідок вразливостей компілятора Solidity, та вжити відповідних заходів для зменшення загроз безпеці. Також слід об'єктивно оцінити конкретний вплив, щоб уникнути надмірної паніки.

SOL-2.34%
ETH-2.31%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 4
  • Поділіться
Прокоментувати
0/400
AirdropChaservip
· 08-02 03:03
Ще одна причина для обману невдаха з'явилася
Переглянути оригіналвідповісти на0
BearMarketBuildervip
· 08-02 02:55
Ай, цілий день розробляю, тільки боюся цієї штуки.
Переглянути оригіналвідповісти на0
TeaTimeTradervip
· 08-02 02:53
Чи нормально, що література про компілятори перекладається на інші мови?
Переглянути оригіналвідповісти на0
0xOverleveragedvip
· 08-02 02:42
Трава, компілятори ненадійні, навіщо грати в контракти?
Переглянути оригіналвідповісти на0
  • Закріпити