Чаму ваш кашалёк паказвае перавод, якога вы не адпраўлялі: транзакцыі з нулявым значэннем і падмена адрасоў
Невядомая выходная транзакцыя не абавязкова азначае, што ваш кашалёк узламалі. Даведайцеся, што насамрэч даказваюць запісы з нулявым значэннем, падобныя адрасы і рэальнае перамяшчэнне актываў.
Што гэты запіс даказвае адносна майго кашалька?
Калі ў гісторыі раптам пазначана, што вы адправілі 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 правярае, ці перавышае запытаная колькасць дазволены ліміт (allowance) выклікальніка. Нуль не перавышае нулявога ліміту. Пры выкананні іншых правіл кантракта выклік можа прайсці без папярэдняга адабрэння.
Гэта не ўніверсальнае правіла для ўсіх токенаў. Асобныя кантракты могуць мець дадатковыя абмежаванні.
Што праверыць далей: вывучыце астатнюю частку транзакцыі. Нулявы радок апісвае толькі гэты радок; іншая аперацыя магла мець іншы вынік. Калі гэта адзінкавы запіс падмены без падазроных выдаткаў ці зменаў дазволаў, варта пазбягаць падстаўленага адраса, а не адразу лічыць, што кашалёк трэба мяняць.
Прыклад 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 можа захаваць дэлегаванне, нават калі пазнейшае выкананне завершыцца няўдачай. Невядомае дэлегаванне варта праверыць.
Ці абараняе апаратны кашалёк ад падмены адрасоў?
Ён дае яшчэ адно месца, дзе можна праверыць адрас перад подпісам. Але калі вы ўхваліце адрас пад кантролем зламысніка, кашалёк не зробіць яго правільным. Параўнайце поўны адрас на надзейным экране подпісу з незалежна праверанымі рэквізітамі атрымальніка.
Ці магу я забараніць незнаёмцам дадаваць такія запісы?
Звычайна нельга перашкодзіць трэцім асобам адпраўляць актывы або ствараць адпаведныя запісы з публічным адрасам. Фільтры кашалька і аглядальніка паменшаць колькасць паказаных запісаў. Захоўвайце правераных атрымальнікаў і перад плацяжом правярайце ўвесь адрас; простае хаванне нулявых запісаў не выявіць усе варыянты падробленых і дробных пераводаў.
