Согласно финансовому отчету Thorchain за первый квартал 2022 года, опубликованному 1 апреля, сеть зарегистрировала рост выручки, несмотря на двойное влияние постоянной вялости рынка и крайне нестабильной геополитической обстановки. Публичные данные показывают, что в первом квартале 2022 года Thorchain зафиксировала выручку в размере 2,17 млрд долларов. Thorchain, получившая признание как «кроссчейн версия Uniswap», закрепилась на рынке кроссчейн-трейдинга, опираясь на свои уникальные преимущества, и получила широкое признание среди инвесторов.
Помимо всего этого гламура, THORChain также серьезно обеспокоен хакерскими атаками. Сеть часто подвергалась нарушениям безопасности с момента запуска на Ethereum, что ставит под сомнение ее безопасность. 11 апреля THORChain написал в Твиттере о фишинговых атаках, предупредив пользователей, чтобы они не взаимодействовали с [DeTHOR] или другими неизвестными токенами в своих кошельках, что еще раз вызвало обеспокоенность по поводу проблем с безопасностью.
Создавая надежную систему безопасности для продуктов CoinEx, команда безопасности CoinEx также отслеживает инциденты безопасности в пространстве блокчейна, чтобы помочь пользователям лучше понять безопасность различных проектов с точки зрения технической безопасности и снизить инвестиционный риск. Стремясь улучшить критерии безопасности для сектора блокчейна, команда безопасности CoinEx проанализировала риски безопасности THORChain (RUNE). Команда надеется, что THORChain сможет выявить и смягчить следующие риски, оптимизировав соответствующие коды смарт-контрактов. Кроме того, эта статья также является предупреждением для пользователей, напоминая им о необходимости быть более осведомленными о безопасности активов и избегать их потери.
Насколько безопасен THORChain (RUNE)?
Проанализировав код контракта и логику THORChain (RUNE), команда безопасности CoinEx обнаружила следующие риски:
Для начала проверим код контракта THORChain (RUNE):
https://etherscan.io/address/0x3155ba85d5f96b2d030a4966af206230e46849cb#code
Мы можем сказать, что RUNE — довольно стандартный токен ERC-20. Следует отметить, что помимо интерфейса ERC-20, THORChain (RUNE) предлагает дополнительный интерфейс:
Согласно данным TransferTo (как показано на рисунке выше), THORChain (RUNE) использует tx.origin, что является одной из причин его угроз безопасности. Здесь мы должны объяснить разницу между tx.origin и msg.sender:
На картинке ниже показано, что происходит, когда обычный адрес вызывает смарт-контракт:
Вот что происходит, когда учетная запись вызывает контракт А, а контракт А вызывает контракт Б:
Однако в контракте B msg.sender = contractA.address, а tx.origin = account.address. Таким образом, tx.origin похожа на глобальную переменную, которая проходит через весь стек вызовов и возвращает адрес учетной записи, изначально отправившей транзакцию. Это ключевой вопрос: на сегодняшний день почти все известные атаки на THORChain (RUNE) связаны с tx.origin.
Давайте теперь выясним, как злоумышленники воруют токены RUNE пользователей через tx.origin:
Атака №1: украсть козу из стада
Адреса в Ethereum делятся на внешние адреса и контрактные адреса. Передача ETH на эти два типа адресов через внешние адреса принципиально отличается. В официальной документации Solidity указано, что адрес контракта должен реализовать функцию получения эфира перед выполнением переводов.
В свете особенностей tx.origin хакеры могут создать контракт на атаку:
Атака №2: Внутренняя атака
Внутренняя атака — это особый тип атаки. При попытке украсть RUNE пользователя с помощью внутренней атаки хакеру необходимо иметь токен среднего размера. Более того, токен также должен вызывать сторонние контракты. Согласно записям о передаче RUNE на Ethereum, некоторые злоумышленники взломали RUNE посредством передачи токенов AMP.
Токен AMP использует стандарт ERC-1820 для управления регистрацией хука и проверки того, зарегистрирован ли хук при каждой передаче. Если хук был зарегистрирован, то будет вызван хук.
Код контракта токена AMP показывает, что окончательная реализация передачи: _transferByPartition. При этом есть два вызова с участием transferHook: _callPreTransferHooks (до передачи) и _callPostTransferHooks (после передачи). В частности, _callPreTransferHooks предназначен для адреса отправителя, а _callPostTransferHooks — для адреса получателя (т. е. адреса получателя).
Для обычных пользователей воровать токены у самих себя бессмысленно. Поэтому злоумышленники могут использовать _callPostTransferHooks. Давайте теперь проверим коды _callPostTransferHooks.
Мы можем сказать, что единственным обратным вызовом, который могут использовать злоумышленники, является IAmpTokensRecipient(recipientImplementation).tokensReceived().
Далее мы покажем, как этот вызов можно использовать для передачи RUNE пользователя при передаче токена AMP.
Шаг 1: Необходим договор вызова (как показано ниже):
Шаг 3: Вызовите интерфейс контракта ERC-1820 (setInterfaceImplementer), чтобы зарегистрировать интерфейс.
Адрес ERC-1820: 0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24.
Интерфейс контракта: setInterfaceImplementer (адрес toAddr, bytes32 interfaceHash, реализация адреса)
В частности, toAddr — адрес получателя AMP-передачи,
interfaceHash为AmpTokensRecipient的хеш:
0xfa352d6368bbc643bcf9d528ffaba5dd3e826137bc42f935045c6c227bd4c72a
interfaceHash — это хэш AmpTokensRecipient:
0xfa352d6368bbc643bcf9d528ffaba5dd3e826137bc42f935045c6c227bd4c72a
Implementer — это адрес атаки, полученный на шаге 2.
Шаг 4: Заманите пользователя перевести AMP на адрес toAddr, чтобы вызвать обратный вызов, и одновременно украсть его RUNE.
Атака №3: фишинговая атака
Как следует из названия, при фишинговой атаке злоумышленник обещает предоставить невероятные преимущества, чтобы заманить пользователей к выполнению определенных контрактных операций. Здесь мы представим распространенную фишинговую атаку.
Шаг 1: Злоумышленник выпускает токен ERC-20 и может записать его в любой контрактный интерфейс, который включает подписи.
Шаг 2: Создайте торговую пару на Uniswap или любом другом свопе;
Шаг 3: Предложите раздачу всем пользователям/адресам, у которых есть токены RUNE;
Первоначальная работа фишинговой атаки в основном завершается с помощью описанных выше шагов. Далее злоумышленнику нужно только дождаться, пока пользователи совершят обмен по свопу, а пользователи рискуют потерять свои RUNE после выполнения таких операций, как одобрение, перевод и т. д.
Кроме того, чтобы дополнительно проверить риск безопасности кода контракта THORChain, CoinEx обсудил с командой безопасности из SlowMist и PeckShield, двух известных агентств безопасности в отрасли. SlowMist и PeckShield подтвердили, что упомянутая выше угроза безопасности действительно существует.
До сих пор мы рассмотрели несколько типов атак, а также риски безопасности, которым подвергаются пользователи.
Как команда проекта должна оптимизировать код контракта, чтобы повысить свою безопасность и защитить активы пользователей?
Единственный ответ — будьте осторожны при использовании tx.origin.
Как обычные пользователи могут снизить риски и защитить свои активы перед лицом атак, которые кажутся неизбежными? Команда безопасности CoinEx предлагает следующие предложения:
- Для Атаки №1: При переводе следите за расчетным расходом Газа. Для обычного перевода ETH комиссии за газ в размере 21 000 более чем достаточно. Будьте осторожны, если потребление газа намного превышает это значение.
- Для атаки № 2: изолируйте свои токены, приняв разные кошельки. Вы можете хранить разные токены по разным адресам. Особая осторожность необходима, когда речь идет об адресе горячего кошелька, предлагаемом биржами.
- Для атаки № 3: Жадность — источник всего зла. Не участвуйте вслепую в каких-либо аирдропах.
Безопасность всегда была главной заботой в секторе блокчейнов. Все игроки, включая проектные команды и биржи, должны уделять первоочередное внимание безопасности во время работы проекта, обеспечивать безопасность и безопасность активов пользователей и совместно способствовать здоровому росту индустрии блокчейнов.
Источник