Skip to content
yieldo. Крипто-аналитика

Wintermute

$160.0M
Украдено средств
20.09.2022
Дата инцидента
Техника
Phishing
Классификация
Обман пользователей или сотрудников
Тип цели
Другой сервис
Затронутые сети
Ethereum

20 сентября 2022 года маркет-мейкер Wintermute сообщил, что злоумышленник вывел около $160 млн в стейблкоинах и других токенах из одного из его DeFi-хранилищ на Ethereum. Основатель компании Евгений Гаевой уточнил, что причина — не баг в смарт-контракте, а компрометация приватного ключа (The Hacker News).

Как устроена атака

Админ-адрес хранилища — кошелёк, которому контракт разрешал выводить средства, — был сгенерирован инструментом Profanity: популярным open-source генератором «вэнити»-адресов с заданным префиксом (Wintermute использовала адреса вида 0x000000..., чтобы экономить газ на частых транзакциях). За неделю до взлома исследователи 1inch раскрыли уязвимость в самом Profanity: инструмент генерировал приватный ключ не из полного пространства значений, а из значительно урезанного и предсказуемого для GPU seed — поэтому при достаточной вычислительной мощности можно было восстановить приватный ключ по любому публичному адресу, когда-либо созданному этим инструментом (Forbes). Формально это ближе к атаке на слабую энтропию и предвычислению, чем к перебору по всему 256-битному пространству ключей — но по факту это та же категория, что и в нашей базе: ключ не украли и не выудили фишингом, а вычислили.

У Wintermute было десять кошельков, сгенерированных Profanity, и компания утверждает, что после публикации уязвимости начала выводить их из обращения. Один кошелёк «по человеческой ошибке» остался незащищённым, по словам Гаевого, — и это оказался именно админ-кошелёк хранилища. Атакующий вычислил его приватный ключ, вызвал административные функции контракта напрямую и вывел средства. Глава безопасности Polygon Мудит Гупта отметил, что сам контракт отработал ровно так, как задумано: уязвимость была не в коде, а в скомпрометированном ключе (The Block).

Что было дальше

Wintermute заявила, что инцидент затронул только DeFi-операции; централизованные и OTC-направления не пострадали. Гаевой сообщил, что компания осталась платёжеспособной — капитал заметно превышал размер потерь, — и публично предложил атакующему 10%-й «white hat»-бонус (около $16 млн) за возврат остального, предупредив, что окно для переговоров быстро закрывается. Атакующий на связь не вышел и вместо этого провёл средства через Curve и Tornado Cash. Средства так и не были возвращены, о задержаниях не сообщалось. Wintermute продолжила работу без остановки, включая своевременное погашение существующих долговых обязательств.

Что из этого следует

  • Генераторы вэнити-адресов без аудированного источника энтропии — структурный риск для любого кошелька, который держит реальные средства: проблема невидима, пока кто-то не реверс-инжинирит генератор, — а после этого задним числом скомпрометированными оказываются все адреса, когда-либо им созданные.
  • Привилегированный «админ»-кошелёк смарт-контракта несёт тот же радиус поражения, что и кошелёк, держащий средства напрямую, — модель доступа и план реагирования на инцидент должны закладывать это заранее, а не постфактум.
  • Частичное устранение уязвимости после публичного раскрытия почти равносильно его отсутствию: Wintermute знала о проблеме Profanity и вывела из обращения девять кошельков из десяти — но хватило и одного пропущенного. Как только генератор ключей признан скомпрометированным, каждый когда-либо созданный им адрес нужно считать скомпрометированным и переносить средства, а не «вносить в блэклист».
  • Разделение DeFi-, CeFi- и OTC-контуров на отдельные пути кастодиального хранения ограничило ущерб одним звеном и позволило компании абсорбировать девятизначный убыток без банкротства — довод в пользу операционной изоляции независимо от безопасности отдельно взятого контракта.