Move dilinin güvenliği analizi: akıllı sözleşmeler dilindeki devrimci değişimler
Giriş
Move dili, MoveVM'yi gerçekleştiren blockchain ortamında çalışabilen akıllı sözleşmeler dilidir. Tasarımı, blockchain ve akıllı sözleşmelerin birçok güvenlik sorununu göz önünde bulundurmuş ve Rust dilinin bazı güvenlik tasarım ilkelerinden yararlanmıştır. Güvenliği ana özellik olarak öne çıkan yeni nesil akıllı sözleşmeler dilinden biri olan Move'un güvenliği nasıldır? Dil düzeyinde veya ilgili mekanizmalarla EVM, WASM gibi sözleşme sanal makinelerinin yaygın güvenlik tehditlerinden kaçınabilir mi? Move'un kendine özgü güvenlik sorunları var mı?
Bu makale, Move dilinin güvenlik sorunlarını dil özellikleri, çalışma mekanizması ve doğrulama araçları açısından inceleyecektir.
1. Move dilinin güvenlik özellikleri
Mevcut birçok programlama dilinden farklı olarak, Move dili hem güvenilmeyen kodlarla güvenli etkileşimi desteklemek hem de statik doğrulamayı sağlamak için tasarlanmıştır. Move, esneklik düşüncesine dayanan doğrusal olmayan mantığı bir kenara bırakmıştır; dinamik dağıtım ve özyinelemeli dış çağrıları desteklememekte, bunun yerine genel türler, küresel depolama, kaynaklar gibi kavramları alternatif programlama modelleri oluşturmak için kullanmaktadır. Örneğin, Move, yeniden giriş (reentrancy) açıklarına yol açabilecek dinamik yönlendirme ve özyinelemeli çağrı özelliklerini atlamaktadır.
Move'un ana güvenlik özellikleri şunlardır:
Modül: Her Move modülü, bir dizi yapı türü ve süreç tanımından oluşur. Modüller, tür tanımlarını içe aktarabilir ve diğer modüllerde tanımlanan süreçleri çağırabilir.
Yapı: Kaynak türü olarak tanımlanabilir, kalıcı küresel anahtar/değer deposunda depolanabilir.
Süreç: Başlatma, güvenli süreç ve güvensiz süreç tanımlandı.
Küresel Depolama: Move programının kalıcı verileri depolamasına izin verir, bu veriler yalnızca onu sahip olan modül tarafından programatik olarak okunabilir ve yazılabilir.
Bayt kodu doğrulayıcı: Bayt kodu seviyesinde tür sistemini zorlar, kötü niyetli istemci modüllerinin yasadışı işlemlerini engeller.
Move, derleme zamanında kod güvenliğinin çift korumasını, sabit değişken kontrolü ve bayt kodu doğrulayıcı iki mekanizma ile sağlamıştır.
2. Move'un çalışma mekanizması
Move programı sanal makinede çalışır, çalışma sırasında sistem belleğine erişemez. Bu, Move'un güvensiz ortamlarda güvenli bir şekilde çalışmasını sağlar, bozulma veya kötüye kullanım riski olmadan.
Move programı yığın üzerinde çalıştırılır, küresel depolama iki kısma ayrılmıştır: bellek ( yığın ) ve küresel değişkenler ( yığın ). Bellek, birinci derece depolamadır ve birimlerinin bellek birimlerine işaret eden işaretçileri depolaması mümkün değildir. Küresel değişkenler, bellek birimlerine işaret eden işaretçileri depolamak için kullanılır, ancak dizinleme yöntemi bellekten farklıdır.
Move'nin bytecode komutları yığın tabanlı yorumlayıcıda yürütülür. Yığın tabanlı sanal makine, uygulanması ve kontrol edilmesi kolaydır, donanım ortamı için daha az gereksinim duyar, bu nedenle blok zinciri sahnelerine uygundur. Kayıt tabanlı yorumlayıcıya kıyasla, yığın tabanlı yorumlayıcıda değişkenler arasında kopyalama ve taşıma işlemleri daha kolay kontrol edilebilir ve tespit edilebilir.
Move programının çalışma durumu ⟨C, M, G, S⟩ dörtlü kümesini içerir; bunlar çağrı yığını (C), bellek (M), global değişkenler (G) ve operatörler (S)'dir. Yığın ayrıca fonksiyon gövdesini içeren talimatları çözmek için fonksiyon tablosunu da korur.
MoveVM, veri depolamayı ve çağrı yığınını ( işlem mantığı ) depolamadan ayırır, bu da EVM ile en büyük farktır. MoveVM'de, kullanıcı durumu ( hesap adresi altındaki kaynaklar ) bağımsız olarak depolanır, program çağrıları yetki ve kaynakla ilgili zorunlu kurallara uygun olmalıdır. Bu tasarım belirli bir esneklikten ödün vermektedir, ancak güvenlik ve yürütme verimliliği ( açısından eşzamanlı yürütmeyi ) sağlama konusunda büyük bir iyileşme elde etmeye yardımcı olur.
3. Taşıma Prover
Move Prover, akıl yürütmeye dayalı bir biçimsel doğrulama aracıdır. Program davranışını biçimsel bir dil ile tanımlar ve programın beklentilere uygun olup olmadığını doğrulamak için akıl yürütme algoritmaları kullanır. Geliştiricilere akıllı sözleşmelerin doğruluğunu sağlamada yardımcı olur, işlem risklerini azaltır.
Move Prover, bir çıkarım doğrulama algoritması kullanarak programın beklenenle uyumlu olup olmadığını doğrular. Bu, bilinen bilgilere dayanarak program davranışını çıkarım yapabilmesi anlamına gelir ve beklenen davranışla eşleştiğinden emin olur. Bu, programın doğruluğunu sağlamaya yardımcı olur ve manuel test yükünü azaltır.
Move Prover'ın iş akışı aşağıdaki gibidir:
Move kaynak dosyasını girdi olarak al, bu dosya program girdi standartlarını ayarlamalıdır.
Move Parser, kaynak kodundan standartları çıkarır.
Move derleyicisi kaynak dosyayı bayt koduna çevirir, standart sistemle birlikte doğrulayıcı nesne modeline dönüştür.
Bu model Boogie ara diline çevrildi.
Boogie kodu Boogie doğrulama sistemine aktarılır, doğrulama koşulları oluşturulur.
Doğrulama koşulları Z3 çözücüsüne ( Microsoft tarafından geliştirilen SMT çözücüsü ).
Z3, SMT formülünün geçersiz olup olmadığını kontrol eder. Eğer geçersizse, bu, standardın geçerli olduğu anlamına gelir; aksi takdirde, koşulları sağlayan bir model oluşturur.
Tanı raporunu kaynak kodu düzeyindeki hataya geri yükleyin.
Move, Move Spesifikasyon Dili kullanarak sistemin standartlarını tanımlar. Bu, üretimi etkilemeden programın doğruluk davranışını statik olarak tanımlamayı destekleyen Move dilinin bir alt kümesidir. İş kodunu ve biçimsel doğrulama kodunu ayıran özel bir düzenleme dosyası olarak bağımsız bir şekilde yazılabilir.
Move Prover, geliştiricilerin akıllı sözleşmelerin doğruluğunu sağlamalarına yardımcı olan faydalı bir araçtır. Program davranışını tanımlamak için biçimsel bir dil kullanır ve programın beklenildiği gibi olup olmadığını doğrulamak için akıl yürütme algoritmaları kullanır. Bu, işlem risklerini azaltmaya yardımcı olur ve geliştiricilerin akıllı sözleşmeleri üretim ortamına daha güvenle dağıtabilmelerini sağlar.
4. Özet
Move dili, güvenlik tasarımı açısından son derece başarılıdır, dil özellikleri, sanal makine yürütmesi ve güvenlik araçları açısından kapsamlı bir değerlendirme sunmaktadır. Dil özellikleri, bazı esnekliklerden ödün vermekte, zorunlu tür kontrolü ve lineer mantık ile derleme kontrolü ve biçimsel doğrulamanın otomasyonu ile güvenli bir şekilde doğrulanabilirliği kolaylaştırmaktadır. MoveVM tasarımı, durumu mantıktan ayırarak, blok zincirindeki varlık güvenliği yönetimi ihtiyaçlarına daha uygun hale gelmektedir.
Dil açısından, Move EVM'nin yaygın reentrancy, taşma, Call/DeleGateCall enjeksiyonu gibi açıklarını etkili bir şekilde önleyebilir. Ancak yetkilendirme, kod mantığı, büyük sayı yapısı taşmaları gibi sorunlar geliştiricilerin dikkatine ihtiyaç duymaktadır. Move Prover genel anlamda bir ihmal durumunda etkili olamayabilir.
Move dilinin güvenlik açısından programcılar için birçok şeyi düşündüğü doğru, ancak tamamen güvenli bir dil ve program yoktur. Move akıllı sözleşme geliştiricilerine üçüncü taraf güvenlik şirketleri tarafından denetim hizmeti kullanmalarını ve spesifikasyon kısmındaki kod yazım ve doğrulama işlemlerini üçüncü taraf güvenlik şirketlerine devretmelerini öneriyoruz.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
Move dilinin güvenliği analizi: akıllı sözleşmelerin yeni paradigması
Move dilinin güvenliği analizi: akıllı sözleşmeler dilindeki devrimci değişimler
Giriş
Move dili, MoveVM'yi gerçekleştiren blockchain ortamında çalışabilen akıllı sözleşmeler dilidir. Tasarımı, blockchain ve akıllı sözleşmelerin birçok güvenlik sorununu göz önünde bulundurmuş ve Rust dilinin bazı güvenlik tasarım ilkelerinden yararlanmıştır. Güvenliği ana özellik olarak öne çıkan yeni nesil akıllı sözleşmeler dilinden biri olan Move'un güvenliği nasıldır? Dil düzeyinde veya ilgili mekanizmalarla EVM, WASM gibi sözleşme sanal makinelerinin yaygın güvenlik tehditlerinden kaçınabilir mi? Move'un kendine özgü güvenlik sorunları var mı?
Bu makale, Move dilinin güvenlik sorunlarını dil özellikleri, çalışma mekanizması ve doğrulama araçları açısından inceleyecektir.
1. Move dilinin güvenlik özellikleri
Mevcut birçok programlama dilinden farklı olarak, Move dili hem güvenilmeyen kodlarla güvenli etkileşimi desteklemek hem de statik doğrulamayı sağlamak için tasarlanmıştır. Move, esneklik düşüncesine dayanan doğrusal olmayan mantığı bir kenara bırakmıştır; dinamik dağıtım ve özyinelemeli dış çağrıları desteklememekte, bunun yerine genel türler, küresel depolama, kaynaklar gibi kavramları alternatif programlama modelleri oluşturmak için kullanmaktadır. Örneğin, Move, yeniden giriş (reentrancy) açıklarına yol açabilecek dinamik yönlendirme ve özyinelemeli çağrı özelliklerini atlamaktadır.
Move'un ana güvenlik özellikleri şunlardır:
Modül: Her Move modülü, bir dizi yapı türü ve süreç tanımından oluşur. Modüller, tür tanımlarını içe aktarabilir ve diğer modüllerde tanımlanan süreçleri çağırabilir.
Yapı: Kaynak türü olarak tanımlanabilir, kalıcı küresel anahtar/değer deposunda depolanabilir.
Süreç: Başlatma, güvenli süreç ve güvensiz süreç tanımlandı.
Küresel Depolama: Move programının kalıcı verileri depolamasına izin verir, bu veriler yalnızca onu sahip olan modül tarafından programatik olarak okunabilir ve yazılabilir.
Değişmezlik kontrolü: Sistemdeki kaynakların bütünlüğünü garanti eden, statik kontrolü destekleyen değişmezlik.
Bayt kodu doğrulayıcı: Bayt kodu seviyesinde tür sistemini zorlar, kötü niyetli istemci modüllerinin yasadışı işlemlerini engeller.
Move, derleme zamanında kod güvenliğinin çift korumasını, sabit değişken kontrolü ve bayt kodu doğrulayıcı iki mekanizma ile sağlamıştır.
2. Move'un çalışma mekanizması
Move programı sanal makinede çalışır, çalışma sırasında sistem belleğine erişemez. Bu, Move'un güvensiz ortamlarda güvenli bir şekilde çalışmasını sağlar, bozulma veya kötüye kullanım riski olmadan.
Move programı yığın üzerinde çalıştırılır, küresel depolama iki kısma ayrılmıştır: bellek ( yığın ) ve küresel değişkenler ( yığın ). Bellek, birinci derece depolamadır ve birimlerinin bellek birimlerine işaret eden işaretçileri depolaması mümkün değildir. Küresel değişkenler, bellek birimlerine işaret eden işaretçileri depolamak için kullanılır, ancak dizinleme yöntemi bellekten farklıdır.
Move'nin bytecode komutları yığın tabanlı yorumlayıcıda yürütülür. Yığın tabanlı sanal makine, uygulanması ve kontrol edilmesi kolaydır, donanım ortamı için daha az gereksinim duyar, bu nedenle blok zinciri sahnelerine uygundur. Kayıt tabanlı yorumlayıcıya kıyasla, yığın tabanlı yorumlayıcıda değişkenler arasında kopyalama ve taşıma işlemleri daha kolay kontrol edilebilir ve tespit edilebilir.
Move programının çalışma durumu ⟨C, M, G, S⟩ dörtlü kümesini içerir; bunlar çağrı yığını (C), bellek (M), global değişkenler (G) ve operatörler (S)'dir. Yığın ayrıca fonksiyon gövdesini içeren talimatları çözmek için fonksiyon tablosunu da korur.
MoveVM, veri depolamayı ve çağrı yığınını ( işlem mantığı ) depolamadan ayırır, bu da EVM ile en büyük farktır. MoveVM'de, kullanıcı durumu ( hesap adresi altındaki kaynaklar ) bağımsız olarak depolanır, program çağrıları yetki ve kaynakla ilgili zorunlu kurallara uygun olmalıdır. Bu tasarım belirli bir esneklikten ödün vermektedir, ancak güvenlik ve yürütme verimliliği ( açısından eşzamanlı yürütmeyi ) sağlama konusunda büyük bir iyileşme elde etmeye yardımcı olur.
3. Taşıma Prover
Move Prover, akıl yürütmeye dayalı bir biçimsel doğrulama aracıdır. Program davranışını biçimsel bir dil ile tanımlar ve programın beklentilere uygun olup olmadığını doğrulamak için akıl yürütme algoritmaları kullanır. Geliştiricilere akıllı sözleşmelerin doğruluğunu sağlamada yardımcı olur, işlem risklerini azaltır.
Move Prover, bir çıkarım doğrulama algoritması kullanarak programın beklenenle uyumlu olup olmadığını doğrular. Bu, bilinen bilgilere dayanarak program davranışını çıkarım yapabilmesi anlamına gelir ve beklenen davranışla eşleştiğinden emin olur. Bu, programın doğruluğunu sağlamaya yardımcı olur ve manuel test yükünü azaltır.
Move Prover'ın iş akışı aşağıdaki gibidir:
Move, Move Spesifikasyon Dili kullanarak sistemin standartlarını tanımlar. Bu, üretimi etkilemeden programın doğruluk davranışını statik olarak tanımlamayı destekleyen Move dilinin bir alt kümesidir. İş kodunu ve biçimsel doğrulama kodunu ayıran özel bir düzenleme dosyası olarak bağımsız bir şekilde yazılabilir.
Move Prover, geliştiricilerin akıllı sözleşmelerin doğruluğunu sağlamalarına yardımcı olan faydalı bir araçtır. Program davranışını tanımlamak için biçimsel bir dil kullanır ve programın beklenildiği gibi olup olmadığını doğrulamak için akıl yürütme algoritmaları kullanır. Bu, işlem risklerini azaltmaya yardımcı olur ve geliştiricilerin akıllı sözleşmeleri üretim ortamına daha güvenle dağıtabilmelerini sağlar.
4. Özet
Move dili, güvenlik tasarımı açısından son derece başarılıdır, dil özellikleri, sanal makine yürütmesi ve güvenlik araçları açısından kapsamlı bir değerlendirme sunmaktadır. Dil özellikleri, bazı esnekliklerden ödün vermekte, zorunlu tür kontrolü ve lineer mantık ile derleme kontrolü ve biçimsel doğrulamanın otomasyonu ile güvenli bir şekilde doğrulanabilirliği kolaylaştırmaktadır. MoveVM tasarımı, durumu mantıktan ayırarak, blok zincirindeki varlık güvenliği yönetimi ihtiyaçlarına daha uygun hale gelmektedir.
Dil açısından, Move EVM'nin yaygın reentrancy, taşma, Call/DeleGateCall enjeksiyonu gibi açıklarını etkili bir şekilde önleyebilir. Ancak yetkilendirme, kod mantığı, büyük sayı yapısı taşmaları gibi sorunlar geliştiricilerin dikkatine ihtiyaç duymaktadır. Move Prover genel anlamda bir ihmal durumunda etkili olamayabilir.
Move dilinin güvenlik açısından programcılar için birçok şeyi düşündüğü doğru, ancak tamamen güvenli bir dil ve program yoktur. Move akıllı sözleşme geliştiricilerine üçüncü taraf güvenlik şirketleri tarafından denetim hizmeti kullanmalarını ve spesifikasyon kısmındaki kod yazım ve doğrulama işlemlerini üçüncü taraf güvenlik şirketlerine devretmelerini öneriyoruz.