Atak APA. Szczegółowa analiza i metody obrony
Ataki Address Poisoning Attack (APA) z wykorzystaniem przelewów o wartości 0 USD stały się w ostatnich tygodniach coraz częstsze. Od 2 grudnia w sieci “zatruto” ponad 340 tysięcy adresów. Łącznie mamy 99 adresów ofiar i ponad 1,64 miliona dolarów skradzionych środków.
W tym artykule X-explore przedstawia kompleksową analizę takich ataków, śledzi atakujących onchain i pokazuje szczegółowy schemat implementacji ARA.
Chciałbym, aby aplikacje portfelowe aktywowały takie alerty o ryzyku. A zwykłym użytkownikom, aby byli świadomi takich zagrożeń podczas przesyłania kryptowalut.
Tłumaczenie artykułu z x-explore.eth
Historia
Niedawno nasze monitorowanie ryzyka onchain wykazało, że przelewy 0 USD są częste w sieciach ETH i BSC. Wzięliśmy dane transakcji łańcucha BSC jako przykład, aby pokazać, jak to się dzieje.
Ofiara A dokonuje normalnej transakcji, aby przelać 452 BSC-USD do użytkownika B. Ale użytkownik B otrzymuje 0 BSC-USD od atakującego C. W tym samym czasie, w tej samej transakcji hash, sam użytkownik A omyłkowo przesyła 0 BSC-USD na adres atakującego C (implementacja operacji transferu 0 BSC-USD w obie strony):
Wielu użytkowników nie zdaje sobie sprawy, co jest nie tak. Obawiają się, że ich klucze prywatne są zagrożone, a atakujący kradną aktywa. Oto zrzuty ekranu z postów w mediach społecznościowych:
Cele ataku
W rzeczywistości użytkownicy, którzy stanęli w obliczu takiej sytuacji, nie muszą się denerwować. Ich aktywa są bezpieczne, klucz prywatny nie został naruszony. Muszą tylko dokładnie potwierdzić adres i nie przesyłać niewłaściwego adresu. Metody hakera są bardzo proste:
- Śledzi informacje o transferze kilku steblecoinów onchain. Na przykład przechwytuje informacje o transferze, które adres ofiary A często wysyła do użytkownika B.
- Następnie tworzy hakerski adres C z tymi samymi pierwszymi i ostatnimi cyframi co adres użytkownika B. Następnie ofiara A i haker Adres C przesyłają sobie 0 monet. (W tym przypadku atakujący może użyć narzędzia do generowania numerów Profanity, aby wygenerować adres z tymi samymi pierwszymi i ostatnimi 7 cyframi, co adres użytkownika w ciągu kilku sekund).
- Następnym razem, gdy ofiara A przez nieuwagę skopiuje adres historycznej transakcji, bardzo łatwo jest skopiować dokładnie adres C przygotowany przez hakera na potrzeby podstępu. W ten sposób środki są przelewane na niewłaściwe konto.
Ofiary przelewają pieniądze na normalne adresy:
Adres hakera z przelewami 0 USD:
Ofiary przelewają pieniądze na adresy hakerów
Oto nasze wnioski dotyczące ataku polegającego na zatruwaniu adresów:
- Po pierwsze, haker sprawia, że jego adres pojawia się w historii transakcji użytkownika. Celem jest przeoczenie użytkownika i pomylenie go z zaufanym kontaktem. Oznacza to, że jest to adres, na który często wysyła pieniądze.
- Po drugie, haker tworzy adres, który pasuje do zaufanego adresu pod względem pierwszej i ostatniej cyfry. Przez pomyłkę może on zostać wykorzystany przez ofiarę do kolejnej transakcji.
Użytkownicy ryzykują utratę kapitału, więc miej się na baczności!
Trendy
Od 2 grudnia odnotowano dużą liczbę takich ataków: 290 000 w sieci BSC i 40 000 w sieci Ethereum. Liczba niezależnych adresów dotkniętych atakami przekroczyła odpowiednio 150 000 i 36 000.
Jeśli chodzi o trendy, sieć BSC zaczęła być atakowana 22 listopada, a sieć ETH 27 listopada. Tymczasem skala ataków w obu blockchainach rośnie.
Widzimy również, że ataki mają pewną regularność w czasie. Ich wolumen znacznie spada każdego dnia między 17:00 UTC a 0:00 UTC. Tak więc podejrzani napastnicy najprawdopodobniej mieszkają w azjatyckiej strefie czasowej.
Na dzień 2 grudnia ofiarami oszustwa padły 94 unikalne adresy. Stracili oni środki o łącznej wartości 1 640 000 USD. Przewidujemy, że apetyt atakujących będzie tylko rósł. W najbliższej przyszłości coraz więcej użytkowników będzie narażonych na tego typu oszustwa.
Przeanalizowaliśmy również koszt ataku napastników. Łączna kwota wynosi obecnie blisko 26 000 USD (46 BNB + 10 ETH). Jednocześnie atakujący faworyzuje BSC-USD i USDT – najprawdopodobniej ze względu na wysoki obrót i popularność tych stablecoinów.
Śledzenie sprawcy
Śledzimy jednego z oszustów, który wykorzystał dwie duże scentralizowane giełdy. Pełny proces jest pokazany na poniższym obrazku.
- Adres źródłowy środków pochodzących z ataku jest powiązany z kontem OKX.com. Atakujący najpierw przenosi te monety z sieci TRON do sieci BSC za pomocą mostu crosschain Transit.Finance.
- Skradzione środki trafiają ostatecznie do Huobi.com. Tutaj atakujący ponownie wykorzystuje most Transit.Finance do transferu do sieci TRON.
Przejdźmy dalej i prześledźmy przepływ skradzionych środków do źródła:
- Adres ofiary: 0xe17c2b2b40574d229a251fe3776e6da2cc46aa5e
- Przelewa 1300 monet na adres atakującego: 0x720c1cfe1cfe1bfc38b3b3b21c20961262ad1e095a6867 (przelew był w dwóch ratach).
- Następnie atakujący wpłaca środki na ten adres: 0x89e692c1b31e7f03b7b7b9cbb1c7ab7872ddeadd49.
- Atakujący wykonał cross-chainowy transfer środków pod adresem: 0x89e692c1b31e7f03b7b7b9cbb1c7ab7872ddeadd49. W tym hashu: 0x72905bd839f682f795946d285500143ee7606e9690df2ad32968e878ad290d9f
- W transakcji pokazanej poniżej przekazano 10561 USDT za pośrednictwem kontraktu Transit.Finance: 0xb45a2dda996c32e93b8c47098e90ed0e7ab18e39
- Dzienniki zdarzeń dla tej transakcji pokazują, że monety USDT trafiły do sieci TRON. Oto adres: TLUKBw37BVWDZdhbGco2ZEfdMd5Cit8TMD
- Odpowiadaon hashowi transakcji w sieci TRON: 716507136ad28717ffd5f2f437af753ff96d344d2bcbe83f24d801db49f5a884.
- Atakujący ostatecznie dodał adres TLUKBw37BVWDZdhbGco2ZEfdMd5Cit8TMD do giełdy Huobi. Adresy depozytów do wykonania to TPtzsrCAG61QMwig3jZV8Px7Rd1WZVnRXG, TDp7r3S1hJeiNfH1CvCVXeY8notY47nagJ:
Analiza zasady ataku
Przypadek ataku 1:
EOA: 0xBAA1451bE8C33998CD43F375c2e67E79c1a104AD
CA: 0x7ceBeb6035B231A73CB5Fb4119c2FbBC04Ec6fD1
Przypadek ataku 2:
EOA: 0x616384a80f32aDb65243522971aE2ba7664B62E3
CA: 0x6f00Ed594A6AceEf0E1A6FE023Ecd5Eb96c8665a
Haker kontroluje różne adresy i przesyła 0 BSC-USD na adresy ofiar w trybie wsadowym za pośrednictwem kontraktów.
Ataki na Binance Smart Chain obejmują głównie tokeny takie jak BSC-USD, BUSD, USDC, ETH itp. Większość z tych ataków jest przeprowadzana za pomocą pliku wsadowego, który uruchamia polecenie transferFrom() na kontrakcie ataku. Istnieją jednak również przypadki ręcznego uruchamiania funkcji transfer(). Zasada jest w zasadzie taka sama. Poniżej widzimy przykład umowy ataku z BSC-USD.
transferFrom()
W transakcji, w której atakujący używa takich skryptów, umowa ataku wywołuje tylko funkcję transferFrom() BSC-USD. Po wypełnieniu parametrów nadawcy, odbiorcy i kwoty, haker może uruchomić przelewy 0 USD między dowolnymi adresami. Jednocześnie generuje polecenia AuthoriseApproval() i TransferTransfer().
Eksplorator transakcji Phalcon Blockchain
Informacje o transakcjach z przeglądarki blockchain Blocksec phalcon
Kod źródłowy kontraktu BSC-USD pokazuje, że funkcja transferFrom () wywołuje kolejno funkcje _transfer() i _approve():
Opcja _transfer () ma prostą funkcję. Najpierw wyklucza wszystkie adresy null z transakcji. Następnie odejmuje pieniądze dla nadawcy i dodaje pieniądze dla odbiorcy. Na koniec rejestruje zdarzenie transferu. Użyte tutaj funkcje dodawania i odejmowania add()/sub( ) to biblioteka SafeMath utworzona w kolekcji inteligentnych kontraktów OpenZeppelin. W przypadku przepełnienia zgłaszany jest błąd:
Funkcja _approve( ) wyklucza również pełny adres null i zmienia wartość autoryzacji. Głównym zadaniem tej funkcji jest obliczenie parametru wywołania transferFrom dla asercji. Używa ona następującego skryptu:
_allowances[sender][_msgSender()].sub(amount, “BEP20: transfer amount exceeds allowance”)
Ten skrypt odejmuje liczbę istniejących tokenów autoryzacyjnych od przelewu. Pozostała kwota autoryzacji jest umieszczana w asercji i ponownie autoryzowana. Użyta tutaj funkcja odejmowania sub( ) jest również biblioteką SafeMath z kolekcji inteligentnych kontraktów OpenZeppelin. Zgłasza ona błąd powrotu w przypadku przepełnienia. Jeśli jednak parametr sumy całego procesu wynosi zero, żaden mechanizm wykrywania nie może odrzucić transakcji. Prowadzi to również do dużej liczby zerowych transferów onchain, które mogą być wysyłane normalnie. Haker musi jedynie uiścić opłatę, aby osiągnąć solidny zysk.
transfer()
Wywołanie funkcji transfer () ma taką samą zasadę działania jak opisana powyżej. Tylko cały proces dodaje lub odejmuje wykrywanie przepełnienia. Nie ma filtrowania zerowych transferów:
BNB
W procesie śledzenia (namierzania) ataku tokenowego znaleźliśmy również pierwszy i ostatni identyczny atak phishingowy poprzez transfer 0 BNB. Zasada jest tutaj podobna do phishingu tokenowego: haker tworzy pierwszy i ostatni identyczny adres do phishingu.
Transakcje z atakiem:
https://bscscan.com/tx/0x5ae6a7b8e3ee1f342153c1992ef9170788e024c4142941590857d773c63ceeb3
Po takich sztuczkach użytkownik może pomylić adresy i przypadkowo przesłać tokeny na adres hakera:
Normalny adres użytkownika:
0x69c b60065dd0197e0837fac61f8de8e8186c 2a73
Adres hakera:
0x69c 22da7a26a322ace4098cba637b39fa0a4 2a73
Wnioski
Zespół X-explore zapewnia obecnie monitorowanie online takich ataków w czasie rzeczywistym. Aby uniknąć dalszych zagrożeń, zalecamy
- Zainstalowanie aplikacji, która pomaga użytkownikom rozróżniać adresy na podstawie koloru lub innych wskazówek.
- Użytkownicy powinni dokładnie sprawdzać historyczne adresy transakcji podczas przesyłania środków.
- Zaleca się przechowywanie osobnych zapisów z adresami gdzieś na osobnych dokumentach. Nie jest to zbyt wygodne, ale jest niezawodne.
Dbaj o bezpieczeństwo swoich finansów i nie zapomnij przeczytać naszych najnowszych poradników.