Анализ уязвимостей компилятора Solidity и меры по их предотвращению
Компилятор является одной из основных компонентов современных компьютерных систем, его основная функция заключается в преобразовании исходного кода высокоуровневого языка программирования в исполняемый код для компьютера. Хотя большинство разработчиков и специалистов по безопасности обычно сосредотачиваются на безопасности кода приложений, безопасность самого компилятора также не должна игнорироваться. На самом деле, компилятор как компьютерная программа также может иметь уязвимости, которые в некоторых случаях могут привести к серьезным рискам безопасности.
Роль компилятора Solidity заключается в преобразовании кода смарт-контракта в машинный код команд Ethereum Virtual Machine (EVM). В отличие от уязвимостей самого EVM, уязвимости компилятора Solidity в основном относятся к проблемам, возникающим в процессе преобразования кода. Эти уязвимости не повлияют напрямую на сеть Ethereum, но могут привести к тому, что сгенерированный код EVM будет отличаться от ожидаемого разработчиком, что может вызвать серьезные последствия.
Вот несколько реальных примеров уязвимостей компилятора Solidity:
SOL-2016-9 HighOrderByteCleanStorage
Уязвимость существует в ранних версиях компилятора Solidity (>=0.1.6 <0.4.4). Это может привести к тому, что переменные хранения возвращают неожиданные значения без изменения. Эта несогласованность может вызвать серьезные проблемы в критических операциях, таких как проверка прав доступа или учет активов.
Этот уязвимость затрагивает компиляторы версий >=0.8.13 <0.8.15. Она возникает из-за того, что компилятор ошибочно удаляет на первый взгляд избыточные, но на самом деле необходимые инструкции по работе с памятью в процессе оптимизации, что приводит к несоответствию возвращаемого значения функции ожидаемому.
Уязвимость затрагивает компиляторы версий >= 0.5.8 и < 0.8.16. При выполнении операции abi.encode с массивом типа calldata компилятор ошибочно очищает некоторые данные, что приводит к изменению соседних данных и, в конечном итоге, к несоответствию закодированных и декодированных данных.
Чтобы справиться с рисками, связанными с уязвимостями компилятора Solidity, команда по безопасности Cobo Blockchain предлагает следующие рекомендации:
Для разработчиков:
Используйте более новую версию компилятора Solidity
Улучшить тестовые случаи модулей, повысить покрытие кода
Избегайте использования встроенной сборки, сложного кодирования и декодирования ABI и подобных операций, осторожно используйте новые функции и экспериментальные возможности.
Для сотрудников безопасности:
Обратить внимание на риски, которые могут быть вызваны компилятором во время аудита безопасности
Продвигать обновление версии компилятора в процессе разработки SDL, рассмотреть возможность внедрения автоматической проверки в CI/CD
Оценка фактического влияния уязвимости компилятора в зависимости от конкретных условий проекта
Некоторые полезные ресурсы:
Официальное уведомление о безопасности от Solidity
Список ошибок в репозитории Solidity на GitHub
Безопасные советы на странице кода контракта Etherscan
Сосредоточив внимание на безопасности компилятора и разумно используя соответствующие ресурсы, разработчики и специалисты по безопасности могут лучше предотвратить потенциальные риски, связанные с уязвимостями компилятора Solidity, и повысить общую безопасность смарт-контрактов.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
18 Лайков
Награда
18
6
Поделиться
комментарий
0/400
MEVSupportGroup
· 07-24 16:22
Проблемы с компилятором — это настоящая катастрофа...
Посмотреть ОригиналОтветить0
MetaverseLandlord
· 07-24 02:50
Текущая профессия программиста под высоким риском!
Анализ уязвимостей компилятора Solidity и меры по их предотвращению
Анализ уязвимостей компилятора Solidity и меры по их предотвращению
Компилятор является одной из основных компонентов современных компьютерных систем, его основная функция заключается в преобразовании исходного кода высокоуровневого языка программирования в исполняемый код для компьютера. Хотя большинство разработчиков и специалистов по безопасности обычно сосредотачиваются на безопасности кода приложений, безопасность самого компилятора также не должна игнорироваться. На самом деле, компилятор как компьютерная программа также может иметь уязвимости, которые в некоторых случаях могут привести к серьезным рискам безопасности.
Роль компилятора Solidity заключается в преобразовании кода смарт-контракта в машинный код команд Ethereum Virtual Machine (EVM). В отличие от уязвимостей самого EVM, уязвимости компилятора Solidity в основном относятся к проблемам, возникающим в процессе преобразования кода. Эти уязвимости не повлияют напрямую на сеть Ethereum, но могут привести к тому, что сгенерированный код EVM будет отличаться от ожидаемого разработчиком, что может вызвать серьезные последствия.
Вот несколько реальных примеров уязвимостей компилятора Solidity:
Уязвимость существует в ранних версиях компилятора Solidity (>=0.1.6 <0.4.4). Это может привести к тому, что переменные хранения возвращают неожиданные значения без изменения. Эта несогласованность может вызвать серьезные проблемы в критических операциях, таких как проверка прав доступа или учет активов.
Этот уязвимость затрагивает компиляторы версий >=0.8.13 <0.8.15. Она возникает из-за того, что компилятор ошибочно удаляет на первый взгляд избыточные, но на самом деле необходимые инструкции по работе с памятью в процессе оптимизации, что приводит к несоответствию возвращаемого значения функции ожидаемому.
Уязвимость затрагивает компиляторы версий >= 0.5.8 и < 0.8.16. При выполнении операции abi.encode с массивом типа calldata компилятор ошибочно очищает некоторые данные, что приводит к изменению соседних данных и, в конечном итоге, к несоответствию закодированных и декодированных данных.
Чтобы справиться с рисками, связанными с уязвимостями компилятора Solidity, команда по безопасности Cobo Blockchain предлагает следующие рекомендации:
Для разработчиков:
Для сотрудников безопасности:
Некоторые полезные ресурсы:
Сосредоточив внимание на безопасности компилятора и разумно используя соответствующие ресурсы, разработчики и специалисты по безопасности могут лучше предотвратить потенциальные риски, связанные с уязвимостями компилятора Solidity, и повысить общую безопасность смарт-контрактов.