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

robot
Генерация тезисов в процессе

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

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

Например, в процессе выполнения кода 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). В некоторых случаях значение переменной хранения может быть случайно изменено, что приводит к тому, что возвращаемое значение функции не совпадает с ожидаемым. Эта несоответствие может привести к серьезным последствиям в таких сценариях, как проверка прав доступа или учёт активов.

  1. SOL-2022-4 ВстраиваемаяАссемблернаяПамятьПобочныеЭффекты

Уязвимость существует в компиляторах версий с 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
  • Закрепить