Zusammenfassung
Auf Ethereum wird der ERC20-Token-Standard von Unternehmen und Nutzern häufig verwendet, um dezentrale Anwendungen (DApps) zu entwickeln. Viele ERC20-Token haben einen hohen Wert und werden auf dem Kryptomarkt gehandelt. Mit dem Wachstum des DeFi-Ökosystems werden ERC20-Token zudem immer häufiger gehandelt. Der ERC20-Standard sieht die Funktion approve() vor, mit der DApps oder anderen Nutzern die Berechtigung erteilt wird, Token abzubuchen. Tatsächlich verlangen viele DApps von ihren Nutzern eine unbegrenzte Freigabe. Dieses Konzept hat ein schwerwiegendes Problem geschaffen: Eine Reihe von Vorfällen hat sowohl Nutzern als auch den DApps selbst erhebliche Verluste verursacht.
0xffffff. Vorwort
„Unbegrenzte Freigaben“ werden schon seit Langem diskutiert. Durch das Wachstum von DeFi und einige Sicherheitsvorfälle ist das Thema erneut in den Vordergrund gerückt. Angesichts dieser Vorfälle möchten wir unbegrenzte Freigaben noch einmal umfassend aus verschiedenen Blickwinkeln untersuchen. Außerdem wurden wir eingeladen, auf der 29. Blockchain-Village-Konferenz über dieses Thema zu sprechen.
Leseempfehlung:
- Wenn Sie neu bei Ethereum sind, empfehlen wir Ihnen, den gesamten Blogbeitrag zu lesen.
- Wenn Sie Ethereum bereits gut kennen und Erfahrung mit unbegrenzten Freigaben haben, können Sie bei Abschnitt 0x2 beginnen.
0x0. Hintergrund
Bevor wir uns mit der Frage „Was ist eine unbegrenzte Freigabe?“ befassen, möchte ich kurz erklären, was eine Freigabe bei ERC20-Token ist.
ERC20-Token
Auf Ethereum sind neben Ether zahlreiche weitere Token mit erheblichem Wert auf dem Kryptomarkt im Umlauf. ERC20 ist der verbreitetste Token-Standard. Nach unseren nicht vollständigen Erhebungen sind bei CoinGecko (einer Website, die Token-Preise erfasst) und Uniswap (derzeit eine der bekanntesten dezentralen Börsen) mehr als 5.600 bzw. 44.000 ERC20-Token verzeichnet.
Freigabemechanismus
Am Freigabeprozess sind hauptsächlich drei Akteure (Absender, Verfügungsberechtigter und Token-Vertrag) sowie zwei Funktionen (approve, transferFrom) und zwei Variablen (balanceOf, allowance) des ERC20-Standards beteiligt (siehe folgende Abbildung).

Die folgende Abbildung veranschaulicht den Freigabeprozess und zeigt, wie die Funktionen approve und transferFrom den Zustand des Token-Vertrags verändern.

- (Schritt 1) Zu Beginn hält der Absender 100 Token im Vertrag. Der Verfügungsberechtigte hat keine vom Absender genehmigte
allowance. - (Schritt 2) Der Absender ruft die Funktion
approveauf und gibt damit 100 Token für den Verfügungsberechtigten frei. Dadurch steigtallowance[sender][spender]von 0 auf 100;balanceOfdes Absenders ändert sich nicht. - (Schritt 3) Schließlich ruft der Verfügungsberechtigte
transferFromauf, um 80 Token vom Absender an sich selbst zu übertragen. Daraufhin werden diebalanceOf-Werte des Absenders und des Verfügungsberechtigten auf 20 bzw. 80 aktualisiert. Zugleich sinkt die Freigabe des Verfügungsberechtigten auf 20.
Drei Arten von Freigaben in der Praxis
In der Praxis lassen sich Freigaben anhand des freigegebenen Betrags in drei Arten einteilen.
- Nullfreigabe: Der freigegebene Betrag ist null. Das bedeutet im Wesentlichen, dass der Nutzer bzw. Absender die Freigabe für eine bestimmte Plattform bzw. einen bestimmten Verfügungsberechtigten widerrufen möchte.
- Unbegrenzte Freigabe: Der freigegebene Betrag entspricht dem Höchstwert von
uint256(0xffff...ffff) oder dem Gesamtangebot der Token. Diese Art der Freigabe wird von vielen DeFi-Plattformen, etwa Börsen und Kreditplattformen, häufig verwendet. - Sonstige Freigabe: Diese Art umfasst alle übrigen Freigaben. Nutzer erteilen sie in der Regel mithilfe einer Anpassungsfunktion, die Plattformen oder Wallets bereitstellen.
0x1. Vorfälle aus der Praxis
Auch in der Praxis gab es Vorfälle im Zusammenhang mit dem beschriebenen Freigabeproblem. In unserem Vortrag haben wir zwei davon (UniCat und Bancor Finance) ausführlich behandelt. Wenn Sie mehr darüber erfahren möchten, finden Sie unter den folgenden Links weitere Informationen:
- UniCat-Vorfall:Link
- Bancor-Finance-Vorfall: Link
- Primitive Finance: Link1, Link2
- Furucombo: Link,Link (Chinesisch)
- DeFi Saver: Link
- Degen Money: Twitter
0x2. Einige Messungen
In diesem Abschnitt stellen wir unsere Untersuchung von Off-Chain- und On-Chain-Aspekten ausführlich vor. Um die derzeitige Situation bei unbegrenzten Freigaben besser zu verstehen, führen wir unsere Messungen aus der Perspektive von Frontend-Nutzern durch.

Freigabeprozess in der Praxis
Die obige Abbildung zeigt, dass Frontend-Nutzer möglicherweise sechs Schritte durchlaufen, um eine Freigabetransaktion abzuschließen. Daran sind vier wesentliche Akteure beteiligt (Frontend-Nutzer, Wallets, Plattformen und Token-Verträge). Gehen wir den Ablauf Schritt für Schritt durch:
Schritt 1, 2: Zunächst verbinden die meisten Frontend-Nutzer (über Mobilgeräte oder Websites) ihre Wallets mit der ausgewählten Plattform und senden ihre Anfragen.
Schritt 3: Anschließend erstellt die Plattform die Freigabetransaktion mit den erforderlichen Daten – insbesondere dem freizugebenden Betrag – und sendet sie zur Bestätigung an die Wallet des Nutzers.
Schritt 4, 5: Nach Eingang der Freigabetransaktion zeigt die Wallet dem Nutzer die entsprechenden Informationen an und wartet auf seine Bestätigung.
Schritt 6: Sobald der Nutzer die Transaktion bestätigt, sendet die Wallet sie zur Validierung an das Netzwerk. Die validierte Transaktion ändert daraufhin den Zustand des Token-Vertrags (Allowance[User][Platform]).
(Im folgenden Abschnitt erläutern wir zunächst, was uns zu den jeweiligen Off-Chain- und On-Chain-Messungen motiviert hat. Danach stellen wir die Messergebnisse und Erkenntnisse aus verschiedenen Blickwinkeln vor.)
Off-Chain-Untersuchung
Motivation
Beim Freigabeprozess interagieren Frontend-Nutzer unmittelbar mit den Benutzeroberflächen von Wallet und Plattform. Deshalb haben wir 15 bekannte Wallets und 24 DeFi-Plattformen (Dezentrales Finanzwesen) für unsere Off-Chain-Untersuchung ausgewählt.
(Die Ergebnisse der Untersuchung sind in den beiden folgenden Abbildungen zusammengefasst.)


Dabei betrachten wir vor allem, wie Freigaben erklärt werden und wie flexibel sie sich gestalten lassen:
- Erklärung
- Wallet: 1) Zeigt die Wallet aussagekräftige Informationen zur Freigabetransaktion an (einschließlich Nutzer, Verfügungsberechtigtem, Token und freigegebenem Betrag)? 2) Gibt die Wallet eine besondere Warnung aus oder informiert sie Nutzer über die „unbegrenzte Freigabe“?
- Plattform:(Kriterium 1)Bietet die Plattform auf ihrer Weboberfläche eine verständliche Erklärung zu Freigabetransaktionen?(Kriterium 2)Informiert die Plattform Nutzer darüber, dass eine Freigabetransaktion stattfindet?(Kriterium 3)Informiert die Plattform Nutzer darüber, dass zwei Transaktionen nacheinander ausgeführt werden?
- Flexibilität: Bietet die Benutzeroberfläche der Wallet oder Plattform eine Funktion, mit der sich der freigegebene Betrag ändern lässt?
(Im folgenden Abschnitt zeigen wir anhand von jeweils zwei Wallets und zwei Plattformen, wie sie bei diesen beiden Aspekten abschneiden.)
0x222. Wallets: Metamask & Coinbase
Wir stellen unsere Untersuchungsergebnisse für die Coinbase-Wallet und die Metamask (Chrome-Erweiterung)-Wallet vor. Laut Google Play Store (siehe folgende Abbildung) wurden sowohl Coinbase als auch Metamask mehr als 1 Million Mal installiert. Coinbase hat allerdings mehr Nutzerbewertungen und eine höhere Bewertung erhalten.

Für die Untersuchung der beiden Wallets testen wir mit ihnen die Tauschfunktion auf der Compound-Plattform. Beachten Sie, dass die Compound-Plattform für Nutzer standardmäßig eine unbegrenzte Freigabe vorsieht.
Wallet 1: Metamask
Wie die folgende Abbildung zeigt, können Nutzer bei der Prüfung der von Compound erstellten Freigabetransaktion im Wesentlichen alle Informationen sehen, darunter die Adresse des Verfügungsberechtigten, die Signatur der Freigabefunktion und den freigegebenen Betrag (Schritt 2). Zudem können Nutzer in Metamask den freigegebenen Betrag über die Schaltfläche „Bearbeiten“ ändern (Schritte 2, 3, 4).

Wallet 2: Coinbase
Im Gegensatz zur Metamask-Wallet zeigt die Coinbase-Wallet zunächst überhaupt keine wichtigen Informationen an. Nutzer können erst nach der Bestätigung der Freigabetransaktion weitere Details einsehen (siehe folgende Abbildung). Beachten Sie, dass die Schritte 2, 3 und 4 erst während oder nach der ausstehenden bzw. abgeschlossenen Freigabetransaktion angezeigt werden. Die Coinbase-Wallet verbirgt somit notwendige Informationen zur Freigabetransaktion und bietet keine Möglichkeit, den freigegebenen Betrag zu ändern.

0x223. Plattformen: Bancor & Curve Finance
In diesem Abschnitt vergleichen wir Bancor und Curve Finance. Wie die folgende Abbildung zeigt, belegten Curve Finance und Bancor laut den neuesten Statistiken von defipulse (Stand: 7. August 2021) gemessen am gesperrten Gesamtwert den ersten bzw. fünften Platz unter den DEX (dezentralen Börsen).
Für unsere Untersuchung verwenden wir die Metamask-Wallet, um die Tauschfunktion beider Plattformen zu testen.

Plattform 1: Bancor
Beim Test der Tauschfunktion auf Bancor erklärt die Plattform, warum eine Freigabetransaktion erforderlich ist (siehe folgende Abbildung). Sie bietet Nutzern sogar zwei Optionen: eine unbegrenzte und eine begrenzte Freigabe. Bei der begrenzten Freigabe verlangt Bancor nur genau die allowance, die Nutzer für den Tausch benötigen.

Plattform 2: Curve Finance
Bei Curve Finance geschieht dagegen etwas „Interessantes“. Wenn wir einen Tausch anfordern, zeigt die Benutzeroberfläche von Curve Finance „Bitte geben Sie 10 USDT für den Tausch frei“ an (siehe folgende Abbildung). Metamask erhält jedoch eine Transaktion für eine unbegrenzte Freigabe. Diese Information ist für Nutzer eindeutig irreführend.

Als wir später bei Curve Finance nachfragten, bestätigte das Team unsere Bedenken und erklärte, der Grund sei, dass „Nutzer nicht jedes Mal eine Freigabe erteilen wollten“ (siehe folgende Abbildung).

Die Benutzeroberfläche von Yearn Finance weist dasselbe Problem auf wie die von Curve Finance. (In unserem Vortrag sprechen wir ebenfalls darüber und zeigen entsprechende Belege.)
0x23. On-Chain-Untersuchung
0x231. Motivation
Um die Situation bei unbegrenzten Freigaben auf der Blockchain besser zu verstehen, haben wir alle Transaktionen bis zum 30. April 2021 erfasst und untersucht. Wie die folgende Abbildung zeigt, nimmt die Zahl der unbegrenzten Freigaben inzwischen sehr schnell zu. Unsere Untersuchung deutet darauf hin, dass die Einführung von UniswapV2 der wichtigste Faktor für diesen Anstieg ist. Anhand unserer Messergebnisse werden wir diesen Punkt näher erläutern.

Da Token und Plattformen – statt der Nutzer selbst – am unmittelbarsten mit unbegrenzten Freigaben zusammenhängen, untersuchen wir sie unter zwei Gesichtspunkten:
- Die Verteilung unbegrenzter Freigaben
- Risikoanalyse
0x232. Die Verteilung unbegrenzter Freigaben
Zum besseren Verständnis der folgenden Diagramme erläutern wir zunächst die darin verwendeten Begriffe:
- Y-Achse (Anteil maximaler Freigaben): Je höher der Wert, desto höher der Anteil unbegrenzter Freigaben an allen Freigabetransaktionen
- X-Achse (Aktivität): Je höher der Wert, desto aktiver ist die Plattform bzw. der Token. Der Aktivitätswert hängt von der Zahl der Freigabetransaktionen und dem zeitlichen Abstand zwischen der ersten und der letzten Freigabetransaktion ab
- Punktgröße: Je größer der Punkt, desto mehr Freigabetransaktionen betreffen den Token bzw. die Plattform
(Die beiden folgenden Abbildungen zeigen nur die 1.000 Token bzw. Plattformen, die am häufigsten an Freigabetransaktionen beteiligt waren.)
(Plattform)

(Token)

Plattform: Im Plattformdiagramm sticht UniswapV2 bei allen drei Kriterien gegenüber den anderen Plattformen deutlich hervor. Deshalb kommen wir zu dem Schluss, dass „die Einführung von UniswapV2 der wichtigste Faktor für den Anstieg unbegrenzter Freigaben zu sein scheint“.
Token: Bei den Token schneiden USDC, USDT und DAI nach den drei oben definierten Kriterien am besten ab. Sie sind allesamt Stablecoins, was nachvollziehbar ist: Stablecoins werden auf dem Kryptomarkt häufig für den Handel verwendet. Die anderen hervorgehobenen Token (die Top 10) haben einen recht ähnlichen Anteil maximaler Freigaben.
0x233. Risikoanalyse
Auf Grundlage der bisherigen Ergebnisse wählen wir USDC, USDT und DAI (die drei führenden Token) sowie zwei Plattformen (Bancor und UniCat) für unsere Risikoanalyse aus. Außerdem definieren wir zwei Begriffe (siehe folgende Abbildung), um das Risiko freigegebener Token verständlicher zu machen.

Risikobetrag
- Bei einem Token entspricht der Risikobetrag der Gesamtmenge an Token, die durch Aufruf der Funktion
transferFromübertragen werden könnte - Bei einer Plattform entspricht der Risikobetrag der Gesamtmenge eines einzelnen Tokens, die durch Aufruf der Funktion
transferFromübertragen werden könnte
Risikoquote
- Für einen bestimmten Token bezeichnet die Risikoquote den Anteil des Risikobetrags am Gesamtangebot dieses Tokens
Token: Wie die folgende Abbildung zeigt, bleiben USDC und USDT über eineinhalb Jahre recht stabil (ihre Risikoquoten liegen bei etwa 10 %). Bei DAI fällt die Quote Mitte des Jahres stark ab und stabilisiert sich schließlich ebenfalls bei etwa 10 %, allerdings mit stärkeren Schwankungen. Dieses Phänomen könnte auf bestimmte Ereignisse oder die Funktionsweise von DAI zurückzuführen sein. Die Ursache müssen wir noch genauer untersuchen.

Plattform: Für die Risikoanalyse der Plattformen zeigen wir ein Verlaufsdiagramm des Risikobetrags (siehe folgende Abbildung) für Bancor (mit dem BNT-Token) und UniCat (mit dem UNI-Token).
Das Verlaufsdiagramm von Bancor zeigt einen unmittelbaren Anstieg und Rückgang. Dies verdeutlicht, wie schnell das Team die angreifbaren Token aus dem fehlerhaften Vertrag an einen sicheren Ort übertragen hat.
Beim Verlaufsdiagramm von UniCat haben wir bestätigt, dass einige deutliche Rückgänge durch die Hintertürangriffe von UniCat verursacht wurden.

0x3. Bestehende Lösungsansätze
Wie bereits erwähnt, sind unbegrenzte Freigaben im Ökosystem seit Langem ein Thema. In verschiedenen Diskussionen wurden Lösungsansätze vorgeschlagen, um den Freigabeprozess zu verbessern:
- ERC777
- EIP2612
Bevor wir auf diese Lösungen eingehen, möchten wir noch einmal an den wesentlichen Grund für unbegrenzte Freigaben erinnern:
- Für
approveundtransferFromsind zwei Transaktionen erforderlich - Bei individuell bemessenen Freigaben müssen Nutzer vor jedem Handel oder jeder Einzahlung erneut eine Freigabe erteilen (und damit weitere Transaktionsgebühren zahlen)
- Plattformen möchten die Nutzererfahrung verbessern, indem sie nur einmalig eine unbegrenzte Freigabe anfordern
0x31. ERC777
ERC777 wurde 2017 als Token-Standard vorgeschlagen und verbessert den Freigabeprozess von ERC20-Token in folgenden Punkten:
- Nutzer können einen Operator (etwa eine Börse) „autorisieren“, eine gewünschte Menge ihrer Token zu übertragen
- Nutzer müssen nicht wiederholt Freigabetransaktionen einreichen
- Nutzer müssen sich keine Sorgen über das Risiko unbegrenzter Freigaben machen
Mit ERC777 können Nutzer somit atomare Käufe bei jedem autorisierten Operator durchführen.
Allerdings hat ERC777 auch deutliche Nachteile:
Hohe Transaktionsgebühren aufgrund der im Standard verwendeten Hooks (weitere Einzelheiten). Nutzer müssen einen vertrauenswürdigen Operator auswählen (damit liegt die Entscheidung wieder bei ihnen).
0x32. EIP2612
Bei EIP2612 sieht der Vorschlag vor, dass Nutzer signierte Nachrichten zur Validierung von Transaktionen verwenden können. So müssen sie keine Transaktionsgebühren zahlen, um ihre allowance zu ändern. Anders gesagt: Mit EIP2612 werden Freigabetransaktionen kostenlos. Der Vorschlag wird derzeit auch von UniswapV3 für Token von Liquiditätsanbietern verwendet.
0x4. Fazit
Unbegrenzte Freigaben senken die Kosten für Nutzer, die andernfalls mehrere Freigabetransaktionen durchführen müssten. Unsere Untersuchung zeigt jedoch, dass manche Plattformen und Wallets im Spannungsfeld zwischen Komfort und Sicherheit die Risiken weiterhin herunterspielen. Schlimmer noch: Einige führen Nutzer durch falsche Angaben sogar in die Irre. Statt auf unbegrenzte Freigaben zu setzen, sollten Plattformen und Wallets daher von Anfang an sicherere Benutzeroberflächen oder Protokolle zum Schutz der Nutzer entwickeln. Wer DeFi nutzt, sollte ein Sicherheitsbewusstsein entwickeln, bevor es zu einem Angriff kommt – nicht erst als dessen Folge. Wir sind überzeugt, dass die Verantwortung für ein sicheres und florierendes Ethereum-Ökosystem nicht nur bei der Community, sondern bei jedem Einzelnen von uns liegt.
Über uns
Twitter: https://twitter.com/BlockSecTeam
Medium: https://blocksecteam.medium.com/



