Token Approval SCAM. Jak się przed nim ustrzec?

Rynek kryptowalut stale się rozwija, a wraz z nim rośnie cała społeczność ich użytkowników. Niestety wraz ze wzrostem popularności krypto, "w cieniu" rozwijają się również oszuści obmyślający kolejne sposoby na szybkie wzbogacenie się czyimś kosztem. Przez ostatnie lata obserwowaliśmy już mnóstwo nieczystych zagrywek - zarówno tych bardziej, jak i mniej wyszukanych. Na podstawie tych doświadczeń, swoich lub czyichś, wiemy już co robić, a czego nie, żeby zwiększyć bezpieczeństwo swoich środków. Jedną z wiodących zasad "BHP" w krypto jest trzymanie swoich środków na własnych portfelach, do których wyłącznie my posiadamy klucze prywatne. Wynikałoby z tego, że jeśli nie udostępnimy nikomu naszego klucza/seeda do portfela, to możemy spać spokojnie. Niestety to nie do końca tak działa. A gdyby okazało się, że ktoś może uzyskać dostęp do naszych środków inną drogą, niewymagającą udostępniania naszych kluczy? No właśnie... może.

Spis treści:


O SCAMach

Zapewne każdy natknął się już na kilka rodzajów oszustw związanych z kryptowalutami, niezależnie od długości swojej dotychczasowej przygody z krypto. Słyszeliśmy już o wielkich hackach giełd kryptowalutowyh, exploitach w sektorze DeFi (wykorzystywaniu błędów w ich kontraktach), czy o prostych scamach opierających się głównie o socjotechniki. Te prostsze w postaci np. giveaway'ów promowanych na świeżo utworzonych stronach internetowych bądź kontach w mediach społecznościowych, czy nieudolne szantaże przez spamowe e-maile z nieprzyzwoitym wątkiem w tle, już nikogo nie powinny dziwić i mam nadzieję, że każdy wie jak obchodzić się z tego typu próbami wyłudzenia. Pierwsza z wymienionych technik wykorzystuje nasze pragnienie szybkiego i łatwego wzbogacenia się, z kolei druga żeruje na strachu przed ewentualną kompromitacją. Żadna z powyższych nie wymaga posiadania szczególnej wiedzy, umiejętności z zakresu programowania czy wręcz bycia hakerem, gdyż działa na zasadzie wykorzystania ludzkiej psychiki. Mimo swej prostoty, oszustwa tego typu potrafią nieraz porządnie zasilić portfele oszustów. Co do bardziej wyszukanych metod, oszuści muszą się nieraz wykazać większym sprytem i umiejętnościami. Na przykład popularne ostatnimi czasy exploity w zdecentralizowanych finansach wymagają od takich oszustów niemałej wiedzy z zakresu tworzenia smart contractów, oraz wnikliwej analizy kontraktów potencjalnych ofiar. Mimo, iż ich działania są skrajnie niemoralne, to pomysłowości odmówić im nie można. Jednak exploity wymierzone są we wszelakie smart contracty, głównie ze sfery DeFi. Przygotowania do tego typu ataku wymagają sporego nakładu pracy, więc i cele obierane przez oszustów powinny przynieść odpowiedni zysk. Oszustwa w oparciu o funkcje stosowane w inteligentnych kontraktach bywają również wymierzone w prywatne portfele użytkowników.

Czym jest funkcja approval?

Każdy, kto choć raz korzystał z produktów DeFi, bądź giełd DEX zna zapewne funkcję 'approval'.

Przykład transakcji approval. W tym przypadku dla Uniswap.

Funkcja ta w praktyce oznacza wyrażenie zgody na sięganie do naszych zasobów przez konkretny, wskazany w transakcji smart contract. Na powyższym zrzucie ekranu widzimy opisane kolorami wartości używane w tej funkcji: adres smart contractu tokenu, na który wydawana jest zgoda, adres właściciela środków, adres upoważniony do ich wydatkowania (spender) oraz dostępną kwotę (amount). W tym przypadku wydana zgoda dotyczy tokenu Uni (0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984) będącego w dyspozycji anonimowego użytkownika (czerwona ramka), a który ma być wydany za pośrednictwem Routera v2 Uniswapa (0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D), na kwotę 79 228 162 514,2643 tokenów Uni. Liczba na screenie jest tą samą kwotą, lecz przemnożoną przez 10^18, gdyż  jak wiemy Ether, jak i większość tokenów ERC-20 dzieli się do 18-tego miejsca po przecinku. Sama w sobie funkcja approval nie jest niczym nadzwyczajnym i jest powszechnie stosowana, na przykład na wspomnianych wcześniej DEXach. Podpisujemy taką transakcję za każdym razem, gdy chcemy po raz pierwszy wymienić jakiś token, czy zdeponować go na dowolnym inteligentnym kontrakcie operującym z użyciem dappów. Oznacza to, że zarówno wymiana na Uniswap, czy staking/farming lub liquidity providing na przeznaczonych do tego platformach będą wymagały od nas takiej właśnie zgody.

Próba wymiany nowego tokenu (Skey) na giełdzie DEX- 1inch.

Odpowiedź portfela Metamask.

  Jak zasugerował portfel Metamask żądając potwierdzenia takiej transakcji, powinniśmy wydawać takie pozwolenia wyłącznie smart contractom, które są nam znane i ufamy tym platformom, gdyż dajemy im spore uprawnienia.

Token Approval SCAM

Oczywiście istnieją bardziej kreatywni oszuści, którzy znaleźli sposób na wykorzystanie tej pozornie niegroźnej funkcji. Gdy cały rynek rośnie, razem z nim wzrasta ilość nieuczciwych graczy chcących zarobić w nieczysty sposób. W tym sezonie, przez pewien czas popularne były SCAMy wykorzystujące funkcję approval w dosyć podstępny sposób. Do ataku phishingowego zostały wykorzystane listy e-maili pochodzące prawdopodobnie z różnych wycieków danych, do których wysyłano wiadomości za pośrednictwem usługi newslettera oferowanego przez portal substack.com. Oszuści kierowali do swoich ofiar informację o konieczności "ulepszenia" smart contractów różnych tokenów, co rzekomo miało obniżyć opłaty za wykonywane transakcje. W tym przypadku trzeba przyznać, że oszuści się postarali, gdyż w takim e-mailu zawierali pełną instrukcję opisującą konieczne do wykonania kroki zarówno dla użytkowników portfeli Metamask, MyEtherWallet, jak i załączając dodatkowo część skryptu w Pythonie służącą do manualnego "ulepszenia" smart contractu. Skrypt wraz z instrukcjami jednak jest niepełny, więc jego zadaniem mogło być stworzenie pozorów profesjonalizmu przekazywanej instrukcji.

Cel - Gnosis (i inne tokeny).

Dzięki witrynie web.archive.org nadal można dotrzeć do oryginalnej wiadomości rozsyłanej przez scammerów. Sama instrukcja opisywała krok po kroku jak w prosty sposób nadać uprawnienia "spender" smart contractowi kontrolowanemu przez oszustów. Należy przez to rozumieć, że podobnie jak w przypadku np. DEXów obcy smart contract zyska dostęp do dysponowania naszymi środkami. Jeden z takich ataków wymierzony został w posiadaczy tokenu Gnosis (GNO), który jak wiele innych odnotował w tym roku znaczny wzrost. Oto jej pełna treść (oznaczona na pomarańczowo):

Gnosis Smart Contract Upgrade

The upgraded smart contract uses 71% less gas, supports updates thanks to proxy patterns and allows you to participate in future votes.

The upgraded smart contract is not a different contract, but just a new version. This post is intended to serve as a reminder and reaffirmation of Gnosis smart contract upgrade on Thursday, January 14th, 2021 for all community members, users and ecosystem participants. Current GNO holders will need to manually update their GNO tokens via a so called proxy contract, whose main purpose is to ensure a safe and seamless upgrade without breaking any dependencies. Although no immediate action needs to be taken, however, GNO holders who update early will be eligible for the new liquidity rewards program, starting on January 20th and lasting one week. To provide enough time for holders to receive the upgrade information, we decided that the deadline should be 12:00, 19th, January 2021 (UTC+8). After the deadline, for those old GNO token failed to update, you could send an email to update@gnosis.io. Gnosis Team will verify the condition of your old GNO and conduct the swap process once a month. If you have any questions, comments or concerns, please get in touch at update@gnosis.io or by replying to this email. Why do we need to upgrade? If a smart contract has already deployed it cannot be modified, so how can we update it? We use a proxy contract that receives all message calls from the outside world and redirects then to a contract containing the application logic. We can then deploy a new logic contract and update the proxy contract to reference that new contract. In Ethereum this is possible thanks to the delegatecall opcode: by putting it into the contract’s fallback function, all calls will be proxied no matter what. This doesn’t mean that the application contract will be in responsible for executing the transaction, as the proxy actually call function code from the logic contract, executing that code in proxy contracts own context. Our application state will then naturally be inside the proxy storage, and context variables such as msg.sender or msg.value will still be related to the account which sent the transaction towards the proxy.

GNO Update Guide

There are three accessible methods to update your GNO tokens: The first two updating methods are pretty straightforward and intuitive. The third one, even though rather simple as well, has some limitations which should be considered before deciding to go forward. In this post we outline and detail and step by step walkthrough for each option. Recommended wallets: Note:
  1. If you have GNO in exchanges or other places, you will need to withdraw it to whatever decentralized wallet you’re using.
  2. Despite the fact that we provide direct links in this walkthrough, we advise all users to manually insert the necessary website addresses (Etherscan, MyEtherWallet, Github) in their browser's address bar, check the website address and the SECURITY CERTIFICATE (green padlock symbol next to the address). Please check this every time you visit the chosen update website just to avoid falling into scams such as duplicate sites.
GNO Contract: 0x6810e776880C02933D47DB1b9fc05908e5386b96 GNO Proxy Contract: 0x093fAd33c3Ff3534428Fd18126235E1e44fA0d19

Update via Etherscan+MetaMask:

  1. Begin by navigating to the GNO contract on Etherscan. If you wish to approve the exact amount of GNO that you hold, navigate to the Read Contract tab on the GNO token contract, click on balanceOf function, enter your ethereum address in the _owner(address)”field and proceed by selecting the Query button - this will show, in attoGNO (ex: 'wei' or 10^18), the exact amount of GNO tokens that you hold in the queried address. If you do not wish to do the conversion, you can simply skip this part and when required, enter 1000000000000000000000000000 in the _value(uint256)” field to set the maximum approval amount for the GNO token.
     
  2. You now need to set an approval for the GNO proxy contract. Switch to Write Contract tab on the GNO contract. You must connect to a Web3 instance such as MetaMask. You can connect a hardware wallet such as Trezor or Ledger to your MetaMask extension and thus interact without GNO leaving your hardware wallet. Proceed by connecting your Web3 instance by selecting Connect to Web3. If you have more than one address connected to MetaMask, make sure you select the one that holds GNO tokens.
     
  3. First, select the approve function, enter the GNO proxy contract address in the _spender(address)” field, 0x093fAd33c3Ff3534428Fd18126235E1e44fA0d19.Second, enter however much GNO you wish to update in the _value(uint256)” field.Third, select Write button and confirm the approval in MetaMask - this will approve the full balance of GNO in your connected account.
     
When the transaction is confirmed the update is complete. Meanwhile, you may sell, trade and swap GNO tokens, this will not affect the upgrading process. That's it, you're all done!

Updating via MyEtherWallet:

  1. Begin by navigating to www.myetherwallet.com, access your wallet via preferred method and head to the Contract section, to the left of your wallet interface.
     
  2. Enter the current GNO contract address in the Enter Contract Address field, 0x6810e776880C02933D47DB1b9fc05908e5386b96.For the ABI/JSON Interface field, you need to head over to GNO contract Code tab on Etherscan.
      Scroll down to Contract ABI section and click on Copy ABI to clipboard button, to the upper right of the ABI code.
      Paste the contract ABI to ABI/JSON Interface on MyEtherWallet and proceed by selecting Continue button. Finally, should look like this:
     
  3. If you wish to approve the exact amount of GNO that you hold, click on Select an item button next to the contract address and choose balanceOf function, enter your ethereum address in the _owner(address)”field and proceed by selecting the Read button - this will show in the Result:” field the exact amount of GNO tokens that you hold in the queried address. If you do not wish to do the conversion, you can simply skip this part and when required, enter 1000000000000000000000000000 in the _value(uint256)” field to set the maximum approval amount for the GNO token.
     
Click on Select an item button next to the contract address and choose approve function. First, enter the GNO proxy contract address in the _spender(address)” field, 0x093fAd33c3Ff3534428Fd18126235E1e44fA0d19. Second, enter however much GNO you wish to update in the _value(uint256)” field. Note: Value in ETH: field must be left blank. Third, select “Write” and confirm the approval.
  When the transaction is confirmed the update is complete. Meanwhile, you may sell, trade and swap GNO tokens, this will not affect the updating process. That's it, you're all done!

Updating via Automated Script:

This process is not recommended for a normal user or GNO holder, and only commonly used by exchanges or other custodians with proper engineering teams and security protocols that have the relevant experience and knowledge.
  1. Navigate and clone the update-script from the Gnosis Github repo.Requirements for this process entail:(a) Python 3.6+ installed.(b) HTTP Ethereum endpoint that can receive requests (--rpcvhosts=* if local).(c) Private key of Ethereum account stored as environment variable.
  2. Proceed with running the setup and automatic update-script.Steps for running the script:cd Updatevirtualenv venv. venv/bin/activatepip install -e .ETHEREUM_HTTP=[YOUR_ETHEREUM_HTTP_ENDPOINT] ETHEREUM_PRIVATE_KEY=[YOUR_PRIVATE_KEY] update
If you do not have a local Ethereum node running, you must specify one with the environment variable ETHEREUM_HTTP. That's it! Jak widać oszuści zadali sobie sporo trudu, aby stworzyć prostą, a zrazem dokładną instrukcję, zrozumiałą również dla laików. Użyty w tym przypadku smart contract: 0x093fAd33c3Ff3534428Fd18126235E1e44fA0d19 został już oznaczony na Etherscanie jako 'Fake_Phishing4700', a krótka analiza transakcji dokonywanych z jego użyciem wskazuje, że token GNO nie był jedynym na celowniku oszustów, gdyż przez kontrakt przechodziły takie tokeny jak: NEXO, SNX, yUSDC, YFI oraz wiele innych. Ukazuje to porażającą wręcz skuteczność tej metody oszustwa.

Unibright

Jednym z tokenów, w którego posiadaczy był wymierzony ten SCAM był również Unibright (UBT), którego zespół przestrzegł na Twitterze swoją społeczność przed szerzącym się phishingiem.

We have been alerted to a fraudulent email circulating about a contract update.

There is no contract update. Please be careful! pic.twitter.com/lC6cnV4v59 — Unibright (@UnibrightIO) March 20, 2021
Warto zaznaczyć, że reakcja nastąpiła ze sporym opóźnieniem, gdyż tweet został zamieszczony w marcu, podczas gdy kampania oszustów była prowadzona już w styczniu. Tak więc były to przynajmniej 2 miesiące bezkarnego okradania niczego nieświadomych użytkowników kryptowalut. Innym spostrzeżeniem może być również to, że w tym przypadku mail z instrukcją różnił się od wcześniej wspomnianego jedynie grafiką, oraz smart contractem tokenu, czyli nieśmiertelna metoda kopiuj-wklej sprawdziła się również na tym polu.

Chainlink

Jest kolejnym tokenem, na który połasili się oszuści. Metoda ataku była w tym przypadku identyczna. Ciekawostką jest jednak to, że atak został przeprowadzony z użyciem innego smart contractu: 0x7ae7d6E2e61Fbf0Be780dd19B6A01f5D44bedE89, który mimo, iż nie odniósł wielkiego "sukcesu", to na Etherscan nadal oznaczony jest jako "LessGasProxy".

⚠️@sniko_ found 4 accounts that fell for a token approval scam targeting @chainlink holders.

2 accounts were already drained of their $LINK tokens!? If you own any of these, please go revoke access for 0x7ae7d6E2e61Fbf0Be780dd19B6A01f5D44bedE89 at //t.co/oI3YM7pl0x pic.twitter.com/THGLJwGNFU — MyCrypto.com (@MyCrypto) February 25, 2021

Smart Contract użyty przez scammerów

Jak się uchronić przed oszustwem?

Odpowiedź na to pytanie może wydawać się oczywista - czujność i nieklikanie w podejrzane linki, potwierdzanie u źródeł, etc. I jest w tym prawda, choć w przypadku tego oszustwa warto wspomnieć jeszcze o kilku kwestiach: Żeby ustrzec się przed dalszym zagrożeniem warto poznać jedną z funkcjonalności Etherscan.

Token approvals - jak cofnąć zgodę?

Nawet nie posiadając rozległej wiedzy z zakresu technologii blockchain i kryptowalut, wiele dostępnych narzędzi potrafi znacznie ułatwić nam bezpieczne korzystanie z krypto. Jednym z takich narzędzi jest możliwość sprawdzenia kto ma dostęp do naszych środków i takie "zezwolenie" (approval) cofnąć. Podobnie jak w przypadku wydania zgody, jej cofnięcie również jest transakcją, za którą należy uiścić drobną opłatę. Jak to zrobić? Aby sprawdzić listę zezwoleń udzielonych dla zarządzania środkami naszego adresu należy odnaleźć swój adres w Etherscanie i następnie odnaleźć opcję "Token Approvals".

Dostęp do funkcji "Token approvals" w Etherscan

Po kliknięciu w tę opcję ujrzymy pełną listę udzielonych zezwoleń (approval) wydanych przez nasz adres. Warto zwrócić uwagę, że różne protokoły stosują różne podejście co do ilości tokenów, na które wydawane są zezwolenia.

Lista wydanych 'zezwoleń' widoczna w Etherscan

Następnie, aby cofnąć dowolne uprawnienia należy skorzystać z opcji "Connect to Web3" widocznej w lewym górnym narożniku i postępować zgodnie z instrukcjami. Proces ten jest równie prosty jak np. podłączanie swojego portfela do giełd DEX. Po udanym połączeniu wystarczy wybrać z listy uprawnienia, które chcemy cofnąć i kliknąć w odpowiednią ikonę z kolumny "Revoke" (po prawej). Następnie klikamy w "Revoke" w wyskakującym okienku i podsumowanie transakcji wyświetli się w portfelu, np. Metamask. W tym miejscu możemy zdecydować czy chcemy zmniejszyć uprawnienia dla danego smart contractu, czy całkowicie je wycofać.

Funkcja "Revoke Approval" w Etherscan

Zabieg ten może nas uchronić przed utratą środków w przypadku, gdy padniemy ofiarą oszustwa, a oszuści nie zdążą jeszcze wypłacić naszych środków. Profilaktycznie warto również upewnić się kto jeszcze ma dostęp do naszych tokenów. Nigdy nie wiadomo kto i w jaki sposób przeprowadzi następny atak.

Komentarze

Ranking giełd