Анализ уязвимостей компилятора Solidity и меры по их устранению
Компилятор является одной из основных компонентов современных компьютерных систем, его функция заключается в преобразовании исходного кода на высокоуровневом языке программирования в исполняемый компьютерный машинный код. Хотя большинство разработчиков и специалистов по безопасности обычно сосредоточены на безопасности кода приложений, безопасность самого компилятора также имеет важное значение. Уязвимости компилятора в определенных сценариях могут представлять серьезные риски для безопасности, например, браузер при разборе и выполнении кода Javascript может, из-за уязвимости в движке разбора, привести к удаленному выполнению кода.
Компилятор Solidity не является исключением и имеет уязвимости в нескольких версиях. Роль компилятора Solidity заключается в преобразовании кода смарт-контракта в инструкции кода Ethereum Virtual Machine (EVM). Важно отметить, что уязвимости компилятора Solidity отличаются от уязвимостей самого EVM. Уязвимости EVM могут повлиять на всю сеть Ethereum, в то время как уязвимости компилятора Solidity в основном затрагивают разработчиков смарт-контрактов и пользователей.
Одним из рисков уязвимости компилятора Solidity является возможность того, что сгенерированный EVM-код не соответствует ожиданиям разработчика. Поскольку смарт-контракты обычно связаны с криптовалютными активами пользователей, любые ошибки, вызванные компилятором, могут иметь серьезные последствия. Такие проблемы трудно обнаружить с помощью простого аудита кода, их необходимо анализировать в сочетании с конкретной версией компилятора и кодовыми паттернами.
Вот несколько реальных примеров уязвимостей компилятора Solidity:
SOL-2016-9 HighOrderByteCleanStorage:
Уязвимость существует в ранних версиях компилятора Solidity (>=0.1.6 <0.4.4). Поскольку компилятор неправильно обрабатывает операцию очистки старших разрядов после переполнения целого числа, это может привести к случайному изменению значений соседних переменных.
SOL-2022-4 Побочные эффекты встроенной сборкиПамяти:
Уязвимость существует в компиляторах версий >=0.8.13 <0.8.15. Из-за неправильной обработки встроенного ассемблерного кода в процессе оптимизации компилятора некоторые операции с памятью могут быть ошибочно оптимизированы.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup:
Уязвимость затрагивает компиляторы версий >= 0.5.8 и < 0.8.16. При выполнении операции abi.encode с массивом типа calldata возможно неправильное очищение некоторых данных, что приводит к изменению соседних данных.
В ответ на уязвимость компилятора Solidity команда по безопасности блокчейна Cobo предлагает следующие рекомендации:
Для разработчиков:
Используйте более новую версию компилятора Solidity
Улучшить тестовые случаи для модулей
Избегайте использования встроенной ассемблерной программы, сложной кодировки и декодировки ABI и других операций.
Осторожно используйте новые языковые функции и экспериментальные возможности
Для службы безопасности:
Учитывайте риски, которые могут быть вызваны компилятором во время аудита безопасности.
Продвигать обновление версии компилятора в процессе разработки
Ввести автоматическую проверку версии компилятора в процесс CI/CD
Оценка фактического влияния уязвимости компилятора в зависимости от конкретной ситуации проекта
Некоторые полезные ресурсы:
Официальное предупреждение о безопасности от Solidity
Список ошибок, обновленный официальным репозиторием Solidity
Список ошибок компилятора для всех версий
Функция уведомления о уязвимостях компилятора, предоставляемая Etherscan
Следя за безопасностью компилятора, улучшая тестирование, осторожно используя сложные функции и своевременно обновляя версию компилятора, разработчики и специалисты по безопасности могут эффективно снизить риски, связанные с уязвимостями компилятора Solidity, и повысить общую безопасность смарт-контрактов.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
15 Лайков
Награда
15
6
Поделиться
комментарий
0/400
Rekt_Recovery
· 07-12 06:08
покойся с миром, фонды всех... я был там, потерял все из-за ошибок компилятора в 2018 году, смх
Посмотреть ОригиналОтветить0
RunWhenCut
· 07-12 05:51
测不测都得被 разыгрывайте людей как лохов
Посмотреть ОригиналОтветить0
FUDwatcher
· 07-12 03:11
Этот баг действительно страшный, уходим, уходим!
Посмотреть ОригиналОтветить0
ResearchChadButBroke
· 07-09 10:27
С компилятором снова проблемы? Придется ночами исправлять баги.
Посмотреть ОригиналОтветить0
MoonlightGamer
· 07-09 10:19
Код проверен, проблем нет.
Посмотреть ОригиналОтветить0
GasGuzzler
· 07-09 09:58
Все еще пишу смарт-контракты, чувствуется запах неудачников.
Анализ уязвимостей компилятора Solidity и стратегии реагирования
Анализ уязвимостей компилятора Solidity и меры по их устранению
Компилятор является одной из основных компонентов современных компьютерных систем, его функция заключается в преобразовании исходного кода на высокоуровневом языке программирования в исполняемый компьютерный машинный код. Хотя большинство разработчиков и специалистов по безопасности обычно сосредоточены на безопасности кода приложений, безопасность самого компилятора также имеет важное значение. Уязвимости компилятора в определенных сценариях могут представлять серьезные риски для безопасности, например, браузер при разборе и выполнении кода Javascript может, из-за уязвимости в движке разбора, привести к удаленному выполнению кода.
Компилятор Solidity не является исключением и имеет уязвимости в нескольких версиях. Роль компилятора Solidity заключается в преобразовании кода смарт-контракта в инструкции кода Ethereum Virtual Machine (EVM). Важно отметить, что уязвимости компилятора Solidity отличаются от уязвимостей самого EVM. Уязвимости EVM могут повлиять на всю сеть Ethereum, в то время как уязвимости компилятора Solidity в основном затрагивают разработчиков смарт-контрактов и пользователей.
Одним из рисков уязвимости компилятора Solidity является возможность того, что сгенерированный EVM-код не соответствует ожиданиям разработчика. Поскольку смарт-контракты обычно связаны с криптовалютными активами пользователей, любые ошибки, вызванные компилятором, могут иметь серьезные последствия. Такие проблемы трудно обнаружить с помощью простого аудита кода, их необходимо анализировать в сочетании с конкретной версией компилятора и кодовыми паттернами.
Вот несколько реальных примеров уязвимостей компилятора Solidity:
SOL-2016-9 HighOrderByteCleanStorage: Уязвимость существует в ранних версиях компилятора Solidity (>=0.1.6 <0.4.4). Поскольку компилятор неправильно обрабатывает операцию очистки старших разрядов после переполнения целого числа, это может привести к случайному изменению значений соседних переменных.
SOL-2022-4 Побочные эффекты встроенной сборкиПамяти: Уязвимость существует в компиляторах версий >=0.8.13 <0.8.15. Из-за неправильной обработки встроенного ассемблерного кода в процессе оптимизации компилятора некоторые операции с памятью могут быть ошибочно оптимизированы.
SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup: Уязвимость затрагивает компиляторы версий >= 0.5.8 и < 0.8.16. При выполнении операции abi.encode с массивом типа calldata возможно неправильное очищение некоторых данных, что приводит к изменению соседних данных.
В ответ на уязвимость компилятора Solidity команда по безопасности блокчейна Cobo предлагает следующие рекомендации:
Для разработчиков:
Для службы безопасности:
Некоторые полезные ресурсы:
Следя за безопасностью компилятора, улучшая тестирование, осторожно используя сложные функции и своевременно обновляя версию компилятора, разработчики и специалисты по безопасности могут эффективно снизить риски, связанные с уязвимостями компилятора Solidity, и повысить общую безопасность смарт-контрактов.