Чому ваш гаманець показує переказ, якого ви ніколи не надсилали: транзакції з нульовою вартістю та отруєння адрес
Невідома вихідна транзакція не обов’язково означає, що ваш гаманець зламали. Дізнайтеся, що насправді доводять записи з нульовою вартістю, схожі адреси та реальне переміщення активів.
Що цей запис доводить про мій гаманець?
Якщо в історії раптом з’явився запис, ніби ви надіслали 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 можуть відрізнятися
Історія гаманця може об’єднувати дані з різних рівнів:
- Транзакція: підписана інструкція, подана до мережі. У звичайній транзакції Ethereum основне поле From позначає обліковий запис, який її підписав.
- Подія токена: запис, який контракт створює під час виконання. Подія Transfer має власні поля From, To та кількості.
- Рядок історії: представлення цих відомостей гаманцем або оглядачем блокчейну. Подію можуть позначити 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 мільйона. Деякі жертви платили неодноразово. Виявлення зосереджувалося на окремих стейблкоїнах, тому оцінка втрат є нижньою межею в цих рамках, а не загальним підсумком для всіх токенів чи мереж.
Практичний висновок: перевірка лише нульових сум пропускає значну частину атак. Підроблені записи можуть імітувати суттєвий платіж, а крихітний вхідний переказ може перемістити справжні токени, одночасно додавши небезпечну адресу.
Як перевірити конкретний невідомий запис
- Відкрийте транзакцію в правильній мережі. Скористайтеся функцією оглядача у вашому гаманці або відомим оглядачем, як-от Etherscan чи BscScan. Перевірте статус транзакції. Для перегляду публічних даних не потрібно підключати гаманець, схвалювати токени, підписувати повідомлення чи вводити фразу відновлення.
- Визначте справжній актив. Відрізняйте нативні ETH або BNB від токена з такою самою назвою. Для токенів звіряйте точну мережу й контракт, що створив подію, з надійним джерелом емітента.
- Прочитайте суму з повною точністю. Відокремте кількість токенів від нативної вартості транзакції та оцінки у фіаті.
- Відокремте відправника транзакції від відправника події. Для смартрахунку також дослідіть операцію гаманця та дозволи. Оплата газу іншою особою не доводить, що ваші активи не могли переміститися.
- Перегляньте всю транзакцію. Перевірте всі переміщення токенів, перекази нативних монет і відповідні зміни дозволів. Якщо оглядач показує зміни балансу на рівні транзакції, використайте їх для звірки результату. Незмінний баланс сьогодні — слабший доказ: пізніші депозити або компенсаційні перекази можуть приховати попередній рух.
- Незалежно перевірте адресу призначення. Використовуйте довірені платіжні реквізити отримувача або раніше перевірений запис адресної книги. Недавній рядок історії — підстава для перевірки, а не доказ правильного призначення.
Якщо оглядач не дає чіткої відповіді, передайте офіційній службі підтримки гаманця назву мережі та публічний хеш транзакції. Опишіть дію, на яку очікували, якщо така була. Ці відомості допомагають відрізнити незнайому, але заплановану операцію від незрозумілого списання без розкриття секретів, які дають контроль над гаманцем.
Що робити після перевірки
Якщо ви знайшли лише окремий запис отруєння
Приховайте спам або поскаржтеся на нього, якщо гаманець підтримує таку функцію, та не використовуйте адреси з цього запису. Приховування рядка змінює інтерфейс, але не стирає історію блокчейну й не скасовує дозволи.
Нульовий переказ можливий за нульового дозволеного ліміту, тому сам запис не є причиною відкликати всі схвалення чи перевести всі кошти. З ним може взагалі не бути пов’язано жодного дозволу на витрачання, який потрібно скасовувати. Ніколи не використовуйте рекламований сайтом токена ресурс або посилання на «відновлення» від незнайомця, щоб «очистити» гаманець.
Якщо ви знайшли підозрілий дозвіл на витрачання
Скористайтеся довіреним інструментом керування схваленнями у вашому гаманці, щоб переглянути та відкликати відповідний ліміт. Відключення сайту від гаманця не відкликає вже наданих йому схвалень токенів у блокчейні. Відкликання усуває саме цей дозвіл, але не вирішує проблему викраденого приватного ключа.
Якщо справжні активи перемістилися без вашого наміру
Збережіть хеш транзакції, мережу, відповідний актив і важливі адреси. Через офіційні канали підтримки перевірте нещодавні підписи, схвалення й операції гаманця.
Якщо є докази розкриття вашої фрази відновлення або приватного ключа, створіть новий гаманець із новою фразою відновлення на довіреному пристрої та ретельно сплануйте переміщення решти активів. Інший рахунок, створений із скомпрометованої фрази, не усуває загрозу. Якщо кошти зникають автоматично, не поповнюйте рахунок на оплату газу: їх може забрати автоматичний викрадач.
Якщо ви свідомо підписали платіж, але скопіювали отруєну адресу, зафіксуйте цю відмінність. Платіж міг бути правильно підписаний і виконаний, але надісланий не тому отримувачу. Сам по собі такий результат не доводить викрадення приватного ключа.
Поширені запитання про невідомі транзакції
Чи змусив зловмисник мене заплатити за газ?
У звичайному сценарії отруєння зловмисник подає транзакцію та сплачує мережеву комісію. Саме лише зазначення вашої адреси в події токена не списує кошти з рахунку. Однак спонсоровані транзакції та смартрахунки означають, що особа платника комісії сама по собі не доводить нешкідливості операції. Перевіряйте фактичні наслідки.
Що робити, якщо транзакція не вдалася?
Скасований переказ токенів не завершився, хоча плата за газ усе одно може стягуватися. Якщо гаманець використовує делегування рахунку, перевірте це окремо: Ethereum може зберігати делегування навіть у разі невдалого подальшого виконання. Незнайоме делегування потребує перевірки.
Чи захистить апаратний гаманець від отруєння адрес?
Він дає ще одну можливість перевірити адресу перед підписанням. Однак якщо ви схвалите адресу зловмисника, гаманець не зробить її правильною. Порівняйте повну адресу на довіреному екрані підписання з незалежно перевіреними реквізитами отримувача.
Чи можу я заборонити стороннім додавати такі записи?
Зазвичай ви не можете завадити третім особам надсилати активи або створювати відповідні записи за участю публічної адреси. Фільтри гаманця й оглядача можуть зменшити кількість видимих записів. Зберігайте перевірених отримувачів і перед оплатою звіряйте повну адресу: приховування лише записів із нульовою вартістю не виявить усі випадки підроблених чи крихітних переказів.
