#6: Hundred Finance Vorfall: Katalysator der Welle von Präzisionsbezogenen Exploits in anfälligen Gabelprotokollen

Am 16. April 2023 wurde Hundred Finance, ein Fork von Compound V2, angegriffen, was zu einem Verlust von etwa 7,4 Millionen Dollar führte.

#6: Hundred Finance Vorfall: Katalysator der Welle von Präzisionsbezogenen Exploits in anfälligen Gabelprotokollen

Am 16. April 2023 wurde Hundred Finance, ein Fork von Compound V2, angegriffen, was zu einem Verlust von etwa 7,4 Millionen US-Dollar führte. Der Angriff umfasste zwei Hauptprobleme:

  • Ein Präzisionsverlustproblem (ein inkorrektes Rundungsproblem);
  • Leere Märkte, die es dem Hacker ermöglichten, den exchangeRate zu manipulieren.

Compound V2, das laut DeFiLlama am häufigsten geforkte Lending-Protokoll, verzeichnet über 100 Forks. Geprüft von OpenZeppelin und praxiserprobt, gelten seine Verträge als sicher. Dennoch hob der Angriff auf Hundred Finance hervor, wie Präzisionsverluste, insbesondere bei geringer Liquidität, die Sicherheit von DeFi-Protokollen kritisch beeinflussen und eine Welle ähnlicher Exploits bei bemerkenswerten Forks wie Midas und Radiant auslösten.

Für ein tieferes Verständnis werden Sie ermutigt, die vollständige Analyse zu konsultieren. Nachfolgend bieten wir eine prägnante Einführung in diesen Vorfall und heben ihn als einen der zehn wichtigsten Sicherheitsvorfälle des Jahres 2023 hervor.

Hintergrund

Überblick über Hundred Finance

Hundred Finance ist ein Fork von Compound v2, der über mehrere Mainnets läuft und Chainlink-Orakel nutzt. Im Gegensatz zu traditionellen Kreditvergabepraktiken erlauben DeFi-Kreditprotokolle wie Compound und Aave keine überbesicherten Kredite. Einfach ausgedrückt: Wenn Sie Token A im Wert von 100 US-Dollar einzahlen, können Sie nur Vermögenswerte im Wert von weniger als 100 US-Dollar leihen. Gemäß den Risikokontrollkoeffizienten der meisten Protokolle liegt dieses Verhältnis typischerweise zwischen 50 % und 80 %.

Für Kreditprotokolle umfassen gängige Angriffsmethoden Preismanipulation und Reentrancy. Interessanterweise hatte Hundred Finance zuvor einen Reentrancy-Angriff im März 2022 erlebt, aber dieser Vorfall schuf einen neuen Angriffsvektor.

hToken

Lending-Protokolle, die von Compound und Aave abgeleitet sind, erstellen für jeden zugrunde liegenden Token (Sicherheit) einen entsprechenden Abrechnungstoken. Für Hundred Finance gilt:

  • USDC entspricht hUSDC
  • WBTC entspricht hWBTC

Der Wechselkurs zwischen dem zugrunde liegenden Token und hToken wird als exchangeRate bezeichnet.

  • Bei der Einzahlung von Vermögenswerten sollten Benutzer die Funktion mint() des hToken aufrufen.
  • Bei der Auszahlung von Vermögenswerten sollten Benutzer die Funktion redeem() des hToken aufrufen.

exchangeRate

Die folgende Formel beschreibt die Berechnung des exchangeRate:

Wo:

  • getCash(): Die Menge des zugrunde liegenden Token-Guthabens, das dem hToken-Vertrag gehört. Dies ist ein wichtiger Parameter, der manipuliert werden kann. Bitte merken Sie sich das.
  • totalBorrows(): Die Menge des zugrunde liegenden Tokens, die derzeit vom Markt ausgeliehen ist und auf die Zinsen für die Einleger des Marktes aufgeschlagen werden.
  • totalReserves(): Reserven sind ein Buchungseintrag in jedem hToken-Vertrag, der einen Teil der historischen Zinsen als Bargeld darstellt, das über die Protokollverwaltung abgehoben oder übertragen werden kann.
  • totalSupply(): Die Anzahl der derzeit im Umlauf befindlichen Tokens in diesem hToken-Markt.

Hinweis: Der exchangeRate zwischen einem hToken und dem zugrunde liegenden Asset, z. B. (dai vs. hDai oder eth vs. hEth), beginnt bei 0,020 und steigt mit der Rate des verzinslich steigenden Marktzinssatzes.

Liquidation

Um faule Schulden zu verhindern, erlauben Lending-Protokolle jedem Benutzer, die Schulden eines anderen Benutzers zu liquidieren. Verwenden wir das folgende Beispiel, um dies zu veranschaulichen:

  1. Alice zahlt BTC im Wert von 100 US-Dollar ein und leiht sich ETH im Wert von 70 US-Dollar.
  2. Wenn der Preis von ETH steigt oder der Preis von BTC fällt, können Alices Vermögenswerte den Liquidationsschwellenwert erreichen.
  3. Bob kann eine bestimmte Menge ETH verwenden, um Alices BTC zu liquidieren und Alices Schulden auf ein gesundes Niveau zurückzuführen, um die Sicherheit der Protokollgelder zu gewährleisten (das Protokoll belohnt Benutzer, die die Liquidation einleiten).

Die Liquidation ist nicht der Schwerpunkt dieses Angriffs, war aber Teil des Angriffs. Hier müssen wir nur wissen, dass jeder Benutzer die Schulden eines anderen Benutzers mit einer Art von Token liquidieren kann, was den entsprechenden hToken reduziert.

Die Schwachstelle

Präzisionsverlustproblem

Der Hacker bewirkt, dass bei der Auszahlung von Sicherheiten über redeem() die Berechnung des abzuziehenden hToken-Betrags 1,99999992 ergibt (sehr nahe an 2, aber weniger als 2). Bei der Umrechnung in eine Ganzzahl in truncate() führt die abgerundete Rundung zu einem Endergebnis von 1.

exchangeRate

Die Berechnung des exchangeRate, wie zuvor vorgestellt, beinhaltet getCash(), was sich auf den Betrag des zugrunde liegenden Guthabens bezieht, das dem hToken-Vertrag gehört. Durch die direkte Übertragung von zugrunde liegenden Tokens in den Vertrag (ohne mint, nur durch Übertragung) kann der Hacker den exchangeRate manipulieren. **Es ist jedoch wichtig zu beachten, dass dieses exchangeRate-Problem allein die Sicherheit des Protokolls nicht beeinträchtigt; Hacker können daraus keinen Gewinn ziehen. ** Im Kontext dieses Angriffs wurde es hauptsächlich ausgenutzt, um die Gewinne des Hackers zu steigern und ihn zu ermöglichen, den Pool schnell zu erschöpfen. Andernfalls verschiebt sich der Angriff von einem einzigen, entscheidenden Schlag zu einer Reihe von kleinen Stichen, die zahlreiche Iterationen erfordern, um eine signifikante Auswirkung zu erzielen.

Kurz gesagt, der Präzisionsverlust ist das Kernproblem dieses Angriffs.

Der Angriffsprozess

Hier ist die Angriffstransaktion, und wir werden nun den Phalcon Explorer verwenden, um diese komplexe Transaktion zu analysieren.

Transaktion: 0x6e9ebcdebbabda04fa9f2e3bc21ea8b2e4fb4bf4f4670cb8483e2f0b2604f451

  1. Leihen Sie 500 WBTC von Aave V3 über einen Flashloan.

  2. Redeem Sie alle zuvor erworbenen hWBTC, setzen Sie die totalSupply von hWBTC auf 0 zurück.

Das vorherige Ziel ist es, Reservegelder mit einem Flashloan vorzubereiten und hWBTC als neuen Markt zurückzusetzen.

  1. Erstellen Sie den zweiten Angriffskontrakt (im Folgenden als Angriffskontrakt 2 bezeichnet) und übertragen Sie alle WBTC (500,30063816 WBTC) an Angriffskontrakt 2.

  2. Mint() Sie hWBTC mit 4 WBTC, um 200 hWBTC zu erzeugen.

  3. Redeem() Sie 199,99999998 hWBTC, so dass der hWBTC-Gesamtbetrag bei 0,00000002 (2 wei hWBTC) verbleibt.

  4. Übertragen Sie alle WBTC (500,30063816 WBTC) in hWBTC. Beachten Sie, dass direkte Übertragungen hWBTC nicht erhöhen; dies kann als Spende von WBTC an den Pool betrachtet werden. Der Hauptzweck dieses Schritts ist die Manipulation des zuvor erwähnten exchangeRate. Zu diesem Zeitpunkt verbleibt die totalSupply von hWBTC bei 2 wei hWBTC, aber es gibt jetzt 500,30064194 WBTC, was den exchangeRate Hunderte Male höher als den ursprünglichen Wert macht.

  5. Leihen Sie 1021 Ether vom hETH-Markt aus.

  6. Redeem() Sie 50030063815 WBTC, wobei nach der Berechnung 1,9999992 hBTC abgezogen werden sollten, aber aufgrund des Präzisionsverlusts wird nur 1 hBTC abgezogen, was zu einem erheblichen Präzisionsverlust (fast 50 %) führt. Zu diesem Zeitpunkt verfügt der Hacker über 500 WBTC + 1021 Ether und hat damit erfolgreich 1021 Ether profitiert.

  7. Der Angreifer liquidiert() die verbleibenden hWBTC und setzt deren totalSupply auf 0 zurück, um sich auf weitere Angriffe auf andere Märkte vorzubereiten. Da fast alle WBTC innerhalb von hWBTC abgehoben wurden, schafft der Hacker dies mit nur 0,000002 Ether.

  8. Fahren Sie fort, andere Märkte anzugreifen und das gesamte Protokoll zu leeren.

  9. Rückzahlung des Flashloan an Aave.

Sicherheitsempfehlungen

Abhilfemaßnahmen für Lending-Protokolle

Dieses Problem ist besonders bei Forks von Compound und Aave weit verbreitet. Ein proaktiver Ansatz besteht darin, bei der Einführung neuer Märkte etwas Abrechnungstoken zu prägen, um sicherzustellen, dass die totalSupply niemals auf 0 fällt.

Abhilfemaßnahmen für Präzisionsverlustprobleme

Um eine Reihe von Problemen aufgrund von Präzisionsverlusten besser zu umgehen, ist die Festlegung eines Mindestwerts in der Praxis eine effektive Methode. Diese Strategie hilft, die erheblichen Auswirkungen von Präzisionsverlusten bei sehr kleinen Werten zu vermeiden.

Lesen Sie weitere Artikel dieser Serie:

Sign up for the latest updates