Аналіз вразливостей компілятора Solidity та заходи запобігання
Компилятор є одним з основних компонентів сучасних комп'ютерних систем, і його функція полягає в перетворенні вихідного коду програм високого рівня на команди, які можуть виконуватися комп'ютером. У порівнянні з кодом прикладних програм, безпека самого компілятора часто може бути проігнорована. Проте, компілятор, як комп'ютерна програма, також може містити вразливості безпеки, що в деяких випадках може призвести до серйозних ризиків безпеки.
Роль компілятора Solidity полягає в перетворенні коду смарт-контрактів на інструкційний код віртуальної машини Ethereum (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. Через неправильну обробку окремих блоків assembly під час оптимізації компіляції, це може призвести до того, що операції з пам'яттю будуть неправильно оптимізовані.
Ця уразливість впливає на компілятори версій від 0.5.8 до 0.8.16. Під час виконання операції abi.encode над масивом типу calldata неправильно очищалися деякі дані, що призвело до зміни сусідніх даних.
Щодо вразливостей компілятора Solidity, пропонуємо наступні рекомендації щодо безпеки:
Для розробників:
Використовуйте новішу версію компілятора Solidity
Поліпшити випадки юніт-тестування
Уникайте використання інлайнових асемблерів, складного кодування та декодування ABI тощо
Для охоронців:
Під час аудиту слід враховувати потенційні ризики безпеки, які можуть бути введені компілятором
У процесі розробки закликати оновити версію компілятора
Оцінити фактичний безпековий вплив вразливостей компілятора залежно від конкретних обставин
Деякі корисні ресурси:
Офіційний блог безпеки Solidity
Список помилок у репозиторії Solidity GitHub
Підказка про вразливість компілятора на сторінці коду контракту Etherscan
Отже, хоча вразливості компілятора не повинні викликати надмірну паніку, розробники та фахівці з безпеки все ж повинні бути пильними і вжити відповідних заходів для зниження пов'язаних ризиків.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
12 лайків
Нагородити
12
5
Поділіться
Прокоментувати
0/400
hodl_therapist
· 21год тому
Королі плівки, зверніть увагу на своє здоров'я
Переглянути оригіналвідповісти на0
CommunitySlacker
· 21год тому
Вразливість знову була оновлена, набридло.
Переглянути оригіналвідповісти на0
GasGuru
· 22год тому
Це змусило мене боятися заходити в контракти.
Переглянути оригіналвідповісти на0
SmartContractRebel
· 22год тому
Ненавиджу, як компілятор солодкий.
Переглянути оригіналвідповісти на0
PebbleHander
· 22год тому
Що робити з новими вразливостями контракту... не панікуйте
Аналіз вразливостей компілятора Solidity та заходи їх запобігання
Аналіз вразливостей компілятора Solidity та заходи запобігання
Компилятор є одним з основних компонентів сучасних комп'ютерних систем, і його функція полягає в перетворенні вихідного коду програм високого рівня на команди, які можуть виконуватися комп'ютером. У порівнянні з кодом прикладних програм, безпека самого компілятора часто може бути проігнорована. Проте, компілятор, як комп'ютерна програма, також може містити вразливості безпеки, що в деяких випадках може призвести до серйозних ризиків безпеки.
Роль компілятора Solidity полягає в перетворенні коду смарт-контрактів на інструкційний код віртуальної машини Ethereum (EVM). На відміну від вразливостей самої EVM, вразливості компілятора Solidity не впливають безпосередньо на мережу Ethereum, але можуть призвести до того, що згенерований код EVM не відповідатиме очікуванням розробника, що, у свою чергу, може викликати проблеми безпеки смарт-контрактів.
Ось кілька реальних прикладів вразливостей компілятора Solidity:
Ця уразливість існує в ранніх версіях компілятора Solidity ( ≥ 0.1.6 < 0.4.4). У деяких випадках компілятор не очищав старші байти належним чином, що призводило до випадкового зміни значення змінної.
Ця уразливість впливає на компілятори версій 0.8.13 до 0.8.15. Через неправильну обробку окремих блоків assembly під час оптимізації компіляції, це може призвести до того, що операції з пам'яттю будуть неправильно оптимізовані.
Ця уразливість впливає на компілятори версій від 0.5.8 до 0.8.16. Під час виконання операції abi.encode над масивом типу calldata неправильно очищалися деякі дані, що призвело до зміни сусідніх даних.
Щодо вразливостей компілятора Solidity, пропонуємо наступні рекомендації щодо безпеки:
Для розробників:
Для охоронців:
Деякі корисні ресурси:
Отже, хоча вразливості компілятора не повинні викликати надмірну паніку, розробники та фахівці з безпеки все ж повинні бути пильними і вжити відповідних заходів для зниження пов'язаних ризиків.