Gelişmekte olan yüksek performanslı bir blockchain platformu olan Sui, çeşitli uygulama senaryoları için hızlı ve güvenli bir işlem deneyimi sağlamaya odaklanırken, bir dizi yenilikçi teknolojiye ve benzersizliğe sahiptir. Sui hakkında temel bilgiler Sui'yi Keşfetmek: Yüksek Performansın Arkasındaki Teknoloji ve Sözleşme Güvenliği bölümünde bulunabilir. Blok zincirlerde yaygın olarak kullanılan diğer programlama dillerinden (Solidity gibi) farklı olarak Sui, Solidity'de yaygın olarak görülen yeniden giriş saldırıları, tamsayı taşmaları gibi güvenlik açığı sorunlarını belirli ölçüde çözebilen Move dilini kullanıyor , çift harcama, DoS saldırıları ve derleyici sorunu, ancak geliştiricilerin koda hata eklemesini engelleyemez. Bu nedenle geliştiricilerin akıllı sözleşmelerin güvenliğini sağlamak için bunları kullanırken bazı benzersiz işlev veya özellikleri anlaması ve bunlara dikkat etmesi gerekir.
SlowMist güvenlik ekibi, geliştiricilerin güvenlik risklerini daha iyi anlamalarına yardımcı olmayı amaçlayan Sui-Move sözleşme denetim kılavuzunu yayınlamak için Sui topluluğu tarafından paylaşılan güvenlik geliştirme uygulamalarını uzun yıllar boyunca biriktirdiği kendi güvenlik denetim deneyimiyle birleştirerek entegre etti ve özümsedi. Sui akıllı sözleşmeler ve potansiyel güvenlik tehditlerini azaltmak için pratik çözümler sunar.
Yer sınırlaması nedeniyle, bu makale Sui-Move sözleşme denetimine girişin yalnızca bir kısmını listelemektedir. GitHub'da Watch, Fork ve Star'a hoş geldiniz: https://github.com/slowmist/Sui-MOVE-Smart-Contract-. Denetim-Primer/ blob/main/README_CN.md.
1. Modül bildirimi ve görünürlüğü
1.1 "genel(arkadaş)" işlevi ("genel(arkadaş)", en son Sui sürümünde "genel(paket)" ile değiştirilmiştir)
Tanım: Bir işlevi yalnızca belirtilen arkadaş modülü tarafından erişilebilecek şekilde bildirmek için kullanılır. Bu, "genel" ve "özel" arasında daha ayrıntılı erişim kontrolü sağlar.
Örnek:
1.2 "giriş" işlevi
Tanım: "Giriş" fonksiyonu modülün giriş noktasıdır ve işlem bloğu içinden doğrudan çağrı yapılmasına olanak sağlar. Parametreler işlem bloğuna yapılan girişlerden gelmelidir ve bloktaki önceki işlemlerin veya değiştirilen verilerin sonucu olamaz. Ayrıca "giriş" işlevi yalnızca "bırakma" özelliğine sahip türleri döndürebilir.
Örnek:
Tanım: "Giriş" fonksiyonu modülün giriş noktasıdır ve işlem bloğu içinden doğrudan çağrı yapılmasına olanak sağlar. Parametreler işlem bloğuna yapılan girişlerden gelmelidir ve bloktaki önceki işlemlerin veya değiştirilen verilerin sonucu olamaz. Ayrıca "giriş" işlevi yalnızca "bırakma" özelliğine sahip türleri döndürebilir.
Örnek:
1.3 "genel" işlev
Tanım: "genel" işlevler, harici etkileşime uygun işlem bloklarından ve diğer modüllerden çağrılabilir. Parametreler ve dönüş değerleri açısından "giriş" işlevleriyle aynı kısıtlamalara sahip değildir ve genellikle işlevselliği dış dünyaya göstermek için kullanılır.
Örnek:
2. Nesne yönetimi
2.1 Nesnelerin benzersizliği
Tanım: Her Sui nesnesi, zincirdeki nesnenin benzersizliğini sağlayan benzersiz bir "objID"ye sahiptir.
2.2 Paketleme ve paketi açma
tanım:
- Doğrudan sarma: Bir Sui nesnesini başka bir nesnenin alanı olarak kullanın; sarma nesnesi, paket açılırken yok edilmelidir.
- Nesne paketleme: Paketlenen nesne başka bir nesnenin parçası haline gelir ve artık bağımsız olarak var olmaz. Paket açıldıktan sonra nesnenin kimliği değişmeden kalır.
2.3 Özel aktarım stratejisi
Tanım: Özel bir aktarım stratejisi tanımlamak için "sui::transfer::transfer" kullanın. "Mağaza" yeteneklerine sahip nesneler için bunu "sui::transfer::public_transfer" aracılığıyla oluşturabilirsiniz.
2.4 Nesnelerin özellikleri
Tanım: Bir Sui nesnesinin özellikleri arasında nesnenin nasıl davranacağını belirleyen "kopyala", "bırak", "depola" ve "anahtar" bulunur.
2.5 Nesne izin kontrolü
- Adrese Ait Nesneler
Tanım: Belirli bir adrese (hesap adresi veya nesne kimliği) ait olan nesneler, bu nesnelere yalnızca nesnenin sahibi erişebilir ve bunları çalıştırabilir.
- Değişmez Nesneler
Tanım: Değiştirilemez nesneler değiştirilemez, aktarılamaz ve herkes tarafından erişilebilir. Küresel erişim gerektiren ancak değiştirilmesi gerekmeyen veriler için uygundur.
- Paylaşılan Nesneler
Tanım: Paylaşılan nesneler birden fazla kullanıcı tarafından erişilebilir ve çalıştırılabilir ve merkezi olmayan uygulamalar gibi senaryolar için uygundur. Ancak fikir birliği ihtiyacı nedeniyle işletme maliyeti yüksektir.
- Sarılmış Nesneler
Tanım: Bir nesneyi sarmalamak, bir nesneyi başka bir nesnenin içine gömmektir. Sarılmış nesne artık bağımsız olarak mevcut değildir ve sarma nesnesi aracılığıyla erişilmesi gerekir.
3. Güvenlik kontrolü
3.1 Sayısal taşma kontrolü
Tanım: Bir nesneyi sarmalamak, bir nesneyi başka bir nesnenin içine gömmektir. Sarılmış nesne artık bağımsız olarak mevcut değildir ve sarma nesnesi aracılığıyla erişilmesi gerekir.
3. Güvenlik kontrolü
3.1 Sayısal taşma kontrolü
Sui'nin akıllı sözleşmeleri varsayılan olarak sayısal taşma kontrolü gerçekleştirir.
3.2 Yeniden giriş kontrolü
Yeniden giriş saldırısı olarak adlandırılan saldırı, normal bir sözleşme çağrısı işlemine beklenmeyen (harici) bir çağrının eklenmesi, böylece genel iş görüşmesi sürecinin değiştirilmesi ve yasa dışı kar elde edilmesi eylemidir. Harici sözleşme çağrılarının söz konusu olduğu her yerde potansiyel yeniden giriş riskleri olabilir. Mevcut yeniden giriş sorunlarını üç kategoriye ayırabiliriz: tek işlevli yeniden giriş, işlevler arası yeniden giriş ve sözleşmeler arası yeniden giriş. Move dilinin bazı özellikleri yeniden giriş saldırılarına karşı doğal koruma sağlar:
- Move'da dinamik çağrı yoktur ve tüm harici çağrıların öncelikle kullanım yoluyla içe aktarılması gerekir, yani harici çağrılar beklenir ve belirlenir.
- Hiçbir Yerel belirteç aktarımı Geri Dönüş işlevini tetiklemez.
- Move'da kaynak modeli, kaynaklara aynı anda yalnızca tek bir yürütme bağlamı tarafından erişilebilmesini sağlar. Bu, eğer işlevin yürütülmesi tamamlanmazsa, yürütme tamamlanana kadar diğer işlevlerin aynı kaynağa erişemeyeceği anlamına gelir.
1. Taşma denetimi
Not: Move matematiksel işlemleri gerçekleştirirken taşma kontrolü gerçekleştirecektir. İşlem taşarsa işlem başarısız olur. Ancak Move'un bit işlemleri için taşma kontrolü yapmadığını belirtmek gerekir.
Konumlandırma: Kodda bit işlemlerinin yapıldığı konumu bulun ve taşma riski olup olmadığını kontrol edin.
2. Aritmetik hassas hata denetimi
Not: Move'da kayan nokta türü yoktur. Bu nedenle aritmetik işlemler yapılırken işlem sonuçlarının kayan noktalı sayılarla ifade edilmesi gerekiyorsa hassasiyet hataları ortaya çıkabilir. Bazı durumlarda doğruluk hatalarından tamamen kaçınmak zor olsa da, bunların etkileri optimizasyon ve rasyonel tasarım yoluyla azaltılabilir.
Konumlandırma: Kodun aritmetik işlemler içeren tüm bölümlerini, özellikle hassas hatalar üretebilecek hesaplamaları gözden geçirin, bu işlemlerin sözleşme mantığı veya sayısal doğruluk üzerinde olumsuz bir etkisi olmayacağından emin olun ve hassasiyet hatalarını azaltmak için optimizasyon önerileri yapın.
3. Şartlı rekabet denetimi
Not: Sui'deki doğrulayıcılar kullanıcılar tarafından gönderilen işlemleri de sıralayabilir, dolayısıyla denetimde yine de işlemlerin aynı blokta sıralanmasından kar elde etme konusuna dikkat etmemiz gerekiyor.
konum:
- İşlev çağrılmadan önce sözleşmenin veri durumunun beklenen bir yönetimi var mı?
- İşlev yürütme sırasında sözleşme verileri durumunun beklenen yönetiminin olup olmadığı.
- İşlev çağrısından sonra sözleşme veri durumunun yönetimi bekleniyor mu?
4. Erişim kontrolü denetimi
Not: Sözleşmedeki belirli temel işlevler, örneğin kullanıcının yatırılan tutarı doğrudan güncelleyebilen işlevler gibi dahili aramalarla sınırlı olmalıdır. Bu fonksiyonların yanlışlıkla dış dünyaya açılması durumunda izin kontrolü atlanabilir, bu da güvenlik açıklarına ve hatta varlık kayıplarına neden olabilir. Bu nedenle, yalnızca yetkili rollerin veya modüllerin bu işlevleri çağırabilmesini veya işlevlerin yalnızca dahili olarak kullanılabilmesini sağlamak için erişim izinlerinin sıkı bir şekilde ayarlanması gerekir.
Konumlandırma: Yalnızca dahili olarak çağrılabildiklerinden emin olmak için tüm işlevlerin, özellikle de dış dünyaya açık olmaması gereken işlevlerin erişim kontrolü ayarlarını kontrol etmeniz gerekir. Açığa çıkarılmaması gereken işlevsel bir arayüzün açığa çıktığı tespit edilirse yüksek riskli olarak işaretlenmeli ve düzeltme önerilerinde bulunulmalıdır.
5. Nesne yönetimi denetimi
Not: Sui'de nesneler paylaşılan nesnelere (Paylaşılan Nesne) dönüştürülebilir; bu, nesnenin erişim haklarının özelden genele değişebileceği anlamına gelir. Bu nedenle, kullanılan tüm nesnelerin, her bir nesnenin statik mi yoksa paylaşımlı mı olduğunu belirlemek için dikkatle incelenmesi gerekir. Herhangi bir nesnenin yanlışlıkla özel nesnelerden paylaşılan nesnelere dönüştürülüp dönüştürülmediğine özellikle dikkat edin; bu, yetkisiz kullanıcıların bu nesnelere erişmesine yol açarak potansiyel bir güvenlik riski oluşturabilir.
Konumlandırma: Modülde yer alan tüm nesneleri organize edin ve analiz edin, nesne türünü ve izin ayarlarını kontrol edin ve nesnenin izinlerinin iş gereksinimlerine uygun olduğundan emin olun. Özel bir nesnenin yanlışlıkla paylaşılan bir nesneye dönüştürüldüğü tespit edilirse, bu potansiyel bir risk olarak işaretlenmeli ve düzeltme yapılması önerilmelidir.
6. Token tüketimi denetimi
Konumlandırma: Modülde yer alan tüm nesneleri organize edin ve analiz edin, nesne türünü ve izin ayarlarını kontrol edin ve nesnenin izinlerinin iş gereksinimlerine uygun olduğundan emin olun. Özel bir nesnenin yanlışlıkla paylaşılan bir nesneye dönüştürüldüğü tespit edilirse, bu potansiyel bir risk olarak işaretlenmeli ve düzeltme yapılması önerilmelidir.
6. Token tüketimi denetimi
Not: Sui’nin token modeli diğer zincirlerden farklıdır. Sui, nesnelerin jeton tutmasına olanak tanır ve jeton nesneleri diğer nesnelerin içine yerleştirilebilir ve bölünebilir. Bu nedenle, token tüketimini içeren senaryolarda, güvenlik sorunlarını veya beklenmedik kayıpları önlemek için tokenlerin yönetimine ve dolaşımına özel dikkat gösterilmesi gerekmektedir.
konum:
- Tüketilen miktarın doğru olup olmadığını kontrol edin.
- Belirteç nesnesinin doğru şekilde aktarılıp aktarılmadığını kontrol edin.
- Tokenların bölünmesinin ve birleştirilmesinin haklı olup olmadığını kontrol edin.
- Belirtecin nesneye bağlanmasını kontrol edin.
7. Flaş kredi saldırısı denetimi
Not: Sui's Move'da ayrıca flaş kredi (Sıcak Patates) kullanımı da vardır. Kullanıcılar tek işlemde büyük miktarda fon ödünç alıp diledikleri gibi kullanabiliyor, yalnızca işlem kapsamında parayı iade etmeleri gerekiyor. Kötü niyetli kullanıcılar genellikle fiyat manipülasyonu gibi büyük finans saldırılarını gerçekleştirmek amacıyla kendi fonlarını genişletmek için flaş krediler kullanır.
Konumlandırma: Protokolün algoritmasının (ödüller, faiz oranları vb.) ve oracle makinelerine olan bağımlılığın makul olup olmadığını analiz edin.
8. İzin güvenlik açığı denetimi
Not: Sui'nin Move sözleşmesinde, izin boşlukları iş ihtiyaçları ve işlevsel tasarımla yakından ilgilidir. Bu nedenle, daha karmaşık bir Modülle karşılaştığınızda, proje tarafıyla her yöntemin çağrı izinlerini onaylamanız gerekir (buradaki izinler genellikle işlevlere atıfta bulunur). görünürlük ve işlev çağırma izinleri).
konum:
- Tüm fonksiyon yöntemlerinin görünürlüğünü ve çağrı izinlerini kontrol edin ve onaylayın. Proje değerlendirme aşamasında, proje tarafının tasarım belgelerini sağlaması gerekir. Denetim sırasında izinler, tasarım belgesindeki açıklamaya göre onaylanır.
- Proje ekibinin rolünün izin kapsamını sıralayın. Proje ekibinin rolünün izinleri kullanıcının varlıklarını etkileyecekse aşırı izin riski vardır.
- Harici fonksiyonda iletilen nesnenin türünü analiz edin. Eğer bu ayrıcalıklı bir işlevse, bazı ayrıcalıklı nesnelerin katılması gerekir.
9. Sözleşme yükseltmesinin güvenlik denetimi
Not: Move'da harici modüller use anahtar sözcüğü aracılığıyla içe aktarılır. Sui'nin sözleşmesinin yükseltilebilir olduğunu ancak yayınlanan sözleşme paketinin değişmez bir nesne olduğunu ve yayınlandıktan sonra geri çekilemeyeceğini veya değiştirilemeyeceğini belirtmek gerekir. Sözleşme yükseltmenin özü, güncellenen sözleşmenin yeni adreste yeniden yayınlanması ve eski sözleşme versiyonundaki verilerin yeni sözleşmeye taşınmasıdır. Bu nedenle, sözleşme yükseltme sürecinde özel dikkat gösterilmesi gerekmektedir:
- "init" işlevi: "init" işlevi yalnızca sözleşme ilk kez serbest bırakıldığında yürütülür ve sonraki sözleşme yükseltmeleri gerçekleştiğinde tekrar tetiklenmez.
- Sözleşmenin yükseltilmesi bağımlılıkları otomatik olarak güncellemeyecektir: Sözleşme paketi harici bir pakete bağlıysa, harici paket yükseltildiğinde sözleşme paketi otomatik olarak yükseltilen sözleşme adresine işaret etmeyecektir. Bu nedenle, yeni bağımlılıkları belirtmek için sözleşme paketinizi manuel olarak yükseltmeniz gerekir.
Konumlandırma: Taşıma işleminin güvenli ve doğru olmasını sağlamak, önemli verilerin kaybolması veya güncellemelere güvenilmesi gibi sorunların önlenmesi için sözleşme yükseltme işlemi sırasında veri taşıma mantığının ayrıntılı bir incelemesinin yapılması gerekir.
10. Harici çağrı güvenliği denetimi
Not: Harici modül kullanımı denetim öğeleriyle aynıdır; Move'daki harici çağrılar önce harici modülün içe aktarılmasını gerektirdiğinden, teorik olarak harici çağrıların sonuçları geliştiricilerin beklediği şeydir ve gereken asıl şey harici modülün kararlılığıdır.
Konumlandırma: Dışarıdan içe aktarılan kitaplıkların kontrol edilmesi gerekir.
11. Dönüş değerinin kontrol edilmesi
Not: Diğer akıllı sözleşme dillerinde olduğu gibi Move sözleşmesinde de belirli işlevlerin dönüş değerlerinin kontrol edilmesi gerekir. Bu dönüş değerlerinin işlenmesi göz ardı edilirse anahtar mantığı doğru yürütülemeyebilir ve bu da güvenlik sorunlarına yol açabilir.
Konumlandırma: Kodunuzdaki her işlev çağrısının, özellikle de harici çağrıları veya önemli durum güncellemelerini içerenlerin dönüş değerini kontrol etmeniz gerekir. Dönüş değeri işlenmezse veya doğrulanmazsa öngörülemeyen davranışlara yol açabilir ve potansiyel bir risk noktası olarak işaretlenmelidir.
12. Hizmet Reddi Denetimi
Not: Hizmet Reddi (DoS) saldırıları, kod mantığı hataları, uyumluluk sorunları veya diğer güvenlik açıklarından kaynaklanabilir ve akıllı sözleşmelerin düzgün çalışmamasına neden olabilir. Bu tür sorunlar bir sözleşmenin kullanılabilirliğini etkileyebilir, hatta tamamen felç edebilir.
12. Hizmet Reddi Denetimi
Not: Hizmet Reddi (DoS) saldırıları, kod mantığı hataları, uyumluluk sorunları veya diğer güvenlik açıklarından kaynaklanabilir ve akıllı sözleşmelerin düzgün çalışmamasına neden olabilir. Bu tür sorunlar bir sözleşmenin kullanılabilirliğini etkileyebilir, hatta tamamen felç edebilir.
konum:
- Çeşitli koşullar altında normal şekilde yürütülebilmesini ve sözleşmenin hatalar veya boşluklar nedeniyle kesintiye uğramamasını sağlamak için iş mantığının sağlamlığını kontrol etmeye odaklanın.
- Dışa bağımlılık sorunları nedeniyle hizmet kesintilerini önlemek için dış modüllerle etkileşime giren parçalara dikkat edin ve uyumluluklarını sağlayın.
13. Gaz optimizasyonu denetimi
Not: Ethereum gibi Sui'nin de bir Gaz mekanizması vardır ve herhangi bir modül komut dosyası çağrısı Gaz tüketir. Bu nedenle bazı uzun ve karmaşık kodların optimize edilmesi gerekmektedir.
konum:
- Ayrılıp ayrılamayacaklarını görmek için karmaşık çağrılar içerir.
- İşlevin dahili yürütme verimliliğinin optimize edilip edilemeyeceğini görmek için yüksek frekanslı çağrıları içerir.
14. Tasarım mantığı denetimi
Not: Tasarım mantığı denetiminin odak noktası, tasarım kusurları veya beklentilerden sapmalar olup olmadığını doğrulamak için iş sürecini ve koddaki uygulamayı kontrol etmektir. Beklenen mantıkla tutarsız kod uygulaması, beklenmeyen davranışlara veya güvenlik risklerine neden olabilir.
konum:
- Farklı rollerin izinlerine ve kapsamına göre iş sürecindeki olası çağrı yollarını sıralayın.
- Her bir iş sürecine dahil olan verilerin kapsamını belirleyin ve veri işlemlerinin iş tasarımıyla tutarlı olmasını sağlayın.
- Gerçek çağrı yollarını beklenen iş süreçleriyle karşılaştırın ve beklenmedik sonuçlara yol açabilecek tüm çağrı durumlarını tanımlayıp analiz edin.
15. Diğerleri
Yukarıdaki ifadelerde içerik yansıtılmamaktadır.
Geliştiriciler için bu en iyi uygulamaları takip etmek, akıllı sözleşmelerin güvenliğini etkili bir şekilde artırabilir ve potansiyel güvenlik risklerini azaltabilir. Bu en iyi uygulamanın daha fazla geliştiricinin güvenli ve güvenilir akıllı sözleşmeler oluşturmasına ve blockchain teknolojisinin sağlıklı gelişimini desteklemesine yardımcı olabileceği umulmaktadır.
bakın:
[1] https://intro.sui-book.com/
[2] https://docs.sui.io/
[3] https://move-dao.github.io/move-book-zh/introduction.html
Yazar |
Editör Lisa, Liz |
Tüm Yorumlar