Coinnoti
☰
Polskipl
Wróć do bloga

Dlaczego portfel pokazuje przelew, którego nigdy nie wysłano: transakcje o zerowej wartości i zatruwanie adresów

Nieznana transakcja wychodząca nie oznacza automatycznie, że ktoś włamał się do Twojego portfela. Dowiedz się, co naprawdę potwierdzają zapisy o zerowej wartości, podobne adresy i rzeczywiste przepływy aktywów.

Co ten wpis dowodzi o moim portfelu?

Jeśli historia nagle pokazuje, że wysłano 0 USDT na nieznany adres, sam ten wpis nie dowodzi, że ktokolwiek uzyskał dostęp do Twojego klucza prywatnego. Osoba trzecia może utworzyć określone zapisy transferu zerowej liczby tokenów z Twoim adresem bez Twojego podpisu ani uprawnienia do wydania niezerowej kwoty. Taki zapis może istnieć w blockchainie, choć nigdy nie inicjowano tej operacji.

Przydatne pytania są bardziej konkretne: Jakie to aktywo? Ile faktycznie przesłano? Kto przesłał transakcję do sieci? Co autoryzowało rzeczywiste wydanie środków?

  • Zdarzenie tokenowe o zerowej kwocie nie dowodzi, że cokolwiek podpisano lub wydano. W przypadku prawdziwego tokena dokładna kwota zero oznacza, że ten konkretny transfer nie przeniósł żadnych tokenów.
  • Transfer pod znajomą nazwą tokena nie identyfikuje aktywa. Niezwiązany kontrakt może używać tej samej nazwy i symbolu.
  • Drobna płatność przychodząca może być prawdziwa, a jednocześnie umieścić w historii mylący adres nadawcy.
  • Potwierdzony, niewyjaśniony odpływ prawdziwych aktywów wymaga zbadania. Nie lekceważ go tylko dlatego, że inne pole pokazuje zero.

Ten poradnik dotyczy Ethereum, BNB Smart Chain (BSC) i podobnych sieci korzystających z kontraktów tokenowych typu Ethereum. Przykłady to celowo uproszczone, wymyślone zapisy, a nie zrzuty ekranu ani ustalenia dotyczące konkretnego portfela.

Najpierw ustal, które pole wskazuje zero

Określenie transakcja o zerowej wartości bywa używane w kilku różnych znaczeniach. Tylko jeden z tych komunikatów oznacza, że liczba tokenów wynosi zero:

  • Ilość tokenów: 0 USDC. Dla prawdziwego kontraktu USDC dokładna kwota zero oznacza, że dany transfer nie przenosi USDC.
  • Wartość transakcji: 0 ETH. Do głównej transakcji nie dołączono ETH. Tokeny nadal mogą się przemieszczać, a operacje kontraktu mogą zostać wykonane.
  • Szacowana wartość: $0.00. Interfejs pokazuje wycenę w walucie fiducjarnej. Nie określa ona ilości tokenów.

W sieci BSC pole waluty natywnej zwykle wskazuje BNB zamiast ETH. Interakcja z kontraktem o zerowej wartości waluty natywnej może przenosić tokeny, zmieniać uprawnienia do wydawania środków lub uruchamiać inne operacje. Wartość natywna jest odrębna od danych wejściowych transakcji.

Niewielka dodatnia kwota może zostać zaokrąglona do $0.00. Aktywo bez wiarygodnej ceny może również mieć mało przydatną wycenę fiducjarną. Rozwiń ilość tokenów do pełnej precyzji; nawet wartość 0.00 wyświetlana jako ilość tokenów może ukrywać mniejszą kwotę dodatnią. Zmienna wycena portfela nie jest wiarygodnym zapisem jednostek wpływających na konto lub z niego wypływających.

Zero jest dozwoloną ilością tokenów, więc samo w sobie nie dowodzi ataku. Podobne adresy i skopiowane dane płatności to wskazówki wymagające sprawdzenia.

Dlaczego dwa pola From mogą się różnić

Historia portfela może łączyć informacje z różnych warstw:

  1. Transakcja: podpisana instrukcja przesłana do sieci. W zwykłej transakcji Ethereum główne pole From identyfikuje konto, które ją podpisało.
  2. Zdarzenie tokenowe: zapis emitowany przez kontrakt podczas wykonania. Zdarzenie Transfer ma własne pola From, To i ilość.
  3. Wiersz historii: sposób przedstawienia tych informacji przez portfel lub eksplorator. Może oznaczać zdarzenie jako OUT, ponieważ w zdarzeniu Twój adres figuruje jako nadawca.

Tych dwóch pól From nie można traktować zamiennie. Pojawienie się Twojego adresu w zdarzeniu nie jest podpisem z Twojego portfela. Złośliwy kontrakt może umieścić Twój adres w danych zdarzenia, lecz nie sprawia to, że jego dziennik pochodzi z prawdziwego kontraktu tokena. Dlatego kontrakt emitujący zdarzenie jest kluczowym elementem dowodów.

Podobnie hash transakcji identyfikuje transakcję, ale nie dowodzi Twojej zgody. Transakcja włączona do łańcucha i oznaczona Success wskazuje, że jej zewnętrzne wykonanie nie zostało cofnięte. Nie potwierdza to wiarygodności tokena, odbiorcy ani celu.

Pięć objaśnionych przykładów historii transakcji

Przykład 1: Wychodzący transfer zerowej liczby tokenów, którego nie podpisano

Wpis historii: OUT · 0 USDC · Z Twojego adresu na nieznany, łudząco podobny adres.

  • From transakcji: transakcję przesłało niezwiązane konto.
  • From zdarzenia tokenowego: w zdarzeniu podano Twój adres.
  • Kontrakt emitujący zdarzenie: prawdziwy kontrakt USDC w tej sieci.
  • Dokładna ilość tokenów: zero.

Co to dowodzi: prawdziwy kontrakt tokena zarejestrował transfer zerowej liczby tokenów z Twoim adresem. Ten transfer nie przeniósł żadnych USDC. Nie dowodzi, że portfel podpisał transakcję, wywołujący ma uprawnienie do wydania dodatniej kwoty ani że skradziono Twój klucz.

Jak do tego dochodzi: ERC-20, powszechny standard tokenów, wymaga, aby transfery o zerowej kwocie emitowały zdarzenia Transfer. W typowych implementacjach funkcja transferu delegowanego transferFrom sprawdza, czy żądana kwota przekracza limit uprawnień wywołującego. Zero nie przekracza limitu równego zero. Jeśli pozostałe reguły kontraktu na to pozwalają, wywołanie może się udać bez wcześniejszego zatwierdzenia.

Nie jest to uniwersalna gwarancja dotycząca każdego tokena. Poszczególne kontrakty mogą narzucać dodatkowe ograniczenia.

Co sprawdzić dalej: przeanalizuj resztę transakcji. Wiersz zerowy opisuje tylko ten wiersz; inna operacja może mieć odmienny skutek. Jeśli to odosobniony zapis zatruwania bez podejrzanego wydawania środków lub zmian uprawnień, właściwą reakcją jest unikanie podrzuconego adresu, a nie założenie, że trzeba wymienić portfel.

Przykład 2: Fałszywa transakcja pokazująca dużą ilość tokenów

Wpis historii: OUT · 2,500 USDC · Z Twojego adresu na nieznany adres.

  • Wyświetlany symbol tokena: USDC.
  • Kontrakt emitujący: niezwiązany kontrakt, a nie prawdziwy USDC.
  • Kwota zgłoszona w zdarzeniu: 2,500.
  • Przepływ prawdziwych USDC w tej transakcji: brak.

Co to dowodzi: inny kontrakt wyemitował zapis przedstawiony pod etykietą USDC. Nie dowodzi to, że z Twojego konta wypłynęło 2,500 prawdziwych USDC.

Fałszywa transakcja w portfelu może być rzeczywistymi danymi blockchaina przedstawionymi w mylący sposób. Atakujący mogą skopiować nazwę i symbol tokena oraz emitować zdarzenia przypominające wcześniejsze płatności, w tym ich kwoty. Niestandardowe kontrakty mogą również emitować zapisy transferów, którym nie odpowiadają zmiany ich własnych sald.

Co sprawdzić dalej: ustal sieć i dokładny kontrakt emitujący zdarzenie. Porównaj jego adres z niezależnie uzyskanymi informacjami emitenta o kontrakcie w danej sieci. Znajomy ticker, logo lub etykieta weryfikacji kodu źródłowego nie wystarczą do ustalenia tożsamości emitenta.

Przykład 3: Bardzo mała rzeczywista płatność z podobnego adresu

Wpis historii: IN · 0.000001 USDC · Z nieznanego adresu na Twój adres.

Załóżmy, że prawdziwy kontrakt tokena potwierdza transfer, a saldo tokenów wzrasta o tę niewielką kwotę. W takim przypadku rzeczywiste tokeny dotarły. Ich otrzymanie nie wymagało zatwierdzenia nadawcy i nie daje mu uprawnień do wydawania środków.

Pułapką jest adres. Rozważ te wymyślone przykłady, podzielone spacjami, aby było widać każdy znak. Prawdziwe adresy nie zawierają spacji; pogrubione środkowe grupy się różnią:

Zweryfikowany odbiorca: 0x7a2f 1111 2222 3333 4444 5555 6666 7777 8888 9c4d

Podrzucony adres: 0x7a2f aaaa bbbb cccc dddd eeee ffff 0000 1111 9c4d

Interfejs wyświetlający tylko początek i koniec mógłby pokazać oba jako 0x7a2f...9c4d.

Co to dowodzi: ktoś wysłał Ci niewielką kwotę z tego adresu. Nie dowodzi to, że nadawca jest Twoim zwykłym odbiorcą lub kontrolowanym przez Ciebie kontem. Zgodne widoczne znaki nie potwierdzają własności.

Co sprawdzić dalej: pobierz zamierzony adres docelowy od oddzielnie zweryfikowanego kontaktu lub z zaufanej strony konta odbiorcy. Porównaj cały adres. Zatruwanie adresów ma sprawić, że podrzucony wpis historii stanie się adresem wybranym do późniejszej płatności. Strata może nastąpić później, gdy autoryzujesz całkowicie poprawny przelew pod niewłaściwy adres.

Przykład 4: Zero ETH, ale wypływa 2,500 prawdziwych tokenów

Nagłówek transakcji: Value · 0 ETH.

  • Wartość natywna dołączona do wywołania: 0 ETH.
  • Transfer prawdziwego tokena: 2,500 USDC z Twojego adresu.
  • Zmiana salda USDC spowodowana tą transakcją: spadek o 2,500 USDC.
  • Status wykonania: Success.

Co to dowodzi: w tym przykładzie prawdziwe USDC wypłynęły z konta. Zero dotyczy ETH dołączonego do wywołania. Nie opisuje transferu USDC ani nie wyklucza kosztów gazu.

Czego nadal nie wiadomo: dlaczego nastąpiła płatność i czy była zamierzona. Mogła odpowiadać wymianie, depozytowi, zaplanowanej operacji, płatności na błędny adres lub nieautoryzowanemu wydaniu środków. Zanim ją sklasyfikujesz, porównaj z własnym działaniem i zamierzonym odbiorcą.

Przykład 5: Prawdziwe tokeny wypływają, ale transakcję wysłało inne konto

Wpis historii: OUT · 500 prawdziwych USDC · Nieznany adres docelowy.

Załóżmy, że udana transakcja zmniejszyła saldo prawdziwych USDC o 500, ale jej główne pole From wskazuje kogoś innego.

Co to dowodzi: tokeny zostały przeniesione. Inny nadawca transakcji nie oznacza, że przepływ jest fikcyjny.

Wcześniej upoważniony podmiot może wykorzystać limit wydawania tokenów bez proszenia Cię o podpisanie nowej transakcji przy każdej wypłacie. Niektóre tokeny obsługują też podpisy permit, które zezwalają na limit poprzez podpisaną wiadomość możliwą do przesłania przez inną osobę. Konta inteligentne i portfele delegowane umożliwiają innym podmiotom dodatkowe sposoby przesyłania autoryzowanych operacji.

Co sprawdzić dalej: skontroluj podmiot upoważniony do wydawania, odpowiedni limit lub podpisane uprawnienie oraz operację portfela. Jeśli obciążenie pozostaje niewyjaśnione, potraktuj je jako incydent bezpieczeństwa. Dowody mogą wskazywać na szkodliwe zatwierdzenie, zwodniczy podpis albo utratę kontroli nad kontem; sam wiersz tego nie rozróżnia.

W przypadku zwykłej transakcji podpisanej bezpośrednio Twój adres w głównym polu From stanowi dowód ważnego podpisu tego konta. Nadal nie dowodzi, że rozumiano działanie, zamierzano zapłacić temu odbiorcy lub osobiście zainicjowano transakcję. Pole From zdarzenia tokenowego dostarcza znacznie słabszych dowodów.

Co naprawdę zmierzono w 270 milionach prób zatruwania adresów

Dwuletnia analiza aktywności Ethereum i BSC od 1 lipca 2022 do 30 czerwca 2024 wykryła około 270 milionów zapisów zatruwających transferów wymierzonych w 17 milionów adresów.

Zapisy podzielono na trzy kategorie:

  • 147.7 miliona transferów o zerowej wartości.
  • 118.4 miliona transferów podrobionych tokenów.
  • 4.0 miliona bardzo małych transferów.

Były to zapisy transferów w około 18.2 miliona transakcji, ponieważ atakujący mogą grupować wiele zapisów. Adresów będących celem nie należy utożsamiać z liczbą osób, przejętych portfeli ani poszkodowanych, którzy utracili pieniądze.

Analiza wykazała 6,633 skuteczne przelewy na rzecz atakujących na łączną kwotę co najmniej $83.8 miliona. Niektóre ofiary płaciły wielokrotnie. Wykrywanie koncentrowało się na wybranych stablecoinach, więc oszacowanie strat stanowi dolną granicę w tym zakresie, a nie sumę dla wszystkich tokenów i łańcuchów.

W praktyce oznacza to, że sprawdzanie wyłącznie kwot zerowych pomija istotną część ataków. Fałszywe wpisy mogą imitować znaczącą płatność, a drobny transfer przychodzący może przesłać prawdziwe tokeny i jednocześnie wprowadzić niebezpieczny adres.

Jak sprawdzić konkretny nieznany wpis

  1. Otwórz transakcję we właściwej sieci. Skorzystaj z opcji eksploratora w portfelu lub znanego eksploratora, takiego jak Etherscan czy BscScan. Sprawdź status transakcji. Odczyt publicznych szczegółów nie wymaga łączenia portfela, zatwierdzania tokenów, podpisywania wiadomości ani wpisywania frazy odzyskiwania.
  2. Ustal rzeczywiste aktywo. Odróżnij natywne ETH lub BNB od tokena posługującego się tą nazwą. Dla tokenów porównaj dokładną sieć i kontrakt emitujący zdarzenie z zaufanymi informacjami emitenta.
  3. Odczytaj kwotę z pełną precyzją. Oddziel ilość tokenów od natywnej wartości transakcji i szacowanej wartości fiducjarnej.
  4. Rozróżnij nadawcę transakcji i nadawcę zdarzenia. W przypadku konta inteligentnego zbadaj też operację portfela i jej uprawnienia. Fakt, że ktoś inny opłacił gaz, nie dowodzi, że Twoje aktywa nie mogły się przemieścić.
  5. Przejrzyj całą transakcję. Sprawdź wszystkie przepływy tokenów, przelewy waluty natywnej i istotne zmiany uprawnień. Jeśli eksplorator pokazuje zmiany salda w ramach transakcji, wykorzystaj je do uzgodnienia wyniku. Dzisiejsze niezmienione saldo jest słabszym dowodem: późniejsze wpłaty lub przeciwstawne transfery mogą ukryć wcześniejszy przepływ.
  6. Niezależnie zweryfikuj adres docelowy. Skorzystaj z zaufanych danych płatniczych odbiorcy lub wcześniej zweryfikowanego wpisu w książce adresowej. Niedawny wiersz historii jest przesłanką do sprawdzenia, nie dowodem poprawności odbiorcy.

Jeśli eksplorator nie wyjaśnia wyniku, podaj oficjalnej pomocy technicznej dostawcy portfela sieć i publiczny hash transakcji. Opisz działanie, którego oczekiwano, jeśli w ogóle takie było. Te dane pomagają odróżnić nieznaną, lecz zamierzoną operację od niewyjaśnionego wydania środków bez ujawniania sekretów kontrolujących portfel.

Co zrobić po sprawdzeniu dowodów

Jeśli znaleziono tylko odosobniony zapis zatruwania

Ukryj lub zgłoś spam, jeśli portfel na to pozwala, i unikaj podanych w nim adresów. Ukrycie wiersza zmienia interfejs; nie usuwa historii blockchaina ani nie cofa uprawnień.

Transfer zerowy może nastąpić przy zerowym limicie, więc sam zapis nie jest powodem do cofania wszystkich zatwierdzeń ani przenoszenia całych środków. Z tym wpisem może nie być powiązanego żadnego uprawnienia do wydawania, które można cofnąć. Nigdy nie korzystaj z witryny reklamowanej przez token ani z linku „odzyskiwania” od nieznajomego, aby „wyczyścić” portfel.

Jeśli znaleziono podejrzane uprawnienie do wydawania

Skorzystaj z zaufanej funkcji zarządzania zatwierdzeniami w portfelu, aby przejrzeć i cofnąć odpowiedni limit. Odłączenie strony internetowej od portfela nie cofa istniejących zatwierdzeń tokenowych zapisanych w łańcuchu. Cofnięcie usuwa to uprawnienie, ale nie naprawia skutków kradzieży klucza prywatnego.

Jeśli prawdziwe aktywa przeniesiono bez Twojej intencji

Zachowaj hash transakcji, sieć, aktywo, którego dotyczy sprawa, oraz odpowiednie adresy. Przejrzyj niedawne podpisy, zatwierdzenia i operacje portfela, korzystając z oficjalnych kanałów wsparcia.

Jeśli są dowody ujawnienia frazy odzyskiwania lub klucza prywatnego, utwórz na zaufanym urządzeniu nowy portfel z nową frazą odzyskiwania i według ostrożnego planu przenieś pozostałe aktywa. Kolejne konto pochodzące z przejętej frazy nie rozwiązuje problemu ujawnienia. Jeśli środki znikają automatycznie, nie dokładaj kolejnych kwot na gaz: może je przejmować automat opróżniający portfel.

Jeśli świadomie podpisano płatność, ale skopiowano zatruty adres docelowy, odnotuj tę różnicę. Płatność mogła zostać poprawnie podpisana i wykonana, a jednak trafić do niewłaściwego odbiorcy. Sam ten wynik nie dowodzi kradzieży klucza prywatnego.

Częste pytania o nieznane transakcje

Czy atakujący zmusił mnie do zapłacenia za gaz?

W typowym przypadku zatruwania to atakujący przesyła transakcję i płaci opłatę sieciową. Samo wymienienie Twojego adresu w zdarzeniu tokenowym nie obciąża konta. Jednak transakcje sponsorowane i konta inteligentne sprawiają, że sam płatnik opłaty nie przesądza, czy operacja była nieszkodliwa. Sprawdź rzeczywiste skutki.

Co jeśli transakcja zakończyła się niepowodzeniem?

Cofnięty transfer tokenów nie został wykonany, choć opłata za gaz nadal mogła zostać naliczona. Jeśli portfel wykorzystuje delegowanie konta, sprawdź je oddzielnie: w Ethereum delegacja może pozostać nawet wtedy, gdy późniejsze wykonanie się nie powiedzie. Nieznana delegacja wymaga przeglądu.

Czy portfel sprzętowy zapobiega zatruwaniu adresów?

Daje dodatkowe miejsce do sprawdzenia adresu docelowego przed podpisaniem. Nie uczyni adresu kontrolowanego przez atakującego poprawnym, jeśli go zatwierdzisz. Porównaj cały adres na zaufanym ekranie podpisywania z niezależnie zweryfikowanymi danymi odbiorcy.

Czy mogę powstrzymać obcych przed dodawaniem takich wpisów?

Zasadniczo nie można uniemożliwić osobom trzecim wysyłania aktywów ani tworzenia odpowiednich zapisów dotyczących publicznego adresu. Filtry portfeli i eksploratorów mogą ograniczyć widoczne wpisy. Zapisuj zweryfikowanych odbiorców i sprawdzaj pełny adres przed płatnością; samo ukrywanie wpisów o zerowej wartości nie wykryje wszystkich wariantów z podrobionymi tokenami lub drobnymi przelewami.