Coinnoti
☰
Русскийru
Вернуться в блог

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

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

Что эта запись доказывает о моём кошельке?

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

Полезнее задать более конкретные вопросы: Какой это актив? Сколько действительно переместилось? Кто отправил транзакцию? Чем было разрешено реальное списание?

  • Событие перевода нулевого количества токенов не доказывает, что вы что-либо подписали или потратили. Для настоящего токена точная нулевая сумма означает, что конкретный перевод не переместил токены.
  • Перевод под знакомым названием токена не устанавливает подлинность актива. Посторонний контракт может использовать то же имя и символ.
  • Небольшой входящий платёж может быть настоящим, но при этом добавить в историю вводящий в заблуждение адрес отправителя.
  • Подтверждённое необъяснимое исходящее перемещение настоящих активов требует проверки. Не игнорируйте его только потому, что другое поле показывает ноль.

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

Сначала определите, какое именно поле показывает ноль

Выражение транзакция с нулевой стоимостью используют для разных случаев. Только один из следующих показателей означает нулевое количество токенов:

  • Количество токенов: 0 USDC. Для подлинного контракта USDC точный ноль означает, что конкретный перевод не перемещает USDC.
  • Стоимость транзакции: 0 ETH. К основной транзакции не приложено ETH. При этом токены всё ещё могут перемещаться, а действия контракта — выполняться.
  • Оценочная стоимость: $0.00. Интерфейс показывает оценку в фиатной валюте. Она не устанавливает количество токенов.

В BSC поле нативной монеты обычно использует BNB вместо ETH. Взаимодействие с контрактом с нулевой нативной стоимостью может переводить токены, изменять разрешения на их расходование или запускать другие операции. Нативная стоимость не связана напрямую с входными данными транзакции.

Небольшая положительная сумма может округляться до $0.00. Для актива без надёжной цены отображение фиатной стоимости тоже может быть бесполезным. Раскройте количество токенов до полной точности: даже отображаемые 0.00 токена могут скрывать меньшую положительную величину. Изменение оценки портфеля не является надёжной записью о поступлении или выбытии единиц актива.

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

Почему два поля From могут не совпадать

История кошелька может объединять данные разных уровней:

  1. Транзакция: подписанная инструкция, отправленная в сеть. В обычной транзакции Ethereum основное поле From указывает подписавший аккаунт.
  2. Событие токена: запись, которую контракт создаёт во время выполнения. У события Transfer есть собственные поля From, To и количество.
  3. Строка истории: представление этой информации в кошельке или обозревателе. Оно может помечать событие OUT, поскольку ваш адрес указан в нём как отправитель.

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

Аналогично хеш транзакции идентифицирует её, но не подтверждает ваше согласие. Статус Success у включённой в блок транзакции означает, что её внешнее выполнение не было отменено. Это не подтверждение надёжности токена, получателя или назначения операции.

Пять примеров записей истории транзакций с пояснениями

Пример 1: исходящий перевод нулевого количества токенов без вашей подписи

Запись истории: OUT · 0 USDC · С вашего адреса на незнакомый похожий адрес.

  • From транзакции: транзакцию отправил посторонний аккаунт.
  • From события токена: в событии указан ваш адрес.
  • Контракт, создавший событие: подлинный контракт USDC в этой сети.
  • Точное количество токенов: ноль.

Что это доказывает: подлинный токен-контракт записал перевод нулевого количества токенов с указанием вашего адреса. Конкретно этот перевод не переместил USDC. Он не доказывает, что ваш кошелёк подписал транзакцию, что вызывающая сторона имеет право потратить положительную сумму или что ваш ключ украден.

Как это происходит: распространённый стандарт токенов ERC-20 требует, чтобы переводы нулевой суммы создавали события Transfer. В типичных реализациях функция делегированного перевода transferFrom проверяет, превышает ли запрошенная сумма разрешённый лимит вызывающей стороны. Ноль не превышает нулевой лимит. Если остальные правила контракта допускают это, вызов может успешно выполниться без предварительного одобрения.

Это не универсальная гарантия для всех токенов. Отдельные контракты могут устанавливать дополнительные ограничения.

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

Пример 2: поддельная транзакция с крупным количеством токенов

Запись истории: OUT · 2,500 USDC · С вашего адреса на незнакомый адрес.

  • Отображаемый символ токена: USDC.
  • Контракт, создавший событие: посторонний контракт, а не настоящий USDC.
  • Количество, указанное в событии: 2,500.
  • Перемещение настоящих USDC в этой транзакции: отсутствует.

Что это доказывает: другой контракт создал запись, показанную под обозначением USDC. Это не доказывает, что 2,500 настоящих USDC ушли с вашего счёта.

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

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

Пример 3: крошечный реальный платёж с похожего адреса

Запись истории: IN · 0.000001 USDC · С незнакомого адреса на ваш адрес.

Предположим, что подлинный токен-контракт подтверждает перевод и ваш баланс токенов увеличивается на эту крошечную сумму. Здесь настоящие токены поступили. Для их получения вам не нужно было одобрять отправителя, и это не предоставляет ему право тратить ваши средства.

Ловушка заключается в адресе. Рассмотрим вымышленные примеры с пробелами между группами, чтобы были видны все символы. Настоящие адреса не содержат пробелов; выделенные жирным средние части различаются:

Проверенный получатель: 0x7a2f 1111 2222 3333 4444 5555 6666 7777 8888 9c4d

Подставленный адрес: 0x7a2f aaaa bbbb cccc dddd eeee ffff 0000 1111 9c4d

Интерфейс, показывающий только начало и конец, может отображать оба как 0x7a2f...9c4d.

Что это доказывает: кто-то отправил вам небольшую сумму с этого адреса. Это не доказывает, что отправитель — ваш обычный получатель или подконтрольный вам аккаунт. Совпадающие видимые символы не подтверждают принадлежность адреса.

Что проверить дальше: найдите нужный адрес назначения у отдельно проверенного контакта или на доверенной странице аккаунта получателя. Сравните адрес целиком. Отравление адресов пытается превратить подставленную запись истории в адрес, который вы выберете для следующего платежа. Потеря может произойти позже, когда вы разрешите совершенно действительный перевод не тому получателю.

Пример 4: ноль ETH, но 2,500 настоящих токенов уходят

Заголовок транзакции: Value · 0 ETH.

  • Нативная стоимость, приложенная к вызову: 0 ETH.
  • Перевод подлинного токена: 2,500 USDC с вашего адреса.
  • Изменение баланса USDC из-за этой транзакции: уменьшение на 2,500 USDC.
  • Статус выполнения: Success.

Что это доказывает: в этом примере настоящие USDC ушли с аккаунта. Ноль описывает ETH, приложенные к вызову. Он не характеризует перевод USDC и не исключает расходы на газ.

Что остаётся неизвестным: почему состоялся платёж и намеревались ли вы его совершить. Это может быть обмен, депозит, запланированная операция, платёж на ошибочный адрес или несанкционированное расходование. Прежде чем классифицировать перевод, сопоставьте его со своим действием и запланированным получателем.

Пример 5: настоящие токены уходят, хотя транзакцию отправил другой аккаунт

Запись истории: OUT · 500 настоящих USDC · Незнакомый адрес назначения.

Предположим, успешная транзакция уменьшила ваш баланс настоящих USDC на 500, но в её основном поле From указан кто-то другой.

Что это доказывает: токены переместились. Другой отправитель транзакции не делает это движение фиктивным.

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

Что проверить дальше: изучите распорядителя, соответствующий лимит или подписанное разрешение и операцию кошелька. Если списание остаётся необъяснимым, рассматривайте его как инцидент безопасности. Данные могут указывать на вредоносное одобрение, обманом полученную подпись или компрометацию контроля над аккаунтом; одна строка не позволяет их различить.

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

Что на самом деле измерили 270 миллионов попыток отравления

Двухлетний анализ активности Ethereum и BSC за период с 1 июля 2022 года по 30 июня 2024 года выявил приблизительно 270 миллионов записей об отравляющих переводах, нацеленных на 17 миллионов адресов.

Записи распределились по трём категориям:

  • 147.7 миллиона переводов с нулевой суммой.
  • 118.4 миллиона переводов поддельных токенов.
  • 4.0 миллиона крошечных переводов.

Эти записи относятся примерно к 18.2 миллиона транзакций, поскольку злоумышленники могут объединять записи в одну транзакцию. Адреса, подвергшиеся атаке, — не то же самое, что люди, скомпрометированные кошельки или пострадавшие, потерявшие деньги.

Анализ выявил 6,633 успешных переводов средств злоумышленникам на общую сумму не менее $83.8 миллиона. Некоторые жертвы платили несколько раз. Выявление охватывало отдельные стейблкоины, поэтому оценка потерь — нижняя граница в рамках исследования, а не общий итог для всех токенов и сетей.

Практический вывод: проверка только нулевых сумм упускает значительную часть атак. Поддельные записи могут имитировать существенный платёж, а крошечный входящий перевод — перемещать настоящие токены и одновременно внедрять опасный адрес.

Как проверить конкретную запись

  1. Откройте транзакцию в правильной сети. Используйте функцию обозревателя в кошельке или известный обозреватель, например Etherscan или BscScan. Проверьте статус транзакции. Для чтения публичных данных не требуется подключать кошелёк, одобрять токены, подписывать сообщение или вводить фразу восстановления.
  2. Определите реальный актив. Отличайте нативный ETH или BNB от токена с таким названием. Для токенов сверяйте точную сеть и контракт-источник события с надёжными сведениями эмитента.
  3. Изучите сумму с полной точностью. Разделяйте количество токенов, нативную стоимость транзакции и фиатную оценку.
  4. Отличайте отправителя транзакции от отправителя события. Для смарт-аккаунта также проверьте операцию кошелька и её разрешения. То, что газ оплатил кто-то другой, не доказывает отсутствие движения ваших активов.
  5. Проверьте транзакцию целиком. Изучите все движения токенов, переводы нативной монеты и соответствующие изменения разрешений. Если обозреватель показывает изменение балансов на уровне транзакции, используйте его для сверки. Неизменный сегодняшний баланс — более слабое доказательство: последующие поступления или компенсирующие переводы могут скрыть прежнее движение.
  6. Независимо проверьте адрес назначения. Используйте доверенные реквизиты получателя или ранее проверенную запись в адресной книге. Недавняя строка истории — повод для изучения, но не подтверждение правильного адреса.

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

Что делать после проверки

Если обнаружена только отдельная запись отравления

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

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

Если обнаружено подозрительное разрешение на расходование

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

Если настоящие активы переместились без вашего намерения

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

Если есть признаки раскрытия фразы восстановления или закрытого ключа, создайте новый кошелёк с новой фразой на доверенном устройстве и тщательно спланируйте перенос оставшихся активов. Другой аккаунт, полученный из скомпрометированной фразы, не устраняет риск. Если средства исчезают автоматически, не пополняйте баланс для оплаты газа: их может забирать программа-сборщик.

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

Частые вопросы о неизвестных транзакциях

Заставил ли злоумышленник меня платить за газ?

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

Что, если транзакция завершилась неудачно?

Отменённый перевод токенов не завершил этот перевод, хотя комиссия за газ всё же могла взиматься. Если кошелёк использует делегирование аккаунта, проверьте это отдельно: Ethereum может сохранять делегирование даже после сбоя последующего выполнения. Незнакомое делегирование требует внимания.

Защитит ли аппаратный кошелёк от отравления адреса?

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

Можно ли запретить посторонним добавлять такие записи?

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