Аналіз вразливостей компілятора Solidity та стратегії реагування
Компилятор, як одна з основних складових сучасних комп'ютерних систем, виконує функцію перетворення вихідного коду мов програмування високого рівня в інструкційний код, що може виконуватись на нижчому рівні комп'ютера. Хоча розробники та фахівці з безпеки зазвичай більше зосереджуються на безпеці коду програм, безпека самого компілятора також не повинна бути проігнорована. Уразливості компілятора в деяких випадках можуть призвести до серйозних ризиків для безпеки.
Роль компілятора Solidity полягає в перетворенні коду смарт-контракту на машинний код інструкцій Ethereum Virtual Machine (EVM). На відміну від вразливостей самої EVM, вразливості компілятора Solidity здебільшого виникають під час процесу перетворення Solidity в код EVM. Ці вразливості не впливають безпосередньо на мережу Ethereum, але можуть призвести до того, що згенерований код EVM не відповідатиме очікуванням розробника, що, в свою чергу, може спричинити проблеми з безпекою смарт-контракту.
Вразливість HighOrderByteCleanStorage ( впливає на версії: >=0.1.6 <0.4.4)
Ця уразливість може призвести до того, що змінна storage поверне неочікуване значення без зміни.
Вразливість InlineAssemblyMemorySideEffects ( впливає на версії: >=0.8.13 <0.8.15)
Через проблеми з оптимізацією компілятора, можливі помилки в оптимізації змін пам'яті в інлайн-асемблері.
Уразливість AbiReencodingHeadOverflowWithStaticArrayCleanup ( впливає на версії: >= 0.5.8 < 0.8.16)
При виконанні операції abi.encode з масивом типу calldata може помилково змінитися сусідні дані, що призведе до несумісності закодованих і декодованих даних.
Щоб впоратися з ризиками, пов'язаними з вразливістю компілятора Solidity, розробники та спеціалісти з безпеки можуть вжити такі заходи:
Уникайте використання вбудованої асемблерної мови, складного кодування та декодування ABI тощо, обережно використовуйте нові функції
Рекомендації від безпеки:
У безпеці аудиту враховуйте ризики, які можуть виникнути від компілятора
Сприяти оновленню версії компілятора в процесі розробки
Впровадження автоматичної перевірки версії компілятора в процес CI/CD
Корисні ресурси:
Офіційний блог безпеки Solidity
Список помилок у репозиторії Solidity на GitHub
Список помилок компілятора для всіх версій
Безпекові поради на сторінці коду контракту Etherscan
Зосереджуючи увагу на безпеці компілятора та вживаючи відповідних запобіжних заходів, можна ефективно знизити потенційні ризики, пов'язані з вразливостями компілятора Solidity, та підвищити загальну безпеку смарт-контрактів.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
11 лайків
Нагородити
11
4
Поділіться
Прокоментувати
0/400
0xSunnyDay
· 13год тому
Нічого, просто грайте з вразливостями компілятора.
Переглянути оригіналвідповісти на0
BearMarketMonk
· 13год тому
Хто ще шукає уразливості самостійно? Чи не краще скористатися готовими інструментами?
Переглянути оригіналвідповісти на0
NeverVoteOnDAO
· 13год тому
Вразливостей, здається, стало багато, просто Кліпові купони пішли.
Переглянути оригіналвідповісти на0
DefiEngineerJack
· 13год тому
*с sigh* помилки компілятора насправді є причиною, чому нам потрібна формальна верифікація... ngmi без цього, чесно кажучи
Аналіз вразливостей компілятора Solidity та стратегії реагування
Аналіз вразливостей компілятора Solidity та стратегії реагування
Компилятор, як одна з основних складових сучасних комп'ютерних систем, виконує функцію перетворення вихідного коду мов програмування високого рівня в інструкційний код, що може виконуватись на нижчому рівні комп'ютера. Хоча розробники та фахівці з безпеки зазвичай більше зосереджуються на безпеці коду програм, безпека самого компілятора також не повинна бути проігнорована. Уразливості компілятора в деяких випадках можуть призвести до серйозних ризиків для безпеки.
Роль компілятора Solidity полягає в перетворенні коду смарт-контракту на машинний код інструкцій Ethereum Virtual Machine (EVM). На відміну від вразливостей самої EVM, вразливості компілятора Solidity здебільшого виникають під час процесу перетворення Solidity в код EVM. Ці вразливості не впливають безпосередньо на мережу Ethereum, але можуть призвести до того, що згенерований код EVM не відповідатиме очікуванням розробника, що, в свою чергу, може спричинити проблеми з безпекою смарт-контракту.
Ось кілька典型них прикладів вразливостей компілятора Solidity:
Вразливість HighOrderByteCleanStorage ( впливає на версії: >=0.1.6 <0.4.4) Ця уразливість може призвести до того, що змінна storage поверне неочікуване значення без зміни.
Вразливість InlineAssemblyMemorySideEffects ( впливає на версії: >=0.8.13 <0.8.15) Через проблеми з оптимізацією компілятора, можливі помилки в оптимізації змін пам'яті в інлайн-асемблері.
Уразливість AbiReencodingHeadOverflowWithStaticArrayCleanup ( впливає на версії: >= 0.5.8 < 0.8.16) При виконанні операції abi.encode з масивом типу calldata може помилково змінитися сусідні дані, що призведе до несумісності закодованих і декодованих даних.
Щоб впоратися з ризиками, пов'язаними з вразливістю компілятора Solidity, розробники та спеціалісти з безпеки можуть вжити такі заходи:
Рекомендації для розробників:
Рекомендації від безпеки:
Корисні ресурси:
Зосереджуючи увагу на безпеці компілятора та вживаючи відповідних запобіжних заходів, можна ефективно знизити потенційні ризики, пов'язані з вразливостями компілятора Solidity, та підвищити загальну безпеку смарт-контрактів.