Skip to content
Назад в блог
Безопасность5 мин чтения

Подмена адреса: почему мошенники продолжают присылать мне $0,00

После одного перевода боты начали засорять историю моего кошелька микроплатежами с адресов-двойников. Как работает подмена адреса и как от неё защититься.

КриптовалютаБезопасностьEthereumМошенничествоUSDCStablecoinsLedger
Иллюстрация подмены адреса: фальшивая транзакция USDC маскируется под похожий адрес кошелька Ethereum

31 июля в 17:01 я сделал один обычный перевод USDC в сети Ethereum. Первое поступление, которого я не просил, — 0,000124 USDC — пришло ровно через минуту. Новые микропереводы продолжались весь вечер и всю ночь. На следующее утро те же две суммы всё ещё чередовались: 0,000124 USDC в 4:11, 0,000012 USDC в 4:24, а затем снова в 5:36, 6:26, 6:29 и 6:57 — каждая после округления стоила ровно $0,00.

История транзакций кошелька с множеством микропоступлений по 0,000012 и 0,000124 USDC с двух похожих адресов

Формально — бесплатные деньги. А ещё подготовка к одной из самых изящных мошеннических схем, которые сейчас работают в публичных блокчейнах. Она называется подменой адреса (address poisoning), и самое интересное здесь не микропереводы, а адреса, с которых они приходят.

Присмотримся к отправителям

Поскольку это был перевод USDC в сети Ethereum, каждый участвующий аккаунт отображается как 42-символьный Ethereum-адрес вида 0x.... Мой настоящий перевод ушёл на адрес, который начинается с 0x6e45 и заканчивается на 51d5. Вскоре после этого микропереводы начали поочерёдно приходить с двух адресов:

0x6e45B0…458951d5
0x6e45EA…19B951D5

(Я намеренно скрыл середину — по полным адресам можно отследить эти переводы в блокчейне и составить список кошельков всех жертв, включая мой. Есть определённая ирония в том, чтобы скрывать адрес мошенника ради приватности, но публичные блокчейны работают в обе стороны.)

Эти адреса отличаются и от настоящего, и друг от друга, но сохраняют те же заметные ориентиры: 0x6e45 в начале и 51d5 в конце. Это не совпадение. Мошенники специально сгенерировали новые адреса, совпадающие с адресом моего настоящего перевода с обоих концов.

Почему с обоих? Потому что многие интерфейсы кошельков показывают только эти части. Никто не читает шестнадцатеричную строку целиком; кошельки, обозреватели и биржи часто сокращают Ethereum-адрес до вида 0x6e45...51d5. В таких интерфейсах адрес мошенника и настоящий адрес могут выглядеть пиксель в пиксель одинаково. Различаются 32 шестнадцатеричных символа в середине — ровно та часть, которую интерфейс скрывает.

Ловушка, которую они готовят

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

  1. Вы сделали настоящий перевод на настоящий адрес.
  2. Бот сразу отправляет микросумму, чтобы его адрес-двойник оказался рядом с настоящим в истории транзакций.
  3. Через несколько недель вам снова нужно отправить средства на этот адрес. Вы делаете то же, что и почти все: открываете историю, находите последнюю транзакцию и копируете адрес.
  4. Но копируете запись, подброшенную мошенником. Всё выглядит правильно: начало совпадает, конец совпадает, а больше глаза ничего не проверяют. Средства уходят мошеннику, и в блокчейне отменить перевод невозможно.

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

Почему это почти ничего им не стоит

Адрес с заданным началом и концом генерируется перебором: создать пару ключей, проверить адрес и повторить. Совпадение четырёх первых и четырёх последних шестнадцатеричных символов означает восемь фиксированных символов, то есть один подходящий адрес примерно на 16⁸ ≈ 4,3 миллиарда попыток. Звучит внушительно, но в зависимости от оборудования видеокарта с программой для vanity-адресов может перебрать это пространство за секунды или минуты. Сами микропереводы обходятся в доли цента комиссии. Дешевле чашки кофе бот может подбросить записи тысячам кошельков и ждать — а поскольку цели сами обнаруживают себя, совершая переводы, выбор жертв полностью автоматизирован.

Посмотреть на перебор вживую можно в Vanity-ETH. Для быстрого результата сначала укажите 6e как префикс и d5 как суффикс, а затем попробуйте полную комбинацию из этой атаки — 6e45 и 51d5 — и посмотрите, как вырастет сложность. Инструмент запускает тот же базовый цикл прямо в браузере: генерирует случайные пары ключей Ethereum, пока адрес не совпадёт, и в реальном времени показывает скорость и вероятность. Используйте его только для демонстрации, а не для создания настоящего кошелька: найденный приватный ключ полностью контролирует адрес, поэтому не отправляйте реальные средства на ключ, созданный сайтом, если вы не проверили код и не запустили его офлайн.

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

Схема срабатывает достаточно часто, чтобы превратиться в индустрию. Самый известный случай произошёл в мае 2024 года: кто-то отправил 1 155 обёрнутых BTC — около 68 миллионов долларов на тот момент — на подменённый адрес, скопированный из собственной истории транзакций. Удивительно, но после широкой огласки злоумышленник вернул средства. Большинству жертв так не везёт.

Как не стать героем такой истории

Защита скучна — и это хорошая новость:

  • Никогда не копируйте адрес из истории транзакций. Это вся поверхность атаки. Берите адрес из первоисточника: со страницы пополнения биржи, из сообщения получателя или из собственных записей.
  • Используйте адресную книгу кошелька. Один раз сохраните проверенный адрес под понятным именем и отправляйте средства по этому контакту. Подброшенная запись не сможет выдать себя за сохранённый адрес.
  • Проверяйте середину, а не только края. Если адрес всё же приходится сравнивать визуально, сверьте фрагмент из середины — это та часть, которую сложно дёшево подобрать. Совпадение обоих концов и даже короткого участка посередине резко увеличивает стоимость перебора.
  • Сначала отправляйте тестовую сумму, если речь идёт о значительных средствах. Перед основным переводом снова возьмите адрес из первоисточника, а не из истории тестовой транзакции.
  • Игнорируйте микропереводы. Не отправляйте их обратно и не взаимодействуйте с неизвестными токенами. Пока они просто лежат в кошельке, вреда от них нет.

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

А мои два бота тем временем продолжают работу, снова и снова исправно присылая мне по $0,00. Пожалуй, это самое терпеливое мошенничество, которое я когда-либо наблюдал. Пока я не копирую адреса из истории, всё, чего они добиваются, — покупают мне цифровую пыль.