Back to Blog

Проверка безопасности: насколько надежны EVM-совместимые блокчейны?

Code Auditing
4 января 2024 г.
5 min read

В ноябре 2023 года профессор Чжоу Яцзинь, генеральный директор BlockSec, был приглашен на первый саммит ученых Web3, организованный DRK Lab. В ходе конференции профессор Чжоу рассказал о работе и достижениях BlockSec в области обнаружения уязвимостей в EVM (виртуальной машине Ethereum). Он также представил автоматизированный инструмент дифференциального фаззинга от BlockSec, специально разработанный для обеспечения безопасности EVM-совместимых сетей. В этой статье приведено краткое изложение содержания выступления.

Введение

Согласно статистическим данным Defillama, в настоящее время существует 238 публичных блокчейнов уровней L1 и L2, 144 из которых являются EVM-совместимыми. Однако возникает вопрос: есть ли у этих EVM-совместимых сетей какие-либо проблемы с безопасностью при их реализации? После проведения нашего исследования ответ оказался утвердительным. В ответ на эту проблему компания BlockSec запустила автоматизированный инструмент обеспечения безопасности на основе дифференциального фаззинга. Присоединяйтесь к нам, чтобы вместе узнать правду об этих EVM-совместимых сетях.

Уязвимости в виртуальных машинах

Рисунок 1: Схема рабочего процесса виртуальной машины Ethereum (EVM)
Рисунок 1: Схема рабочего процесса виртуальной машины Ethereum (EVM)

На примере виртуальной машины Ethereum (EVM): она использует стековую архитектуру, включающую виртуальную ROM, счетчик команд, стек, память и состояние мира (постоянное).

Виртуальная машина выступает в роли движка, который интерпретирует и выполняет скомпилированный бинарный код смарт-контрактов. Ключевым компонентом многих блокчейн-платформ является виртуальная машина, при этом виртуальная машина Ethereum (EVM) особенно примечательна. Таким образом, виртуальная машина играет ключевую роль в выполнении смарт-контрактов, обработке транзакций и обеспечении целостности блокчейна.

Мы знаем, что сама EVM — это также программное обеспечение, написанное программистами. Однако как мы можем быть уверены, что в EVM нет проблем? В конце концов, ошибки возможны в любом коде, написанном людьми.

И как только ошибка появляется в EVM, это влечет за собой катастрофические последствия для экосистемы блокчейна. На самом деле, в прошлом в EVM уже были обнаружены серьезные уязвимости.

Например, в 2020 году произошел инцидент с уязвимостью, связанный с предварительно скомпилированным контрактом (т.е. CVE-2020-26241) [1]. Предварительно скомпилированный контракт dataCopy в протоколе Geth (расположенный по адресу 0x00...04) выполнял поверхностное копирование при вызове, когда при копировании большого объема данных копировались только указатели, а не полные данные. Это позволяло вредоносным смарт-контрактам изменять данные, которые не должны были быть изменены, что приводило к несогласованности данных при выполнении одного и того же смарт-контракта в разных версиях виртуальной машины. Другой пример произошел в 2021 году, когда некоторые EVM-совместимые сети не обновились одновременно с Ethereum. В старых версиях Geth была обнаружена уязвимость (CVE-2021-39137) [2], при которой области памяти для входных и выходных данных при вызовах предварительно скомпилированных контрактов перекрывались. Злоумышленники использовали эту уязвимость, что привело к форку сети.

Меры противодействия BlockSec

Как своевременно обнаружить уязвимости в EVM? С какими трудностями мы сталкиваемся?

  1. Во-первых, из-за сложной архитектуры виртуальной машины трудно найти инструменты, которые могут полностью понять логику её работы. Каждая область требует специализации, и многие разработчики не могут потратить достаточно усилий, чтобы понять логику её работы и предпринять эффективные меры предосторожности.

  2. Кроме того, многие новые публичные сети L1/L2 модифицируют виртуальную машину EVM, что потенциально может привести к появлению новых проблем с безопасностью.

Очевидно, что полагаться исключительно на ручной аудит для выявления этих проблем в виртуальной машине EVM сложно.

Адаптируйтесь и реагируйте соответственно! Учитывая эти проблемы, компания BlockSec разработала автоматизированную систему для их прямого устранения!

Дифференциальный фаззинг

В BlockSec наша команда экспертов применила остроумный подход, известный как дифференциальный фаззинг. Запуская одни и те же тестовые примеры в разных версиях виртуальной машины и сравнивая полученные результаты, мы можем выявить потенциальные уязвимости и несоответствия. Этот метод позволяет нам эффективно обнаруживать тонкие различия, которые обычные методы тестирования могут упустить, тем самым повышая общую безопасность системы.

Рисунок 2: Рабочий процесс дифференциального фаззинга
Рисунок 2: Рабочий процесс дифференциального фаззинга

Базовый принцип работы:

Для проведения дифференциального фаззинга нам нужно подготовить идентичные входные данные в качестве тестовых примеров. Затем эти примеры подаются в движок дифференциального фаззинга. Сравнивая результаты выполнения одних и тех же тестов на разных версиях виртуальной машины, мы можем выявить потенциальные проблемы.

Конкретные этапы реализации:

Тестовый пример для дифференциального фаззинга должен состоять из двух частей: метаданных транзакции и предсостояния. Но как мы генерируем эти транзакции? У нас есть два подхода для решения этой задачи.

  1. Повторное использование исторических транзакций: мы можем извлечь исторические транзакции, которые произошли в блокчейне, и прогнать их через разные версии виртуальной машины в движке дифференциального фаззинга. Однако полагаться только на этот метод имеет свои ограничения. Исторические транзакции, как правило, слишком «обычные», в то время как тестирование безопасности требует выявления граничных случаев — исключительных сценариев. Именно поэтому мы придумали второй подход.
  2. Фаззинг, управляемый покрытием: мы создаем необычный байт-код и исторически не встречавшиеся транзакции с нуля, затем мутируем транзакции и код смарт-контрактов и вводим их в виртуальную машину. Мы обеспечиваем валидность и всесторонность тестовых примеров в различных измерениях.

После генерации транзакций они подаются в движок дифференциального фаззинга, а результаты затем сравниваются.

Сравнение результатов — это не просто простое числовое сопоставление, но и всесторонний анализ согласованности данных как в постоянном, так и в энергозависимом хранилищах виртуальной машины. В этой статье мы не будем углубляться в дальнейшие детали.

Пример из практики

Рисунок 3: Пример проблемы с предварительно скомпилированным контрактом *ModExp* в Aurora VM
Рисунок 3: Пример проблемы с предварительно скомпилированным контрактом *ModExp* в Aurora VM

Я хотел бы поделиться случаем уязвимости виртуальной машины, которую мы обнаружили в Aurora VM с помощью дифференциального фаззинга. В частности, это связано с проблемой предварительно скомпилированного смарт-контракта ModExp.

При вычислении модульного возведения числа x в степень y мы знаем, что эта операция требует вычислительных ресурсов. В правильной реализации расчет газа учитывает количество итераций, так как модульное возведение в степень включает в себя несколько итераций. Однако существует специфический сценарий, где расчет газа может столкнуться с проблемой: когда показатель степени y равен 0, что указывает на возведение в нулевую степень. В этом случае количество итераций становится равным нулю, что приводит к чрезвычайно низкому значению газа. Но фактически вычисление все равно требует ресурсов.

Заключение

В настоящее время инструмент дифференциального фаззинга, запущенный BlockSec, поддерживает выполнение в средах различных виртуальных машин блокчейнов, включая rbpf, ubpf, Aurora-engine, neon-evm, Moonbeam, revm, EvmOS, fevm и Polygon-zkevm, и этот список продолжает расширяться.

С помощью этого инструмента мы обнаружили 14 новых уязвимостей, подали заявки на 2 CVE: CVE-2021–46102 и CVE-2022–23066, и получили более 1,3 миллиона долларов в виде вознаграждений за найденные баги (bug bounties).

На данный момент комплексное решение по безопасности EVM-сетей от BlockSec (услуги аудита + инструменты дифференциального фаззинга) было признано и принято к использованию проектами EOS и FileCoin, что будет способствовать безопасности и здоровому развитию их экосистем.

Ссылки

[1] Поверхностное копирование в precompile 0x4 может привести к повреждению памяти EVM

[2] Повреждение RETURNDATA через datacopy

О BlockSec

BlockSec — это инновационная компания в сфере безопасности блокчейнов, основанная в 2021 году группой всемирно признанных экспертов по безопасности. Компания стремится повысить безопасность и удобство использования для развивающегося мира Web3, способствуя его массовому внедрению. С этой целью BlockSec предоставляет услуги по аудиту безопасности смарт-контрактов и EVM-сетей, платформу Phalcon для безопасной разработки и проактивной блокировки угроз, платформу MetaSleuth для отслеживания и расследования транзакций, а также расширение MetaDock для эффективной навигации разработчиков Web3 в криптомире.

На сегодняшний день компания обслужила более 300 уважаемых клиентов, таких как MetaMask, Uniswap Foundation, Compound, Forta и PancakeSwap, и получила десятки миллионов долларов США в ходе двух раундов финансирования от выдающихся инвесторов, включая Matrix Partners, Vitalbridge Capital и Fenbushi Capital.

✉️Бизнес-консалтинг: [email protected]

Аккаунт BlockSec в Twitter: https://twitter.com/BlockSecTeam

Аккаунт Phalcon в Twitter: https://twitter.com/Phalcon_xyz

Sign up for the latest updates
Потери около 5,57 млн USD: атаки на X100 Freezer и NEM | Еженедельный обзор BlockSec
Security Insights

Потери около 5,57 млн USD: атаки на X100 Freezer и NEM | Еженедельный обзор BlockSec

Этот еженедельный отчёт охватывает два инцидента безопасности в сетях Ethereum и BNB Chain за период 19.10.2026–25.10.2026. В нём рассматриваются захват управления X100 Freezer, профинансированный с помощью флеш-кредита, и ошибка при расчёте налога, затронувшая пул ликвидности токена NEM в сети BNB Chain. Оценочные потери в рамках отчёта составляют в общей сложности около 5,57 млн USD: ~4,75 млн USD по рассматриваемой транзакции X100 и ~820 тыс. USD в результате инцидента с пулом NEM. В эту сумму не входят отдельно опубликованные данные о последующих выводах средств из X100.

Потери на сумму около 3,87 млн USD: взломы Autheo Network и UNCX | Еженедельный обзор BlockSec
Security Insights

Потери на сумму около 3,87 млн USD: взломы Autheo Network и UNCX | Еженедельный обзор BlockSec

В этом еженедельном отчёте рассматриваются 3 инцидента безопасности за период 12.10.2026–18.10.2026. Общий оценочный ущерб составил около 3,87 млн USD. Ущерб Autheo Network от компрометации закрытого ключа составил примерно 1,76 млн USD, Qubic Wallet потерял примерно 1,30 млн USD из-за ненадёжной генерации seed, а ошибка учёта в контрактах Smart Token Vesting V2 сети UNCX Network на Ethereum, BNB Chain, Base и Robinhood Chain привела к ущербу примерно в 807 тыс. USD. В подробном анализе инцидента UNCX объясняется, как некорректный расчёт совокупного количества долей смешивал транши вестинга, созданные при разных соотношениях токенов и долей, и позволял выводить из общих пулов больше положенного.

Потеряно около $542 тыс.: эксплуатация уязвимости MakerDaoBot | Еженедельный обзор BlockSec
Security Insights

Потеряно около $542 тыс.: эксплуатация уязвимости MakerDaoBot | Еженедельный обзор BlockSec

В Ethereum за 05–11.10.2026 произошёл 1 инцидент; ущерб — около $542 тыс. Атакующий передал вредоносный адаптер функции MakerDaoBot без контроля доступа. Получив права на балансы MakerDAO, адаптер закрыл 4 аукциона ETH-A, конвертировал 200 ETH-A в WETH; атакующий вывел 200 ETH.

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit