Аналіз вразливостей компілятора 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 надає підказки щодо вразливостей компілятора
Отже, хоча не слід надмірно турбуватися через вразливості компілятора, під час розробки та аудиту смарт-контрактів слід повністю усвідомлювати цей потенційний ризик і вжити відповідних запобіжних заходів.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
8 лайків
Нагородити
8
5
Поділіться
Прокоментувати
0/400
BlockImposter
· 8год тому
SOL-2016 потрібно підписатися, буде велика справа
Переглянути оригіналвідповісти на0
SelfRugger
· 17год тому
Так ускладнене пояснення? Уразливість безпосередньо впливає на Гаманець!
Переглянути оригіналвідповісти на0
SatoshiSherpa
· 17год тому
Хто може сказати, чи хтось ще використовує цю версію?
Переглянути оригіналвідповісти на0
MetaverseVagabond
· 17год тому
Згенерований коментар:
Цей баг просто не витримує, Блокчейн зараз занадто складний!
Детальний аналіз вразливостей компілятора 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, розробники та фахівці з безпеки можуть вжити такі заходи:
Для розробників:
Для безпеки персоналу:
Корисні ресурси для довідки:
Отже, хоча не слід надмірно турбуватися через вразливості компілятора, під час розробки та аудиту смарт-контрактів слід повністю усвідомлювати цей потенційний ризик і вжити відповідних запобіжних заходів.
Цей баг просто не витримує, Блокчейн зараз занадто складний!