В ноябре 2023 года профессор Чжоу Яцзинь, генеральный директор BlockSec, был приглашен на первый саммит ученых Web3, организованный DRK Lab. В ходе конференции профессор Чжоу рассказал о работе и достижениях BlockSec в области обнаружения уязвимостей в EVM (виртуальной машине Ethereum). Он также представил автоматизированный инструмент дифференциального фаззинга от BlockSec, специально разработанный для обеспечения безопасности EVM-совместимых сетей. В этой статье приведено краткое изложение содержания выступления.
Введение
Согласно статистическим данным Defillama, в настоящее время существует 238 публичных блокчейнов уровней L1 и L2, 144 из которых являются EVM-совместимыми. Однако возникает вопрос: есть ли у этих EVM-совместимых сетей какие-либо проблемы с безопасностью при их реализации? После проведения нашего исследования ответ оказался утвердительным. В ответ на эту проблему компания BlockSec запустила автоматизированный инструмент обеспечения безопасности на основе дифференциального фаззинга. Присоединяйтесь к нам, чтобы вместе узнать правду об этих 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? С какими трудностями мы сталкиваемся?
-
Во-первых, из-за сложной архитектуры виртуальной машины трудно найти инструменты, которые могут полностью понять логику её работы. Каждая область требует специализации, и многие разработчики не могут потратить достаточно усилий, чтобы понять логику её работы и предпринять эффективные меры предосторожности.
-
Кроме того, многие новые публичные сети L1/L2 модифицируют виртуальную машину EVM, что потенциально может привести к появлению новых проблем с безопасностью.
Очевидно, что полагаться исключительно на ручной аудит для выявления этих проблем в виртуальной машине EVM сложно.
Адаптируйтесь и реагируйте соответственно! Учитывая эти проблемы, компания BlockSec разработала автоматизированную систему для их прямого устранения!
Дифференциальный фаззинг
В BlockSec наша команда экспертов применила остроумный подход, известный как дифференциальный фаззинг. Запуская одни и те же тестовые примеры в разных версиях виртуальной машины и сравнивая полученные результаты, мы можем выявить потенциальные уязвимости и несоответствия. Этот метод позволяет нам эффективно обнаруживать тонкие различия, которые обычные методы тестирования могут упустить, тем самым повышая общую безопасность системы.

Базовый принцип работы:
Для проведения дифференциального фаззинга нам нужно подготовить идентичные входные данные в качестве тестовых примеров. Затем эти примеры подаются в движок дифференциального фаззинга. Сравнивая результаты выполнения одних и тех же тестов на разных версиях виртуальной машины, мы можем выявить потенциальные проблемы.
Конкретные этапы реализации:
Тестовый пример для дифференциального фаззинга должен состоять из двух частей: метаданных транзакции и предсостояния. Но как мы генерируем эти транзакции? У нас есть два подхода для решения этой задачи.
- Повторное использование исторических транзакций: мы можем извлечь исторические транзакции, которые произошли в блокчейне, и прогнать их через разные версии виртуальной машины в движке дифференциального фаззинга. Однако полагаться только на этот метод имеет свои ограничения. Исторические транзакции, как правило, слишком «обычные», в то время как тестирование безопасности требует выявления граничных случаев — исключительных сценариев. Именно поэтому мы придумали второй подход.
- Фаззинг, управляемый покрытием: мы создаем необычный байт-код и исторически не встречавшиеся транзакции с нуля, затем мутируем транзакции и код смарт-контрактов и вводим их в виртуальную машину. Мы обеспечиваем валидность и всесторонность тестовых примеров в различных измерениях.
После генерации транзакций они подаются в движок дифференциального фаззинга, а результаты затем сравниваются.
Сравнение результатов — это не просто простое числовое сопоставление, но и всесторонний анализ согласованности данных как в постоянном, так и в энергозависимом хранилищах виртуальной машины. В этой статье мы не будем углубляться в дальнейшие детали.
Пример из практики

Я хотел бы поделиться случаем уязвимости виртуальной машины, которую мы обнаружили в 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



