Address poisoning — класс атак, при котором злоумышленник подставляет в историю транзакций жертвы адрес, визуально похожий на легитимный. Пользователь копирует адрес из истории, сверяет первые и последние символы, подтверждает перевод — и отправляет средства на кошелёк атакующего. Блокчейн при этом не скомпрометирован: атака эксплуатирует человеческую ошибку и особенности отображения адресов в кошельках.
Криптоадреса длинные и нечитаемые. Адрес Ethereum — 42 символа в шестнадцатеричном формате, Bitcoin-адрес в формате Bech32 — 42–62 символа. Ни один человек не способен запомнить или визуально отличить два адреса, различающихся в середине. Кошельки и эксплореры обычно показывают адрес целиком, но пользователь при копировании из истории транзакций ориентируется на первые 4–6 и последние 4–6 символов.
Атакующий генерирует адрес, у которого совпадают начало и конец с целевым. Для этого используется перебор: генерируются миллионы пар ключей, пока не найдётся адрес с нужным префиксом и суффиксом. Вычислительно это дорого, но для адресов с совпадением по 4–5 символов с каждой стороны — вполне реалистично на обычном оборудовании.
Основной вектор — транзакция с нулевой суммой. Атакующий отправляет жертве транзакцию, в которой не передаётся ни одного токена, но запись в блокчейне создаётся. В истории кошелька жертвы появляется строка с адресом отправителя, который выглядит почти идентично тому, с которым жертва регулярно взаимодействует.
Когда пользователь в следующий раз хочет отправить средства на привычный адрес, он открывает историю транзакций, находит «знакомый» адрес и копирует его. Если он сверяет только начало и конец — попадает на адрес атакующего.
Ключевая особенность: для zero-value transfer не требуется подпись приватным ключом жертвы. Атакующий просто инициирует транзакцию со своего кошелька на адрес жертвы с нулевым значением. Это делает атаку массовой и дешёвой в масштабировании.
По данным Ledger, зафиксировано более 270 миллионов подобных попыток на Ethereum и BNB Chain, с подтверждёнными потерями свыше $83 миллионов.
26 мая 2025 года крипто-трейдер получил серию zero-value транзакций с адреса, имитирующего один из его контрагентов. В истории кошелька появились записи, визуально неотличимые от легитимных. Трейдер скопировал поддельный адрес и отправил $843 000 в USDT. Через три часа он повторил операцию на $1,75 миллиона. Общая потеря составила около $2,6 миллиона.
Приватные ключи не были скомпрометированы. Кошелёк не был взломан. Единственная причина потери — копирование адреса из истории без полной сверки.
Dusting — отправка минимального количества токенов (буквально «пыли») на адрес жертвы. В отличие от zero-value transfer, здесь передаётся реальная, но ничтожная сумма. Цели две:
Разница между dusting и zero-value transfer: dusting в первую очередь инструмент наблюдения, zero-value transfer — прямой метод подмены адреса в истории.
Хотя термин «address poisoning» чаще ассоциируется с EVM-цепочками, аналогичная техника применяется и в Bitcoin. Атакующий отправляет небольшую сумму BTC с адреса, имитирующего адрес жертвы или её контрагента. Эксплуатируется визуальное сходство между форматами Legacy (
Механика та же: запись в истории, копирование без полной сверки, перевод на адрес атакующего.
Отдельный вектор — вредоносное ПО на устройстве жертвы. Малварь отслеживает буфер обмена: когда пользователь копирует криптоадрес, вредонос мгновенно подменяет его на адрес атакующего. Пользователь вставляет адрес, видит знакомое начало и конец, подтверждает — средства уходят не туда.
Этот вектор опаснее zero-value transfer, потому что не зависит от истории транзакций. Защита от него — аппаратный кошелёк, где адрес получателя отображается на экране устройства и подтверждается физически.
21 февраля 2025 года атака на биржу ByBit привела к краже $1,5 миллиарда в Ethereum. Атакующие (приписывается группе Lazarus) внедрили вредоносный код в программное обеспечение, используемое для переводов между холодными и горячими кошельками. При рутинном переводе вредонос перехватил запрос на транзакцию, подменил адрес получателя и представил изменённую транзакцию как валидную для мультиподписного одобрения.
Это показывает, что address poisoning работает не только на уровне пользовательского интерфейса, но и на уровне инфраструктуры, если есть доступ к промежуточному ПО.
Уязвимости в децентрализованных приложениях позволяют манипулировать параметрами транзакции до её подписания. Пользователь видит в интерфейсе один адрес, но в данные транзакции, которые он подписывает, подставлен другой. Это требует эксплуатации конкретного бага в DApp, но такие случаи зафиксированы.
Chainalysis обнаружил более 82 000 кошельков, связанных с кампаниями, целенаправленно атакующими пользователей с высокими балансами.
Несколько признаков, которые указывают на попытку отравления истории:
Если видите такие записи — не копируйте из них адреса. Помечайте как подозрительные, если кошелёк это позволяет.
Единственная надёжная защита при ручном копировании — сверять адрес целиком, символ за символом. Не первые и последние 4–6 знаков, а весь адрес. Это неудобно, но это единственный способ гарантировать, что вы отправляете на правильный адрес.
Аппаратный кошелёк (Ledger, Trezor и аналоги) отображает адрес получателя на собственном экране устройства. Даже если малварь на компьютере подменил адрес в буфере обмена, на экране аппаратного кошелька будет показан реальный адрес из подписываемой транзакции. Пользователь видит подмену и отклоняет транзакцию.
Многие кошельки позволяют сохранять адреса в адресную книгу. Если вы один раз проверили адрес полностью и сохранили его, дальнейшие переводы идут из книги без ручного копирования. Это устраняет риск копирования из истории транзакций.
Современные HD-кошельки генерируют новый адрес для каждой транзакции. Если вы используете один и тот же адрес постоянно, атакующему проще его имитировать и проще отслеживать вашу активность. Генерация новых адресов усложняет задачу.
Если вы получили адрес от контрагента, сверьте его по двум независимым каналам: например, в мессенджере и на официальном сайте. Если адрес пришёл только из одного источника — риск подмены выше.
Для крупных переводов используйте мультисигнатуру: транзакция требует подтверждения с нескольких независимых устройств. Даже если один адрес скомпрометирован, второй подписант увидит несоответствие.
Разработчики кошельков добавляют защиту от известных векторов: предупреждения при копировании похожих адресов, фильтрацию zero-value транзакций из истории, пометки подозрительных записей. Обновлённая версия кошелька с большей вероятностью содержит такие механизмы.
Транзакция в блокчейне необратима. Если вы отправили средства на адрес атакующего, вернуть их через протокол невозможно. Варианты действий:
Шансы на возврат низкие, но не нулевые — особенно если атакующий использует централизованную биржу для вывода.
Почему атака работает
Криптоадреса длинные и нечитаемые. Адрес Ethereum — 42 символа в шестнадцатеричном формате, Bitcoin-адрес в формате Bech32 — 42–62 символа. Ни один человек не способен запомнить или визуально отличить два адреса, различающихся в середине. Кошельки и эксплореры обычно показывают адрес целиком, но пользователь при копировании из истории транзакций ориентируется на первые 4–6 и последние 4–6 символов.
Атакующий генерирует адрес, у которого совпадают начало и конец с целевым. Для этого используется перебор: генерируются миллионы пар ключей, пока не найдётся адрес с нужным префиксом и суффиксом. Вычислительно это дорого, но для адресов с совпадением по 4–5 символов с каждой стороны — вполне реалистично на обычном оборудовании.
Механика атаки: zero-value transfer
Основной вектор — транзакция с нулевой суммой. Атакующий отправляет жертве транзакцию, в которой не передаётся ни одного токена, но запись в блокчейне создаётся. В истории кошелька жертвы появляется строка с адресом отправителя, который выглядит почти идентично тому, с которым жертва регулярно взаимодействует.
Когда пользователь в следующий раз хочет отправить средства на привычный адрес, он открывает историю транзакций, находит «знакомый» адрес и копирует его. Если он сверяет только начало и конец — попадает на адрес атакующего.
Ключевая особенность: для zero-value transfer не требуется подпись приватным ключом жертвы. Атакующий просто инициирует транзакцию со своего кошелька на адрес жертвы с нулевым значением. Это делает атаку массовой и дешёвой в масштабировании.
По данным Ledger, зафиксировано более 270 миллионов подобных попыток на Ethereum и BNB Chain, с подтверждёнными потерями свыше $83 миллионов.
Реальный кейс: потеря $2,6 миллиона за три часа
26 мая 2025 года крипто-трейдер получил серию zero-value транзакций с адреса, имитирующего один из его контрагентов. В истории кошелька появились записи, визуально неотличимые от легитимных. Трейдер скопировал поддельный адрес и отправил $843 000 в USDT. Через три часа он повторил операцию на $1,75 миллиона. Общая потеря составила около $2,6 миллиона.
Приватные ключи не были скомпрометированы. Кошелёк не был взломан. Единственная причина потери — копирование адреса из истории без полной сверки.
Dusting как разведка и подготовка
Dusting — отправка минимального количества токенов (буквально «пыли») на адрес жертвы. В отличие от zero-value transfer, здесь передаётся реальная, но ничтожная сумма. Цели две:
- Деанонимизация. Если жертва перемещает полученные токены между своими кошельками, атакующий отслеживает цепочку и связывает адреса между собой, строя финансовый профиль.
- Подготовка к poisoning. Dusting-транзакция создаёт запись в истории, которую позже можно использовать как приманку при копировании адреса.
Разница между dusting и zero-value transfer: dusting в первую очередь инструмент наблюдения, zero-value transfer — прямой метод подмены адреса в истории.
Address poisoning в Bitcoin: SegWit-имитация
Хотя термин «address poisoning» чаще ассоциируется с EVM-цепочками, аналогичная техника применяется и в Bitcoin. Атакующий отправляет небольшую сумму BTC с адреса, имитирующего адрес жертвы или её контрагента. Эксплуатируется визуальное сходство между форматами Legacy (
1...), SegWit (3...) и Bech32 (bc1...).Механика та же: запись в истории, копирование без полной сверки, перевод на адрес атакующего.
Перехват транзакций через malware
Отдельный вектор — вредоносное ПО на устройстве жертвы. Малварь отслеживает буфер обмена: когда пользователь копирует криптоадрес, вредонос мгновенно подменяет его на адрес атакующего. Пользователь вставляет адрес, видит знакомое начало и конец, подтверждает — средства уходят не туда.
Этот вектор опаснее zero-value transfer, потому что не зависит от истории транзакций. Защита от него — аппаратный кошелёк, где адрес получателя отображается на экране устройства и подтверждается физически.
Кейс ByBit: перехват на уровне инфраструктуры
21 февраля 2025 года атака на биржу ByBit привела к краже $1,5 миллиарда в Ethereum. Атакующие (приписывается группе Lazarus) внедрили вредоносный код в программное обеспечение, используемое для переводов между холодными и горячими кошельками. При рутинном переводе вредонос перехватил запрос на транзакцию, подменил адрес получателя и представил изменённую транзакцию как валидную для мультиподписного одобрения.
Это показывает, что address poisoning работает не только на уровне пользовательского интерфейса, но и на уровне инфраструктуры, если есть доступ к промежуточному ПО.
Атака через смарт-контракты и DApp
Уязвимости в децентрализованных приложениях позволяют манипулировать параметрами транзакции до её подписания. Пользователь видит в интерфейсе один адрес, но в данные транзакции, которые он подписывает, подставлен другой. Это требует эксплуатации конкретного бага в DApp, но такие случаи зафиксированы.
Chainalysis обнаружил более 82 000 кошельков, связанных с кампаниями, целенаправленно атакующими пользователей с высокими балансами.
Как распознать poisoning в истории кошелька
Несколько признаков, которые указывают на попытку отравления истории:
- Транзакция с нулевой суммой или ничтожно малым количеством токенов от неизвестного адреса.
- Адрес, который визуально похож на один из ваших контрагентов, но не совпадает полностью.
- Появление записей, которые вы не инициировали и не ожидаете.
- Несколько похожих адресов в истории за короткий промежуток времени.
Если видите такие записи — не копируйте из них адреса. Помечайте как подозрительные, если кошелёк это позволяет.
Меры защиты
Полная сверка адреса
Единственная надёжная защита при ручном копировании — сверять адрес целиком, символ за символом. Не первые и последние 4–6 знаков, а весь адрес. Это неудобно, но это единственный способ гарантировать, что вы отправляете на правильный адрес.
Аппаратный кошелёк
Аппаратный кошелёк (Ledger, Trezor и аналоги) отображает адрес получателя на собственном экране устройства. Даже если малварь на компьютере подменил адрес в буфере обмена, на экране аппаратного кошелька будет показан реальный адрес из подписываемой транзакции. Пользователь видит подмену и отклоняет транзакцию.
Адресная книга с верификацией
Многие кошельки позволяют сохранять адреса в адресную книгу. Если вы один раз проверили адрес полностью и сохранили его, дальнейшие переводы идут из книги без ручного копирования. Это устраняет риск копирования из истории транзакций.
Отказ от повторного использования адресов
Современные HD-кошельки генерируют новый адрес для каждой транзакции. Если вы используете один и тот же адрес постоянно, атакующему проще его имитировать и проще отслеживать вашу активность. Генерация новых адресов усложняет задачу.
Проверка через несколько источников
Если вы получили адрес от контрагента, сверьте его по двум независимым каналам: например, в мессенджере и на официальном сайте. Если адрес пришёл только из одного источника — риск подмены выше.
Ограничение сумм и мультисигнатура
Для крупных переводов используйте мультисигнатуру: транзакция требует подтверждения с нескольких независимых устройств. Даже если один адрес скомпрометирован, второй подписант увидит несоответствие.
Обновление кошелька
Разработчики кошельков добавляют защиту от известных векторов: предупреждения при копировании похожих адресов, фильтрацию zero-value транзакций из истории, пометки подозрительных записей. Обновлённая версия кошелька с большей вероятностью содержит такие механизмы.
Что делать, если средства уже отправлены на поддельный адрес
Транзакция в блокчейне необратима. Если вы отправили средства на адрес атакующего, вернуть их через протокол невозможно. Варианты действий:
- Зафиксируйте хеш транзакции и адрес получателя.
- Обратитесь в службу поддержки биржи, если средства ещё не выведены с неё (актуально только если атакующий использует биржевой адрес).
- Подайте заявление в правоохранительные органы — в некоторых юрисдикциях это позволяет инициировать заморозку средств на бирже через ордер.
- Отслеживайте адрес через блокчейн-эксплорер: если средства перемещаются на биржу, есть шанс на заморозку.
Шансы на возврат низкие, но не нулевые — особенно если атакующий использует централизованную биржу для вывода.
Итоговая проверка перед каждым переводом
- Не копируйте адрес из истории транзакций.
- Используйте адресную книгу или вводите адрес из проверенного источника.
- Сверяйте адрес полностью, а не по первым и последним символам.
- Для крупных сумм — аппаратный кошелёк с подтверждением на экране устройства.
- Игнорируйте входящие транзакции с нулевой или ничтожной суммой от неизвестных адресов.
- Обновляйте кошелёк до последней версии.
