Puffer-Protokoll: Warum Zugangssteuerung wichtig ist und wie man Sicherheit verbessert

Überprüfung der gesamten Zugriffssteuerungsarchitektur und aktuellen Konfiguration im Puffer-Protokoll.

Puffer-Protokoll: Warum Zugangssteuerung wichtig ist und wie man Sicherheit verbessert

„Puffer ist ein dezentralisiertes natives Liquid-Restaking-Protokoll (nLRP), das auf Eigenlayer aufgebaut ist“. In nur wenigen Tagen hat es mehr als 600 Millionen US-Dollar an TVL (Total Value Locked) angezogen. Die Zugriffskontrolle ist eine wichtige Sicherheitsüberlegung, um böswillige Operationen auf dem Protokoll zu verhindern.

In diesem Blog überprüfen wir die gesamte Architektur des Zugriffskontrollmechanismus und seine aktuelle Konfiguration im Puffer-Protokoll. Dies kann der Community helfen, das Protokoll besser zu verstehen. Beachten Sie, dass das Analyseergebnis auf dem aktuellen Status (Block 19177155, 07. Feb 2024, 15:17:35 +UTC) auf Ethereum basiert.

Vertragsadressen

Die folgende Tabelle listet die in diesem Blog verwendeten Smart Contracts auf.

Adresse Implementierung
PufferDepositor 0x4aa799c5dfc01ee7d79 0e3bf1a7c2257ce1dceff 0x7276925e42f9c4054af a2fad80fa79520c453d6a
PufferVault 0xD9A442856C234a39a81 a089C06451EBAa4306a72 0x39ca0a6438b6050ea2a c909ba65920c7451305c1
AccessManager 0x8c1686069474410E624 3425f4a10177a94EBEE11 -
TimeLock 0x3c28b7c7ba1a1f55c9c e66b263b33b204f2126ea -
Operation SafeWallet 0xC0896ab1A8cae8c2C1d 27d011eb955Cca955580d 0xd9db270c1b5e3bd161e 8c8503c55ceabee709552
Community SafeWallet 0x446d4d6b26815f9bA78 B5D454E303315D586Cb2a 0xd9db270c1b5e3bd161e 8c8503c55ceabee709552
Pausing SafeWallet 0x1ba8e3aA853F73ae809 3E26B7B8F2520c3620Df4 0xd9db270c1b5e3bd161e 8c8503c55ceabee709552

Architektur

Das gesamte Protokoll umfasst hauptsächlich zwei Smart Contracts, die sich auf die Vermögenswerte der Benutzer beziehen. Der erste ist PufferDepositor, und der zweite ist PufferVault.

Abbildung 1: Die Hauptbeziehung zwischen PufferDepositor und PufferVault

Die Hauptfunktion von PufferDepositor besteht darin, Benutzereinlagen anzunehmen und diese dann in PufferVault zu hinterlegen. Wenn die eingezahlten Vermögenswerte der Benutzer nicht stETH sind, wird der Tausch in ein DEX automatisch vom Protokoll durchgeführt.

PufferVault ist der Hauptvertrag, der die Vermögenswerte der Benutzer verwahrt. Es ist auch der Einstiegspunkt für Einlagen in EigenLayer. Die Hauptzugriffskontrolle des gesamten Protokolls ist in diesem Smart Contract implementiert.

Zugriffskontrollmechanismus

Die gesamte Zugriffskontrolle wird durch die Nutzung des OpenZeppelin AccessManager Moduls implementiert. Der AccessManager Smart Contract verwaltet die Berechtigung der PufferDepositor und PufferVault Verträge.

Der AccessManager definiert verschiedene Rollen, die verschiedene Adressen enthalten. Jeder Rolle kann die Aufrufung verschiedener Funktionen innerhalb der AccessManaged Verträge (d. h. PufferDepositor und PufferVault) zugewiesen werden. Der AccessManager unterstützt die verzögerte Ausführung einer bestimmten Funktion. Das bedeutet, dass bei der Zuweisung einer Rolle zu einer Adresse angegeben werden kann, ob die von dieser Adresse in dieser Rolle ausgegebenen Operationen sofort oder mit einer Zeitverzögerung ausgeführt werden.

Aktuelle Zugriffskonfigurationen

Dennoch hängt die Effektivität der Zugriffskontrolle von ihrer Konfiguration ab. Wir haben zahlreiche Fälle beobachtet, in denen eine fehlerhafte Konfiguration von ACL-Regeln (Access Control List) zu Sicherheitslücken geführt hat.

Um dem entgegenzuwirken, haben wir die aktuelle Konfiguration des Puffer-Protokolls überprüft und die Ergebnisse unten aufgeführt. Bitte beachten Sie, dass diese Ergebnisse nur den Status ab Block 19177155 (07. Feb 2024, 15:17:35 +UTC) widerspiegeln.

Rollen

Unten ist eine Tabelle, die die aktuellen Rollen innerhalb des Systems und ihre zugehörigen Adressen auflistet.

Rollen-ID Adressen mit dieser Rolle Verzögerte Ausführung Anmerkung
0 TimeLock 0x3c28b7c7ba1a1f55c9ce66b263b33b204f2126ea Nein ADMIN Rolle
1 Operation SafeWallet 0xc0896ab1a8cae8c2c1d27d011eb955cca955580d Ja, mit 604800 Sekunden (7 Tage) Zielverträge (PufferDepositor und PufferVault) upgraden
1 Community SafeWallet 0x446d4d6b26815f9ba78b5d454e303315d586cb2a Nein Zielverträge (PufferDepositor und PufferVault) upgraden
22 Operation SafeWallet 0xc0896ab1a8cae8c2c1d27d011eb955cca955580d Nein Vermögenswerte auf EigenLayer verschieben und Auszahlungsanforderung von EigenLayer initiieren

Es gibt verschiedene Ausführungspfade, um Funktionen innerhalb des PufferVault-Vertrags auszuführen. Ein Pfad beinhaltet den TimeLock-Vertrag (mit der ADMIN-Rolle – wie in Pfad 1 in der Abbildung gezeigt), und der andere Pfad erlaubt die direkte Aufrufung von Funktionen innerhalb des Vault, wobei die Rolle dem Aufrufer zugewiesen wird. In beiden Fällen muss die Aufrufung über den AccessManager erfolgen.

Abbildung 2: Die verschiedenen Ausführungspfade zur Ausführung von Funktionen innerhalb des PufferVault-Vertrags

Typ I: Aufrufung vom TimeLock-Vertrag

Beachten Sie, dass bei der Aufrufung einer Funktion vom TimeLock-Vertrag die zugewiesene Rolle ADMIN ist. Diese Bezeichnung ergibt sich, da aus Sicht des Vault der Aufrufer der TimeLock-Vertrag ist, der die ADMIN-Rolle besitzt. Folglich integriert der TimeLock-Vertrag eine zusätzliche Ebene des verzögerten Ausführungsmechanismus.

  • Operation SafeWallet: Diese Komponente kann Funktionen im Zielvertrag nach einer Verzögerung von 604.800 Sekunden (ca. 7 Tage) aufrufen.
  • Community SafeWallet: Diese Komponente kann Funktionen im Zielvertrag sofort aufrufen. Sie hat auch die Befugnis, alle ausstehenden Ausführungen in der Warteschlange des Operation SafeWallet abzubrechen.
  • Pausing SafeWallet: Diese Komponente ist auf das Pausieren des Zielvertrags beschränkt und nicht berechtigt, andere Funktionen auszuführen.

Typ II: Direkte Aufrufung des Vault-Vertrags

Die folgende Methode beinhaltet die direkte Aufrufung von Funktionen innerhalb des Vault-Vertrags. Es ist wichtig zu beachten, dass der AccessManager bestimmt, welche Funktionen von den mit jeder Rolle verbundenen Adressen aufgerufen werden können.

Rollen-ID Zielvertrag Ziel Funktion
1 PufferVault upgradeToAndCall(address,bytes)

0x4f1ef286

22 PufferVault depositToEigenLayer (0x008e0590)

initiateETHWithdrawalsFromLido (0x593961de)

initiateStETHWithdrawalFromEigenLayer (0x402064a7)

Sowohl die Operation als auch die Community SafeWallets können die Funktion upgradeToAndCall direkt aufrufen, um den Zielvertrag zu aktualisieren. Der Hauptunterschied liegt im Timing: Die Community SafeWallet führt diese Aktion ohne Verzögerung aus, während die Operation SafeWallet einer Verzögerung unterliegt.

Darüber hinaus ist die Operation SafeWallet in der Lage, Funktionen auszuführen, die Vermögenswerte auf EigenLayer übertragen und Auszahlungsanforderungen initiieren.

Aktualisiert am [08. Feb 2024, 10:02:59 +UTC]

Eine Operation zur Entfernung der Operation SafeWallet aus Rolle 1 wurde geplant. Diese Operation soll nach Block 1707940908 ausgeführt werden, was einer geschätzten Verzögerung von etwa 7 Tagen entspricht. Die Simulation dieser in der Warteschlange befindlichen Transaktionen wurde mit BlockSec Phalcon durchgeführt.

Abbildung 3: Die Simulation dieser in der Warteschlange befindlichen Transaktionen in BlockSec Phalcon

Alle Transaktionen in diesem Fork anzeigen.

Aktualisiert am [16. Feb 2024, 20:10:23 +UTC]:

Abbildung 4: Das Ergebnis von Etherscan

Safe Wallet-Konfigurationen

Die Konfiguration einer Safe Wallet beeinflusst auch die Sicherheit des Protokolls.

Wallet Eigentümer Schwelle
0xC0896ab1A8cae8c2C1d 27d011eb955Cca955580d [0xb7d83623906AC3fa577F45B7D2b9D4BD26BC5d76] [0xD6475ce37d964d4816715FdafFEeAAf2958948bE] [0xD70aa9d7280E6FEe89B86f53c0B2A363478D5e94] [0xa5F84b556d5FD8959165Eff0324DCFEa164fA089] [0xf061f1FceFa32b3bbD5d18c5A623DB64bfBc107D] [0x206846dE1F372A9a603e672ba97A5238cC89aeAA] 3
0x446d4d6b26815f9bA78 B5D454E303315D586Cb2a [0xb7d83623906AC3fa577F45B7D2b9D4BD26BC5d76] [0x3B16821A5dBBFF86E4a88eA0621EC6be016cd79A] [0x648aA14e4424e0825A5cE739C8C68610e143FB79] [0x27c7CEd729280060577A68A54A94075D18614D19] [0xa9aE3B8FC1CBaAed74fE5889260f7cD743c50363] [0x161f479021044cB1C9e3DEF98aF945A8D972D3B2] 3
0x1ba8e3aA853F73ae809 3E26B7B8F2520c3620Df4 [0xb7d83623906AC3fa577F45B7D2b9D4BD26BC5d76] [0x3B16821A5dBBFF86E4a88eA0621EC6be016cd79A] [0x648aA14e4424e0825A5cE739C8C68610e143FB79] [0x27c7CEd729280060577A68A54A94075D18614D19] [0xa9aE3B8FC1CBaAed74fE5889260f7cD743c50363] [0x161f479021044cB1C9e3DEF98aF945A8D972D3B2] [0xD6475ce37d964d4816715FdafFEeAAf2958948bE] [0xD70aa9d7280E6FEe89B86f53c0B2A363478D5e94] [0xa5F84b556d5FD8959165Eff0324DCFEa164fA089] [0xf061f1FceFa32b3bbD5d18c5A623DB64bfBc107D] [0x206846dE1F372A9a603e672ba97A5238cC89aeAA] [0xaACA1eDbb656206Ce2a82Da7d7BD3e1Bb8138F22] 1

Aktualisiert am [08. Feb 2024, 10:02:59 +UTC]:

Zusammenfassung

In diesem Blogbeitrag haben wir die vom Puffer-Protokoll verwendeten Sicherheitsmechanismen überprüft. Insgesamt ist das Design des gesamten Berechtigungssystems umfassend.

Die Community sollte aktiv nach potenziellen Risiken Ausschau halten:

  • Die Sicherheit der privaten Schlüssel der Eigentümer der Community SafeWallet ist von größter Bedeutung. Wenn drei private Schlüssel kompromittiert werden, könnte dies einem Angreifer ermöglichen, den Vault zu aktualisieren.
  • Die Sicherheit abhängiger Protokolle wie EigenLayer sollte ebenfalls aktiv überwacht werden.
Sign up for the latest updates