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

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

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

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

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

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

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

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

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

Розробники та аудитори контрактів часто більше зосереджуються на реалізації логіки коду контракту та питаннях безпеки на рівні Solidity, а не звертають уваги на вразливості компілятора. Лише через аудит вихідного коду контракту дуже важко виявити вразливості компілятора, необхідно проводити аналіз у поєднанні з конкретною версією компілятора та конкретними паттернами коду.

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

  1. SOL-2016-9 Високий порядок очищення байтового сховища

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

  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 компілятор неправильно очищав певні дані, що призвело до зміни сусідніх даних і викликало несумісність даних після кодування та декодування. Ця проблема також може виникнути під час зовнішнього виклику та події emit, оскільки ці операції імпліцитно виконують abi.encode.

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

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

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

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

Для співробітників безпеки:

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

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

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

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

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

ETH-2.35%
SOL4.77%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 5
  • Поділіться
Прокоментувати
0/400
AltcoinAnalystvip
· 19год тому
Будьте обережні, це стара проблема версії 0.8.x
Переглянути оригіналвідповісти на0
MemecoinResearchervip
· 20год тому
rekt, що чекає на те, щоб статися, на основі мого аналізу (p<0.01)
Переглянути оригіналвідповісти на0
just_another_walletvip
· 20год тому
Молоді розробники, швидше дивіться!
Переглянути оригіналвідповісти на0
FarmHoppervip
· 20год тому
Ого, цей баг виглядає страшно!
Переглянути оригіналвідповісти на0
YieldWhisperervip
· 20год тому
бачив цей самий шаблон експлуатації компілятора з 2021 року... розробники ніколи не навчаються, смх
Переглянути оригіналвідповісти на0
  • Закріпити