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

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

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

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

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

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

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

  1. SOL-2016-9 HighOrderByteCleanStorage

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

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

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

  1. SOL-2022-6 AbiПерекодуванняГоловиПереповненняЗФіксованимМасивомОчищення

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

Щоб впоратися з ризиками, пов'язаними з вразливостями компілятора Solidity, розробники та фахівці з безпеки можуть вжити такі заходи:

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

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

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

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

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

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

  • Регулярно випускаються повідомлення про безпеку командою Solidity
  • Періодично оновлюваний список вразливостей у офіційному репозиторії Solidity
  • Список вразливостей компіляторів різних версій, який може бути використаний для автоматичної перевірки в процесі CI/CD.
  • Попереджувальний знак у верхньому правому куті сторінки коду контракту Etherscan може вказувати на наявність вразливостей у компіляторі поточної версії.

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

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

SOL-1.3%
ETH-1.46%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 7
  • Поділіться
Прокоментувати
0/400
PessimisticOraclevip
· 5год тому
Ця вразливість справді існує!
Переглянути оригіналвідповісти на0
AirdropHunterKingvip
· 17год тому
Тестуючи контракт, я так довго впадав у цю пастку, що з'їв купу повітря. Братики, не копіюйте старий контракт!
Переглянути оригіналвідповісти на0
Layer3Dreamervip
· 20год тому
теоретично кажучи, помилки компілятора = рекурсивні довірчі припущення чесно кажучи
Переглянути оригіналвідповісти на0
IntrovertMetaversevip
· 20год тому
Перевірка переповнення має бути повною!
Переглянути оригіналвідповісти на0
NftDeepBreathervip
· 20год тому
Ця уразливість настільки велика, що просто вибухає.
Переглянути оригіналвідповісти на0
RunWhenCutvip
· 21год тому
Знову старий жарт про вразливість компілятора, набридло?
Переглянути оригіналвідповісти на0
FarmToRichesvip
· 21год тому
Тестуючи не повністю, ти просто чекай, поки все програєш.
Переглянути оригіналвідповісти на0
  • Закріпити