Kaj se pravzaprav zgodi, ko nekje "podpišeš"?
Predstavljaj si, da ti na naslov prispe token, ki ga nisi zahteval. V denarnici boš videl na primer "1.000 $REWARD" in zraven spletno stran, ki obljublja, da si to prevzameš z nekaj kliki. Odpreš spletno stran, povežeš denarnico in klikneš na gumb "Claim". Pojavi se okno z zahtevo po podpisu. In tu se vse odloči.
V kriptu obstajata dve različni vrsti "podpisa", ki izgledata skoraj enako, a pomenita nekaj drugega:
- Transakcija je enkratno dejanje. Nekaj pošlješ, nekaj zamenjaš, in je opravljeno.
- Approval (odobritev) je trajno dovoljenje. Pametnemu kontraktu rečeš: "od zdaj naprej smeš iz moje denarnice upravljati s tem tokenom."
Approval sam po sebi ničesar ne ukrade. Je zgolj dovoljenje. Denar izgine šele pozneje, ko napadalec to dovoljenje uporabi, klidno dolgo potem, ko si na prevarantsko stran že zdavnaj pozabil. Zato temu pravimo "podpis, ki ti bo denarnico izpraznil pozneje".
Kako konkretno izgleda approval prevara korak za korakom?
Vzemimo modelni potek. Številke so ponazoritvene, prikazati hočejo mehaniko, ne pa resnični primer.
- V denarnico ti prispe neznan token, na primer "AirdropX". Pojavil se je sam, ti nisi naredil ničesar.
- Token v imenu ali v "opisu" napotuje na spletno stran. Stran izgleda kot uradna stran projekta.
- Klikneš na "Claim reward". Denarnica prikaže zahtevo po podpisu.
- Podpišeš. A tisto, kar si podpisal, ni bil prevzem nagrade. Bil je
approvealisetApprovalForAll, torej neomejeno dovoljenje tujemu kontraktu, da razpolaga s tvojim stablecoinom ali s celotno zbirko NFT. - Takoj se nič ne zgodi. Denarnica izgleda normalno.
- Tri dni pozneje napadalec pokliče funkcijo
transferFromin si pošlje tvoje stanje stran. Ti vidiš le to, da so tokeni izginili.
Druga različica so tako imenovani phishing podpisi tipa Permit. Tam ne podpisuješ transakcije, ampak sporočilo (podpis je brezplačen, zanj ne plačaš pristojbine). Ravno to je zahrbtno: ker za podpis ne plačaš, ti manjka tisti trenutek, ko se v denarnici pokaže cena. O pristojbini in o tem, zakaj običajna transakcija stane denar, pišemo v našem slovarčku pri geslu gas-fee.
Zakaj je nevarnejši "approval" kot navadni prenos?
Ker je navadni prenos zaključen. Pošlješ deset tokenov, odide deset tokenov, konec. Pri approvalu podpisuješ obseg za naprej.
Mnogo dovoljenj se poleg tega podeli kot neomejenih (v praksi gre za tehnično najvišjo možno številko). To pomeni, da kontrakt sme poseči ne le po tistem, kar imaš zdaj, ampak tudi po tistem, kar ti prispe naslednjič. Ko si čez mesec na isti naslov pošlješ plačo v stablecoinu, staro dovoljenje še vedno velja in napadalec jo lahko prav tako odčrpa.
Bistveno je tole: prisotnost approvala še ne pomeni kraje. Kup legitimnih aplikacij (borze, menjalnice, posojilni protokoli) approval potrebuje za običajno delovanje. Problem ni approval kot tak, problem je approval, podeljen nekomu, ki mu nimaš razloga zaupati, ali approval, ki ga že zdavnaj ne potrebuješ več in si ga pustil viseti.
Kako pregledati svoja dovoljenja in kako jih preklicati?
Revokirati (preklicati) approval pomeni poslati novo transakcijo, ki to staro dovoljenje zniža na nič. Od tega trenutka naprej dani kontrakt nima več pravice premikati tvojega tokena.
Splošni postopek izgleda takole:
| Korak | Kaj počneš | Na kaj biti pozoren |
|---|---|---|
| 1 | Ugotoviš, katera dovoljenja ima tvoj naslov | Uporabi orodje, ki bere podatke neposredno iz blockchaina po tvojem javnem naslovu. Nikoli in nikamor ne vnašaj seed fraze niti zasebnega ključa. |
| 2 | Pregledaš seznam | Iščeš predvsem neomejena dovoljenja in dovoljenja za kontrakte, ki jih ne prepoznaš. |
| 3 | Sumljivo dovoljenje revokiraš | Revokacija je samostojna transakcija, zato zanjo plačaš omrežno pristojbino. |
| 4 | Preveriš rezultat | Po potrditvi bi moralo biti dovoljenje na ničli. |
Dve stvari, ki ju je pošteno povedati na glas:
- Revokacija stane pristojbino. Ni brezplačna, ker je to resnična transakcija v omrežju. Koliko točno, je odvisno od trenutnega stanja omrežja, in tega tu ne napovedujemo.
- Revokacija ne vrne tistega, kar je bilo že ukradeno. Preklic dovoljenja je preventiva in zaustavitev nadaljnjega odčrpavanja. Če je napadalec stanje že poslal, ga revokacija ne bo prinesla nazaj.
Kako prepoznaš sumljiv podpis, preden ga potrdiš?
Stoodstotnega vizualnega znaka ni, a nekaj signalov se ponavlja:
- Gumb obljublja "claim" ali "reward", denarnica pa prikazuje zahtevo po
approve,increaseAllowancealisetApprovalForAll. To je protislovje. - Podpis je "brezplačen" in gre za sporočilo tipa
Permit, pri čemer te spletna stran priganja v naglico. - Token, ki te je napotil na akcijo, je prispel nezaželeno.
- Naslov, ki mu dovoljenje podeljuje pravice, ni naslov aplikacije, ki jo dejansko uporabljaš.
Sodobne denarnice se danes trudijo pri tveganih podpisih prikazati opozorilo in prevesti tehnično vsebino v človeški jezik. Vzemi to kot pomoč, ne kot jamstvo. Odločitev za podpis je še vedno na tebi.
Kaj bi zdaj moral znati in kaj ostaja negotovo
Po tej lekciji bi moral znati razločiti razliko med enkratno transakcijo in trajnim approvalom, razumeti, zakaj se lahko denarnica izprazni šele z zamikom, in vedeti, da approval lahko pregledaš in prekličeš s samostojno transakcijo.
Kaj ostaja negotovo in česa ti nihče pošteno ne obljublja:
- Koliko bo revokacija stala. Pristojbina je odvisna od omrežja v danem trenutku, nobenega fiksnega zneska tu ne navajamo.
- Ali je konkreten kontrakt goljufiv ali ne. Orodje ti bo pokazalo, komu si kaj dovolil, a nalepke "tat" ne bo samodejno dodalo. Presoja verodostojnosti je vedno na tebi.
- Ali bo revokacija pomagala pravočasno. Če je napadalec dovoljenje zlorabil prej, kot si ga uspel preklicati, preventiva ne deluje več.
To je izobraževalna lekcija iz charliedesk Classroom. Ne govorimo ti, kaj kupovati ali prodajati. Prikazujemo, kako deluje mehanika, da se boš odločal z odprtimi očmi.

