Sonne Finance-Angriffsanalyse: Wie können 100 US-Dollar 6,5 Millionen US-Dollar einbringen? Der Kern dieses Angriffs besteht darin, dass der Angreifer bei der Schaffung des Marktes (soToken) den ersten Hypothekenumwandlungsvorgang durchführte und nur sehr wenige soTokens mit einer kleinen Menge zugrunde liegender Token prägte, was dazu führte, dass der „totalSupply“-Wert von soToken zu gering war. Der Angreifer nutzte dann die Schwachstelle des Präzisionsverlusts des Solidity-Vertrags aus und sendete dann den zugrunde liegenden Token direkt an den soToken-Vertrag (soToken wird nicht geprägt, was bedeutet, dass „totalSupply“ unverändert bleibt und „totalCash“ größer wird), anstatt die Absteck- und Casting-Methode zu verwenden den zugrunde liegenden Token zu hinterlegen. Durch eine solche Operation wird die Variable „totalCash“ im Vertrag größer, „totalSupply“ bleibt jedoch unverändert, was dazu führt, dass die ExchangeRate größer wird. Wenn der Angreifer am Ende den zugrunde liegenden Token einlöst, ist der soToken, der zerstört werden muss, kleiner als der während der Hypothek geprägte soToken. Der Angreifer verwendet den verdienten soToken, um den zugrunde liegenden Token WETH und USDC an andere soTokens (z. B. soWETH) zu verleihen , also USDC) und erzielte schließlich einen Gewinn von bis zu 20 Millionen US-Dollar.
Am 15. Mai 2024 wurde Sonne Finance auf der Optimism-Kette angegriffen, was zu Verlusten von bis zu 20 Millionen US-Dollar führte. Nach dem Angriff meldete sich der Benutzer @tonyke_bot weiter
(https://twitter.com/tonyke_bot/status/1790547461611860182)
Nachdem das Sonne Finance-Projekt den Angriff entdeckt hatte, sperrte es schnell alle Märkte auf Optimism und erklärte, dass die Märkte auf Base sicher seien.
(https://twitter.com/SonneFinance/status/1790535383005966554)
Sonne Finance ist ein dezentrales Kreditprotokoll, das Compound V2 auf Optimism für Einzelpersonen, Institutionen und Vereinbarungen zum Zugang zu Finanzdienstleistungen entwickelt hat. Das Sonne Finance-Protokoll bündelt die Token-Vermögenswerte der Benutzer zu einem Kreditliquiditätspool und bietet den Benutzern ein bankähnliches Kreditgeschäft. Wie bei Compound können Protokollteilnehmer ihre Token in den Kreditliquiditätspool von Sonne Finance verpfänden und das Zertifikat soToken (das gleiche wie cToken) erhalten. SoToken ist ein verzinsliches Vermögenszertifikat, das mit fortschreitendem Block ein bestimmtes Einkommen generiert und außerdem SONE-Token-Anreize erhält. Teilnehmer können mit dem soToken in ihren Händen auch andere Token aus dem Sonne-Lending-Asset-Pool ausleihen. Beispielsweise können Teilnehmer einen bestimmten Betrag an USDC verpfänden, um soUSDC-Zertifikate zu erhalten, und dann WETH für den weiteren Umlauf verleihen. Hypothekendarlehen im Sonne Finance-Protokoll können eine Viele-zu-Viele-Vermögensbeziehung sein. Während des Hypothekendarlehensprozesses berechnet das Protokoll automatisch den Gesundheitsfaktor (Gesundheitsfaktor) der Adresse des Teilnehmers. Die Hypothek der Adressenprodukte unterstützt die Liquidation, und Liquidatoren können auch bestimmte Liquidationsprämien erhalten.
Die Beziehung zwischen dem vom Benutzer hinterlegten zugrunde liegenden Token und dem geprägten soToken hängt hauptsächlich mit einer Variablen namens „exchangeRate“ zusammen. Diese Variable kann grob verwendet werden, um anzugeben, wie viel zugrunde liegendes Token jeder soToken wert ist. Die Berechnungsformel von ExchangeRate lautet wie folgt:
In der obigen Formel bezieht sich „totalCash“ auf die Anzahl der zugrunde liegenden Token, die von soToken gehalten werden, „totalBorrows“ bezieht sich auf die Anzahl der zugrunde liegenden Token, die in einem bestimmten Markt ausgeliehen werden, und „totalReserves“ bezieht sich auf die Gesamtzahl der Reserven (die die vom Kreditnehmer gezahlten Zinsen enthält), totalSupply bezieht sich auf die Anzahl der geprägten soTokens.
Beim Einlösen können Benutzer die Anzahl der zugrunde liegenden Token angeben, die sie einlösen möchten, redeemAmount, um die Anzahl der soTokens zu berechnen, die zerstört werden müssen, redeemTokens. Die Berechnungsmethode lautet ungefähr „redeemTokens = redeemAmount / ExchangeRat“. Hier geht es nicht um Genauigkeit.
Der Kern dieses Angriffs besteht darin, dass der Angreifer bei der Schaffung des Marktes (soToken) die erste Hypothekenumsetzungsoperation durchführte und nur sehr wenige soTokens mit einer kleinen Menge zugrunde liegender Token prägte, was dazu führte, dass der „totalSupply“-Wert von soToken zu gering war . Der Angreifer nutzte dann die Schwachstelle des Präzisionsverlusts des Solidity-Vertrags aus und sendete dann den zugrunde liegenden Token direkt an den soToken-Vertrag (soToken wird nicht geprägt, was bedeutet, dass „totalSupply“ unverändert bleibt und „totalCash“ größer wird), anstatt die Absteck- und Casting-Methode zu verwenden den zugrunde liegenden Token zu hinterlegen. Durch eine solche Operation wird die Variable „totalCash“ im Vertrag größer, „totalSupply“ bleibt jedoch unverändert, was dazu führt, dass die ExchangeRate größer wird. Wenn der Angreifer am Ende den zugrunde liegenden Token einlöst, ist der soToken, der zerstört werden muss, kleiner als der während der Hypothek geprägte soToken. Der Angreifer verwendet den verdienten soToken, um den zugrunde liegenden Token WETH und USDC an andere soTokens (z. B. soWETH) zu verleihen , also USDC) und erzielte schließlich einen Gewinn von bis zu 20 Millionen US-Dollar.
Angriffsvorbereitungstransaktionen:
https://optimistic.etherscan.io/tx/0x45c0ccfd3ca1b4a937feebcb0f5a166c409c9e403070808835d41da40732db96
Angriffsgewinntransaktionen :
https://optimistic.etherscan.io/tx/ 0x9312ae377d7ebdf3c7c3a86f80514878deb5df51aad38b6191d55db53e42b7f0 EOA-bezogene Adresse des Angriffs: vertragsbezogene Adresse:
0xa78aefd483ce3919c0ad55c8a2e5c97cbac1caf8
0x02fa 2625825917e9b1f8346a465de1bbc150c5b9
zugrunde liegender Token (VELO Token V2):
0x9560e827af36c94d2ac33a39bce1fe78631088db
Sicherheitslückenvertrag (soVELO, Ähnlich dem cToken von Compound):
0xe3b81318b1b6776f0877c3770afddff97b9f5fe5
c200c0470c6456603c967f82ab559a5931fd181c2
Analyse des Angriffsprozesses
Vorläufige Zusammenfassung
Sonne Finance-Projekt Fang genehmigte kürzlich einen Vorschlag, den VELO-Markt zu Sonne Finance hinzuzufügen (https://twitter.com/SonneFinance/status/1786871066075206044) und arrangierte fünf Transaktionen über die Multi-Signatur-Wallet, die zwei Tage später ausgeführt werden sollten (https://optimistisch .etherscan.io/tx/0x18ebeb958b50579ce76528ed812025949dfcff8c2673eb0c8bc78b12ba6377b7) werden diese fünf Transaktionen verwendet, um den VELO-Markt (soVELO-Vertrag) zu erstellen und einige wichtige Konfigurationen des Marktes festzulegen, wie z. B. die Festlegung des Zinsmodells, die Festlegung des Preisorakels und die Festlegung des Hypothekenfaktors , usw. Nachdem der VELO-Markt erstellt wurde, können Benutzer VELO-Tokens einzahlen, um soVELO-Tokens zu prägen, die wiederum zum Ausleihen anderer soTokens verwendet werden können.
Angriffsvorbereitung
In der Phase der Angriffsvorbereitung erstellt der Angreifer hauptsächlich einen VELO-Markt (soVELO-Vertrag) basierend auf den Informationen im Sonne Finance-Projektvorschlag nach der zweitägigen Sperrfrist des Vorschlags, richtet Schlüsselkonfigurationen ein, und Abstecken von VELO-Tokens. Die Währung tritt in den soVELO-Vertrag ein, um soVELO-Tokens zu prägen. Gleichzeitig sendet sie die von ihr gehaltenen VELO-Tokens direkt an den soVELO-Vertrag, um den Wechselkurs zu erhöhen und sich auf Gewinne aus nachfolgenden Angriffen vorzubereiten.
Nach Ablauf der zweitägigen Sperrfrist bündelt der Angreifer zunächst die Vorgänge der ersten vier im Vorschlag angeordneten Transaktionen in einer Transaktion (Transaktion 0x45c0cc), die verwendet wird um den VELO-Markt (soVELO-Vertrag) zu erstellen und die Schlüsselkonfiguration festzulegen. Bei der Initialisierung des VELO-Marktes wird die ExchangeRate auf „200.000.000.000.000.000.000.000.000“ festgelegt.
Der Angreifer ruft die „Mint“-Funktion des soVELO-Vertrags auf, um VELO-Tokens einzuzahlen und soVELO-Tokens zu prägen. Der Angreifer gibt „mintAmount“ als „400.000.001“ (die Anzahl der VELO-Tokens) an. Wie aus der Funktion „exchangeRateStoredInternal“ hervorgeht, ist ExchangeRate der in Schritt 1 festgelegte Wert, da „_totalSuppl“ des soVELO-Tokens zu diesem Zeitpunkt 0 ist. Gemäß der Formel „mintTokens =actualMintAmount /exchangeRate“ beträgt die berechnete Anzahl der soVELO-Tokens, die zu diesem Zeitpunkt geprägt werden sollten, 2. Kurz gesagt: In diesem Schritt zahlt der Angreifer VELO-Token mit einem Wert von „400.000.001“ in den soVELO-Vertrag ein und der Angreifer erhält soVELO-Token mit einem Wert von 2. MSoveLo.Mint:
In der Angriffsgewinnphase führt der Angreifer hauptsächlich die fünfte Transaktion des Vorschlags aus und leiht VELO-Tokens über Flash-Darlehen direkt an den soVELO-Vertrag, um den Wechselkurs weiter zu erhöhen. Der Angreifer nutzte dann den soVELO-Token mit einem Wert von 2 in seiner Hand, um zugrunde liegende Token wie WETH und USDC von anderen soToken-Verträgen (wie soWETH, soUSDC usw.) auszuleihen, und diese Teile wurden zum Gewinn des Angreifers. Dann löste der Angreifer seinen zugrunde liegenden Token im soVELO-Vertrag ein. Aufgrund des Anstiegs des Wechselkurses und des Genauigkeitsverlusts bei der Berechnung der soVELO-Token, die für die Einlösung zerstört werden mussten, verwendete der Angreifer letztendlich nur den soVELO-Token mit einem Wert von 1. Fast alle zuvor eingezahlten VELO-Tokens wurden eingelöst, was so verstanden werden kann, dass der Angreifer die zusätzlichen soVELO-Tokens mit einem Wert von 1 verwendet, um zugrunde liegende Tokens wie WETH und USDC zu verdienen, indem er sich von anderen soTokens leiht. Der Angreifer nutzte dieselbe Technik, um den Angriff viele Male zu wiederholen, und machte letztendlich enorme Gewinne.
Die spezifischen Schritte sind wie folgt:
Der Angreifer führt die fünfte Transaktion im Vorschlag aus und legt den im Vorschlag angegebenen Kreditfaktor fest.
Der Angreifer-Flash hat VELO-Token mit einem Wert von „35.469.150.965.253.049.864.450.449“ aus dem VolatileV2 AMM – USDC/VELO-Pool geliehen, was die Hook-Funktion des Angreifers auslöste. In der Hook-Funktion führt der Angreifer den Angriffsvorgang weiter aus.
Der Angreifer sendet die von ihm gehaltenen VELO-Token an den soVELO-Vertrag, um den Wechselkurs weiter zu erhöhen. Derzeit befinden sich im soVELO-Vertrag insgesamt VELO-Tokens mit einem Wert von „35.471.703.929.512.754.530.287.976“ (die Summe der vom Angreifer dreimal übertragenen VELO-Tokens).
Der Angreifer erstellt einen neuen Vertrag 0xa16388a6210545b27f669d5189648c1722300b8b. Im Konstruktor überträgt er die 2 soVELO-Token, die er hält, in den neu erstellten Vertrag 0xa163 (im Folgenden als Angreifer 0xa163 bezeichnet).
Der Angreifer 0xa163 nutzte die von ihm gehaltenen soVELO-Token, um WETH im Wert von „265.842.857.910.985.546.929“ von soWETH zu leihen.
Der Angreifer 0xa163 ruft die Funktion „redeemUnderlying“ von soVELO auf und gibt den Wert der eingelösten VELO-Tokens als „35.471.603.929.512.754.530.287.976“ an (fast die Anzahl der VELO-Tokens, die alle Angreifer zuvor in soVEL übertragen oder verpfändet haben O Vertrag). Die Anzahl der soVELO-Tokens, die zur Einlösung zerstört werden müssen, muss gemäß der Formel „redeemTokens = redeemAmountIn / ExchangeRate“ berechnet werden.
Wie aus der Funktion „exchangeRateStoredInternal“ hervorgeht, muss der Wert von „exchangeRate = (totalCash + totalBorrows – totalReserves) / totalSupply“ berechnet werden, da _totalSupply zu diesem Zeitpunkt 2 und nicht 0 ist. , der aktuelle Wechselkurs ist „17.735.851.964.756.377.265.143.988.000.000.000.000.000.000“, dieser Wert ist viel größer als der eingestellte anfängliche Wechselkurs „200.000.000.000.000.000.000.000.00“.
Der auf der Grundlage des neuen Wechselkurses berechnete Wert von „redeemTokens“ beträgt „1,99“. Aufgrund der Abrundungseigenschaften von Solidity beträgt der Wert von „redeemTokens“ schließlich 1. Dies bedeutet, dass der Angreifer 0xa163 soVELO-Tokens mit einem Wert von 1 verwendet hat, um fast alle zuvor hinterlegten VELO-Tokens einzulösen. Gleichzeitig verdiente der Angreifer 0xa163 auch WETH mit einem von soWETH geliehenen Wert von „265.842.857.910.985.546.929“.
soVELO.redeemBasiswert:
soVELO.exchangeRateStoredInternal:
Der Angreifer 0xa163 hat alle geliehenen WETH und eingelösten VELO-Token an den Angreifer der oberen Ebene übertragen, und dann selbstzerstört.
Der Angreifer ruft die Funktion „liquidateBorrow“ von soWETH auf, um einen Teil der aus dem neu erstellten Vertrag 0xa163 geliehenen Vermögenswerte zu liquidieren, um die gesperrten soVELO-Token mit einem Wert von 1 zurückzuerhalten. Derzeit besitzt der Angreifer nur soVELO-Tokens mit einem Wert von 1.
Der Angreifer ruft die „Mint“-Funktion von soVELO auf und verpfändet und prägt erneut soVELO-Token. Der Zweck besteht darin, genügend soVELO-Token mit einem Wert von 2 zu erhalten, und führt dann die oben genannten Schritte 3-8 erneut aus, um von anderen unwichtigen Token zu profitieren. .
Der Angreifer führt Schritt 9 mehrmals aus, zahlt den Flash-Kredit zurück und geht mit einem Gewinn davon.
Nach dem Angriff meldete sich Benutzer @tonyke_bot weiter Der Grund, warum dieser Vorgang den Angreifer vor weiteren Angriffen schützen kann, liegt darin, dass diese Transaktion die Größe von totalSupply in soVELO und die Anzahl der gehaltenen VELO-Tokens totalCash ändert und die Auswirkung des Wachstums von totalSupply auf die Berechnung von ExchangeRate größer ist als die Auswirkung des Wachstums von totalCash wird daher kleiner, so dass der Angreifer bei einem Angriff den Genauigkeitsverlust nicht mehr nutzen kann, um soVELO zu verdienen, wodurch der Angriff nicht mehr möglich ist.
Der Angreifer überwies die Gelder kurz nach Erhalt der illegalen Erlöse, einige, um die Adressen zu ändern, um den Angriff fortzusetzen, und andere, um Geld zu waschen:
0x4ab93fc50b82d4dc457db85888dfdae28d2 9b98d Adresse hat die oben genannten illegalen Gewinne übertragen zu 0x5d0d99e9886581ff8fcb01f35804317f5ed80bbb.
0x5d0d99e9886581ff8fcb01f35804317f5ed80bbb
Der Angreifer übertrug 724277 USDC, 2353 VELO an diese Adresse und tauschte USDC gegen Ether. Ein Teil der Gelder wurde sofort an die Stargate-Cross-Chain-Brücke überwiesen, und die meisten illegalen Gelder blieben an dieser Adresse:Der Angreifer übertrug 33 TH an die Adresse und übernehmen Versuchen Sie es mit dem Schälen Kette zur Geldwäsche bde5e53f537ff208970152b75a003093c2b4->0x9f09ec563222fe52712dc413d0b7b66cb5c7c795.
Das obige ist der detaillierte Inhalt vonWie können 100 US-Dollar eine Hebelwirkung auf 6,5 Millionen US-Dollar haben? Angriffsanalyse von Sonne Finance. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!