Мы обнаружили новый тип фишинга, который набирает популярность. Вместо развертывания фишинговых смарт-контрактов (которые могут быть помечены поставщиками средств безопасности) мошенники злоупотребляют легитимными контрактами для проведения атак.
В этом блоге мы расскажем, как мошенники используют этот метод, и дадим советы, как не стать жертвой фишинга.
Обзор
Обычно мошенники развертывают фишинговые контракты, чтобы красть токены у жертв. Как правило, в таких контрактах содержатся подозрительные payable-функции и функции для вызова нескольких операций (multi-call). Пользователи, посещающие фишинговые сайты, отправляют ETH или подтверждают (approve) токены для этих контрактов. Однако поставщики средств безопасности и кошельки могут обнаруживать и помечать такие фишинговые контракты, что приводит к блокировке транзакций, направленных на них.
Тем не менее, мы обнаружили, что мошенники злоупотребляют легитимными контрактами, развернутыми известными Web3-проектами, в своих фишинговых целях. Эти легитимные контракты нельзя пометить как фишинговые и заблокировать. Мы называем это «ROP» в контексте Web3-фишинга, поскольку они НЕ разворачивают новые контракты, а повторно используют существующие легитимные. Это похоже на ROP-атаку (или атаку с повторным использованием кода) в традиционных областях информационной безопасности.
Если говорить точнее, return-oriented programming (ROP) — это метод эксплойта компьютерной безопасности, который позволяет злоумышленнику использовать фрагменты кода из существующих библиотек. В контексте Web3-фишинга «ROP» означает использование контрактов, развернутых легитимными проектами, в мошеннических целях. Впервые об этом явлении сообщил аккаунт в Twitter @MevRefund в своем посте.
Как работают традиционные фишинговые Web3-контракты
На ранних этапах Web3-фишинга мошенники создавали внешние кошельки (EOA) и заманивали пользователей перевести ETH или подтвердить использование токенов для этого аккаунта. Однако теперь такое поведение легко распознается кошельками и обнаруживается пользователями. В результате мошенники перешли к развертыванию фишинговых контрактов. Для фишинга ETH мошенники обычно используют payable-функцию с подозрительными названиями, такими как «Claim» (Получить) или «Security Update» (Обновление безопасности). Эти заманчивые названия функций побуждают пользователей подписывать фишинговые транзакции и переводить ETH.
Для фишинга токенов стандартов ERC20 и ERC721 мошенники побуждают пользователей подтвердить (approve) передачу своих токенов в пользу фишингового контракта. Впоследствии вызывается функция Multicall в фишинговых контрактах для перевода токенов пользователей. В частности, функция Multicall предназначена для выполнения нескольких специфических внутренних транзакций в рамках одного вызова. Различные фишинговые схемы, например, покупка NFT с нулевой ценой, фишинг через одобрение ERC20 или фишинг через ERC20 permit, используют разные транзакции. Это позволяет им настраивать параметры транзакции и использовать Multicall для запуска конкретных фишинговых транзакций в соответствии с выбранной схемой.
Сегодня многие популярные Web3-кошельки создали свои черные списки фишинговых аккаунтов. Они активно информируют пользователей и предотвращают транзакции, направленные на подобные мошеннические адреса.
«ROP» в Web3-фишинге
Чтобы обойти механизмы черных списков, мошенники обращаются к аккаунтам, которые невозможно добавить в черный список. В частности, они злоупотребляют контрактами Multicall, развернутыми легитимными проектами, используя их функционал для выполнения сложных транзакций. Поскольку эти легитимные контракты нельзя пометить как фишинговые, мошенники побуждают пользователей подтверждать передачу токенов именно этим контрактам. Так как эти легитимные контракты может вызвать кто угодно (в них нет контроля доступа), мошенники могут мгновенно злоупотребить ими для перевода токенов пользователей. На следующем рисунке показан весь процесс.

Например, Angel Drainer, известная группа фишинговых мошенников, использовала Uniswap V3: Multicall 2 для запуска 89 фишинговых транзакций. Заметьте, что легитимный контракт multicall не был предназначен для хранения активов. Поэтому по своей логике он может вызываться кем угодно. Однако мошенник злоупотребил этим контрактом для проведения фишинговой атаки, не разворачивая при этом собственные фишинговые контракты.
Рекомендации
Мы призываем пользователей проявлять осторожность и тщательно изучать детали транзакции перед совершением любых действий, особенно транзакций одобрения (approve). Всегда проверяйте свои разрешения и отзывайте любые подозрительные.


