Аналіз вразливостей компілятора Solidity: приховані ризики, що впливають на безпеку смартконтрактів

robot
Генерація анотацій у процесі

Глибина аналізу вразливостей компілятора Solidity

Компiлятор є одним з основних компонентів сучасних комп'ютерних систем, його основна функція полягає в перетворенні вихідного коду мов високого рівня у командний код, що може виконуватися на нижньому рівні комп'ютера. Хоча більшість розробників і фахівців з безпеки зазвичай зосереджуються на безпеці коду програмних застосунків, безпека самого компiлятора часто ігнорується. Насправді, компiлятор як комп'ютерна програма також може мати вразливості безпеки, які в деяких випадках можуть призводити до серйозних ризиків безпеки.

Наприклад, під час виконання JavaScript-коду, що розбирається браузером, уразливості JavaScript-движка можуть призвести до того, що користувачі під час відвідування шкідливих веб-сторінок зазнають атак віддаленого виконання коду, що зрештою призводить до контролю зловмисників над браузером жертви або навіть операційною системою. Крім того, дослідження показали, що помилки компілятора Clang C++ також можуть викликати серйозні наслідки, такі як віддалене виконання коду.

Компілятор Solidity також має вразливості безпеки. Згідно з попередженням про безпеку, опублікованим командою розробників Solidity, у кількох версіях компілятора Solidity є потенційні небезпеки. Основна функція компілятора Solidity полягає в перетворенні коду смарт-контрактів на інструкційний код Ethereum Virtual Machine (EVM), який врешті-решт завантажується в Ethereum через транзакції та виконується EVM.

Розбір вразливостей компілятора Solidity та заходи реагування

Слід звернути увагу на те, що вразливості компілятора Solidity відрізняються від вразливостей самого EVM. Вразливості EVM вказують на проблеми безпеки, які виникають під час виконання інструкцій віртуальною машиною, що може вплинути на всю мережу Ethereum. Вразливості компілятора Solidity вказують на проблеми, що виникають під час перетворення коду Solidity в код EVM, які не впливають безпосередньо на саму мережу Ethereum.

Вразливості компілятора Solidity можуть призвести до того, що згенерований код EVM не буде відповідати очікуванням розробника. Оскільки смарт-контракти в Ethereum зазвичай пов'язані з криптовалютними активами користувачів, будь-які помилки, спричинені компілятором, можуть призвести до втрати активів користувачів, що має серйозні наслідки. Розробники та аудитори контрактів зазвичай зосереджуються на реалізації логіки контракту та поширених проблемах безпеки, тоді як вразливості компілятора важко виявити лише через аудит вихідного коду; потрібно поєднувати аналіз конкретних версій компілятора та моделей коду.

Ось кілька реальних прикладів вразливостей компілятора Solidity:

  1. SOL-2016-9 HighOrderByteCleanStorage

Ця вразливість існує в більш ранніх версіях компілятора Solidity (>=0.1.6 <0.4.4). У деяких випадках значення змінної storage може бути випадково змінено, що призводить до невідповідності між значенням, яке повертається функцією, і очікуваним значенням. Ця невідповідність може мати серйозні наслідки в таких сценаріях, як перевірка прав доступу або облік активів.

  1. SOL-2022-4 InlineAssemblyMemoryПобічні ефекти

Ця вразливість існує в компіляторах версій від 0.8.13 до 0.8.15. Через проблеми з оптимізаційною стратегією компілятора, зміни пам'яті в деякому інтегрованому асемблері можуть бути неправильно видалені, що призводить до помилки у значеннях, що повертаються функцією.

  1. SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup

Ця вразливість впливає на компілятори версій з 0.5.8 до 0.8.16. Під час виконання операції abi.encode над масивом типу calldata можуть неправильно очищатися деякі дані, що призводить до зміни сусідніх даних і викликає невідповідність між закодованими та декодованими даними.

Щодо вразливостей компілятора Solidity, команда безпеки блокчейну Cobo пропонує такі рекомендації:

Аналіз вразливостей компілятора Solidity та заходи реагування

Для розробників:

  • Використовуйте новішу версію компілятора Solidity
  • Удосконалити юніт-тести, підвищити покриття коду
  • Уникайте використання вбудованого асемблера, складного кодування та декодування ABI тощо, обережно використовуйте нові функції та експериментальні можливості

Для безпеки персоналу:

  • У процесі аудиту слід враховувати потенційні ризики безпеки, які можуть бути внесені компілятором
  • Рекомендується команді розробників своєчасно оновлювати версію компілятора
  • Впровадження автоматичної перевірки версії компілятора в процес CI/CD
  • Оцінка фактичного впливу вразливостей компілятора відповідно до конкретного проєкту

Деякі корисні ресурси:

  • Безпекове попередження офіційного блогу Solidity
  • Список помилок репозиторію Solidity на GitHub
  • Список помилок компілятора для різних версій
  • Підказка про вразливість на сторінці коду контракту Etherscan

Зрозумівши особливості та вплив вразливостей компілятора Solidity, розробники та фахівці з безпеки можуть більш всебічно оцінити ризики безпеки смарт-контрактів і вжити відповідних заходів для зниження потенційних загроз.

Аналіз вразливостей компілятора Solidity та заходи реагування

Переглянути оригінал
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.
  • Нагородити
  • 6
  • Поділіться
Прокоментувати
0/400
0xSoullessvip
· 4год тому
Ще один інструмент обдурювання людей, як лохів
Переглянути оригіналвідповісти на0
RumbleValidatorvip
· 07-12 19:34
Ця уразливість може викликати помилки на рівні консенсусу? Ризики для валідаційних нод великі!
Переглянути оригіналвідповісти на0
SocialFiQueenvip
· 07-12 19:29
Схоже, смартконтракти мають проблеми~ Ха-ха, це дуже захоплююче
Переглянути оригіналвідповісти на0
CryptoTherapistvip
· 07-12 19:27
ще один випадок синдрому тривоги розробника... дихайте під час процесу налагодження сім'я
Переглянути оригіналвідповісти на0
StablecoinAnxietyvip
· 07-12 19:14
Компілери небезпечні, хто наважиться на кодування?
Переглянути оригіналвідповісти на0
Blockwatcher9000vip
· 07-12 19:06
Розробникам важко, обійміть мій btc Шахрайство
Переглянути оригіналвідповісти на0
  • Закріпити