Am 15. Mai 2024 wurde Sonne Finance angegriffen und das Projekt verlor mehr als 20 Millionen US-Dollar.

SharkTeam führte umgehend eine technische Analyse dieses Vorfalls durch und fasste die Sicherheitsvorkehrungen zusammen. Wir hoffen, dass nachfolgende Projekte daraus lernen und gemeinsam eine Sicherheitsverteidigungslinie für die Blockchain-Industrie aufbauen können.

1. Angriffstransaktionsanalyse

Angreifer: 0xae4a7cde7c99fb98b0d5fa414aa40f0300531f43

Angriffsvertrag: 0x02fa2625825917e9b1f8346a465de1bbc150c5b9

Zielvertrag: 0xe3b81318b1b6776f0877c3770afddff97b9f5fe5

Angriffstransaktion: 0x9312ae377d7ebdf3c7c3a86f80514878deb5df51aad38b6191d55db53e42b7f0

Der Angriffsprozess ist wie folgt:

1. Flash leihen Sie 35, 569, 150 VELO aus und übertragen Sie diese VELO-Tokens in den soVELO-Vertrag

Da es sich um eine direkte Überweisung (Spende) handelt, wird der soVELO Token nicht geprägt. Daher erhöhte sich im soVELO-Vertrag der Gesamtbetrag des Bargelds um 35.569,150 VELO und der Gesamtvorrat von soVELO blieb unverändert.

2. Der Angreifer erstellt einen neuen Vertrag 0xa16388a6210545b27f669d5189648c1722300b8b und startet einen Angriff auf den Zielvertrag im neuen Vertrag. Der Angriffsprozess ist wie folgt:

(1) 2 soVELO in den neuen Vertrag übertragen

(2) soWETH und soVELO als Sicherheit deklarieren

(3) Leihen Sie 265, 842, 857, 910, 985, 546, 929 WETH von soWETH

Aus dem Ausführungsprozess der obigen Ausleihfunktion haben wir basierend auf dem Rückgabewert der getAccountSnapshot-Funktion Folgendes herausgefunden:

Für den soWETH-Vertrag beträgt der neue Vertragssaldo 0, der Darlehensbetrag 0 und der Wechselkurs (exchangeRate) 208, 504, 036, 856, 714, 856, 032, 085, 073

Für den soVELO-Vertrag beträgt der neue Vertragssaldo 2, d. 143.988.000.000.000.000.000.000

Der Wechselkurs wird wie folgt berechnet:

Wenn 1 Wei soVELO verpfändet ist, können Sie nicht mehr als 17.735, 851, 964, 756, 377, 265, 143, 988 VELO ausleihen und 265, 842, 857, 910, 985, 546, 929 WETH ausleihen. Sie müssen eine Hypothek in Höhe von mindestens 265, 842, 857, 910, 985, 546, 929 SOWETH aufnehmen.

Der Preis von soWETH: soWETHPrice = 2, 892, 868, 789, 980, 000, 000, 000,

Der Preis von soVELO: soVELOPrice = 124, 601, 260, 000, 000, 000

Der Betrag an WETH, der von soVELO mit einer Hypothek von 1 Wei geliehen werden kann, ist wie folgt:

1 * Wechselkurs * soVELOPrice / soWETHPrice = 763, 916, 258, 364, 900, 996, 923 

Ungefähr 763 WETH. Nur 1 Wei der soVELO-Hypothek reicht aus, um dieses Darlehen zu finanzieren.

Die Aufnahme von 265, 842, 857, 910, 985, 546, 929 WETH (ca. 265 WETH) wird in Sicherheiten soVELO umgewandelt. Der Mindestbetrag an soVELO, der verpfändet werden muss, beträgt:

265, 842, 857, 910, 985, 546, 929 * soWETHPreis / soVELOPrice / Wechselkurs = 0,348

Das heißt, 1 Wei an soVELO-Sicherheiten ist ausreichend.

Tatsächlich wurden 2 Wei der soVELO-Sicherheiten für die Kreditaufnahme von nur 1 Wei verwendet

(4) Lösen Sie die zugrunde liegenden Vermögenswerte ein, nämlich 35, 471, 603, 929, 512, 754, 530, 287, 976 VELO

Wechselkurs = 17.735.851.964.756.377.265.143.988.000.000.000.000.000.000.000

Die Höhe der Sicherheiten, die soVELO für die Rückzahlung von 35, 471, 603, 929, 512, 754, 530, 287, 976 VELO benötigt, beträgt

35.471.603.929.512.754.530.287.976 * 1e18 / Wechselkurs = 1,99999436

Bei der Berechnung beträgt die tatsächlich berechnete erforderliche Sicherheit 1 Wei von soVELO, da bei der Berechnung Kürzung statt Rundung verwendet wird.

Die eigentliche Sicherheit beträgt 2 Wei von soVELO, von denen 1 Wei für das oben genannte Darlehen von 265 WETH verwendet wird und der verbleibende 1 Wei zur Rückzahlung von 35 M VELO verwendet wird

(5) Übertragen Sie die geliehenen 265 WETH und die zurückgekauften 35 M VELO auf den Angriffsvertrag

3. Wiederholen Sie den Vorgang dreimal (insgesamt viermal), um einen neuen Vertrag zu erstellen und den Angriff zu wiederholen.

4. Abschließend zahlen Sie den Schnellkredit zurück.

2. Schwachstellenanalyse

Bei dem oben genannten Angriff wurden zwei Schwachstellen ausgenutzt:

(1) Spendenangriff: VELO-Token direkt in den soVELO-Vertrag übertragen (spenden), wodurch der Wechselkurs geändert wird, sodass der Angreifer etwa 265 WETH mit nur 1 Wei soVELO als Sicherheit verleihen kann

(2) Problem mit der Berechnungsgenauigkeit: Unter Verwendung des Genauigkeitsverlusts während des Berechnungsprozesses und des geänderten Wechselkurses können 35 M VELO eingelöst werden, wenn nur 1 wei soVELO verpfändet ist

3. Sicherheitsvorschläge

Als Reaktion auf diesen Angriff sollten wir während des Entwicklungsprozesses die folgenden Vorsichtsmaßnahmen befolgen:

(1) Während des Entwurfs- und Entwicklungsprozesses des Projekts müssen die Integrität und Genauigkeit der Logik gewahrt bleiben, insbesondere die Fragen der Hinterlegung, Verpfändung, Aktualisierung von Zustandsvariablen und der Kompromiss zwischen Multiplikations- und Divisionsberechnungsergebnissen während des Projekts Es müssen möglichst viele Situationen berücksichtigt werden, damit die Logik vollständig ist und keine Lücken entstehen.

(2) Bevor das Projekt online geht, muss ein Smart-Contract-Audit durch ein externes professionelles Wirtschaftsprüfungsunternehmen durchgeführt werden.

Über uns

Die Vision von SharkTeam ist es, die Web3-Welt zu sichern. Das Team besteht aus erfahrenen Sicherheitsexperten und leitenden Forschern aus der ganzen Welt, die sich mit der zugrunde liegenden Theorie von Blockchain und Smart Contracts auskennen. Es bietet Dienstleistungen wie Risikoidentifizierung und -blockierung, intelligente Vertragsprüfung, KYT/AML, On-Chain-Analyse usw. und hat eine intelligente On-Chain-Risikoidentifizierungs- und Blockierungsplattform ChainAegis geschaffen, die die Advanced Persistent Threat (Advanced Persistente Bedrohung) in der Web3-Welt, APT). Es hat langfristige Kooperationsbeziehungen mit wichtigen Akteuren in verschiedenen Bereichen des Web3-Ökosystems aufgebaut, wie Polkadot, Moonbeam, Polygon, Sui, OKX, imToken, Collab.Land, TinTinLand usw.

Offizielle Website: https://www.sharkteam.org

Twitter: https://twitter.com/sharkteamorg

Telegramm: https://t.me/sharkteamorg

Discord: https://discord.gg/jGH9xXCjDZ