Аналіз вразливостей компілятора Solidity та заходи протидії
Компилятор є одним з основних компонентів сучасних комп'ютерних систем, його функція полягає в перетворенні вихідного коду мов програмування високого рівня в інструкційний код, зрозумілий комп'ютеру. Хоча розробники та фахівці з безпеки зазвичай зосереджують увагу на безпеці коду програмних додатків, сам компілятор, як комп'ютерна програма, також може містити вразливості безпеки, що в деяких випадках може призвести до серйозних ризиків безпеки.
Роль компілятора Solidity полягає в перетворенні коду смарт-контракту на інструкційний код Ethereum Virtual Machine (EVM). На відміну від вразливостей EVM, вразливості компілятора Solidity в основному проявляються у проблемах, які можуть виникнути під час перетворення Solidity на код EVM, що безпосередньо не вплине на саму мережу Ethereum, але може призвести до того, що згенерований код EVM не буде відповідати очікуванням розробника.
Ось кілька реальних прикладів вразливостей компілятора Solidity:
SOL-2016-9 HighOrderByteCleanStorage:
Ця уразливість існує в ранніх версіях компілятора Solidity (>=0.1.6 <0.4.4). Через те, що компілятор неправильно очищує старші біти при обробці переповнення цілих чисел, це може призвести до випадкової модифікації сусідніх змінних.
SOL-2022-4 InlineAssemblyMemoryПобічні ефекти:
Ця уразливість існує в компіляторах версій від 0.8.13 до 0.8.15. Через оптимізацію компілятора, яка аналізує окремі блоки assembly, можуть помилково бути видалені на вигляд надмірні, але насправді корисні інструкції запису в пам'ять.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup:
Ця уразливість впливає на компілятори версій з 0.5.8 по 0.8.16. Під час виконання операції abi.encode з масивами типу calldata неправильно очищались деякі дані, що призводило до зміни сусідніх даних.
Щодо вразливостей компілятора Solidity, команда з безпеки блокчейну Cobo пропонує такі рекомендації:
Для розробників:
Використовуйте новішу версію компілятора Solidity
Покращити юніт-тестування
Уникайте використання вбудованих асемблерів, складних операцій кодування та декодування ABI тощо.
Для безпеки персоналу:
Під час аудиту слід враховувати можливі ризики безпеки, які можуть бути внесені компілятором
У процесі розробки закликати оновити версію компілятора
Оцінити фактичний вплив вразливостей компілятора залежно від конкретної ситуації
Декілька корисних ресурсів:
Офіційне попередження про безпеку Solidity
Список помилок у репозиторії Solidity на GitHub
Список помилок компілятора для всіх версій
Попередження про безпеку на сторінці коду контракту Etherscan
Отже, розробники та фахівці з безпеки повинні звернути увагу на потенційні ризики безпеки, пов'язані з вразливостями компілятора Solidity, і зменшити відповідні ризики шляхом оновлення компілятора, вдосконалення тестування та інших заходів.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
24 лайків
Нагородити
24
6
Поділіться
Прокоментувати
0/400
StakeWhisperer
· 07-21 09:21
Рано підписатися на баги компілятора? Цей Новачок смішний.
Переглянути оригіналвідповісти на0
OnchainGossiper
· 07-21 06:50
Тільки що виправив уразливість, як з’явилася нова... розводжу руками
Переглянути оригіналвідповісти на0
blockBoy
· 07-20 10:39
Це справді велика проблема... Хто може її насправді вирішити?
Переглянути оригіналвідповісти на0
BearMarketSage
· 07-20 10:39
Розробляє, але не може самостійно протестувати контракт?
Аналіз вразливостей компілятора Solidity та стратегій їхнього подолання
Аналіз вразливостей компілятора Solidity та заходи протидії
Компилятор є одним з основних компонентів сучасних комп'ютерних систем, його функція полягає в перетворенні вихідного коду мов програмування високого рівня в інструкційний код, зрозумілий комп'ютеру. Хоча розробники та фахівці з безпеки зазвичай зосереджують увагу на безпеці коду програмних додатків, сам компілятор, як комп'ютерна програма, також може містити вразливості безпеки, що в деяких випадках може призвести до серйозних ризиків безпеки.
Роль компілятора Solidity полягає в перетворенні коду смарт-контракту на інструкційний код Ethereum Virtual Machine (EVM). На відміну від вразливостей EVM, вразливості компілятора Solidity в основному проявляються у проблемах, які можуть виникнути під час перетворення Solidity на код EVM, що безпосередньо не вплине на саму мережу Ethereum, але може призвести до того, що згенерований код EVM не буде відповідати очікуванням розробника.
Ось кілька реальних прикладів вразливостей компілятора Solidity:
SOL-2016-9 HighOrderByteCleanStorage: Ця уразливість існує в ранніх версіях компілятора Solidity (>=0.1.6 <0.4.4). Через те, що компілятор неправильно очищує старші біти при обробці переповнення цілих чисел, це може призвести до випадкової модифікації сусідніх змінних.
SOL-2022-4 InlineAssemblyMemoryПобічні ефекти: Ця уразливість існує в компіляторах версій від 0.8.13 до 0.8.15. Через оптимізацію компілятора, яка аналізує окремі блоки assembly, можуть помилково бути видалені на вигляд надмірні, але насправді корисні інструкції запису в пам'ять.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup: Ця уразливість впливає на компілятори версій з 0.5.8 по 0.8.16. Під час виконання операції abi.encode з масивами типу calldata неправильно очищались деякі дані, що призводило до зміни сусідніх даних.
Щодо вразливостей компілятора Solidity, команда з безпеки блокчейну Cobo пропонує такі рекомендації:
Для розробників:
Для безпеки персоналу:
Декілька корисних ресурсів:
Отже, розробники та фахівці з безпеки повинні звернути увагу на потенційні ризики безпеки, пов'язані з вразливостями компілятора Solidity, і зменшити відповідні ризики шляхом оновлення компілятора, вдосконалення тестування та інших заходів.