0. Rückblick
- Sichern Sie das Solana-Ökosystem (1) — Hallo Solana
- Sichern Sie das Solana-Ökosystem (2) — Aufrufe zwischen Programmen
- Sichern Sie das Solana-Ökosystem (3) — Programm-Upgrade
- Sichern Sie das Solana-Ökosystem (4) — Kontenvalidierung
- Sichern Sie das Solana-Ökosystem (5) — Multi-Sig
- Sichern Sie das Solana-Ökosystem (6) — Multi-Sig2
1. Überblick
Im vorherigen Blogbeitrag haben wir die Implementierung eines allgemeinen Multi-Sig vorgestellt. In diesem Beitrag werden wir ein weiteres Sicherheitsproblem diskutieren: Typverwechslung.
2. Deserialisierung/Serialisierung
In Solana werden die Programmzustände in Konten gespeichert. Das Problem der Typverwechslung tritt während der Deserialisierung/Serialisierung von Konten auf. Die Logik des Programms stützt sich normalerweise auf die Datenstrukturen. Das Programm prüft jedoch möglicherweise den Typ der Konten während des Deserialisierungs-/Serialisierungsprozesses nicht ordnungsgemäß. Dies kann von Angreifern ausgenutzt werden und zu unerwarteten Verlusten führen.
3. Code-Überprüfung (Typverwechslung)
Im Folgenden veranschaulichen wir das Problem der Typverwechslung anhand eines einfachen Programms. Den Testcode finden Sie hier.

Im Testprogramm implementieren wir zwei Datenstrukturen, eine ist User und die andere ist Metadata. Beide speichern den öffentlichen Schlüssel eines Kontos (eines anderen Kontos).

Das Programm hat drei verschiedene Anweisungen. Die Anweisung InitializeUser ist für die Erstellung des User-Kontos und die Festlegung eines autorisierten Kontos (d. h. authority) konzipiert. Ebenso wird die Anweisung InitializeMeta zum Erstellen des MetaData-Kontos und zum Festlegen eines normalen Kontos (d. h. account) aufgerufen. Die Anweisung Test zeigt, dass der Angreifer die Überprüfungslogik des Programms umgehen und Angriffe mit kontrolliertem MetaData durchführen kann.

Gehen wir die Anweisung Test() durch. Das Programm stellt sicher, dass der Eigentümer des übergebenen User-Kontos das Programm selbst ist (Zeile 86 - Zeile 89). Nach der Deserialisierung (Zeile 92) vergleicht das Programm den öffentlichen Schlüssel des übergebenen authority-Kontos mit dem im User-Konto gespeicherten öffentlichen Schlüssel. Wenn sie nicht übereinstimmen, bricht das Programm ab (Zeile 93 - Zeile 96). Die letzte Prüfung ist sicherzustellen, dass das Autoritätskonto die Transaktion signiert hat. Wenn ein Angreifer jedoch das kontrollierte Metadata-Konto übergibt, können alle Prüfungen trotzdem umgangen werden. Der Grund dafür ist, dass das Programm den Typ der Konten nicht prüft. Es empfängt ein Array von Bytes und deserialisiert es direkt in verschiedene Typen von im Programm definierten Strukturen.
Wir stellen das Testprogramm für weitere Tests bereit und es kann unter diesem Link gefunden werden.
3.1 Transaktion senden
Nach der Bereitstellung des Programms schreiben wir das Skript, um die drei bereitgestellten Anweisungen nacheinander aufzurufen.
Wir rufen zunächst InitializeUser und InitializeMeta auf. Beachten Sie, dass wir unseren eigenen öffentlichen Schlüssel als account-Konto festlegen, das im Metadata-Konto gespeichert ist.

In der Funktion test() übergeben wir das Metadata-Konto als User-Konto und unser eigenes Konto als authority_info (Zeile 347 - Zeile 348). Das Programm deserialisiert Metadata mit der Struktur User, und alle Prüfungen können umgangen werden.

Wir senden die Transaktion, die Sie hier finden können. Das Programm gab Erfolg zurück, was bedeutet, dass wir die Prüfung mit dem ungeprüften Kontotyp erfolgreich bestanden haben.
4. Zusammenfassung
In diesem Artikel stellen wir das Problem der Typverwechslung in Solana vor. Es gibt viele Möglichkeiten, dieses Problem zu vermeiden. Wir können beispielsweise ein Attribut hinzufügen, um den Typ des Kontos in der Struktur zu speichern, und das Programm sollte das Typattribut immer überprüfen, bevor es aus dem übergebenen Konto liest/schreibt. Bleiben Sie dran, wir werden in den kommenden Beiträgen mehr dazu veröffentlichen.
Andere Artikel in dieser Reihe lesen:
- Sichern Sie das Solana-Ökosystem (1) — Hallo Solana
- Sichern Sie das Solana-Ökosystem (2) — Aufrufe zwischen Programmen
- Sichern Sie das Solana-Ökosystem (3) — Programm-Upgrade
- Sichern Sie das Solana-Ökosystem (4) — Kontenvalidierung
- Sichern Sie das Solana-Ökosystem (5) — Multi-Sig
- Sichern Sie das Solana-Ökosystem (6) — Multi-Sig2
Über BlockSec
BlockSec ist ein wegweisendes Blockchain-Sicherheitsunternehmen, das 2021 von einer Gruppe weltweit angesehener Sicherheitsexperten gegründet wurde. Das Unternehmen hat sich der Verbesserung der Sicherheit und Benutzerfreundlichkeit der aufstrebenden Web3-Welt verschrieben, um deren massenhafte Verbreitung zu fördern. Zu diesem Zweck bietet BlockSec Sicherheitsaudits für Smart Contracts und EVM-Ketten, die Phalcon-Plattform für die Sicherheitsentwicklung und proaktive Bedrohungsabwehr, die MetaSleuth-Plattform zur Nachverfolgung und Untersuchung von Geldern sowie die MetaSuites-Erweiterung für Web3-Entwickler, um effizient in der Krypto-Welt zu surfen.
Bis heute hat das Unternehmen über 300 geschätzte 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/
Offizieller Twitter-Account: https://twitter.com/BlockSecTeam



