Протокол Poly Network - REKT



Это рект, дорогие читатели. И масштаб его огромен.

Украдено $611 миллионов.

Это больше, чем было украдено в ходе хакерской атаки на Mt Gox. Больше, чем ВВП нескольких маленьких стран. И больше, чем сумма всех хаков в рейтинге rekt.news вместе взятых.

Самая большая хакерская атака в криптосфере... за всю ее историю.

Протокол Poly Network= rekt.

Но как?

Источник: breadcrumbs.app, slowmist, blocksec

Адрес атакующего в ETH: 0xc8a65fadf0e0ddaf421f28feab69bf6e2e589963

Адрес атакующего в BSC: 0x0D6e286A7cfD25E0c01fEe9756765D8033B32C71

На этот раз дело не обошлось обычным флэш-займом / арбитражем.

Хакер провел эксплойт контрактов Proxy Lock сети Poly Network в трех разных чейнах.

Эфириум: 0x250e76987d838a75310c34bf422ea9f1ac4cc906

BSC: 0x05f0fDD0E49A5225011fff92aD85cC68e1D1F08e

Polygon: 0x28FF66a1B95d7CAcf8eDED2e658f768F44841212

Источник: @kelvinfichter

"У Poly есть контракт, который называется "EthCrossChainManager". Это приоритетный контракт, у которого есть право задействовать сообщения из другого чейна. Для кросс-чейновых проектов это стандартное решение.

В нем есть функция, которая называется verifyHeaderAndExecuteTx, которую может вызвать каждый, чтобы выполнить кросс-чейновую транзакцию.

Путем проверки подписей она (1) проверяет правильность заголовка блока (похоже, что другой чейн был сайдчейном PoA) и затем (2) с помощью проверки Меркла удостоверяется, что транзакция была включена в этот блок. Код можно посмотреть здесь.

В последнюю очередь функция вызывает executeCrossChainTx, что делает вызов целевого контракта. Именно здесь находилась критическая ошибка. Poly делает проверку, чтобы удостовериться, что целью является контракт, но они забыли принять меры, чтобы пользователи не делали call на очень большую цель... контракт EthCrossChainData.

Послав такое крос-чейновое сообщение, пользователь имел возможность подменить EthCrossChainManager на вызов контракта EthCrossChainData при прохождении проверки onlyOwner. Теперь пользователю оставалось лишь сфабриковать нужные данные, чтобы привести в действие функцию, которая изменяет публичные ключи...

Единственной оставшейся сложностью было понять, как заставить EthCrossChainManager вызвать нужную функцию. Теперь перейдем к более сложным вещам и разберем, как Solidity выбирает, какую функцию вы пытаетесь вызвать.

Первые четыре байта вводных данных транзакции называются "signature hash" или кратко "sighash". Это небольшой кусочек информации, который указывает контракту, написанному на языке Solidity, что вы хотите сделать.

Sighash функции можно рассчитать, взяв первые четыре байта хэша от "<function name>(<function input types>)". Например, sighash функции трансфера ERC20 - это первые четыре байта хэша от "transfer(address,uint256)".

Контракт Poly мог бы вызвать любой контракт. Но, тем не менее, он смог бы вызвать только функцию контракта, который соответствует следующему sighash:

Стоп, погодите... "_method" здесь был пользовательским вводом. Все, что нужно было сделать хакеру для того, чтобы вызвать нужную функцию, это вычислить некоторое значение для "_method", которое, при сочетании с другими значениями и хешировании, имело бы такие же первые четыре байта, как и sighash нужной нам функции.

Покопавшись совсем немного, легко можно найти ввод, который производит правильный sighash. Нет необходимости добиваться полного совпадения хэшей, нужно всего лишь проверить первые четыре байта. Так справедлива ли эта теория?

Ну... вот фактический хэш целевой функции:

http://ethers.utils.id ('putCurEpochConPubKeyBytes(bytes)').slice(0, 10)

'0x41973cd9'

И sighash, который создал хакер...

http://ethers.utils.id ('f1121318093(bytes,bytes,uint64)').slice(0, 10)

'0x41973cd9'

Фантастика. Даже не понадобилось компрометировать приватные ключи! Всего лишь создать нужные данные и бум... контракт сможет взломать себя сам!

Один из самых больших уроков по разработке, который люди должны извлечь из этого, состоит вот в чем: если у вас есть подобные кросс-чейновые релейные контракты, то УБЕДИТЕСЬ В ТОМ, ЧТО ИХ НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ, ЧТОБЫ ВЫЗЫВАТЬ СПЕЦИАЛЬНЫЕ КОНТРАКТЫ. У EthCrossDomainManager не должно было быть прав на владение контрактом EthCrossDomainData.

Нужно разделять задачи. Если вашему контракту обязательно нужны специальные привилегии, подобные этой, то убедитесь, что пользователи не могут использовать кросс-чейновые сообщения, чтобы вызывать специальные контракты.

В блокчейне Эфириума хакер украл:

USDC - 96,389,444

WBTC - 1,032

DAI - 673,227

UNI - 43,023

SHIBA - 259,737,345,149

renBTC- 14.47

USDT - 33,431,197

wETH - 26,109

FEI USD - 616,082

В блокчейне BSC хакер украл:

BNB - 6,613.44

USDC - 87,603,373

ETH - 299

BTCB - 26,629

BUSD - 1,023

В блокчейне Полигона хакер украл:

USDC - 85,089,610

ОБЩАЯ СУММА ПОТЕРИ - ~$611,000,000

В момент написания статьи украденные фонды находятся в следующих кошельках:

ETH: 0xC8a65Fadf0e0dDAf421F28FEAb69Bf6E2E589963

BSC: 0x0D6e286A7cfD25E0c01fEe9756765D8033B32C71

Polygon: 0x5dc3603C9D42Ff184153a8a9094a73d461663214

Сюжетные линии в DeFi редко бывают простыми, и эта не стала исключением.

Даже анонимные игроки обожают внимание.

Спустя немного времени после эксплоита появился неожиданный главный герой, называющий себя hanashiro.eth.

hanashiro.eth впервые привлек к себе внимание, когда он послал хакеру совет, что сделать с USDT, за который он получил от хакера 13.37 Эфира в качестве вознаграждения.

После этого многие другие тоже послали хакеру сообщения, но больше никому не повезло так, как hanashiro.eth.

С поистине криптовалютным уровнем филантропной зрелищности, hanashiro.eth отдал свои украденные деньги в качестве пожертвования нескольким фундаментальным организациям, которые поддерживают наш сектор: Infura, Etherscan и rekt.news.

Но не ко всем фондам можно было так легко получить доступ.

Tether заморозил все 33 миллиона USDT, которые были украдены в чейне Ethereum.

Их койн - их выбор... Об этом стоит помнить, если вы пользуетесь USDT.

К этому моменту дерьмо уже попало в вентилятор: все внимание было направлено на Poly Network, который прибег к отправке открытого письма хакеру, умоляя его вернуть фонды.

Один-единственный твит преступнику с просьбой вернуть шестьсот миллионов долларов... Возможно, Генслер был прав, когда сказал, что мы находимся в фазе “Дикого Запада” криптовалют.

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

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

А ощущения при попытке отмыть эти деньги, должно быть, равны по интенсивности.

Не считая JPEGS, было бы очевидно начать с tornado.cash, и именно туда и направился наш хакер.

Он послал самому себе транзакцию, в которой содержалось сообщение:

Интересно, почему именно Tornado? Смогут ли майнеры остановить меня? Ну давайте посмотрим

Психологическая диверсия или тупость? В крипте никогда до конца не ясно...

В бегах с 600 миллионами, и вещает сообщения для многотысячной аудитории.

Хакер становился все более самоуверенным.

Когда @WardBradt твитнул следующее:

Не случайно ли эксплойтер PolyNetwork использовал неправильный адрес отправителя для этой транзакции 0xb12681d9e? Адрес отправителя связан с аккаунтами FTX, Binance, Okex.

Неожиданно поведение хакера изменилось.

Естественно, хакер, который достаточно уверен в себе, чтобы попытаться провести атаку такого масштаба, не допустил бы такую простейшую ошибку в функциональной безопасности. Или, возможно, они использовал фальшивый документы для прохождения KYC...

В любой случае, мы начали наблюдать у хакера признаки страха.

Хакер начал строить предположения, что он мог бы вернуть "какую-то часть токенов" или даже отказаться от них, говоря, что "деньги его не так уж и интересуют".

Затем хакер задумался об идее создать ДАО, чтобы раздать украденные фонды.

В конце концов, давление стало слишком сильным, и хакер объявил, что он “ГОТОВ СДАТЬСЯ”

Неожиданный и беспрецедентный шаг, хакер сейчас возвращает фонды в Poly Network.

Он объявил, что он был "ГОТОВ ВЕРНУТЬ ФОНДЫ!" в транзакции в чейне Эфириума, которую он послал с того же кошелька, который использовал для атаки.

До того, как послать первую возвратную транзакцию, хакер создал токен, который он назвал "Хакер готов сдаться" и послал его в Poly Network. Те объявили, что установили мультисиг, контролируемый "известными адресами Poly".

Резюме переписки хакера с Poly Network можно найти здесь.

В момент написания, хакер вернул следующие фонды:

В блокчейне Эфириума: $2.6M

В блокчейне BSC: $1.1M

В блокчейне Polygon: $1M

Вернет ли он все фонды, или это очередной трюк?

Может ли он просто вернуть деньги и заслужить прощение?

Poly Network. 611 милионов.

И вы думали, что знаете все большие протоколы в DeFi.

Эта индустрия выросла больше, чем может выдержать наша эхо-камера.

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

Хорошо это или плохо, но крипта заставит говорить о себе, и миру придется принять это во внимание, потому что наша индустрия становится нормой.

Это всего лишь еще один неизбежный этап прогресса.


Поделиться

REKT представляет собой общественную площадку для анонимных авторов. Мы не несём ответственность за выражаемые точки зрения или контент на этом веб-сайте.

Пожертвование (ETH / ERC20): 0x3C5c2F4bCeC51a36494682f91Dbc6cA7c63B514C

Дисклеймер:

REKT не несет никакой ответственности за любое содержание, размещенное на нашем Веб-сайте или имеющее какое-либо отношение к оказываемым нами Услугам, независимо от того, было ли оно опубликовано или создано Анонимным Автором нашего Веб-сайта или REKT. Не смотря на то, что мы устанавливаем правила поведения и нормы публикаций для Анонимных Авторов, мы не контролируем и не несем ответственность за содержание публикаций Анонимных Авторов, а также за то, чем делятся и что передают Авторы с помощью нашего Сайта и наших Сервисов, и не несем ответственность за любое оскорбительное, неуместное, непристойное, незаконное или спорное содержание, с которым вы можете столкнуться на нашем Веб-сайте и на наших Сервисах. REKT не несет ответственность за поведение, будь то онлайн или офлайн, любого пользователя нашего Веб-сайта или наших Сервисов.