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

2. Funktionsweise von Wormhole
Wormhole funktioniert, indem es die auf jeder Chain ausgestrahlten Nachrichten überwacht. Die überwachte Nachricht wird an die Ziel-Chain weitergeleitet, damit ein Cross-Chain-Kommunikationsprotokoll aufgebaut werden kann.
Die intuitive 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. Der aktuelle Guardian-Satz kann im Wormhole Explorer eingesehen werden. Jeder Guardian kann die überwachte Nachricht unabhängig verifizieren und die Nachricht signieren.
In 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 Ziel-Chain, die Nachrichtennutzlast usw. enthält.
Sobald die Signaturen der Guardians einen Konsensschwellenwert erreichen, kann das VAA auf der Chain veröffentlicht werden.
Zusammenfassend sind die Guardians für die Integrität der übertragenen Nachricht verantwortlich.
3. Token-Brücke
Nachdem die Übertragung von Nachrichten zwischen verschiedenen Chains erläutert wurde, ist es nicht schwierig zu verstehen, wie die Token-Brücke, die Hauptanwendung von Wormhole, funktioniert.
Um Token von Chain A zu Chain B zu übertragen. Wormhole sperrt die Token auf A und prägt sie auf B. Das ist die übergeordnete Idee. In der Praxis lässt sich dies in drei Schritte unterteilen. Erstens werden die Token auf Chain A gesperrt. Zweitens wird die Nachricht, dass die Token auf Chain A nach Chain B übertragen werden sollen, gesendet. Drittens empfängt Chain 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 operiert auf 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.
Die Frage ist also, wie der Angreifer in der Lage war, die 120.000 ETH auf Solana zu prägen. Lassen Sie uns die Schritte im Detail betrachten. 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 Chain B (d. h. Solana) die signierte Nachricht (d. h. VAA) erhalten, die anzeigt, dass 120.000 ETH auf Chain A (d. h. Ethereum) gesperrt wurden.
Um die Nachricht zu veröffentlichen, wird post_vaa, definiert in post_vaa.rs, aufgerufen. Folglich wird ein Konto zur Speicherung der Nachricht erstellt. Allerdings prüft post_vaa die Signaturen der Guardians nicht. Stattdessen prüft verify_signatures, definiert 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.

In Zeile 103 wird die Funktion load_instruction_at aufgerufen, um die vorherige ausgeführte Anweisung secp_ix zu laden. secp_ix ruft die Secp256k1-Signaturverifizierungsfunktion auf. Somit prüft verify_signatures die Signaturen, indem es die vorherige 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!!! Es wird erwartet, dass Sie die Anweisung von Sysvar:Instructions laden.
Das vierte Konto der Angriffstransaktion ist jedoch 2tHS1cXX2h1KBEaadprqELJ6sV9wLoaSdX68FqsrrZRd und nicht Sysvar:Instructions. In diesem Fall hat der Angreifer den Signaturprüfungsprozess erfolgreich umgangen. Wormhole glaubte, die Prüfung sei bestanden und die Nachricht wurde auf die Chain gepostet, was zur Prägung von 120.000 ETH führte, ohne etwas zu sperren!

Betrachten wir eine legitime Prüfungsanweisung. Diese Transaktion besteht aus zwei Anweisungen. Die erste ruft die Secp256k1-Prüffunktion auf, während die zweite die Anweisung verify_signatures aufruft. Beachten Sie, dass das vierte Konto hier Sysvar:Instructions ist.

Nachdem die 120.000 ETH geprägt wurden, konnte der Angreifer sie nach Ethereum zurückziehen und in andere Token umwandeln, um den Gewinn zu erzielen.
6. Patch
Wie im Repo erwähnt, ist load_instruction_at ab Version 1.8.0 nicht mehr sicher und die Sysvar-Kontoadresse wird nicht geprüft. Stattdessen wird load_instruction_at_checked empfohlen.
7. Unser Gedanke
- Entwickler sollten sehr vertraut mit den externen Funktionen sein, die sie verwenden.
- Konzentrieren Sie sich weiterhin auf wichtige Änderungen der verwendeten Bibliotheken. Wenn sich die Bibliothek ändert, müssen möglicherweise der Code, der die Bibliothek verwendet, geändert werden.
- Der Bibliotheksbetreuer sollte sich der potenziellen Risiken bestimmter Änderungen bewusst sein und die gesamte Community rechtzeitig informieren. Einfaches Hinzufügen von Anmerkungen funktioniert möglicherweise nicht und ist nicht ausreichend.
- Ihr Vertrags code muss geprüft werden, wenn sich die Versionen der Bibliothek und des Codes ändern.
Über BlockSec
BlockSec ist ein Pionier-Unternehmen für Blockchain-Sicherheit, das 2021 von einer Gruppe weltweit renommierter Sicherheitsexperten gegründet wurde. Das Unternehmen hat sich zum Ziel gesetzt, Sicherheit und Benutzerfreundlichkeit für die aufstrebende Web3-Welt zu verbessern, um deren Massenadoption zu fördern. Zu diesem Zweck bietet BlockSec Sicherheitsaudits von Smart Contracts und EVM-Chains, die Phalcon-Plattform für die Sicherheitsentwicklung und proaktive Bedrohungsabwehr, die MetaSleuth-Plattform für die Nachverfolgung und Untersuchung von Geldern sowie die MetaSuites-Erweiterung für Web3-Entwickler zur effizienten Navigation in der Krypto-Welt an.
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 zehn Millionen US-Dollar erhalten.
Offizielle Website: https://blocksec.com/
Offizieller Twitter-Account: https://twitter.com/BlockSecTeam



