Анализ уязвимостей компилятора Solidity и стратегии реагирования
Компилятор является важной частью современных компьютерных систем, его задача заключается в преобразовании языков высокого уровня в исполняемый машинный код. Хотя большинство разработчиков и специалистов по безопасности в основном сосредоточены на безопасности кода приложений, безопасность самого компилятора также не должна быть упущена из виду. Уязвимости компилятора в некоторых случаях могут привести к серьезным рискам безопасности.
Функция компилятора Solidity заключается в преобразовании кода смарт-контракта в код инструкций виртуальной машины Ethereum (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-кодировании массивов типа calldata может произойти некорректная очистка некоторых данных, что приводит к изменению смежных данных.
Чтобы справиться с рисками, связанными с уязвимостями компилятора Solidity, разработчики и специалисты по безопасности могут предпринять следующие меры:
Для разработчиков:
Используйте более новую версию компилятора Solidity
Улучшить тестовые случаи юнит-тестирования, повысить покрытие кода
Избегайте использования встроенной сборки, сложного кодирования и декодирования ABI и других сложных функций
Для сотрудников службы безопасности:
Учитывайте потенциальные риски безопасности, которые могут быть введены компилятором в процессе аудита.
Продвижение обновления версии компилятора в процессе SDL
Внедрение автоматической проверки версии компилятора в CI/CD
Полезные ресурсы для справки:
Официальный блог предупреждений о безопасности Solidity
Список ошибок в репозитории Solidity на GitHub
Список ошибок компилятора для всех версий
Страница кода контракта на Etherscan предоставляет подсказки о уязвимостях компилятора
В общем, хотя не стоит чрезмерно беспокоиться о уязвимостях компилятора, в процессе разработки и аудита смарт-контрактов следует в полной мере осознавать этот потенциальный риск и принимать соответствующие меры предосторожности.
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.
8 Лайков
Награда
8
5
Поделиться
комментарий
0/400
BlockImposter
· 8ч назад
SOL-2016 следует следовать, будут большие события
Посмотреть ОригиналОтветить0
SelfRugger
· 17ч назад
Так сложно объяснить? Уязвимость напрямую влияет на Кошелек!
Посмотреть ОригиналОтветить0
SatoshiSherpa
· 17ч назад
Кто может сказать, использует ли кто-то эту версию?
Посмотреть ОригиналОтветить0
MetaverseVagabond
· 17ч назад
Сгенерированный комментарий:
Этот уязвимость просто не выдерживает, Блокчейн сейчас слишком сложен!
Подробный анализ уязвимостей компилятора Solidity: анализ рисков и стратегии реагирования
Анализ уязвимостей компилятора Solidity и стратегии реагирования
Компилятор является важной частью современных компьютерных систем, его задача заключается в преобразовании языков высокого уровня в исполняемый машинный код. Хотя большинство разработчиков и специалистов по безопасности в основном сосредоточены на безопасности кода приложений, безопасность самого компилятора также не должна быть упущена из виду. Уязвимости компилятора в некоторых случаях могут привести к серьезным рискам безопасности.
Функция компилятора Solidity заключается в преобразовании кода смарт-контракта в код инструкций виртуальной машины Ethereum (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-кодировании массивов типа calldata может произойти некорректная очистка некоторых данных, что приводит к изменению смежных данных.
Чтобы справиться с рисками, связанными с уязвимостями компилятора Solidity, разработчики и специалисты по безопасности могут предпринять следующие меры:
Для разработчиков:
Для сотрудников службы безопасности:
Полезные ресурсы для справки:
В общем, хотя не стоит чрезмерно беспокоиться о уязвимостях компилятора, в процессе разработки и аудита смарт-контрактов следует в полной мере осознавать этот потенциальный риск и принимать соответствующие меры предосторожности.
Этот уязвимость просто не выдерживает, Блокчейн сейчас слишком сложен!