Аналіз вразливостей компілятора 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 Впливи на пам'ять InlineAssembly
Ця уразливість впливає на компілятори версій з 0.8.13 до 0.8.15. Через проблеми з оптимізаційними стратегіями компілятора, можливо, буде помилково видалено операції запису пам'яті, що призведе до аномальних значень, що повертаються функцією.
Ця уразливість існує в компіляторах версій від 0.5.8 до 0.8.16. При ABI кодуванні масиву типу calldata можливо неправильно очистити деякі дані, що призводить до модифікації сусідніх даних.
Щоб протистояти ризикам, пов'язаним із вразливістю компілятора Solidity, розробники та фахівці з безпеки можуть вжити такі заходи:
Для розробників:
Використовуйте новішу версію компілятора Solidity
Поліпшити юніт-тести, підвищити покриття коду
Уникайте використання внутрішньої асемблерної мови, складних механізмів кодування/декодування ABI та інших складних функцій
Для безпеки персоналу:
Під час аудиту слід враховувати потенційні ризики безпеки, які можуть бути введені компілятором
Підтримка оновлення версії компілятора в процесі SDL
Впровадження автоматичної перевірки версії компілятора в CI/CD
Корисні ресурси для довідки:
Офіційний блог про безпеку Solidity
Список помилок у репозиторії Solidity на GitHub
Список помилок компіляторів різних версій
Сторінка коду контракту на Etherscan надає підказки щодо вразливостей компілятора
Отже, хоча не слід надмірно турбуватися через вразливості компілятора, під час розробки та аудиту смарт-контрактів слід повністю усвідомлювати цей потенційний ризик і вжити відповідних запобіжних заходів.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
12 лайків
Нагородити
12
6
Поділіться
Прокоментувати
0/400
SerumDegen
· 07-16 20:00
просто ще один день, коли спостерігаю, як смартконтракти отримують збитки... помилки компілятора - це нові обманки, якщо чесно
Переглянути оригіналвідповісти на0
BlockImposter
· 07-14 05:27
SOL-2016 потрібно підписатися, буде велика справа
Переглянути оригіналвідповісти на0
SelfRugger
· 07-13 20:31
Так ускладнене пояснення? Уразливість безпосередньо впливає на Гаманець!
Переглянути оригіналвідповісти на0
SatoshiSherpa
· 07-13 20:28
Хто може сказати, чи хтось ще використовує цю версію?
Переглянути оригіналвідповісти на0
MetaverseVagabond
· 07-13 20:27
Згенерований коментар:
Цей баг просто не витримує, Блокчейн зараз занадто складний!
Детальний аналіз вразливостей компілятора 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 кодуванні масиву типу calldata можливо неправильно очистити деякі дані, що призводить до модифікації сусідніх даних.
Щоб протистояти ризикам, пов'язаним із вразливістю компілятора Solidity, розробники та фахівці з безпеки можуть вжити такі заходи:
Для розробників:
Для безпеки персоналу:
Корисні ресурси для довідки:
Отже, хоча не слід надмірно турбуватися через вразливості компілятора, під час розробки та аудиту смарт-контрактів слід повністю усвідомлювати цей потенційний ризик і вжити відповідних запобіжних заходів.
Цей баг просто не витримує, Блокчейн зараз занадто складний!