1. Hintergrund
Wormhole, auch bekannt als Einstein-Rosen-Brücke, ist eine spekulative Struktur, die weit entfernte Punkte in der Raumzeit verbindet. In der Welt der Blockchain wird Wormhole als Brücke zwischen verschiedenen Ketten (z. B. Solana und Ethereum verwendet. Benutzer können mit Wormhole tokenisierte Vermögenswerte über Blockchains hinweg übertragen.
Am 2. Februar 2022 wurde Wormhole gehackt und der Angreifer konnte 120.000 Wrapped Ether im Wert von 320 Millionen US-Dollar prägen, was den zweitgrößten Verlust in der DeFi-Geschichte nach Poly Network darstellt.

2. Wie Wormhole funktioniert
Wormhole funktioniert, indem es die auf jeder Kette ausgestrahlten Nachrichten überwacht. Die überwachte Nachricht wird an die Zielkette weitergeleitet, damit ein Cross-Chain-Kommunikationsprotokoll aufgebaut werden kann.
Die naheliegende Frage ist, wie garantiert werden kann, dass die überwachte Nachricht vertrauenswürdig ist. Um dieses Problem zu lösen, führt Wormhole 19 zusätzliche Knoten ein, die als "Guardians" bezeichnet werden. Die aktuelle Guardian-Gruppe kann im Wormhole Explorer eingesehen werden. Jeder Guardian kann die überwachte Nachricht unabhängig verifizieren und die Nachricht signieren.
Bei Wormhole ist die Nachricht im VAA-Format organisiert. Das VAA besteht aus zwei Teilen. Einer ist der Header, der die Signaturen der Guardians sammelt. Der andere ist der Body, der Informationen für die Zielkette, die Nachrichtennutzlast usw. enthält.
Sobald die Signaturen der Guardians einen Konsensschwellenwert erreichen, kann das VAA auf der Kette veröffentlicht werden.
Zusammenfassend sind die Guardians für die Integrität der übertragenen Nachricht verantwortlich.
3. Token-Brücke
Nachdem erklärt wurde, wie Nachrichten zwischen verschiedenen Ketten übertragen werden, ist es nicht schwer zu verstehen, wie die Token-Brücke, die die Hauptanwendung in Wormhole darstellt, funktioniert.
Um Token von Kette A nach Kette B zu übertragen. Wormhole sperrt die Token auf A und prägt sie auf B. Das ist die grobe Idee. In der Praxis lässt sich dies in drei Schritte unterteilen. Erstens werden die Token auf Kette A gesperrt. Zweitens wird die Nachricht, dass die Token auf Kette A auf Kette B übertragen werden sollen, gesendet. Drittens empfängt Kette B die Nachricht und die entsprechenden Token werden geprägt. Alles ist erledigt.
4. Solana-Anweisungen
In Solana besteht eine Transaktion aus mehreren Anweisungen. Jede Anweisung enthält eine Programm-ID, Konten und die Daten. Die Programm-ID repräsentiert das Programm (einen Smart Contract), das die Anweisung verarbeitet. Das Programm interpretiert die Daten und arbeitet mit den bereitgestellten Konten.
5. Der Wormhole-Angriff
Kurz gesagt, der Angreifer prägte 120.000 ETH auf Solana, ohne Vermögenswerte auf Ethereum zu sperren. Die Transaktion ist hier.
Somit stellt sich die Frage, wie der Angreifer in der Lage war, die 120.000 ETH auf Solana zu prägen. Lassen Sie uns die Schritte detaillieren. Um den Token zu prägen, wird die Anweisung complete_wrapped aufgerufen. Diese Anweisung empfängt mehrere Adressen, und die dritte ist die Adresse, die die signierte Nachricht speichert. Bevor die 120.000 ETH geprägt werden, sollte Kette B (d. h. Solana) die signierte Nachricht (d. h. VAA) erhalten, die besagt, dass 120.000 ETH auf Kette A (d. h. Ethereum) gesperrt wurden.
Um die Nachricht zu posten, wird post_vaa in post_vaa.rs aufgerufen. Folglich wird ein Konto zum Speichern der Nachricht erstellt. Allerdings prüft post_vaa die Signaturen der Guardians nicht. Stattdessen prüft verify_signaures in veryify_signatures.rs die Signaturen.

Das vierte Konto, das an verify_signatures übergeben wird, ist das System-Anweisungskonto. Lassen Sie uns nun untersuchen, wie verify_signatures funktioniert.

Bei Zeile 103 wird die Funktion load_instruction_at aufgerufen, um die zuvor ausgeführte Anweisung secp_ix zu laden. secp_ix ruft die Secp256k1-Signaturverifizierungsfunktion auf. Somit prüft verify_signatures die Signaturen, indem es die zuvor ausgeführte Anweisung secp_ix prüft. Haben Sie jetzt alles verstanden? Die Funktion load_instruction_at prüft nicht, wo die Anweisungen geladen werden sollen!!! Es wird erwartet, dass die Anweisung von Sysvar:Instructions geladen wird.
Das vierte Konto der Angriffstransaktion ist jedoch 2tHS1cXX2h1KBEaadprqELJ6sV9wLoaSdX68FqsrrZRd und nicht Sysvar:Instructions. In diesem Fall hat der Angreifer den Signaturverifizierungsprozess erfolgreich umgangen. Wormhole glaubte, die Verifizierung sei bestanden und die Nachricht wurde auf der Kette veröffentlicht, was zur Prägung von 120K ETH führte, ohne etwas zu sperren!

Werfen wir einen Blick auf eine legale Verifizierungs-Anweisung. Diese Transaktion besteht aus zwei Anweisungen. Die erste ruft die Secp256k1-Verifizierungsfunktion auf, während die zweite die verify_signatures-Anweisung aufruft. Beachten Sie, dass das vierte Konto hier Sysvar:Instructions ist.

Nach der Prägung der 120.000 ETH konnte der Angreifer diese auf Ethereum zurückziehen und in andere Token umwandeln, um den Gewinn zu erzielen.
6. Patch
Wie im Repo erwähnt, ist seit Version 1.8.0 load_instruction_at unsicher und die Adresse der Sysvar-Konten wird nicht überprüft. Stattdessen wird load_instruction_at_checked empfohlen.
7. Unsere Gedanken
- Entwickler sollten mit den von ihnen verwendeten externen Funktionen sehr vertraut sein.
- Achten Sie weiterhin auf wichtige Änderungen der verwendeten Bibliotheken. Wenn sich die Bibliothek ändert, muss der Code, der die Bibliothek verwendet, möglicherweise geändert werden.
- Der Bibliotheksbetreuer sollte sich der potenziellen Risiken für spezifische Änderungen bewusst sein und die gesamte Community rechtzeitig benachrichtigen. Das bloße Hinzufügen von Annotationen reicht möglicherweise nicht aus.
- Ihr Vertragscode muss überprüft werden, wenn die Versionen der Bibliothek und des Codes geändert werden.
Über BlockSec
BlockSec ist ein wegweisendes Blockchain-Sicherheitsunternehmen, das 2021 von einer Gruppe weltweit anerkannter Sicherheitsexperten gegründet wurde. Das Unternehmen setzt sich für die Verbesserung der Sicherheit und Benutzerfreundlichkeit der aufkommenden Web3-Welt ein, um deren Massenadoption zu fördern. Zu diesem Zweck bietet BlockSec Dienstleistungen für die Sicherheitsüberprüfung von Smart Contracts und EVM-Ketten an, die Phalcon-Plattform für die sichere Entwicklung und proaktive Bedrohungsabwehr, die MetaSleuth-Plattform für die Geldverfolgung und Untersuchung sowie die MetaSuites-Erweiterung für Web3-Entwickler, um effizient in der Krypto-Welt zu surfen.
Bis heute hat das Unternehmen über 300 angesehene Kunden wie MetaMask, Uniswap Foundation, Compound, Forta und PancakeSwap betreut und in zwei Finanzierungsrunden von namhaften Investoren wie Matrix Partners, Vitalbridge Capital und Fenbushi Capital zweistellige Millionenbeträge erhalten.
Offizielle Website: https://blocksec.com/
Offizielles Twitter-Konto: https://twitter.com/BlockSecTeam



