Аналіз вразливостей компілятора Solidity та стратегії реагування
Компілятор є одним із основних компонентів сучасних комп'ютерних систем, його функція полягає в перетворенні вихідного коду мов високого рівня на інструкції, які можуть виконуватися комп'ютером. Як і код програм, сам компілятор також може містити вразливості безпеки, які в деяких випадках можуть призвести до серйозних ризиків безпеки.
Роль компілятора Solidity полягає в перетворенні коду смарт-контрактів на інструкційний код віртуальної машини Ethereum (EVM). На відміну від вразливостей самої EVM, вразливості компілятора Solidity не впливають безпосередньо на мережу Ethereum, але можуть призвести до того, що згенерований код EVM не відповідатиме очікуванням розробника, що може призвести до проблем безпеки смарт-контрактів.
Ось кілька реальних прикладів вразливостей компілятора Solidity:
SOL-2016-9 HighOrderByteCleanStorage
Ця вразливість існує в ранніх версіях компілятора Solidity (>=0.1.6 <0.4.4). У деяких випадках компілятор неправильно очищав старші байти, що призводило до випадкової зміни значення змінних зберігання.
SOL-2022-4 Внутрішня асамблея пам'яті Бічні ефекти
Цей вразливість існує у компіляторах версій від 0.8.13 до 0.8.15. Через неправильну обробку блоків assembly під час оптимізації компіляції, це може призвести до того, що операції запису в пам'ять будуть неправильно видалені.
Ця уразливість впливає на компілятори версій від 0.5.8 до 0.8.16. Під час виконання операції abi.encode з масивом типу calldata можуть помилково очищатися деякі дані, що призводить до зміни сусідніх даних.
Щодо вразливостей компілятора Solidity, команда безпеки блокчейну Cobo пропонує такі рекомендації:
Для розробників:
Використовуйте новішу версію компілятора Solidity
Поліпшити модульні тести
Уникайте використання складних мовних особливостей, таких як вбудовані асемблери, багатовимірні масиви та ABI кодування/декодування тощо.
Для безпеки працівників:
Під час аудиту слід враховувати можливі ризики безпеки, які можуть бути внесені компілятором
У процесі розробки закликати оновити версію компілятора
Оцінка фактичного безпекового впливу вразливостей компілятора залежно від конкретних обставин
Деякі корисні ресурси:
Офіційний блог з безпеки Solidity
Список помилок у репозиторії Solidity на GitHub
Список помилок компілятора для всіх версій
Повідомлення про вразливість компілятора на сторінці коду контракту Etherscan
Зрозумівши характеристики та вплив вразливостей компілятора Solidity, розробники та фахівці з безпеки можуть більш повно оцінити ризики безпеки смарт-контрактів і вжити відповідних запобіжних заходів.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
20 лайків
Нагородити
20
5
Поділіться
Прокоментувати
0/400
blocksnark
· 07-10 15:09
Гроші за виправлення помилок найсмачніші
Переглянути оригіналвідповісти на0
BlockchainDecoder
· 07-08 10:18
Згідно з класичною статтею "Аналіз компілятора Solidity (2022)", ризик таких вразливостей становить 78,3%, рекомендується обережно використовувати версії 0.8.0+ для їх уникнення.
Переглянути оригіналвідповісти на0
DaisyUnicorn
· 07-08 10:14
Йінь-йінь, компілятор також отримав маленьку помилку, давайте швидше випустимо нову версію!
Переглянути оригіналвідповісти на0
FlashLoanLarry
· 07-08 10:13
просто ще один день у DeFi... експлойти компілятора = безкінечні можливості MEV, чесно кажучи
Переглянути оригіналвідповісти на0
AlphaLeaker
· 07-08 10:04
Навіть після повторного оновлення не встоїш проти хакерів.
Аналіз вразливостей компілятора 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, команда безпеки блокчейну Cobo пропонує такі рекомендації:
Для розробників:
Для безпеки працівників:
Деякі корисні ресурси:
Зрозумівши характеристики та вплив вразливостей компілятора Solidity, розробники та фахівці з безпеки можуть більш повно оцінити ризики безпеки смарт-контрактів і вжити відповідних запобіжних заходів.