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’.
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.
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 asmsg.sender
ormsg.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:
- via interacting with the GNO contract directly on Etherscan.
- via MyEtherWallet’s Interact with Contract interface.
- via the automatic update-script published on Gnosis Github.
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:
- MetaMask: Best for if you already have an existing wallet or if you have a hardware wallet. If you have a Trezor or Ledger you can connect through MetaMask and update without having your GNO leave your hardware wallet.
- Portis, Torus, Fortmatic: Best for if you do not have an active existing wallet and need to send your GNO out of an exchange, custodian service or cold storage.In any wallet choice, the GNO you wish to update must be in that active wallet along with a small amount of Ether to pay for the transaction cost of performing the update.
Note:
- If you have GNO in exchanges or other places, you will need to withdraw it to whatever decentralized wallet you’re using.
- 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:
- 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.
- 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.
- 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:
- 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.
- 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:
- 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.
- 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.
- Proceed with running the setup and automatic update-script.Steps for running the script:
cd Update
virtualenv venv
. venv/bin/activate
pip 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 https://t.co/oI3YM7pl0x pic.twitter.com/THGLJwGNFU
— MyCrypto.com (@MyCrypto) February 25, 2021
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:
- oszuści zalecają wydawać zgodę (approval) na niemal nieograniczone kwoty. Co za tym idzie – nawet jeśli nasz portfel zostanie opróżniony z danego tokenu, nadal istnieje ryzyko, że te same tokeny, które znów się na nim pojawią, również mogą zostać skradzione,
- jeśli komuś zdarzyło się popełnić błąd i wykonać instrukcje podane w takim mailu, ale jednak żadne tokeny nie zniknęły z adresu, nie oznacza to wcale, że zagrożenie minęło. Oszuści nadal mają dostęp do tych środków! Być może czekają tylko, aż odpowiednio dużo ludzi da się na to nabrać i wtedy zbiorą żniwo.
Ż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”.
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.
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ć.
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.
Śledź CrypS. w Google News. Czytaj najważniejsze wiadomości bezpośrednio w Google! Obserwuj ->
Zajrzyj na nasz telegram i dołącz do Crypto. Society. Dołącz ->
Aktualnie brak komentarzy.