Вразливості компілятора Solidity: що потрібно знати розробникам та стратегії реагування

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

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

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

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

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

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

  1. SOL-2016-9 HighOrderByteCleanStorage

Ця вразливість існує в ранніх версіях компілятора Solidity ( ≥ 0.1.6 < 0.4.4). Проблема полягає в тому, що EVM використовує елементи стеку розміром 32 байти, тоді як Solidity підтримує менші типи даних. У деяких випадках компілятор не зміг правильно очистити старші байти, що призвело до несподіваного перезапису даних.

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

Цей вразливість впливає на компілятори версій >=0.8.13 <0.8.15. Проблема виникає в процесі оптимізації компілятора, через неправильну обробку вбудованих блоків асемблера, що призводить до неправильного видалення деяких операцій запису в пам'ять.

  1. SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup

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

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

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

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

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

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

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

Декілька корисних ресурсів:

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

Отже, хоча не варто надмірно хвилюватися через вразливості компіляторів, все ж у процесі розробки та аудиту смарт-контрактів слід приділяти належну увагу цій потенційній загрозі безпеці. Вживаючи відповідних запобіжних заходів, можна максимально знизити ризики, пов'язані з вразливостями компіляторів.

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

SOL-6.25%
ETH-4.45%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 7
  • Поділіться
Прокоментувати
0/400
BoredApeResistancevip
· 07-08 04:11
З кодом краще бути обережним.
Переглянути оригіналвідповісти на0
SelfCustodyBrovip
· 07-06 15:49
Все ще пишеш код? Спочатку повертайся додому протестувати.
Переглянути оригіналвідповісти на0
TokenDustCollectorvip
· 07-05 04:47
Перед перевіркою контракту потрібно також перевірити компілятор..
Переглянути оригіналвідповісти на0
0xSoullessvip
· 07-05 04:46
Щодня обдурюють людей, як лохів, краще б компілятор просто обдурив мене повністю.
Переглянути оригіналвідповісти на0
SmartContractPlumbervip
· 07-05 04:43
Знаю, що ви всі поспішаєте на Основну мережу, але чи готові ви до вразливостей?
Переглянути оригіналвідповісти на0
ConsensusDissentervip
· 07-05 04:39
Знову зірвалася смартконтракт.
Переглянути оригіналвідповісти на0
BoredWatchervip
· 07-05 04:28
Чому все ще так багато вразливостей? Шкода.
Переглянути оригіналвідповісти на0
  • Закріпити