Back to Blog

Puffer Protokolü: Erişim Kontrol Mekanizması Neden Önemlidir ve Güvenliği Nasıl İyileştirilebilir

Code Auditing
February 8, 2024
5 min read

"Puffer, Eigenlayer üzerine inşa edilmiş merkezi olmayan bir yerel likit yeniden stake etme protokolüdür (nLRP)". Yalnızca birkaç gün içinde 600 milyon USD'nin üzerinde TVL (Toplam Kilitli Değer) çekmeyi başarmıştır. Erişim kontrolü, protokol üzerindeki kötü niyetli işlemleri önlemek için önemli bir güvenlik unsurudur.

Bu blog yazısında, Puffer protokolündeki erişim kontrolü mekanizmasının tüm mimarisini ve mevcut yapılandırmasını inceliyoruz. Bu, topluluğun protokolü daha iyi anlamasına yardımcı olabilir. Analiz sonucunun Ethereum üzerindeki mevcut durumu (Blok 19177155, 07 Şubat 2024, 15:17:35 +UTC) esas alınarak hazırlandığını unutmayın.

Sözleşme Adresleri

Aşağıdaki tablo, bu blog yazısında kullanılan akıllı sözleşmeleri listelemektedir.

Adres Uygulama
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

Mimari

Protokolün tamamı, esas olarak kullanıcıların varlıklarıyla ilgili iki akıllı sözleşme içermektedir. Birincisi PufferDepositor, ikincisi ise PufferVault'tur.

Şekil 1: PufferDepositor ve PufferVault arasındaki temel ilişki
Şekil 1: PufferDepositor ve PufferVault arasındaki temel ilişki

PufferDepositor'ın temel işlevi, kullanıcıların varlıklarını kabul etmek ve ardından bunları PufferVault'a yatırmaktır. Kullanıcıların yatırdığı varlıklar stETH değilse, DEX'e takas işlemi protokol tarafından otomatik olarak gerçekleştirilir.

PufferVault, kullanıcıların varlıklarını tutan ana sözleşmedir. Aynı zamanda EigenLayer'a yapılan yatırımlar için giriş noktasıdır. Protokolün tamamındaki ana erişim kontrolü bu akıllı sözleşmede uygulanmaktadır.

Erişim Kontrolü Mekanizması

Tüm erişim kontrolü, OpenZeppelin'in AccessManager modülü kullanılarak uygulanmaktadır. AccessManager akıllı sözleşmesi, PufferDepositor ve PufferVault sözleşmelerinin yetkisini yönetir.

AccessManager, farklı adresler içeren farklı Roller tanımlar. Her Role, AccessManaged sözleşmeleri (yani PufferDepositor ve PufferVault) içindeki farklı fonksiyonları çağırmak üzere atanabilir. AccessManager, belirli bir fonksiyonun gecikmeli olarak yürütülmesini destekler. Yani bir Role bir adrese atanırken, bu adresin bu Role kapsamında gerçekleştirdiği işlemlerin anında mı yoksa belirli bir gecikmeyle mi yürütüleceği belirtilebilir.

Mevcut Erişim Kontrolü Yapılandırmaları

Bununla birlikte, erişim kontrolünün etkinliği yapılandırmasına bağlıdır. ACL (Erişim Kontrol Listesi) kurallarının hatalı yapılandırılmasının güvenlik açıklarına yol açtığı pek çok örnek gözlemledik.

Bu sorunu ele almak amacıyla Puffer protokolünün mevcut yapılandırmasını inceledik ve sonuçları aşağıda sunuyoruz. Bu sonuçların yalnızca Blok 19177155 (07 Şubat 2024, 15:17:35 +UTC) itibarıyla mevcut durumu yansıttığını lütfen unutmayın.

Roller

Aşağıda, sistemdeki mevcut rolleri ve bunlarla ilişkili adresleri özetleyen bir tablo yer almaktadır.

Rol Kimliği Bu Role Sahip Adresler Gecikmeli Yürütme Not
0 TimeLock 0x3c28b7c7ba1a1f55c9ce66b263b33b204f2126ea Hayır YÖNETİCİ Rolü
1 Operation SafeWallet 0xc0896ab1a8cae8c2c1d27d011eb955cca955580d Evet, 604800 saniye (7 gün) ile Hedef sözleşmeleri yükseltme (PufferDepositor ve PufferVault)
1 Community SafeWallet 0x446d4d6b26815f9ba78b5d454e303315d586cb2a Hayır Hedef sözleşmeleri yükseltme (PufferDepositor ve PufferVault)
22 Operation SafeWallet 0xc0896ab1a8cae8c2c1d27d011eb955cca955580d Hayır Varlıkları EigenLayer'a taşıma ve EigenLayer'dan para çekme talebi başlatma

PufferVault sözleşmesi içindeki fonksiyonları yürütmek için farklı yürütme yolları bulunmaktadır. Bir yol TimeLock sözleşmesini içerir (YÖNETİCİ Rolü ile — şekilde Yol 1 olarak gösterilmektedir), diğer yol ise çağırıcıya atanmış rolle Vault içindeki fonksiyonların doğrudan çağrılmasına olanak tanır. Her iki durumda da çağrının AccessManager üzerinden geçmesi gerekir.

Şekil 2: PufferVault sözleşmesi içindeki fonksiyonları yürütmek için farklı yürütme yolları
Şekil 2: PufferVault sözleşmesi içindeki fonksiyonları yürütmek için farklı yürütme yolları

Tür I: TimeLock Sözleşmesinden Çağrı

TimeLock sözleşmesinden bir fonksiyon çağrılırken atanan Rolün YÖNETİCİ olduğunu unutmayın. Bu durum, Vault'un bakış açısından çağırıcının YÖNETİCİ Rolüne sahip olan TimeLock sözleşmesi olmasından kaynaklanmaktadır. Sonuç olarak, TimeLock sözleşmesi ek bir gecikmeli yürütme mekanizması katmanı içermektedir.

  • Operation SafeWallet: Bu bileşen, hedef sözleşme içindeki fonksiyonları 604.800 saniye (yaklaşık 7 gün) gecikmeyle çağırabilir.
  • Community SafeWallet: Bu bileşen, hedef sözleşme içindeki fonksiyonları anında çağırma kapasitesine sahiptir. Ayrıca Operation SafeWallet tarafından kuyruğa gönderilen bekleyen herhangi bir yürütmeyi iptal etme yetkisine de sahiptir.
  • Pausing SafeWallet: Bu bileşen yalnızca hedef sözleşmeyi duraklatmakla sınırlıdır ve başka herhangi bir fonksiyonu yürütmeye yetkili değildir.

Tür II: Vault Sözleşmesinin Doğrudan Çağrılması

Sonraki yöntem, Vault sözleşmesi içindeki fonksiyonların doğrudan çağrılmasını içerir. AccessManager'ın, her Role ile ilişkili adresler tarafından hangi fonksiyonların çağrılabileceğini belirlediğini unutmamak önemlidir.

Rol Kimliği Hedef Sözleşme Hedef Fonksiyon
1 PufferValut upgradeToAndCall(address,bytes)

0x4f1ef286

22 PufferValut depositToEigenLayer (0x008e0590)

initiateETHWithdrawalsFromLido (0x593961de)

initiateStETHWithdrawalFromEigenLayer (0x402064a7)

Hem Operation hem de Community SafeWallet'lar, hedef sözleşmeyi yükseltmek için upgradeToAndCall fonksiyonunu doğrudan çağırma kapasitesine sahiptir. Temel fark zamanlamada yatmaktadır: Community SafeWallet bu işlemi herhangi bir gecikme olmaksızın gerçekleştirirken, Operation SafeWallet bir gecikmeye tabidir.

Ayrıca Operation SafeWallet, varlıkları EigenLayer'a aktaran ve para çekme taleplerini başlatan fonksiyonları anında yürütme kapasitesine sahiptir.

[08 Şubat 2024 10:02:59 +UTC] tarihinde güncellendi

Operation SafeWallet'ı Rol 1'den çıkarmayı amaçlayan bir işlem planlandı. Bu işlem, yaklaşık 7 günlük tahmini bir gecikmeye karşılık gelen 1707940908 blokundan sonra yürütülmek üzere planlanmıştır. Kuyruğa alınan bu işlemlerin simülasyonu BlockSec Phalcon kullanılarak gerçekleştirildi.

Şekil 3: BlockSec Phalcon'da kuyruğa alınan bu işlemlerin simülasyonu
Şekil 3: BlockSec Phalcon'da kuyruğa alınan bu işlemlerin simülasyonu

[16 Şubat 2024 20:10:23 +UTC] tarihinde güncellendi:

Şekil 4: Etherscan'dan elde edilen sonuç
Şekil 4: Etherscan'dan elde edilen sonuç

Güvenli Cüzdan Yapılandırmaları

Güvenli cüzdanın yapılandırması da protokolün güvenliğini etkiler.

Cüzdan Sahipler Eşik Değeri
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

[08 Şubat 2024 10:02:59 +UTC] tarihinde güncellendi:

Özet

Bu blog yazısında, Puffer protokolü tarafından kullanılan güvenlik mekanizmalarını inceledik. Genel olarak, tüm izin sisteminin tasarımı kapsamlıdır.

Topluluk, olası riskleri aktif olarak izlemelidir:

  • Community SafeWallet sahiplerinin özel anahtarlarının güvenliği son derece önemlidir. Üç özel anahtarın ele geçirilmesi durumunda, bir saldırgan vault'u yükseltebilir.
  • EigenLayer gibi bağımlı protokollerin güvenliği de aktif olarak izlenmelidir.

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit