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
За пределами смарт-контракта: операционная безопасность доменов и DNS в Web3
Security Insights

За пределами смарт-контракта: операционная безопасность доменов и DNS в Web3

Аудит контрактов не проверяет сам контракт. Мы провели 800 SEAL-проверок DNS и регистраторов для 100 доменов из TVL Top 100 DefiLlama — лишь один домен прошёл все. Каких четырёх мер защиты не хватает большинству и почему это критично для пользователя.

Поверхности атаки Web3: обзор тестирования на проникновение

Поверхности атаки Web3: обзор тестирования на проникновение

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

Потеряно ~23 млн $: эксплойты Cosmos EVM и Moonwell | BlockSec Weekly
Security Insights

Потеряно ~23 млн $: эксплойты Cosmos EVM и Moonwell | BlockSec Weekly

За период (22.08.2026–30.08.2026): 5 инцидентов, ~$22,7 млн убытков; Tectonic — $74–119,5 млн, откачены на Cronos. Взлом Cosmos EVM (~$5,7 млн) на TAC Chain, Moonwell, Ajna, Rain Card Exploit (Ed25519) на Solana.

Best Security Auditor for Web3

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

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