:RU: Почему опустошить кошелек Ethereum так просто, в отличие от кошелька Cardano?

Перевод статьи https://cexplorer.io/article/why-is-simple-to-drain-the-ethereum-wallet-unlike-the-cardano-wallet

image

В сфере децентрализованных приложений (DApp) пользователи, к сожалению, могут стать жертвами злоумышленников. Эти злоумышленники могут обманом заставить пользователей подписывать транзакции, которые приводят к выводу активов из их кошельков. Эта проблема особенно распространена в экосистеме Ethereum, и это связано не только с ее большим размером. В Ethereum пользователи обычно предварительно авторизуют DApp для перевода любого количества активов со своих кошельков в будущем. Хотя эта функция может показаться удобной, она часто используется в зловредах, обычно называемых "дрейнерами Ethereum”. Подобные инциденты менее распространены в экосистеме Cardano. В статье мы объясним, почему это так.

Предварительное одобрение будущей передачи активов опасно

В идеале у смарт контракта не должно быть владельца или какого-либо механизма, позволяющего владельцу переводить активы из смарт контракта на внешний адрес. Этот атрибут наделяет смарт контракты определенной степенью доверия. Пользователи могут уверенно делегировать свои активы смарт контракту (довериться коду, а не людям), будучи уверенными в том, что никакая третья сторона не сможет манипулировать этими активами. Следовательно, пользователям не нужно доверять команде, которая развернула смарт контракт.

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

Такая функция обычно ассоциируется с мошенническими смарт контрактами.

Дрейнеры Ethereum содержат функцию “transferFrom”, которая используется для перемещения цифровых активов из кошелька пользователя в смарт контракт. Затем функция “transferFrom” используется для перевода активов на адрес злоумышленника.

Функция “transferFrom” обычно используется DApp и является частью стандарта токенов ERC-20. Она позволяет смарт контракту передавать определенное количество токенов с одного адреса на другой, при условии, что исходный адрес одобрил смарт контракт на это. Подробнее об одобрении позже.

Как только активы будут контролироваться (принадлежать) смарт контрактам, функция “transferFrom” может быть использована для перемещения их из смарт контракта на другой адрес.

Функция “transferFrom” также является частью стандарта токенов ERC-20. Она используется для передачи токенов непосредственно с адреса вызывающей функции на другой адрес.

В контексте смарт контракта, если присутствует функция “transferFrom”, которая позволяет владельцу контракта передавать токены из контракта на любой внешний адрес, это потенциально может быть признаком мошеннического контракта. Адрес может контролироваться злоумышленником.

Дрейнеры кошельков Ethereum злоупотребляют функцией “approve”.

При взаимодействии со смарт контрактом в экосистеме Ethereum пользователям часто приходится одобрять контракт, чтобы потратить определенное количество токенов из своего кошелька. Это действие называется транзакцией одобрения токена или функцией “approve”.

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

Как только транзакция “approve” подписана, смарт контракт может вызвать функцию “transferFrom” в любое время, не требуя каких-либо дополнительных согласований или действий со стороны пользователя. Функция “transferFrom” является ончейн транзакцией и требует комиссии за газ, которая автоматически оплачивается из кошелька пользователя.

Как для транзакций “approve”, так и для транзакций “transferFrom” требуется комиссия за газ.

67a673c04604d10386199d2b21bf907f

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

Как происходит поэтапное опустошение кошелька

Атака начинается с социальной инженерии. Злоумышленник должен создать убедительный фишинговый веб-сайт или мошенническое приложение DApp. Они часто платят Google за то, чтобы он показывал пользователям их мошеннический веб-сайт в качестве первой ссылки. Существует много способов обмануть пользователей и заманить их в ловушку.

Мошенническое приложение DApp может быть поддельной версией популярного сервиса DeFi (DEX или платформы кредитования) или новым приложением, обещающим высокую доходность. Также может быть привлекательным выпуск серии NFT, размещение токенов для повышения доходности или участие в продаже токенов.

Пользователь посещает мошеннический веб-сайт или DApp и решает взаимодействовать с ним.

Чтобы начать взаимодействовать с DApp, пользователю предлагается подключить свой кошелек Ethereum. Как только кошелек подключен, DApp просит пользователя подписать “approve” транзакцию. Пользователя просят одобрить расходование большого количества токенов, часто максимально возможной суммы.

Пользователям это может не показаться подозрительным, поскольку они обычно подписывают “approve” транзакции в случае легитимных DApp. Они могут не обращать внимания на важные детали.

Пользователь подтверждает транзакцию в своем кошельке, не осознавая, что он дал мошенническому смарт контракту разрешение потратить все свои токены.

Как только транзакция подтверждена, мошеннический смарт контракт может в любое время вызвать функцию “transfer” (или transferFrom), чтобы вывести все одобренные токены из кошелька пользователя.

Можно отозвать одобрение, данное смарт контракту Ethereum. Этот процесс часто называют отзывом одобрений токенов или отзывом разрешений токенов. Отзыв одобрения - это транзакция ончейн, поэтому пользователям необходимо будет оплатить комиссии за газ. Некоторые пользователи могут не решиться отозвать одобрения токенов из-за связанных с этим комиссий.

Однако в большинстве случаев злоумышленники действуют быстро, поэтому у пользователей нет времени осознать, что они допустили ошибку.

Почему невозможно так легко вывести средства с кошелька Cardano?

Как в экосистеме Cardano, так и в Ethereum существует риск того, что злоумышленник может обманом заставить вас подписать транзакцию, которая переводит больше активов, чем вы намеревались.

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

Смарт контракты на Cardano по сути являются скриптами проверки подлинности. Эти скрипты автоматически выполняются каждой нодой Cardano при проверке транзакции, которая пытается перевести средства с адреса скрипта.

Разница между UTxO моделью Cardano и аккаунт моделью Ethereum существенна, когда речь заходит о возможности опустошения кошельков.

Cardano использует модель UTxO, в которой активы хранятся в виде неизрасходованных средств, а не в виде остатков на счетах. В этой модели транзакция имеет входы и выходы, где входами являются неизрасходованные выходы предыдущих транзакций. Каждый UTxO может быть использован только один раз и целиком. Таким образом, в модели UTxO Cardano нет эквивалента функции одобрения Ethereum.

Как правило, транзакция включает в себя только ограниченное количество UTXO, которыми пользователь располагает в своем кошельке. Любые UTXO, которые не включены в качестве входов в транзакцию, остаются незатронутыми подписью транзакции.

С точки зрения безопасности, эту модель можно рассматривать как более устойчивую к атакам с целью опустошения кошелька.

На картинке вы можете видеть, что Алиса должна подписывать каждую транзакцию, которая расходует UTxO. Смарт контракт не может произвольно передавать UTXO, принадлежащие Алисе.

2b2fd9c36674e5544d9ed9fd757462c7

Аккаунт Ethereum, представленный одним адресом, может содержать остатки нескольких различных типов токенов, включая различные токены ERC-20. Функция одобрения обычно не дает одобрения расходов для всего аккаунта. Вместо этого она предоставляет конкретному смарт контракту одобрение на расходование определенного количества конкретного токена ERC-20 из аккаунта пользователя.

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

На картинке вы можете видеть, что Алиса подписала только транзакцию “approve”. Это позволило мошенническому смарт контракту перевести все токены с ее аккаунта.

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

Вывод

Функция одобрения Ethereum предоставляет разработчикам функцию, аналогичную разрешению третьей стороне периодически снимать указанную сумму с вашего банковского счета. Хотя это полезная функция, она требует от пользователей доверять третьей стороне в том, что она не превысит лимит вывода средств. С другой стороны, Cardano не предлагает разработчикам аналогичную функцию. Пользователи должны однозначно подписывать каждую транзакцию, на которую расходуются UTXO из их кошелька.

Оба подхода имеют свои достоинства. Соответствующим командам необходимо было найти баланс между обеспечением безопасности и предоставлением широкого спектра возможностей разработчикам при разработке смарт контрактов. В то время как скрипты Cardano предназначены для проверки соблюдения условий для расходования UTXO, смарт контракты Ethereum могут получить контроль над аккаунтами пользователей.

// От переводчика: для получения дополнительных переведенных на русский язык статей о Cardano посетите русскоязычный раздел на форуме Cardano. Видеоролики о Cardano на русском языке можно найти на YouTube канале нашего замечательного амбасадора Тимура Сахабутдинова, а также на канале Чарльз Хоскинсон на русском. Хотите поговорить или задать вопрос о Cardano? Тогда приглашаем в наше уютное русскоязычное сообщество Cardano в Telegram. Оставайтесь на связи, все только начинается!