Аналіз вразливостей компілятора Solidity та стратегії їх усунення
Комп'ютерний компілятор є одним з основних компонентів сучасних комп'ютерних систем, його функція полягає в перетворенні вихідного коду високорівневої мови програмування на інструкції, які може виконувати комп'ютер. У порівнянні з безпекою прикладного коду, безпека самого компілятора часто ігнорується. Проте, як комп'ютерна програма, компілятор також може мати вразливості безпеки, що може призвести до серйозних ризиків безпеки в певних випадках.
Роль компілятора Solidity полягає в перетворенні коду смарт-контракту на машинний код команди Ethereum Virtual Machine (EVM). На відміну від уразливостей самого EVM, уразливості компілятора Solidity в основному проявляються в проблемах, що виникають під час перетворення Solidity на код EVM. Це може призвести до того, що згенерований код EVM не відповідає очікуванням розробника, що в свою чергу може викликати аномалії в роботі смарт-контракту, ставлячи під загрозу безпеку активів користувачів.
Ось кілька реальних прикладів вразливостей компілятора Solidity:
SOL-2016-9 HighOrderByteCleanStorage
Вразливість існує в раніших версіях компілятора Solidity (>=0.1.6 <0.4.4). У певних випадках, змінні storage можуть бути випадково змінені, що не відповідає очікуваній поведінці. Ця невідповідність може призвести до серйозних наслідків, особливо коли змінні використовуються для перевірки прав або обліку активів.
SOL-2022-4 InlineAssemblyMemoryПобічні ефекти
Ця вразливість існує в компіляторах версій від 0.8.13 до 0.8.15. Через помилку в процесі оптимізації компіляції, це може призвести до того, що операції запису в пам'ять будуть ненавмисно видалені, що призводить до непередбачуваної поведінки програми.
Ця уразливість впливає на компілятори версій з 0.5.8 до 0.8.16. Під час виконання операції abi.encode з масивом типу calldata, можливо, неправильно очищуються деякі дані, що призводить до зміни сусідніх даних і викликає невідповідність між закодованими та декодованими даними.
Щодо вразливостей компілятора Solidity, команда безпеки блокчейну Cobo пропонує такі рекомендації:
Для розробників:
Використовуйте новішу версію компілятора Solidity
Покращити одиничні тестові випадки
Уникайте використання вбудованого асемблера, складного кодування та декодування ABI тощо.
До служби безпеки:
При аудиті враховуйте потенційні ризики безпеки, які можуть бути введені компілятором
У процесі SDL закликаємо оновити версію компілятора
Оцінка фактичного впливу вразливостей компілятора залежно від конкретних обставин
Корисні ресурси:
Офіційний блог про безпеку Solidity
Список помилок у репозиторії Solidity на GitHub
Поради з безпеки на сторінці коду контракту Etherscan
У підсумку, хоча немає потреби в надмірній паніці, розробники та фахівці з безпеки повинні повністю усвідомлювати потенційні ризики уразливостей компілятора Solidity та вжити відповідних заходів для зменшення можливих загроз безпеці.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
14 лайків
Нагородити
14
6
Поділіться
Прокоментувати
0/400
ZkProofPudding
· 17год тому
Ще один компілятор
Переглянути оригіналвідповісти на0
TheMemefather
· 17год тому
Компилятор також має вразливості? Жесть.
Переглянути оригіналвідповісти на0
HodlOrRegret
· 17год тому
Знову оновлення призвело до багів, втрачають велику кількість завжди роздрібні інвестори.
Переглянути оригіналвідповісти на0
wrekt_but_learning
· 17год тому
Цей кодовий вразливість справді неприємна, голова свербить.
Переглянути оригіналвідповісти на0
GweiTooHigh
· 17год тому
Компилятор снова выдал ошибку, это так раздражает.
Переглянути оригіналвідповісти на0
BakedCatFanboy
· 17год тому
Знову вразливість EVM. Боже, не можу з цим впоратися.
Вразливості компілятора Solidity загрожують безпеці смартконтрактів. Розробники повинні бути обережними.
Аналіз вразливостей компілятора Solidity та стратегії їх усунення
Комп'ютерний компілятор є одним з основних компонентів сучасних комп'ютерних систем, його функція полягає в перетворенні вихідного коду високорівневої мови програмування на інструкції, які може виконувати комп'ютер. У порівнянні з безпекою прикладного коду, безпека самого компілятора часто ігнорується. Проте, як комп'ютерна програма, компілятор також може мати вразливості безпеки, що може призвести до серйозних ризиків безпеки в певних випадках.
Роль компілятора Solidity полягає в перетворенні коду смарт-контракту на машинний код команди Ethereum Virtual Machine (EVM). На відміну від уразливостей самого EVM, уразливості компілятора Solidity в основному проявляються в проблемах, що виникають під час перетворення Solidity на код EVM. Це може призвести до того, що згенерований код EVM не відповідає очікуванням розробника, що в свою чергу може викликати аномалії в роботі смарт-контракту, ставлячи під загрозу безпеку активів користувачів.
Ось кілька реальних прикладів вразливостей компілятора Solidity:
Вразливість існує в раніших версіях компілятора Solidity (>=0.1.6 <0.4.4). У певних випадках, змінні storage можуть бути випадково змінені, що не відповідає очікуваній поведінці. Ця невідповідність може призвести до серйозних наслідків, особливо коли змінні використовуються для перевірки прав або обліку активів.
Ця вразливість існує в компіляторах версій від 0.8.13 до 0.8.15. Через помилку в процесі оптимізації компіляції, це може призвести до того, що операції запису в пам'ять будуть ненавмисно видалені, що призводить до непередбачуваної поведінки програми.
Ця уразливість впливає на компілятори версій з 0.5.8 до 0.8.16. Під час виконання операції abi.encode з масивом типу calldata, можливо, неправильно очищуються деякі дані, що призводить до зміни сусідніх даних і викликає невідповідність між закодованими та декодованими даними.
Щодо вразливостей компілятора Solidity, команда безпеки блокчейну Cobo пропонує такі рекомендації:
Для розробників:
До служби безпеки:
Корисні ресурси:
У підсумку, хоча немає потреби в надмірній паніці, розробники та фахівці з безпеки повинні повністю усвідомлювати потенційні ризики уразливостей компілятора Solidity та вжити відповідних заходів для зменшення можливих загроз безпеці.