Аналіз вразливостей компілятора Solidity та заходи запобігання
Компiлятор є одним з основних компонентiв сучасних комп'ютерних систем, його основна функцiя — перетворення вихiдного коду програм на високому мовi на командний код, який може виконувати комп'ютер. Хоча більшість розробників та фахівців з безпеки зазвичай зосереджуються на безпеці коду застосунків, безпека самого компiлятора також не повинна бути ігнорована. Насправдi, компiлятор, як комп'ютерна програма, також може мати вразливостi, що в певних випадках може призвести до серйозних ризиків для безпеки.
Роль компілятора Solidity полягає в перетворенні коду смарт-контрактів на інструкційний код Ethereum Virtual Machine (EVM). На відміну від вразливостей самого EVM, вразливості компілятора Solidity в основному стосуються проблем, що виникають під час процесу перетворення коду. Ці вразливості не впливають безпосередньо на мережу Ethereum, але можуть призвести до того, що згенерований код 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 сприяти оновленню версії компілятора, розглянути можливість впровадження автоматичних перевірок у CI/CD.
Оцінка фактичного впливу вразливостей компілятора залежно від конкретних умов проекту
Деякі корисні ресурси:
Офіційне повідомлення про безпеку від Solidity
Список помилок у репозиторії Solidity на GitHub
Поради безпеки на сторінці коду контракту Etherscan
Зосередившись на безпеці компілятора та раціонально використовуючи відповідні ресурси, розробники та фахівці з безпеки можуть краще захиститися від потенційних ризиків, пов'язаних з вразливостями компілятора Solidity, підвищуючи загальну безпеку смарт-контрактів.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
18 лайків
Нагородити
18
6
Поділіться
Прокоментувати
0/400
MEVSupportGroup
· 07-24 16:22
Проблеми з компілятором - це велика катастрофа...
Переглянути оригіналвідповісти на0
MetaverseLandlord
· 07-24 02:50
Поточне попередження про високий ризик професії програміста!
Переглянути оригіналвідповісти на0
Ramen_Until_Rich
· 07-22 03:21
Не зупинюся, поки не перетну Жовту річку.
Переглянути оригіналвідповісти на0
AirdropHunterXM
· 07-22 03:15
Розпочати тестування, як заробити гроші
Переглянути оригіналвідповісти на0
LiquidityWitch
· 07-22 03:15
Ризик переповнення шалений
Переглянути оригіналвідповісти на0
SelfStaking
· 07-22 03:06
Сильно хвилююся, терміново оновлюю до останньої версії
Аналіз вразливостей компілятора Solidity та заходи запобігання
Аналіз вразливостей компілятора Solidity та заходи запобігання
Компiлятор є одним з основних компонентiв сучасних комп'ютерних систем, його основна функцiя — перетворення вихiдного коду програм на високому мовi на командний код, який може виконувати комп'ютер. Хоча більшість розробників та фахівців з безпеки зазвичай зосереджуються на безпеці коду застосунків, безпека самого компiлятора також не повинна бути ігнорована. Насправдi, компiлятор, як комп'ютерна програма, також може мати вразливостi, що в певних випадках може призвести до серйозних ризиків для безпеки.
Роль компілятора Solidity полягає в перетворенні коду смарт-контрактів на інструкційний код Ethereum Virtual Machine (EVM). На відміну від вразливостей самого EVM, вразливості компілятора Solidity в основному стосуються проблем, що виникають під час процесу перетворення коду. Ці вразливості не впливають безпосередньо на мережу Ethereum, але можуть призвести до того, що згенерований код 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, підвищуючи загальну безпеку смарт-контрактів.