Анализ уязвимостей компилятора Solidity и стратегии противодействия
Компилятор, будучи одной из основных составных частей современных компьютерных систем, выполняет функцию преобразования исходного кода на высокоуровневом языке программирования в исполняемый машинный код. Хотя разработчики и специалисты по безопасности обычно больше сосредоточены на безопасности кода приложений, безопасность самого компилятора также не может быть проигнорирована. Уязвимости компилятора в некоторых случаях могут представлять серьезный риск для безопасности.
Роль компилятора Solidity заключается в том, чтобы преобразовать код смарт-контракта в машинный код инструкций Ethereum Virtual Machine (EVM). В отличие от уязвимостей самого EVM, уязвимости компилятора Solidity возникают в процессе преобразования Solidity в код EVM. Эти уязвимости не влияют напрямую на сеть Ethereum, но могут привести к тому, что сгенерированный код EVM будет отличаться от ожидаемого разработчиком, что может вызвать проблемы с безопасностью смарт-контракта.
Вот несколько典型ных примеров уязвимостей компилятора Solidity:
Уязвимость HighOrderByteCleanStorage ( затрагивает версии: >=0.1.6 <0.4.4)
Уязвимость может привести к тому, что переменная storage будет возвращать неожиданные значения без изменений.
Уязвимость InlineAssemblyMemorySideEffects ( затрагивает версии: >=0.8.13 <0.8.15)
Из-за проблем с оптимизацией компилятора изменения в памяти, сделанные в встроенном ассемблере, могут быть ошибочно оптимизированы.
Уязвимость AbiReencodingHeadOverflowWithStaticArrayCleanup ( затрагивает версии: >= 0.5.8 < 0.8.16)
При выполнении операции abi.encode с массивом типа calldata может произойти неправильное изменение соседних данных, что приведет к несоответствию закодированных и декодированных данных.
Чтобы справиться с рисками, связанными с уязвимостями компилятора Solidity, разработчики и специалисты по безопасности могут предпринять следующие меры:
Рекомендации для разработчиков:
Используйте более новую версию компилятора Solidity
Избегайте использования встроенной ассемблерной программы, сложного кодирования и декодирования ABI и других операций, осторожно используйте новые функции.
Рекомендуется службой безопасности:
Учитывайте риски, которые могут быть связаны с компилятором в процессе аудита безопасности
Продвигать обновление версии компилятора в процессе разработки
Внедрение автоматической проверки версии компилятора в процессе CI/CD
Полезные ресурсы:
Официальный блог о безопасности Solidity
Список ошибок в репозитории Solidity на GitHub
Список ошибок компилятора для всех версий
Безопасные советы на странице кода контракта Etherscan
Обратив внимание на безопасность компилятора и приняв соответствующие меры предосторожности, можно эффективно снизить потенциальные риски, связанные с уязвимостями компилятора Solidity, и повысить общую безопасность смарт-контрактов.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
11 Лайков
Награда
11
4
Поделиться
комментарий
0/400
0xSunnyDay
· 18ч назад
Просто поиграйте с уязвимостями компилятора.
Посмотреть ОригиналОтветить0
BearMarketMonk
· 18ч назад
Кто еще сам ищет уязвимости? Готовые инструменты не лучше?
Посмотреть ОригиналОтветить0
NeverVoteOnDAO
· 18ч назад
Уязвимости, похоже, стало гораздо больше. Просто Клиповые купоны.
Посмотреть ОригиналОтветить0
DefiEngineerJack
· 18ч назад
*вздох* ошибки компилятора буквально причина, по которой нам нужна формальная верификация... ngmi без этого, честно говоря
Анализ уязвимостей компилятора Solidity и стратегии реагирования
Анализ уязвимостей компилятора Solidity и стратегии противодействия
Компилятор, будучи одной из основных составных частей современных компьютерных систем, выполняет функцию преобразования исходного кода на высокоуровневом языке программирования в исполняемый машинный код. Хотя разработчики и специалисты по безопасности обычно больше сосредоточены на безопасности кода приложений, безопасность самого компилятора также не может быть проигнорирована. Уязвимости компилятора в некоторых случаях могут представлять серьезный риск для безопасности.
Роль компилятора Solidity заключается в том, чтобы преобразовать код смарт-контракта в машинный код инструкций Ethereum Virtual Machine (EVM). В отличие от уязвимостей самого EVM, уязвимости компилятора Solidity возникают в процессе преобразования Solidity в код EVM. Эти уязвимости не влияют напрямую на сеть Ethereum, но могут привести к тому, что сгенерированный код EVM будет отличаться от ожидаемого разработчиком, что может вызвать проблемы с безопасностью смарт-контракта.
Вот несколько典型ных примеров уязвимостей компилятора Solidity:
Уязвимость HighOrderByteCleanStorage ( затрагивает версии: >=0.1.6 <0.4.4) Уязвимость может привести к тому, что переменная storage будет возвращать неожиданные значения без изменений.
Уязвимость InlineAssemblyMemorySideEffects ( затрагивает версии: >=0.8.13 <0.8.15) Из-за проблем с оптимизацией компилятора изменения в памяти, сделанные в встроенном ассемблере, могут быть ошибочно оптимизированы.
Уязвимость AbiReencodingHeadOverflowWithStaticArrayCleanup ( затрагивает версии: >= 0.5.8 < 0.8.16) При выполнении операции abi.encode с массивом типа calldata может произойти неправильное изменение соседних данных, что приведет к несоответствию закодированных и декодированных данных.
Чтобы справиться с рисками, связанными с уязвимостями компилятора Solidity, разработчики и специалисты по безопасности могут предпринять следующие меры:
Рекомендации для разработчиков:
Рекомендуется службой безопасности:
Полезные ресурсы:
Обратив внимание на безопасность компилятора и приняв соответствующие меры предосторожности, можно эффективно снизить потенциальные риски, связанные с уязвимостями компилятора Solidity, и повысить общую безопасность смарт-контрактов.