Skip to content
Yieldo

Wintermute

$160.0M
Украдено средств
Возвращено средств
20 Sep 2022
Дата инцидента
Техника
Phishing
Классификация
Social Engineering
Тип цели
Other
Затронутые сети
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-контуров на отдельные пути кастодиального хранения ограничило ущерб одним звеном и позволило компании абсорбировать девятизначный убыток без банкротства — довод в пользу операционной изоляции независимо от безопасности отдельно взятого контракта.

On-chain DeFi несёт риск смарт-контрактов. Держите основные средства на регулируемой бирже.