Анализ уязвимостей компилятора 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, разработчики и специалисты по безопасности могут предпринять следующие меры:
Для разработчиков:
Используйте более новую версию компилятора Solidity, так как новые версии обычно исправляют известные проблемы безопасности.
Улучшение юнит-тестов, повышение покрытия кода, помогает выявить аномальное поведение, введенное компилятором.
Старайтесь избегать использования встроенной сборки, сложного кодирования и декодирования ABI и других операций, которые могут вызвать проблемы.
Для безопасности персонала:
Не пренебрегайте потенциальными рисками безопасности, которые могут быть введены компилятором во время аудита безопасности.
В процессе внутренней разработки поощрять команды разработчиков своевременно обновлять версии компиляторов и рассмотреть возможность внедрения автоматической проверки версий компиляторов в процесс CI/CD.
Будьте внимательны к уязвимостям компилятора, но не стоит паниковать. Большинство уязвимостей срабатывают только в определенных паттернах кода, и необходимо оценивать реальное воздействие в зависимости от конкретной ситуации.
Некоторые полезные ресурсы:
Регулярные уведомления о безопасности от команды Solidity
Список уязвимостей, регулярно обновляемый в официальном репозитории Solidity
Список уязвимостей компиляторов разных версий, который можно использовать для автоматической проверки в процессе CI/CD
Предупреждающий значок в правом верхнем углу страницы кода контракта Etherscan может указывать на существующие уязвимости в текущей версии компилятора.
Поняв характеристики и риски уязвимостей компилятора Solidity и приняв соответствующие меры предосторожности, разработчики и специалисты по безопасности могут лучше защитить безопасность смарт-контрактов и снизить потенциальные риски потерь активов.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
15 Лайков
Награда
15
6
Поделиться
комментарий
0/400
AirdropHunterKing
· 2ч назад
Тестировал контракт на собаку так долго, а все равно попался и съел кучу воздуха. Братья, не копируйте старый контракт!
Посмотреть ОригиналОтветить0
Layer3Dreamer
· 5ч назад
теоретически говоря, ошибки компилятора = рекурсивные предположения о доверии, если честно
Посмотреть ОригиналОтветить0
IntrovertMetaverse
· 5ч назад
Полная проверка переполнения на высокие и низкие значения!
Посмотреть ОригиналОтветить0
NftDeepBreather
· 5ч назад
Эта уязвимость настолько велика, что взрывается.
Посмотреть ОригиналОтветить0
RunWhenCut
· 5ч назад
Снова старая шутка о уязвимости компилятора, надоело?
Анализ уязвимостей компилятора 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, разработчики и специалисты по безопасности могут предпринять следующие меры:
Для разработчиков:
Для безопасности персонала:
Некоторые полезные ресурсы:
Поняв характеристики и риски уязвимостей компилятора Solidity и приняв соответствующие меры предосторожности, разработчики и специалисты по безопасности могут лучше защитить безопасность смарт-контрактов и снизить потенциальные риски потерь активов.