Back to Blog

Наш краткий анализ уязвимости инструмента проверки ненормативной лексики

Code Auditing
21 сентября 2022 г.
4 min read

Проект Wintermute стал жертвой взлома, потери составили более 160 млн долларов. Первопричиной стало компрометирование закрытого ключа проекта Wintermute из-за уязвимости в инструменте Profanity, который использовался Wintermute для генерации закрытого ключа и аккаунта Ethereum.

В этом блоге мы опишем первопричину уязвимости в Profanity и расскажем, как её можно эксплуатировать.

Адрес Ethereum

Адрес Ethereum генерируется из Keccak-256 хеша публичного ключа и представляется в виде шестнадцатеричных чисел. Публичный ключ генерируется из закрытого ключа с помощью умножения на эллиптической кривой, этот процесс необратим. Мы можем получить публичный ключ из закрытого, однако мы не можем получить закрытый ключ, имея публичный, без метода перебора (brute force). Заметим, что длина закрытого ключа составляет 256 бит. Имея публичный ключ, вам потребуется максимум 2^256 операций, чтобы найти соответствующий закрытый ключ.

Одним словом, взаимосвязь между закрытым/публичным ключом и адресом Ethereum показана на следующем рисунке.

Первопричина уязвимости

Цель Profanity — найти специальный адрес Ethereum, например, адрес, пять начальных символов которого равны нулю. Для этого Profanity использует следующий метод.

Детальная реализация может немного отличаться.

Обратите внимание, что длина private_key составляет 256 бит (2^256 различных значений). Однако существует уязвимость при генерации закрытого ключа. В частности, начальное значение (seed) (на шаге 1) составляет всего 32 бита, а процесс от seed на шаге 1 до private_key на шаге 2 является детерминированным.

Каково влияние этого на безопасность?

Как эксплуатировать

Допустим, у нас есть адрес Ethereum с большим количеством ценных активов. Если мы сможем получить его закрытый ключ, то мы сможем завладеть этим аккаунтом и вывести все активы. Однако, как обсуждалось ранее, мы должны перебрать всё пространство ключей 2^256, чтобы найти закрытый ключ, что практически невозможно.

Но что, если адрес Ethereum был сгенерирован с помощью инструмента Profanity? Мы можем использовать перебор, чтобы найти закрытый ключ со значительно меньшей сложностью. Нам нужно всего лишь задать seed от 0 до 2^32-1 и повторять тот же процесс, пока мы не найдем закрытый ключ, который может генерировать тот же публичный ключ (и адрес Ethereum). Поскольку нам нужно выполнить максимум 2^32 * порог_цикла операций, это вполне выполнимо за несколько часов, дней или недель при наличии мощного GPU-кластера.

Тем не менее, это все еще оптимизированный алгоритм. Вы можете обратиться к статье от Slowmist для получения более подробной информации.

Выводы

Обеспечение безопасности DeFi-проекта — непростая задача. Помимо аудита кода, мы считаем, что сообществу следует использовать проактивный подход для мониторинга состояния проекта и блокировать атаку еще до того, как она произойдет.

О компании BlockSec

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

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

Официальный сайт: https://blocksec.com/

Официальный аккаунт в Twitter: https://twitter.com/BlockSecTeam

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