
Bu blog, MetaMask Snaps'in güven modelini inceleyerek web3 ekosistemindeki geliştiriciler için yaygın güvenlik sorunlarını ve en iyi uygulamaları ele almaktadır.

MetaMask Snaps, kullanıcıların MetaMask'ın işlevselliğini güvenli bir şekilde genişletmesine olanak tanıyan ve yeni cüzdan deneyimleri sunan açık kaynaklı bir sistemdir. Özünde Snap, MetaMask içinde izole bir ortamda çalışan bir JavaScript programıdır.
Bu blog yazısında MetaMask Snaps güvenlik ortamını inceleyeceğiz. Consensys Diligence'tan blockchain güvenlik denetçileri olarak akıllı sözleşme güvenliği konusunda uzmanlaşıyoruz. Consensys Diligence, web3 genelindeki projelerin güvenli dapp'ler oluşturmasına yardımcı olmak için kapsamlı akıllı sözleşme denetim hizmeti sunan bir blockchain güvenlik firmasıdır.
Her Snaps geliştiricisinin MetaMask Snaps'e özgü güven modelini anlaması gerekir. Bu güven modeli, farklı aktörler arasındaki güven sınırlarını belirler. Hatırlanması gereken temel mesaj şudur: Son kullanıcılar MetaMask'a güvenir ancak dapp'lere güvenmez.
Güven modelini aşağıdaki diyagramda resmileştirip özetledik. Bu diyagram, geliştiricilerin Snaps geliştirirken göz önünde bulundurması gereken farklı güven sınırlarını göstermektedir:
Birincisi, kullanıcı ile dapp arasında bir güven sınırı bulunur. Kullanıcılar dapp'lere hiçbir zaman güvenmez. Nitekim dapp'ler kötü niyetli olabilir ya da ele geçirilmiş olabilir. Kullanıcıları, aslında farklı bir şeyi imzalarken belirli bir payload'ı imzaladıklarına inandırabilirler.
İkincisi, MetaMask ve uzantıları etrafında bir güven sınırı bulunur. Kullanıcılar dapp'lere güvenmese de MetaMask'a güvenir. MetaMask, kullanıcı için gerçeğin kaynağıdır. MetaMask içinde görüntülenen ve imzalanan payload; ister çekirdek modülü aracılığıyla ister Snaps aracılığıyla olsun, önemli olan budur.
Üçüncüsü, MetaMask çekirdek modülü ile Snap arasında da bir güven sınırı bulunur. Snaps geliştiricileri, Snaps API'si aracılığıyla MetaMask'ın çekirdek modülüyle etkileşime girebilir. Bu API, geliştiricilerin kısıtlı API özelliklerine erişmeden önce izin talep etmesi gerektiği anlamına gelen bir izin sistemi uygular. Bununla birlikte, uygun izinlerle Snaps; MetaMask kök entropisine erişme, veri imzalama veya harici API'lerle iletişim kurma gibi kritik işlemleri gerçekleştirebilir.
Özünde, MetaMask ekosistemindeki son kullanıcılar için yol gösterici ilke basit ama derin bir anlam taşır: Son kullanıcıların yalnızca Güven Modülü olarak bilinen MetaMask ve MetaMask Snap bağlamında gerçekleşen bilgilere ve etkileşimlere güvenmesi gerekir.
MetaMask güven modeli, yapılandırılmış bir denetim yaklaşımına olanak tanır ve denetçilerin güvenlik sorunlarını tespit etmesine yardımcı olur. Snaps denetimlerimiz sırasında farklı sorun kategorileri belirledik. Diğer olası kategoriler hakkında da merak duyduk. Bu nedenle, 9 denetim firması tarafından denetlenen 40 Snap üzerinde kapsamlı bir analiz yürüttük. Bir sınıflandırma oluşturduk ve sorunları bu sınıflandırmaya göre kategorize ettik. Aşağıda bazı örneklerle birlikte ilginç kategorilerin bir kısmını öne çıkarıyoruz. Bu listenin kapsamlı olmadığını belirtmek gerekir.
Markdown ve kontrol karakteri enjeksiyonu: Bu, kullanıcı girişlerindeki markdown veya kontrol karakterleri aracılığıyla istenmeyen kod veya komutların enjekte edilmesi riskini kapsar.
Kullanıcı girişi temizleme ve doğrulama:- Tür denetimi/tür karışıklığı ve ayrıştırma sorunları
API'nin geçersiz RPC parametrelerini reddetmemesi: Bu sorun, API'nin yanlış zincir kimlikleri, adres sağlama toplamları veya ücret yapıları gibi geçersiz parametreleri reddetmemesi durumunda ortaya çıkar.
Hatalı URI doğrulama: Bu sorun, URI'leri doğrularken örneğin gevşek regex ifadeleri kullanıldığında ortaya çıkabilir.
MetaMask'ın yerleşik UX kalıplarını bozmak: Bu sorun, uygulamaların MetaMask'ın yerleşik kullanıcı deneyimi kalıplarından sapması durumunda ortaya çıkar.- Kullanıcıdan hesap erişimi için onay istememek: MetaMask, herhangi bir hesabı dapp'e bağlamadan önce her zaman kullanıcıya sorar. Snaps geliştiricileri de aynı kalıbı izlemelidir.
Hesap numaralandırma: Uygulamanın kullanıcı hesaplarını uygun onay alınmadan numaralandırabileceği veya listeleyebileceği bir gizlilik endişesidir.
Kullanıcı onayı istememek:- Payload imzalarken: Bu, uygulamanın açık kullanıcı onayı olmadan imzayla ilgili işlemler gerçekleştirdiği durumları ifade eder.
Özel anahtarı parola görünürlük geçişi olmadan görüntülemek: Özel anahtarlar, bir sorumluluk reddi metniyle birlikte tıkla-göster bileşeni kullanılmadan görüntülenir. Bu, kullanıcının örneğin kamuya açık bir ortamda olması durumunda sorun yaratabilir.
Opak snap diyalogları: Şeffaflık veya netlikten yoksun diyaloglardır.- Eksik bilgi içeren işlem imzalama diyaloğu: İşlem imzalama diyaloglarında temel bilgilerin atlandığı veya kullanıcıya sunulan bilgilerin insan tarafından okunamaz olduğu bir durumdur.
Ücret yuvarlama hassasiyeti sorunları: Bu, ücret hesaplamalarında ve görüntülemelerinde yanlışlıklar veya hassasiyet eksikliğiyle ilgilidir.
Kaynağı görüntülemek: Snaps, bir eylemin kaynağını görüntülemez. Bu, kullanıcıyı eylemin aslında başka bir dapp'ten geldiği hâlde bir dapp tarafından başlatıldığını düşünmesi için kandırabilir.
Güvenlik açığı bulunan/güvenilmeyen bağımlılıklar.
Tedarik zinciri saldırıları: Bir bağımlılık, doğrudan veya dolaylı saldırı vektörleri aracılığıyla ele geçirilebilir.
Güncel olmayan bağımlılıklar: Güncel olmayan bağımlılıklara güvenmek, bu bağımlılıklar güvenlik açıkları içerebileceğinden olumsuz güvenlik sonuçlarına yol açabilir.
Gereksiz izinler: Çok fazla izin vermek güvenliği azaltır.
Düşük seviyeli izinlere erişim: Örneğin Ethereum için MetaMask kök anahtarları entropisi yanlış yönetilir.
Kriptografik materyalin sızması:- Dapp'in özel anahtar talebi: Özel anahtarlar asla MetaMask'tan çıkmamalıdır!
Hesap yönetimi: Snap, ilk bağlantıda herhangi bir hesabı bağlamadan önce kullanıcıya sormalıdır.
Şu anda analizimizin sonuçlarını iyileştiriyor ve yeni içgörüler belirliyoruz. Yakında daha fazlası gelecek. Takipte kalın :)
Bir güven modülü geliştirdiğinizin farkında olun! Kullanıcılar MetaMask'a güvenir, dapp'e değil. Kullanıcı her eylemi onaylamalı ve bilinçli bir karar verebilmek için tüm bilgilere sahip olmalıdır. Anahtarlar asla MetaMask'tan çıkmaz. Dolayısıyla bir Snaps geliştiricisi olarak şunları yapabilirsiniz:
Minimum izin talep edin: Snaps, saldırı yüzeyini en aza indirmek için yalnızca çalışmaları için gerekli olan belirli işlevlere veya verilere erişim talep etmelidir.
Kirlenmiş girişleri doğrulayın ve temizleyin: Enjeksiyon saldırılarından veya güvenilmeyen kod çalıştırılmasından kaçının. Snap'in bir kullanıcının cüzdanının işlevselliğini genişletme yeteneği göz önüne alındığında, tüm girişlerin güvenli ve açıklardan arındırılmış olmasını sağlamak hem cüzdanın bütünlüğünü hem de kullanıcının varlıklarını korumak için hayati önem taşır.
Tedarik zincirini yönetin: Güvenlik açıklarından kaçınmak için bağımlılıkları dikkatli bir şekilde seçin ve güncelleyin.
Geliştirme sürecinde bu ilkeleri ve temel yaygın sorunları göz önünde bulundurmak, Snaps'in geleceğini bir sonraki milyar kullanıcı için çok daha güvenli kılar.
Consensys Diligence, blockchain ekosistemindeki geniş bir proje yelpazesinin protokollerinin lansmanına hazır olmasını ve kullanıcıları koruyacak şekilde inşa edilmesini sağlamak için yardımcı olmuştur. Consensys Diligence, Snap'inizi bu ve daha fazla güvenlik açığı için özel bir denetimle incelemekten memnuniyet duyar. Bize ulaşın ve fiyat teklifi alın!
Martin Ortner (tintinweb)
Valentin Quelquejay
Consensys Diligence'taki güvenlik uzmanları Martin ve Valentin, Snap güvenlik araştırmalarının ön saflarında yer alarak platformun güvenliğini artırmak için titizlikle çalışmaktadır.
Yapay zeka tarafından çevrildi. Hatalar içerebilir. Lütfen her zaman bilgileri doğrulayın.