Kompromiss zwischen Komfort und Sicherheit: Unbegrenzte Genehmigung in ERC20

Risiken unbegrenzter Genehmigung im ERC20-Token-Standard von Ethereum.

Kompromiss zwischen Komfort und Sicherheit: Unbegrenzte Genehmigung in ERC20

Zusammenfassung

In Ethereum wird der ERC20-Token häufig von Unternehmen oder Nutzern zum Erstellen dezentraler Anwendungen (DApps) verwendet. Viele ERC20-Token erzielen einen großen Wert und zirkulieren auf dem Kryptomarkt. Darüber hinaus wird aufgrund der florierenden Entwicklung des DeFi-Ökosystems der Handel mit ERC20-Tokens immer häufiger. Basierend auf dem ERC20-Standard wird die Methode approve() aufgerufen, um DApps oder anderen Benutzern die Genehmigung zum Abheben von Tokens zu erteilen. In der Praxis verlangen viele DApps eine unbegrenzte Genehmigung von den Nutzern, und dieses Design hat ein ernstes Problem verursacht. Eine Reihe von Vorfällen hat zu erheblichen Verlusten sowohl für die Nutzer als auch für die DApps selbst geführt.

0xffffff. Vorwort

Als seit langem diskutiertes Thema taucht „Unbegrenzte Genehmigung“ seit der florierenden Entwicklung von DeFi und einigen Sicherheitsvorfällen auf. Inspiriert von vielen Sicherheitsvorfällen versuchen wir erneut, eine umfassende Untersuchung der „unbegrenzten Genehmigung“ in verschiedenen Aspekten durchzuführen. Gleichzeitig sind wir eingeladen, an der 29. Blockchain Village Konferenz teilzunehmen und über dieses Thema zu sprechen.

Leseempfehlung:

  • Wenn Sie ein Ethereum-Anfänger sind, empfehlen wir dringend, den gesamten Blog zu lesen.
  • Wenn Sie ein Ethereum-Experte sind und bereits Erfahrung mit unbegrenzten Genehmigungen haben, können Sie ab Abschnitt 0x2 lesen.

0x0. Hintergrund

Bevor wir uns mit der Diskussion über „Was ist die unbegrenzte Genehmigung?“ befassen, möchte ich Sie kurz an „Was ist die Genehmigung bei ERC20-Tokens?“ erinnern.

ERC20-Tokens

In Ethereum zirkulieren neben Ether verschiedene Tokens im Kryptomarkt mit großem Wert. ERC20 ist der beliebteste Token-Standard. Basierend auf unseren unvollständigen Statistiken wurden über 5.600 und 44.000 ERC20-Tokens bei CoinGecko (einer Website, die Token-Preise aggregiert) und Uniswap (derzeit einer der bekanntesten dezentralen Börsen) erfasst.

Genehmigungsmechanismus

Der Genehmigungsprozess betrifft hauptsächlich drei Entitäten (Sender, Spender und Token-Vertrag) sowie zwei Funktionen (approve, transferFrom) und zwei Variablen (balanceOf, allowance) im ERC20-Standard (wie in der folgenden Abbildung gezeigt).

Um den Genehmigungsprozess zu verstehen, präsentieren wir die folgende Abbildung und erklären, wie die Funktionen approve und transferFrom den Zustand des Token-Vertrags ändern.

  1. (Schritt 1) Als Ausgangszustand hält der Sender 100 Tokens im Vertrag, und der Spender hat keine vom Sender genehmigte allowance.
  2. (Schritt 2) Der Sender ruft die Funktion approve auf, um dem Spender die Genehmigung für 100 Tokens zu erteilen. Daher erhöht sich allowance[sender][spender] von 0 auf 100, und balanceOf des Senders ändert sich nicht.
  3. (Schritt 3) Schließlich ruft der Spender transferFrom auf, um 80 Tokens vom Sender auf sich selbst zu übertragen. Infolgedessen werden balanceOf sowohl des Senders als auch des Spenders aktualisiert (d.h. 20 und 80), und die allowance des Spenders verringert sich auf 20.

Drei Arten von Genehmigungen in der Praxis

In der realen Welt können wir alle Genehmigungen basierend auf dem genehmigten Betrag in drei Typen einteilen.

  • Null-Genehmigung: Der genehmigte Betrag ist Null. Dies bedeutet im Grunde, dass der Benutzer/Sender versucht, seine Genehmigung von einer bestimmten Plattform/einem bestimmten Spender zu widerrufen.
  • Unbegrenzte Genehmigung: Der genehmigte Betrag entspricht dem Maximalwert von uint256 (0xffff...ffff) oder dem Gesamtnachschub der Tokens. Diese Art der Genehmigung wird häufig von vielen DeFi-Plattformen (wie Börsen, Kreditplattformen) verwendet.
  • Andere Genehmigung: Diese Genehmigungsart deckt den Rest ab. Benutzer führen diese Genehmigung normalerweise basierend auf der Modifikationsfunktion durch, die von Plattformen oder Wallets unterstützt wird.

0x1. Reale Vorfälle

Es gab auch einige reale Vorfälle im Zusammenhang mit dem zuvor erwähnten Genehmigungsproblem. In unserem Vortrag haben wir zwei (UniCat, Bancor Finance) dieser Geschichten im Detail besprochen. Wenn Sie mehr über diese Vorfälle erfahren möchten, folgen Sie einfach den untenstehenden Links:

0x2. Einige Messungen

In diesem Abschnitt präsentieren wir unsere detaillierte Untersuchung aus Off-Chain- und On-Chain-Perspektiven. Um die aktuelle Situation der „unbegrenzten Genehmigung“ besser zu verstehen, übernehmen wir die Rolle des Frontend-Benutzers, um unsere Messung durchzuführen.

Realer Genehmigungsprozess

Die obige Abbildung zeigt, dass Frontend-Benutzer möglicherweise sechs Schritte durchlaufen, um eine Genehmigungstransaktion abzuschließen. Es gibt vier Hauptentitäten (Frontend-Benutzer, Wallets, Plattformen, Token-Verträge). Lassen Sie uns nun den Ablauf Schritt für Schritt durchgehen:

Schritt 1,2: Zuerst verbinden die meisten Frontend-Benutzer (mobil, Website) ihre Wallets mit der ausgewählten Plattform und senden ihre Serviceanfragen.

Schritt 3: Dann erstellt die Plattform vom Plattform-Ende zum Wallet des Benutzers die Genehmigungstransaktion mit den erforderlichen Daten (am wichtigsten: der genehmigte Betrag) und sendet sie zur Bestätigung an das Wallet des Benutzers.

Schritt 4,5: Nach Erhalt der Genehmigungstransaktion zeigt das Wallet die entsprechenden Informationen für den Benutzer an und wartet auf die Bestätigung des Benutzers.

Schritt 6: Sobald der Benutzer die Transaktion bestätigt hat, sendet das Wallet die Transaktion zur Validierung an das Netzwerk. Darüber hinaus modifiziert die validierte Transaktion den Zustand des Token-Vertrags (Allowance[User][Platform]).

(Im folgenden Abschnitt stellen wir zunächst unsere Motivation für jeden Messtyp (Off-Chain und On-Chain) vor. Anschließend präsentieren wir unsere Messergebnisse und Erkenntnisse aus verschiedenen Blickwinkeln.)

Off-Chain-Untersuchung

Motivation

Im realen Genehmigungsprozess können wir leicht feststellen, dass Frontend-Benutzer direkt mit der Benutzeroberfläche des Wallets und der Plattform interagieren. Daher wählen wir 15 bekannte Wallets und 24 DeFi (Decentralized Finance)-Plattformen aus und führen die Off-Chain-Untersuchung durch.

(Die Untersuchungsergebnisse sind in den beiden unten gezeigten Abbildungen zusammengefasst.)

Darüber hinaus betrachten wir hauptsächlich deren Erklärung und Flexibilität bei der Genehmigung:

  • Erklärung
  • Wallet: 1) Zeigt das Wallet aussagekräftige Informationen zur Genehmigungstransaktion an (einschließlich Benutzer, Spender, Token und genehmigtem Betrag); 2) Gibt das Wallet eine spezielle Warnung oder Benachrichtigung an die Benutzer bezüglich der „unbegrenzten Genehmigung“ aus?
  • Plattform: (Kriterium 1) Bietet die Plattform eine aussagekräftige Erklärung für Genehmigungstransaktionen auf ihrer Weboberfläche an? (Kriterium 2) Benachrichtigt die Plattform die Benutzer über die Existenz der Genehmigungstransaktion? (Kriterium 3) Benachrichtigt die Plattform die Benutzer, dass zwei Transaktionen sequentiell ausgeführt werden?
  • Flexibilität: Bietet die Benutzeroberfläche bei Wallets oder Plattformen eine Modifikationsmöglichkeit für den genehmigten Betrag?

(Im kommenden Abschnitt zeigen wir das Ergebnis, wie die oben genannten beiden Aspekte sowohl bei Wallets als auch bei Plattformen umgesetzt werden. Wir wählen jeweils zwei Fälle für Wallet und Plattform aus.)

0x222. Wallets: Metamask & Coinbase

Wir werden unsere Untersuchungsergebnisse für die Coinbase Wallet und die Metamask (Chrome-Erweiterung) Wallet präsentieren. Laut Informationen im Google Play Store (in der Abbildung unten gezeigt) haben sowohl Coinbase als auch Metamask über 1 Million Installationen. Irgendwie erhält Coinbase mehr Bewertungen von Kunden und hat eine höhere Punktzahl.

Bei der Untersuchung der beiden Wallets nutzen wir sie, um die Swap-Funktion auf der Compound-Plattform zu testen. Beachten Sie, dass die Compound-Plattform standardmäßig eine unbegrenzte Genehmigung für Benutzer vorsieht.

Wallet 1: Metamask

Wie in der Abbildung unten gezeigt, können Benutzer, während sie die von Compound erstellte Genehmigungstransaktion überprüfen, im Grunde die vollständigen Informationen einsehen, einschließlich der Spenderadresse, der Genehmigungssignatur und des genehmigten Betrags (Schritt 2). Darüber hinaus erlaubt Metamask den Benutzern sogar, ihren genehmigten Betrag mit der Schaltfläche „Bearbeiten“ zu ändern (Schritte 2, 3, 4).

Wallet 2: Coinbase

Im Vergleich zur Metamask Wallet zeigt die Coinbase Wallet überhaupt keine wichtigen Informationen an. Benutzer können mehr Details erst einsehen, nachdem sie die Genehmigungstransaktion bestätigt haben (Abbildung unten). Beachten Sie, dass die Schritte 2, 3, 4 nur während oder nach der Genehmigungstransaktion im Warte- oder abgeschlossenen Modus angezeigt werden. Daher verbirgt das Coinbase Wallet die notwendigen Informationen der Genehmigungstransaktion und bietet keine Modifikationsmöglichkeit für den genehmigten Betrag.

0x223. Plattformen: Bancor & Curve Finance

In diesem Abschnitt vergleichen wir Bancor und Curve Finance. Wie in der Abbildung unten gezeigt, sind Curve Finance und Bancor (basierend auf den neuesten Statistiken vom 7. August 2021) von defipulse die erste und fünfte DEX (dezentrale Börse) in Bezug auf den gesamten gesperrten Wert.

Für die Einstellung unserer Untersuchung auf beiden Plattformen verwenden wir das Metamask-Wallet, um die von beiden Plattformen angebotene Swap-Funktion zu testen.

Plattform 1: Bancor

Beim Testen der Swap-Funktion auf Bancor erklärt es die Notwendigkeit der Genehmigungstransaktion (Abbildung unten) und bietet den Benutzern sogar zwei Optionen (unbegrenzte/begrenzte Genehmigung). Abgesehen von der unbegrenzten Genehmigung erfordert die begrenzte Genehmigung bei Bancor nur den genauen allowance-Betrag, den die Benutzer für den Swap verwenden möchten.

Plattform 2: Curve Finance

Auf Curve Finance passiert jedoch etwas „Interessantes“. Wie in der Abbildung unten gezeigt, wird beim Anfordern eines Swaps die Benutzeroberfläche von Curve Finance angezeigt „Bitte genehmigen Sie 10 USDT für den Austausch“ (Abbildung unten), aber Metamask erhält eine unbegrenzte Genehmigungstransaktion. Das sind definitiv irreführende Informationen für die Benutzer.

Später, als wir versuchen, das Problem mit Curve Finance zu klären, erkennen sie unsere Bedenken an und sagen, dass dies daran liegt, dass „Benutzer es nicht mochten, jedes Mal zu genehmigen“ (Abbildung unten).

Ähnlich wie bei Curve Finance weist die Benutzeroberfläche von Yearn Finance dasselbe Problem auf. (Wir erwähnen und zeigen die Beweise auch in unserem Vortrag)

0x23. On-Chain-Untersuchung

0x231. Motivation

Um die Situation der „unbegrenzten Genehmigung“ auf der Kette weiter zu verstehen, sammeln wir alle Transaktionen (bis zum 30. April 2021), um unsere Erforschung fortzusetzen. Wie die Abbildung unten zeigt, nimmt die Zahl der „unbegrenzten Genehmigungen“ heutzutage wirklich schnell zu. Bei unserer Untersuchung stellen wir fest, dass die Einführung von UniswapV2 der Hauptfaktor für das Wachstum der „unbegrenzten Genehmigung“ zu sein scheint. Und wir werden dies basierend auf unseren Messergebnissen näher erläutern.

Gleichzeitig werden wir, um „unbegrenzte Genehmigung“ im Namen von Token und Plattform (da dies die am engsten verwandten Begriffe und nicht die Benutzer selbst sind) zu untersuchen, unsere Untersuchung in zwei Aspekten durchführen:

  • Die Verteilung der „unbegrenzten Genehmigung“
  • Risikoanalyse

0x232. Die Verteilung der „unbegrenzten Genehmigung“

Um die folgenden Diagramme zu verstehen, erklären wir zunächst jeden Begriff, der in den Abbildungen erwähnt wird:

  • Y-Achse (Maximaler Genehmigungsanteil): Größerer Wert -> Höherer Prozentsatz der „unbegrenzten Genehmigung“ unter allen Genehmigungstransaktionen
  • X-Achse (Aktivität): Größerer Wert -> Aktiver sind die Plattformen oder Tokens. Der Aktivitätswert hängt von der Anzahl der Genehmigungstransaktionen und der Zeitdifferenz zwischen der ersten und der letzten Genehmigungstransaktion ab.
  • Punktgröße: Größerer Punkt -> Mehr Genehmigungstransaktionen sind vom Token oder der Plattform betroffen

(Die beiden untenstehenden Abbildungen zeigen nur die Top 1000 am häufigsten an Genehmigungstransaktionen beteiligten Tokens/Plattformen)

(Plattform)

(Token)

Plattform: Wenn man das Diagramm der Plattform betrachtet, dominiert UniswapV2 in allen drei Begriffen eindeutig gegenüber allen anderen Plattformen. Deshalb behaupten wir, dass „die Einführung von UniswapV2 der Hauptfaktor zu sein scheint, der das Wachstum der ‚unbegrenzten Genehmigung‘ stimuliert“.

Token: Was die Verteilung betrifft, so zeigen USDC, USDT und DAI die beste Leistung basierend auf den drei definierten Begriffen. Dies sind alles Stablecoins, die üblicherweise für den Handel auf dem Kryptomarkt verwendet werden. Was andere hervorgehobene Tokens (Top-10-Tokens) betrifft, sind sie in Bezug auf den maximalen Genehmigungsanteil recht ähnlich.

0x233. Risikoanalyse

Basierend auf den vorherigen Ergebnissen wählen wir USDC, USDT, DAI (Top 3 Tokens) und zwei Plattformen (Bancor, UniCat) für unsere Risikoanalyse aus. Gleichzeitig definieren wir zwei Begriffe (wie in der Abbildung unten gezeigt), um das Risiko genehmigter Tokens zu erläutern.

Risikobetrag

  • Für Token entspricht der Risikobetrag der Gesamtmenge an Tokens, die durch Aufruf der Funktion transferFrom übertragen werden können.
  • Für Plattform entspricht der Risikobetrag der Gesamtmenge eines einzelnen Tokens, die durch Aufruf der Funktion transferFrom übertragen werden kann.

Risikorate

  • Bei einem festen Token stellt die Risikorate den Prozentsatz des Risikobetrags an der Gesamtmenge dieses festen Tokens dar.

Token: Wie in der Abbildung unten gezeigt, sind USDC und USDT ziemlich stabil (ihre Risikoraten liegen bei etwa 10 %) im Laufe von anderthalb Jahren. DAI erfährt mitten im Jahr einen dramatischen Rückgang und stabilisiert sich dann (ebenfalls bei etwa 10 %, aber mit mehr Schwankungen). Dieses Phänomen könnte auf bestimmte Ereignisse oder den Funktionsmechanismus von DAI hinweisen. Daher gibt es noch einige Aufgaben für uns zu erforschen, um die Ursache zu ermitteln.

Plattform: Was die Risikoanalyse von Plattformen betrifft, werden wir ein Trenddiagramm des Risikobetrags (Abbildung unten) für Bancor (mit BNT-Token) und UniCat (mit UNI-Token) präsentieren.

Der Trendverlauf von Bancor zeigt ein sofortiges Wachstum und einen Rückgang. Dies ist tatsächlich eine perfekte Erklärung dafür, wie schnell das Team seine ausnutzbaren Tokens aus dem fehlerhaften Vertrag an einen sicheren Ort überträgt.

Was den Trendverlauf von UniCat betrifft, so bestätigen wir, dass einige offensichtliche Rückgänge tatsächlich auf die Hintertür-Angriffe von UniCat zurückzuführen sind.

0x3. Bestehende Lösungen

Wie bereits erwähnt, ist „unbegrenzte Genehmigung“ ein seit langem bestehendes Thema im Ökosystem. Durch verschiedene Diskussionen wurden einige Lösungen vorgeschlagen, um den Genehmigungsprozess zu verbessern:

  • ERC777
  • EIP2612

Bevor wir uns den Lösungen zuwenden, möchten wir Sie noch einmal an die eigentliche Motivation für die „unbegrenzte Genehmigung“ erinnern:

  • Für approve/transferFrom sind zwei Transaktionen erforderlich.
  • Benutzerdefinierte Genehmigungen zwingen Benutzer, sich jedes Mal vor dem Handel oder der Einzahlung zu genehmigen (was höhere Transaktionsgebühren bedeutet).
  • Plattformen wollen die Benutzererfahrung maximieren, indem sie einmalig eine unbegrenzte Genehmigung verlangen.

0x31. ERC777

Als Token-Standard, der 2017 vorgeschlagen wurde, hat ERC777 die folgenden Punkte zur Verbesserung des Genehmigungsprozesses des ERC20-Tokens:

  • Benutzer können einen Operator (z.B. eine Börse) „autorisieren“, ihre Tokens mit dem gewünschten Betrag zu übertragen.
  • Benutzer müssen nicht wiederholt Transaktionen für Genehmigungen einreichen.
  • Benutzer müssen sich keine Sorgen um das Risiko der „unbegrenzten Genehmigung“ machen.

Zusammenfassend lässt sich sagen, dass Benutzer mit ERC777 atomare Käufe mit jedem autorisierten Operator erzielen können.

Die Nachteile von ERC777 sind jedoch ebenfalls offensichtlich:

Hohe Transaktionsgebühren, da die im Standard angewendeten Hooks (weitere Details). Benutzer müssen einen vertrauenswürdigen Operator auswählen (dies wirft die Frage erneut auf die Benutzer zurück).

0x32. EIP2612

Bezüglich EIP2612 weist der Autor in diesem Vorschlag darauf hin, dass Benutzer signierte Nachrichten für die Transaktionsvalidierung verwenden können, so dass Benutzer keine Transaktionsgebühren zahlen müssen, um ihre allowance zu ändern. Direkter ausgedrückt werden Genehmigungstransaktionen mit EIP2612 kostenlos.
Darüber hinaus wird dieser Vorschlag derzeit von UniswapV3 für Lending-Anbieter-Tokens verwendet.

0x4. Fazit

Zusammenfassend lässt sich sagen, dass „unbegrenzte Genehmigung“ die Kosten für die Ausführung mehrerer Genehmigungstransaktionen für Benutzer wirklich senkt. Durch unsere Untersuchung tun jedoch einige Plattformen und Wallets immer noch harmlos im Kampf zwischen Komfort und Sicherheit. Viel schlimmer ist, dass einige von ihnen versuchen, Benutzer irrezuleiten, indem sie falsche Informationen anzeigen. Daher schlagen wir vor, anstatt „unbegrenzte Genehmigung“ zu verwenden, dass Plattformen und Wallets wirklich erwägen sollten, eine sicherere Benutzeroberfläche oder ein sichereres Protokoll zu entwickeln, um Benutzer von Anfang an zu schützen. Als Benutzer von DeFi sollte der Aufbau eines Sicherheitsgefühls nicht das Ergebnis von Exploits sein, sondern eine Bewusstheit von Anfang an. Wir glauben, dass der Aufbau einer sicheren und florierenden Umgebung in Ethereum nicht nur die Verantwortung der Community ist, sondern auch die jedes Einzelnen von uns.

Über uns

https://www.blocksecteam.com

[email protected]

Twitter: https://twitter.com/BlockSecTeam

Medium: https://blocksecteam.medium.com/

Sign up for the latest updates