Злоупотребление смарт-контрактами для кражи 600 миллионов долларов: как на самом деле взломали сеть Poly


10 августа хакер украл более 600 миллионов долларов через сеть Poly Network, после чего последовала череда странных событий.

В этой статье Kraken Security Labs углубляется в технические детали того, как злоумышленник смог украсть такую ​​большую сумму средств, а затем развернул патч Poly Network, чтобы гарантировать, что этот тип эксплойта не произойдет в будущем.

Механика взлома сети Poly

Poly Network позволяет подключаться к контрактам в разных сетях: например, вы можете совершать звонки до взлома. все метод включен все Контракт Ethereum от Ontology.

Возможность вызвать любой общедоступный метод для любого контракта сама по себе неплохая вещь – теоретически любая транзакция Ethereum может это сделать. Однако в Poly Network транзакции между цепочками в Ethereum выполнялись в соответствии с соглашением под названием EthCrossChainManager (Manager), которое имеет некоторые специальные разрешения.

Менеджер владеет другим контрактом с именем EthCrossChainData (Данные). Данные наблюдает за «золотыми яйцами», также известными как «хранители», которые представляют собой объекты (идентифицируемые своим открытым ключом), которые управляют кошельками Poly Network. А ТАКЖЕ Данные предоставляет функциональность на Менеджер обновить список владельцев.

Злоумышленник обнаружил, что, поскольку каждая транзакция выполняется: Менеджер, может обновить список сопровождающих в Данные. Затем он создал межцепную транзакцию в Ontology, которая будет выполняться в Ethereum, и зарекомендовал себя, и только он сам, как держатель всех средств Poly Network в Ethereum. Это дало ему необходимые полномочия для перевода всех средств на свой кошелек.

Как следствие, Poly Network теперь ограничивает, какие контракты и какие методы могут вызываться через межцепочечные транзакции, предотвращая повторение атаки.

Упрощенная сеть Poly

Poly Network использует так называемые «реле» для передачи информации между цепочками. Например, чтобы выполнить межцепочечную транзакцию Ontology to Ethereum, пользователь будет взаимодействовать с контрактом межцепочечного менеджера Poly Network в Ontology. Затем реле берет информацию из смарт-контракта и отправляет ее в блокчейн Ethereum. Между двумя цепочками цепочка Poly Network синхронизирует текущие заголовки блоков всех участвующих цепочек.

Смарт-контракты Poly Network

EthCross ChainManager

Сеть EthCrossМенеджер – это контракт Ethereum, запускаемый в транзакции между цепочками. Извлекает входящую транзакцию, проверяет ее, а затем выполняет любой целевой метод и контракт, указанные в транзакции.

Когда Relay пересылает транзакцию в Ethereum, он делает это с помощью Менеджер договор. Реле вызовет метод VerifyHeaderAndExecuteTx Менеджер, который проверит заголовок транзакции, убедится, что транзакция еще не была выполнена, а затем выполнит транзакцию с помощью метода _executeCrossChainTx.

Вот тут и становится интересно. Нет ограничений на то, какие методы могут быть вызваны транзакцией между цепочками. Можно указать любое имя метода, которое затем будет добавлено в список постоянных аргументов. (байты, байты, uint64):

По сути, вы можете вызвать любой метод, имеющий подпись (байты, байты, uint64).

Чтобы выполнить метод, например кракен (байты, байты, uint64), контракт преобразует его в идентификатор метода Solidity, 4-байтовый уникальный идентификатор для каждого метода в контракте.

Этот идентификатор метода создается путем keccak-хеширования имени метода, включая подпись, а затем извлечения первых четырех байтов полученного хеша:

Хотя сам хеш считается криптографически безопасным, его усечение (только первые четыре байта) открывает его для конфликтов. Поскольку мы можем выбрать имя метода, какое захотим, мы можем использовать строку грубой силы, которая будет генерировать тот же идентификатор метода, что и другой метод – и с 4-байтовым сокращением нам, вероятно, понадобится менее 4294967296 попыток (игнорируя парадокс дня рождения что потенциально могло бы облегчить атаку).

Короче говоря, мы можем вызвать любой метод с любой подписью аргумента для любого контракта Ethereum – и это именно то, что сделала атакующая Poly. Он дал название методу f1121318093который создает идентификатор метода 0x41973cd9. Но что же такого особенного в этом методе?

EthCrossChainDane

Атакующий Поли обнаружил, что Менеджер (контракт, который будет выполнять вызов нашего метода) также является владельцем контракта с именем Данные.

Менеджер он контролирует некоторые очень важные части информации: открытые ключи, принадлежащие Хранителям, организациям, которые управляют средствами в кошельках Poly Network. Благодаря закрытым ключам Keeper, хакер Poly смог перевести средства с кошельков Poly Network на свой собственный кошелек.

Важно отметить, что Данные включает метод, позволяющий владельцу Менеджер, контракты заменяют открытые ключи Хранителей.

Идентификатор метода Solidity, который имеет putCurEpochConPubKeyBytes,

0x41973cd9, это точно такой же идентификатор метода, что и имя метода, данное злоумышленником. f1121318093 он решил.

В качестве Менеджер может выполнить метод putCurEpochConPubKeyBytes, злоумышленник может загрузить свой собственный открытый ключ, получив полный контроль над средствами Ethereum.

в Онтологическая транзакция f771ba610625d5a37b67d30bf2f8829703540c86ad76542802567caaffff280c, злоумышленник совершил транзакцию между цепочками из сети Ontology в Ethereum, вызвав метод с именем f1121318093 по контракту EthCrossChainData. Затем это имя метода было преобразовано в идентификатор Solidity для putCurEpochConPubKeyBytes.

Обычно putCurEpochConPubKeyBytes является привилегированным методом. Данныене может быть вызвано никаким контрактом. Но, как Менеджер оба являются владельцем EthCrossChainData а также – контекст, в котором выполняется перекрестный вызов, вызов хакеру Poly был успешным.

Предоставив собственный открытый ключ в качестве аргумента для putCurEpochConPubKeyBytes, злоумышленник стал единственным сопровождающим и, таким образом, получил полный контроль над средствами онтологии. Затем он перевел все средства Ethereum в свой кошелек, а затем повторил то же самое для других сетей, в общей сложности потратив более 610 миллионов долларов.

Исправление сети Poly

После атаки создателей Poly Network опубликовал поправку вниз Менеджер. Вместо того, чтобы разрешать вызывать произвольные контракты и методы, теперь есть белый список обоих, который ограничивает возможности межцепной транзакции.

Сборник уязвимостей безопасности

Атака, приведшая к катастрофической потере средств, стала возможной благодаря нескольким конструктивным решениям и уязвимостям:

  • Данные принадлежал Менеджер, даже Менеджер имеет значительный риск и используется для запуска смарт-контрактов, поставляемых извне.
  • Неявное предположение состоит в том, что могут быть вызваны только методы с сигнатурой (bytes, bytes, uint64).
  • Возможность вызова любого контракта и любого метода Менеджер должен использоваться для доступа к привилегированным методам в существующих контрактах.

Затем злоумышленник решил вернуть все средства компании Poly Network, которая затем предложила ему работу в качестве главного советника по безопасности.

Атака Poly Network выявляет важность защиты решений смарт-контрактов и подчеркивает необходимость надежных аудитов и других мер тестирования безопасности при разработке и внедрении криптографических протоколов.

Kraken Security Labs – это элитная команда исследователей безопасности, занимающаяся защитой и развитием экосистемы криптовалюты путем тестирования популярных сторонних продуктов и услуг; работа с поставщиками для решения этих проблем; и информирование общественности о том, как они могут лучше всего себя защитить. Узнать больше о Kraken Security Labs и не забывайте всегда думать о безопасности.

дальнейшее чтение


Купить крипту на BINANCE и получить ваучер на 100USDT! Успей сейчас, предложение ограничено!


Оставьте ваш отзыв!

Leave a reply

Майнинг, блокчейн, криптовалюты, цены, купить-продать, графики, прогнозы
Logo
Enable registration in settings - general