Аналіз вразливостей компілятора Solidity та стратегії реагування
Компилятор є одним з основних компонентів сучасних комп'ютерних систем, відповідальним за перетворення вихідного коду мов програмування високого рівня в інструкції, які можуть виконуватися комп'ютером. Хоча розробники та фахівці з безпеки зазвичай більше зосереджуються на безпеці коду програм, безпека самого компілятора також не повинна бути ігнорована. Як комп'ютерна програма, компілятор може містити уразливості безпеки, які в деяких випадках можуть призвести до серйозних ризиків безпеки.
Роль компілятора Solidity полягає в перетворенні коду смарт-контракту на інструкційний код Ethereum Virtual Machine (EVM). На відміну від вразливостей самого EVM, вразливості компілятора Solidity головним чином впливають на розробників контрактів і не загрожують безпеці мережі Ethereum безпосередньо. Проте, вразливості компілятора можуть призвести до того, що згенерований код EVM не відповідатиме очікуванням розробника, що може призвести до серйозних фінансових втрат.
Ось кілька реальних прикладів вразливостей компілятора Solidity:
SOL-2016-9 HighOrderByteCleanStorage
Ця вразливість існує в ранніх версіях компілятора Solidity (>=0.1.6 <0.4.4). У деяких випадках компілятор не зміг правильно очистити старші біти після переповнення цілих чисел, що призвело до випадкової зміни значення зберігаємого змінного.
SOL-2022-4 InlineAssemblyMemoryПобічні ефекти
Ця уразливість впливає на компілятори версій >=0.8.13 <0.8.15. Через проблеми з оптимізацією вбудованих асемблерних блоків компілятора можуть помилково видаляти певні операції запису в пам'ять, що призводить до аномальної поведінки програми.
Ця вразливість існує в компіляторах версій >= 0.5.8 < 0.8.16. Під час виконання операції abi.encode з масивом типу calldata компілятор помилково очищав деякі дані, що призводило до зміни сусідніх даних, викликаючи невідповідність даних після кодування та декодування.
Щоб впоратися з ризиками, пов'язаними з вразливостями компілятора Solidity, розробники та фахівці з безпеки можуть вжити такі заходи:
Для розробників:
Використовуйте новішу версію компілятора Solidity, оскільки нові версії зазвичай виправляють відомі проблеми з безпекою.
Намагайтеся уникати використання вбудованих асемблерів, складного кодування та декодування ABI та інших дій, які можуть викликати проблеми.
Для безпеки персоналу:
Під час безпекового аудиту не ігноруйте потенційні ризики безпеки, які можуть бути внесені компілятором.
У внутрішньому процесі розробки заохочується команду розробників своєчасно оновлювати версії компілятора та розглянути можливість впровадження автоматичної перевірки версій компілятора в процесі CI/CD.
Будьте обережні з вразливостями компілятора, але не панікуйте надмірно. Більшість вразливостей активуються лише в специфічних кодових шаблонах, і необхідно оцінити фактичний вплив залежно від конкретних обставин.
Декілька корисних ресурсів:
Регулярно випускаються повідомлення про безпеку командою Solidity
Періодично оновлюваний список вразливостей у офіційному репозиторії Solidity
Список вразливостей компіляторів різних версій, який може бути використаний для автоматичної перевірки в процесі CI/CD.
Попереджувальний знак у верхньому правому куті сторінки коду контракту Etherscan може вказувати на наявність вразливостей у компіляторі поточної версії.
Зрозумівши особливості та ризики вразливостей компілятора Solidity, вживаючи відповідних запобіжних заходів, розробники та фахівці з безпеки можуть краще захистити безпеку смарт-контрактів і знизити ризик потенційних втрат активів.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
16 лайків
Нагородити
16
7
Поділіться
Прокоментувати
0/400
PessimisticOracle
· 15хв. тому
Ця вразливість справді існує!
Переглянути оригіналвідповісти на0
AirdropHunterKing
· 12год тому
Тестуючи контракт, я так довго впадав у цю пастку, що з'їв купу повітря. Братики, не копіюйте старий контракт!
Аналіз вразливостей компілятора Solidity та стратегій їх подолання
Аналіз вразливостей компілятора Solidity та стратегії реагування
Компилятор є одним з основних компонентів сучасних комп'ютерних систем, відповідальним за перетворення вихідного коду мов програмування високого рівня в інструкції, які можуть виконуватися комп'ютером. Хоча розробники та фахівці з безпеки зазвичай більше зосереджуються на безпеці коду програм, безпека самого компілятора також не повинна бути ігнорована. Як комп'ютерна програма, компілятор може містити уразливості безпеки, які в деяких випадках можуть призвести до серйозних ризиків безпеки.
Роль компілятора Solidity полягає в перетворенні коду смарт-контракту на інструкційний код Ethereum Virtual Machine (EVM). На відміну від вразливостей самого EVM, вразливості компілятора Solidity головним чином впливають на розробників контрактів і не загрожують безпеці мережі Ethereum безпосередньо. Проте, вразливості компілятора можуть призвести до того, що згенерований код EVM не відповідатиме очікуванням розробника, що може призвести до серйозних фінансових втрат.
Ось кілька реальних прикладів вразливостей компілятора Solidity:
Ця вразливість існує в ранніх версіях компілятора Solidity (>=0.1.6 <0.4.4). У деяких випадках компілятор не зміг правильно очистити старші біти після переповнення цілих чисел, що призвело до випадкової зміни значення зберігаємого змінного.
Ця уразливість впливає на компілятори версій >=0.8.13 <0.8.15. Через проблеми з оптимізацією вбудованих асемблерних блоків компілятора можуть помилково видаляти певні операції запису в пам'ять, що призводить до аномальної поведінки програми.
Ця вразливість існує в компіляторах версій >= 0.5.8 < 0.8.16. Під час виконання операції abi.encode з масивом типу calldata компілятор помилково очищав деякі дані, що призводило до зміни сусідніх даних, викликаючи невідповідність даних після кодування та декодування.
Щоб впоратися з ризиками, пов'язаними з вразливостями компілятора Solidity, розробники та фахівці з безпеки можуть вжити такі заходи:
Для розробників:
Для безпеки персоналу:
Декілька корисних ресурсів:
Зрозумівши особливості та ризики вразливостей компілятора Solidity, вживаючи відповідних запобіжних заходів, розробники та фахівці з безпеки можуть краще захистити безпеку смарт-контрактів і знизити ризик потенційних втрат активів.