Аналіз вразливостей компілятора Solidity та стратегії реагування
Компилятор є однією з основних складових сучасних комп'ютерних систем, його основна функція полягає в перетворенні високорівневих мов програмування на низькорівневі інструкції, які може виконувати комп'ютер. Хоча більшість розробників та фахівців з безпеки зосереджені на безпеці коду програм, безпека самого компілятора також є важливою. Компилятор, як комп'ютерна програма, також може мати вразливості безпеки, що в певних випадках може створити серйозні ризики для безпеки.
Роль компілятора Solidity полягає в перетворенні коду смарт-контракту на команди віртуальної машини Ethereum (EVM). На відміну від вразливостей самої EVM, вразливості компілятора Solidity головним чином впливають на розробників смарт-контрактів і не загрожують безпеці мережі Ethereum безпосередньо. Однак вразливості компілятора можуть призвести до того, що згенерований код EVM не відповідатиме очікуванням розробника, що може спричинити серйозні наслідки, такі як втрати активів користувачів.
Ось кілька реальних прикладів вразливостей компілятора Solidity:
SOL-2016-9 HighOrderByteCleanStorage
Ця вразливість існує в ранніх версіях компілятора Solidity ( ≥ 0.1.6 < 0.4.4). Проблема полягає в тому, що EVM використовує елементи стеку розміром 32 байти, тоді як Solidity підтримує менші типи даних. У деяких випадках компілятор не зміг правильно очистити старші байти, що призвело до несподіваного перезапису даних.
SOL-2022-4 InlineAssemblyMemoryПобічні ефекти
Цей вразливість впливає на компілятори версій >=0.8.13 <0.8.15. Проблема виникає в процесі оптимізації компілятора, через неправильну обробку вбудованих блоків асемблера, що призводить до неправильного видалення деяких операцій запису в пам'ять.
Ця вразливість існує в компіляторах версій >=0.5.8 <0.8.16. При ABI кодуванні масивів певних типів calldata помилкові операції очищення даних призводять до зміни сусідніх даних, що викликає невідповідність результатів кодування та декодування.
Щодо вразливостей компілятора Solidity, ми надаємо такі рекомендації:
Для розробників:
Використовуйте новішу версію компілятора Solidity
Поліпшити юніт-тести, підвищити покриття коду
Уникайте використання вбудованого асемблера, складних ABI кодування та декодування та інших розширених функцій
Для безпеки персоналу:
Під час аудиту слід враховувати можливі ризики безпеки, які можуть бути внесені компілятором
У процесі розробки спонукати оновлення версії компілятора
Впровадження автоматичної перевірки версії компілятора в CI/CD
Декілька корисних ресурсів:
Офіційне повідомлення про безпеку Solidity
Список помилок у репозиторії Solidity
Список помилок компілятора для всіх версій
Підказка про вразливість компілятора на Etherscan
Отже, хоча не варто надмірно хвилюватися через вразливості компіляторів, все ж у процесі розробки та аудиту смарт-контрактів слід приділяти належну увагу цій потенційній загрозі безпеці. Вживаючи відповідних запобіжних заходів, можна максимально знизити ризики, пов'язані з вразливостями компіляторів.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
9 лайків
Нагородити
9
7
Поділіться
Прокоментувати
0/400
BoredApeResistance
· 07-08 04:11
З кодом краще бути обережним.
Переглянути оригіналвідповісти на0
SelfCustodyBro
· 07-06 15:49
Все ще пишеш код? Спочатку повертайся додому протестувати.
Переглянути оригіналвідповісти на0
TokenDustCollector
· 07-05 04:47
Перед перевіркою контракту потрібно також перевірити компілятор..
Переглянути оригіналвідповісти на0
0xSoulless
· 07-05 04:46
Щодня обдурюють людей, як лохів, краще б компілятор просто обдурив мене повністю.
Переглянути оригіналвідповісти на0
SmartContractPlumber
· 07-05 04:43
Знаю, що ви всі поспішаєте на Основну мережу, але чи готові ви до вразливостей?
Вразливості компілятора Solidity: що потрібно знати розробникам та стратегії реагування
Аналіз вразливостей компілятора Solidity та стратегії реагування
Компилятор є однією з основних складових сучасних комп'ютерних систем, його основна функція полягає в перетворенні високорівневих мов програмування на низькорівневі інструкції, які може виконувати комп'ютер. Хоча більшість розробників та фахівців з безпеки зосереджені на безпеці коду програм, безпека самого компілятора також є важливою. Компилятор, як комп'ютерна програма, також може мати вразливості безпеки, що в певних випадках може створити серйозні ризики для безпеки.
Роль компілятора Solidity полягає в перетворенні коду смарт-контракту на команди віртуальної машини Ethereum (EVM). На відміну від вразливостей самої EVM, вразливості компілятора Solidity головним чином впливають на розробників смарт-контрактів і не загрожують безпеці мережі Ethereum безпосередньо. Однак вразливості компілятора можуть призвести до того, що згенерований код EVM не відповідатиме очікуванням розробника, що може спричинити серйозні наслідки, такі як втрати активів користувачів.
Ось кілька реальних прикладів вразливостей компілятора Solidity:
Ця вразливість існує в ранніх версіях компілятора Solidity ( ≥ 0.1.6 < 0.4.4). Проблема полягає в тому, що EVM використовує елементи стеку розміром 32 байти, тоді як Solidity підтримує менші типи даних. У деяких випадках компілятор не зміг правильно очистити старші байти, що призвело до несподіваного перезапису даних.
Цей вразливість впливає на компілятори версій >=0.8.13 <0.8.15. Проблема виникає в процесі оптимізації компілятора, через неправильну обробку вбудованих блоків асемблера, що призводить до неправильного видалення деяких операцій запису в пам'ять.
Ця вразливість існує в компіляторах версій >=0.5.8 <0.8.16. При ABI кодуванні масивів певних типів calldata помилкові операції очищення даних призводять до зміни сусідніх даних, що викликає невідповідність результатів кодування та декодування.
Щодо вразливостей компілятора Solidity, ми надаємо такі рекомендації:
Для розробників:
Для безпеки персоналу:
Декілька корисних ресурсів:
Отже, хоча не варто надмірно хвилюватися через вразливості компіляторів, все ж у процесі розробки та аудиту смарт-контрактів слід приділяти належну увагу цій потенційній загрозі безпеці. Вживаючи відповідних запобіжних заходів, можна максимально знизити ризики, пов'язані з вразливостями компіляторів.