パファプロトコル:アクセス制御の重要性とセキュリティ向上の方法

Pufferプロトコルのアクセス制御機構全体のアーキテクチャとその現在の設定を見直しました。

パファプロトコル:アクセス制御の重要性とセキュリティ向上の方法

「Pufferは、Eigenlayer上に構築された分散型ネイティブ流動性再ステーキングプロトコル(nLRP)です。」 わずか数日で6億ドル以上のTVL(Total Value Locked)を調達しました。プロトコル上での悪意のある操作を防ぐためには、アクセス制御は重要なセキュリティ上の考慮事項です。

このブログでは、アクセス制御メカニズムのアーキテクチャ全体と、Pufferプロトコルにおけるその現在の構成についてレビューします。これにより、コミュニティがプロトコルをより良く理解するのに役立ちます。分析結果は、Ethereum上の現在の状態(ブロック 19177155、2024年2月7日、午後3時17分35秒 +UTC)に基づいていることに注意してください。

コントラクトアドレス

以下の表は、このブログで使用されているスマートコントラクトを示しています。

アドレス 実装
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

アーキテクチャ

プロトコル全体は、主にユーザー資産に関連する2つのスマートコントラクトを含みます。1つ目はPufferDepositor、2つ目はPufferVaultです。

Figure 1: PufferDepositorとPufferVaultの主な関係

PufferDepositorの主な機能は、ユーザーの資産を受け入れ、それをPufferVaultに預け入れることです。ユーザーの預け入れ資産がstETHでない場合、プロトコルによってDEXへのスワップが自動的に実行されます。

PufferVaultは、ユーザー資産を保持する主要なコントラクトです。また、EigenLayerへの預け入れのエントリポイントでもあります。プロトコル全体の主要なアクセス制御は、このスマートコントラクトに実装されています。

アクセス制御メカニズム

アクセス制御全体は、OpenZeppelinのAccessManagerモジュールを活用して実装されています。AccessManagerスマートコントラクトは、PufferDepositorおよびPufferVaultコントラクトの権限を管理します。

AccessManagerは異なるロールを定義し、それらは異なるアドレスを含みます。各ロールは、AccessManagedコントラクト(すなわち、PufferDepositorおよびPufferVault)内の異なる関数を呼び出す権限を付与されることができます。AccessManagerは、特定の関数の遅延実行をサポートしています。これは、アドレスにロールを付与する際に、そのアドレスからのそのロールにおける操作が即座に実行されるか、または時間遅延を伴って実行されるかを指定できることを意味します。

現在のアクセス制御構成

それにもかかわらず、アクセス制御の有効性はその構成にかかっています。ACL(Access Control List)ルールの構成の欠陥がセキュリティ脆弱性につながった多数の事例を観察しました。

これを解決するために、Pufferプロトコルの現在の構成をレビューし、以下に結果を示します。これらの結果は、ブロック19177155(2024年2月7日、午後3時17分35秒 +UTC)時点の状態のみを反映していることに注意してください。

ロール

以下は、システム内の現在のロールとその関連アドレスをまとめた表です。

ロールID このロールを持つアドレス 遅延実行 備考
0 TimeLock 0x3c28b7c7ba1a1f55c9ce66b263b33b204f2126ea いいえ ADMIN ロール
1 Operation SafeWallet 0xc0896ab1a8cae8c2c1d27d011eb955cca955580d はい、604800秒(7日間) ターゲットコントラクト(PufferDepositorおよびPufferVault)をアップグレード
1 Community SafeWallet 0x446d4d6b26815f9ba78b5d454e303315d586cb2a いいえ ターゲットコントラクト(PufferDepositorおよびPufferVault)をアップグレード
22 Operation SafeWallet 0xc0896ab1a8cae8c2c1d27d011eb955cca955580d いいえ EigenLayerに資産を移動し、EigenLayerからの引き出しリクエストを開始

PufferVaultコントラクト内の関数を実行するための実行パスはいくつかあります。1つのパスはTimeLockコントラクト(ADMINロールを持つ - 図のパス1に示す)を介し、もう1つのパスは、呼び出し元に割り当てられたロールで、Vault内の関数を直接呼び出すことを許可します。どちらの場合も、呼び出しはAccessManagerを経由する必要があります。

Figure 2: PufferVaultコントラクト内の関数を実行するための異なる実行パス

タイプI:TimeLockコントラクトからの呼び出し

TimeLockコントラクトから関数を呼び出す場合、割り当てられたロールはADMINであることに注意してください。この指定は、Vaultの観点からは、呼び出し元はADMINロールを持つTimeLockコントラクトであるためです。その結果、TimeLockコントラクトは追加の遅延実行メカニズムを組み込んでいます。

  • Operation SafeWallet:このコンポーネントは、604,800秒(約7日間)の遅延後にターゲットコントラクト内の関数を呼び出すことができます。
  • Community SafeWallet:このコンポーネントは、ターゲットコントラクト内の関数を即座に呼び出すことができます。また、Operation SafeWalletによってキューに送信された保留中の実行をキャンセルする権限も持っています。
  • Pausing SafeWallet:このコンポーネントは、ターゲットコントラクトを一時停止することに限定されており、他の関数を実行する権限はありません。

タイプII:Vaultコントラクトの直接呼び出し

次の方法は、Vaultコントラクト内の関数を直接呼び出すことです。AccessManagerは、各ロールに関連付けられたアドレスによってどの関数が呼び出せるかを決定することに注意することが重要です。

ロールID ターゲットコントラクト ターゲット関数
1 PufferValut upgradeToAndCall(address,bytes)

0x4f1ef286

22 PufferValut depositToEigenLayer (0x008e0590)

initiateETHWithdrawalsFromLido (0x593961de)

initiateStETHWithdrawalFromEigenLayer (0x402064a7)

Operation SafeWalletとCommunity SafeWalletの両方が、ターゲットコントラクトをアップグレードするためにupgradeToAndCall関数を直接呼び出すことができます。主な違いはタイミングにあります。Community SafeWalletはこのアクションを遅延なしで実行しますが、Operation SafeWalletは遅延の対象となります。

さらに、Operation SafeWalletは、EigenLayerに資産を転送し、引き出しリクエストを開始する関数を即座に実行できます。

更新:2024年2月8日 午前10時02分59秒 +UTC

Operation SafeWalletをロール1から削除する操作がスケジュールされました。この操作は、ブロック1707940908の後に実行される予定で、これは約7日間の推定遅延に相当します。これらのキューに入れられたトランザクションのシミュレーションは、BlockSec Phalconを使用して行われました。

Figure 3: BlockSec Phalconでのこれらのキューに入れられたトランザクションのシミュレーション

このForkのすべてのトランザクションを表示

更新:2024年2月16日 午後8時10分23秒 +UTC:

Figure 4: Etherscanからの結果

Safe Walletの構成

Safe Walletの構成もプロトコルのセキュリティに影響します。

ウォレット オーナー しきい値
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

更新:2024年2月8日 午前10時02分59秒 +UTC:

まとめ

このブログ記事では、Pufferプロトコルが利用しているセキュリティメカニズムをレビューしました。全体として、パーミッションシステムの設計は包括的です。

コミュニティは、潜在的なリスクを積極的に監視する必要があります:

  • Community SafeWalletのオーナーの秘密鍵のセキュリティは最重要です。3つの秘密鍵が侵害された場合、攻撃者がVaultをアップグレードできるようになる可能性があります。
  • EigenLayerなどの依存プロトコルのセキュリティも積極的に監視する必要があります。
Sign up for the latest updates