Анализ уязвимостей компилятора Solidity и меры реагирования
Компилятор является одним из основных компонентов современных компьютерных систем, его функция заключается в преобразовании исходного кода на высокоуровневом языке программирования в исполняемые инструкции для компьютера. Хотя разработчики и специалисты по безопасности обычно сосредоточены на безопасности кода программного приложения, сам компилятор как компьютерная программа также может иметь уязвимости в безопасности, которые в некоторых случаях могут представлять серьезный риск безопасности.
Роль компилятора Solidity заключается в преобразовании кода смарт-контракта в машинный код для виртуальной машины Ethereum (EVM). В отличие от уязвимостей самой EVM, уязвимости компилятора Solidity в основном проявляются в том, что при преобразовании Solidity в код EVM могут возникнуть проблемы, которые не влияют непосредственно на саму сеть Ethereum, но могут привести к тому, что сгенерированный код EVM будет не соответствовать ожиданиям разработчика.
Вот несколько примеров реальных уязвимостей компилятора Solidity:
SOL-2016-9 HighOrderByteCleanStorage:
Уязвимость существует в ранних версиях компилятора Solidity (>=0.1.6 <0.4.4). Поскольку компилятор неправильно очищает старшие разряды при обработке переполнения целых чисел, это может привести к неожиданному изменению соседних переменных.
SOL-2022-4 Побочные эффекты встроенной сборкиПамяти:
Уязвимость существует в компиляторах версий от 0.8.13 до 0.8.15. Из-за оптимизации компилятора, анализирующей отдельные блоки assembly, могут ошибочно удаляться кажущиеся избыточными, но на самом деле полезные инструкции записи в память.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup:
Уязвимость затрагивает компиляторы версий с 0.5.8 по 0.8.16. При выполнении операции abi.encode с массивом типа calldata неверно очищались некоторые данные, что приводило к изменению соседних данных.
В связи с уязвимостями компилятора Solidity команда по безопасности блокчейна Cobo предлагает следующие рекомендации:
Для разработчиков:
Используйте более новую версию компилятора Solidity
Улучшить тестовые случаи для модулей
Избегайте использования встроенной ассемблерной программы, сложного кодирования и декодирования ABI и других операций.
Для безопасности сотрудников:
Учитывайте потенциальные риски безопасности, которые может внести компилятор во время аудита.
Убедить обновить версию компилятора в процессе разработки
Оцените фактическое влияние уязвимостей компилятора в зависимости от конкретной ситуации
Некоторые полезные ресурсы:
Официальное предупреждение о безопасности Solidity
Список ошибок в репозитории Solidity на GitHub
Список ошибок компилятора для всех версий
Советы по безопасности на странице кода контракта Etherscan
В общем, разработчики и специалисты по безопасности должны обращать внимание на потенциальные риски безопасности, связанные с уязвимостями компилятора Solidity, и принимать меры по снижению этих рисков, такие как обновление компилятора и улучшение тестирования.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
24 Лайков
Награда
24
6
Поделиться
комментарий
0/400
StakeWhisperer
· 07-21 09:21
Ранее следовали за ошибками компилятора? Этот новичок убивает смехом.
Посмотреть ОригиналОтветить0
OnchainGossiper
· 07-21 06:50
Только что исправил уязвимость, а новая уже появилась... развожу руками
Посмотреть ОригиналОтветить0
blockBoy
· 07-20 10:39
Это действительно старая и сложная проблема... Кто сможет ее действительно решить?
Посмотреть ОригиналОтветить0
BearMarketSage
· 07-20 10:39
Разработали, но не могут сами протестировать контракт?
Анализ уязвимостей компилятора Solidity и стратегий их устранения
Анализ уязвимостей компилятора Solidity и меры реагирования
Компилятор является одним из основных компонентов современных компьютерных систем, его функция заключается в преобразовании исходного кода на высокоуровневом языке программирования в исполняемые инструкции для компьютера. Хотя разработчики и специалисты по безопасности обычно сосредоточены на безопасности кода программного приложения, сам компилятор как компьютерная программа также может иметь уязвимости в безопасности, которые в некоторых случаях могут представлять серьезный риск безопасности.
Роль компилятора Solidity заключается в преобразовании кода смарт-контракта в машинный код для виртуальной машины Ethereum (EVM). В отличие от уязвимостей самой EVM, уязвимости компилятора Solidity в основном проявляются в том, что при преобразовании Solidity в код EVM могут возникнуть проблемы, которые не влияют непосредственно на саму сеть Ethereum, но могут привести к тому, что сгенерированный код EVM будет не соответствовать ожиданиям разработчика.
Вот несколько примеров реальных уязвимостей компилятора Solidity:
SOL-2016-9 HighOrderByteCleanStorage: Уязвимость существует в ранних версиях компилятора Solidity (>=0.1.6 <0.4.4). Поскольку компилятор неправильно очищает старшие разряды при обработке переполнения целых чисел, это может привести к неожиданному изменению соседних переменных.
SOL-2022-4 Побочные эффекты встроенной сборкиПамяти: Уязвимость существует в компиляторах версий от 0.8.13 до 0.8.15. Из-за оптимизации компилятора, анализирующей отдельные блоки assembly, могут ошибочно удаляться кажущиеся избыточными, но на самом деле полезные инструкции записи в память.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup: Уязвимость затрагивает компиляторы версий с 0.5.8 по 0.8.16. При выполнении операции abi.encode с массивом типа calldata неверно очищались некоторые данные, что приводило к изменению соседних данных.
В связи с уязвимостями компилятора Solidity команда по безопасности блокчейна Cobo предлагает следующие рекомендации:
Для разработчиков:
Для безопасности сотрудников:
Некоторые полезные ресурсы:
В общем, разработчики и специалисты по безопасности должны обращать внимание на потенциальные риски безопасности, связанные с уязвимостями компилятора Solidity, и принимать меры по снижению этих рисков, такие как обновление компилятора и улучшение тестирования.