Solidity Derleyici Açığı Analizi ve Güvenlik Önleme Stratejileri

robot
Abstract generation in progress

Solidity Derleyici Açıkları Analizi ve Müdahale Stratejileri

Derleyici, modern bilgisayar sistemlerinin temel bileşenlerinden biridir. Bu, yüksek seviyeli programlama dillerini bilgisayarın çalıştırabileceği talimatlara dönüştüren bir programdır. Geliştiriciler ve güvenlik uzmanları genellikle uygulama kodunun güvenliğine odaklansa da, derleyicinin kendisinin güvenliği de bir o kadar önemlidir.

Derleyiciler, bilgisayar programları olarak güvenlik açıklarına sahip olabilir ve bazı durumlarda ciddi güvenlik riskleri doğurabilir. Örneğin, tarayıcılar JavaScript kodunu işlerken ve yürütürken, JavaScript motorundaki bir açığın, kullanıcıların kötü niyetli web sayfalarına erişmesi durumunda saldırıya uğramasına neden olabilmektedir. Bu durum, nihayetinde saldırganların mağdurun tarayıcısını veya hatta işletim sistemini kontrol etmesine yol açabilir.

Solidity derleyicisi de istisna değildir. Solidity geliştirme ekibinin güvenlik uyarılarına göre, birden fazla Solidity derleyici versiyonunda güvenlik açıkları bulunmaktadır.

Solidity Derleyici Açıkları Analizi ve Önlemleri

Solidity derleyici açığı

Solidity derleyicisinin işlevi, akıllı sözleşme kodunu Ethereum sanal makinesi (EVM) talimat koduna dönüştürmektir. Bu EVM talimatları, işlemler aracılığıyla Ethereum'a yüklenir ve nihayetinde EVM tarafından yürütülür.

Solidity derleyici açıklarını ve EVM'nin kendisine ait açıklarını ayırt etmek gerekir. EVM açıkları, sanal makinenin talimatları yürütmesi sırasında meydana gelen güvenlik açıklarıdır ve bu, Ethereum ağını etkileyebilir. Solidity derleyici açıkları ise, Solidity'nin EVM koduna dönüştürülmesi sırasında ortaya çıkan sorunlardır.

Solidity derleyici açıkları, Ethereum ağına doğrudan etki etmez, ancak üretilen EVM kodunun geliştiricilerin beklentileriyle uyuşmamasına neden olabilir. Akıllı sözleşmeler genellikle kripto para varlıklarını içerdiğinden, derleyiciden kaynaklanan herhangi bir hata, kullanıcı varlıklarının kaybına yol açabilir ve bu da ciddi sonuçlar doğurabilir.

Sadece sözleşme kaynak kodunu denetlemek, derleyici açıklarını bulmayı zorlaştırır. Belirli bir derleyici sürümü ve kod modeli ile analiz yapmak gerekir, böylece sözleşmenin derleyici açıklarından etkilenip etkilenmediğini belirleyebilirsiniz.

Solidity derleyici güvenlik açığı örneği

Aşağıda, belirli biçimleri, nedenleri ve zararları gösteren birkaç gerçek Solidity derleyici açığı örneği bulunmaktadır.

SOL-2016-9 YüksekDüzenBaytTemizlemeDepolama

Bu açık, daha eski versiyonlarındaki Solidity derleyicisinde (>=0.1.6 <0.4.4) bulunmaktadir.

Aşağıdaki kodu dikkate al:

katılık sözleşme C { uint32 a = 0x12345678; uint32 b = 0; function run() returns (uint256) { a = a + 1; return b; } }

storage değişkeni b değiştirilmedi, run() fonksiyonu varsayılan değer 0'ı döndürmelidir. Ancak hatalı bir derleyici versiyonunda, run() 1 döndürecektir.

Bu beklenmedik durum, eğer b değişkeni yetkilendirme veya varlık muhasebesi gibi amaçlar için kullanılıyorsa, ciddi sonuçlara yol açabilir.

Bu fenomenin nedeni, EVM'nin 32 bayt boyutunda yığın elemanları ve depolama alanları kullanması, ancak Solidity'nin uint32 gibi daha küçük veri türlerini desteklemesidir. Derleyici bu türleri işlerken yüksek bitleri temizlemesi gerekir, ancak tam sayı taşması sırasında bunu doğru bir şekilde ele almadığı için yüksek biti 1 depolama alanına yazılmış ve b değişkeninin üzerine yazılmıştır.

SOL-2022-4 InlineAssemblyMemorySideEffects

Bu açık, >=0.8.13 <0.8.15 sürümlerindeki derleyicilerde bulunmaktadır.

Aşağıdaki kodu düşünün:

katılık sözleşme C { function f() public pure returns (uint) { derleme { mstore(0, 0x42) } uint x; derleme { x := mload(0) } return x; } }

Bu açık, derleme optimizasyonundan kaynaklanmaktadır. Derleyici, görünüşte gereksiz bellek yazma işlemlerini kaldırmaya çalışırken, yanlış bir şekilde assembly bloğunun üzerinden geçerek analiz yapmıştır. Açık olan versiyonda, f() fonksiyonu 0 döndürecek, doğru olan 0x42 yerine.

SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup

Bu güvenlik açığı >= 0.5.8 < 0.8.16 sürümlerindeki derleyicileri etkilemektedir.

Aşağıdaki kodu dikkate al:

katılık sözleşme C { function f(string[1] calldata a) external pure returns (string memory) { return abi.decode(abi.encode(a), (string[1]))[0]; } }

Normal şartlarda, bu kod a değişkeninin değerini "aaaa" olarak döndürmelidir. Ancak, hatalı sürümde boş bir dize "" döndürecektir.

Bu, Solidity'nin calldata türündeki diziler üzerinde abi.encode işlemi yaparken bazı verileri yanlışlıkla temizlemesinden kaynaklanıyor; bu da bitişik verilerin değiştirilmesine ve kodlama ile çözümlenen verilerin tutarsız olmasına yol açıyor.

Dikkate değer bir husus, Solidity'nin external call ve emit event işlemleri sırasında abi.encode'yi örtük olarak gerçekleştirmesidir; bu nedenle bu tür açıkların etkisi beklenenden daha geniş olabilir.

Solidity Derleyici Açığı Analizi ve Önleme Yöntemleri

Güvenlik Önerileri

Solidity derleyici açıklarının tehdit modeli analizi ve geçmiş açıkların derlenmesine dayanarak, geliştiricilere ve güvenlik personeline aşağıdaki önerilerde bulunulmuştur:

Geliştiricilere:

  1. Daha yeni bir Solidity derleyici sürümü kullanın. Yeni sürümler genellikle bilinen güvenlik sorunlarını düzeltir.

  2. Birim testlerini geliştirin. Çoğu derleyici düzeyindeki hata, kodun çalıştırma sonuçlarının beklenenle uyuşmamasına neden olur; kod kapsamını artırarak bu tür sorunları test aşamasında tespit edebilirsiniz.

  3. Entegre montaj, karmaşık abi kodlama ve kod çözme gibi işlemlerden kaçının. Çoğu tarihsel güvenlik açığı bu karmaşık özelliklerle ilgilidir.

Güvenlik Personeline:

  1. Denetim sırasında, derleyicinin potansiyel güvenlik risklerini göz ardı etmeyin. İlgili Smart Contract Zayıflık Sınıflandırması(SWC) kontrol maddesi SWC-102'dir.

  2. İçerideki SDL sürecinde, geliştirme ekibini Solidity derleyici sürümünü güncellemeye teşvik edin, CI/CD'ye otomatik kontrol eklemeyi düşünün.

  3. Derleyici açıkları konusunda aşırı endişelenmeye gerek yoktur. Çoğu açık sadece belirli kod kalıpları altında tetiklenir, gerçek etkileri değerlendirmek için duruma göre bakmak gerekir.

Pratik Kaynaklar:

  • Solidity ekibi tarafından yayımlanan güvenlik uyarısı:
  • Solidity resmi hata listesi:
  • Tüm sürümlerin derleyici hata listesi:
  • Etherscan kontrat kodu sayfasının sağ üst köşesindeki uyarı simgesi, mevcut sürüm derleyicisinde var olan güvenlik açıklarını gösterebilir.

Özet

Bu makale, Solidity derleyici açıklarının kavramını tanıtmakta, bunların gerçek Ethereum geliştirmeleri sırasında neden olabileceği güvenlik risklerini analiz etmekte ve geliştiriciler ile güvenlik uzmanları için pratik güvenlik önerileri sunmaktadır. Derleyici açıklarının özelliklerini ve etkilerini anlayarak, akıllı sözleşmelerin güvenliğini daha iyi koruyabiliriz.

Solidity derleyici güvenlik açığı analizi ve önleme yöntemleri

ETH2.28%
SOL-0.55%
View Original
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.
  • Reward
  • 3
  • Share
Comment
0/400
DataBartendervip
· 17h ago
Güvenliğin bir sonu yok, geçici yamanın dayanma gücü yok.
View OriginalReply0
Ser_This_Is_A_Casinovip
· 17h ago
Açıklar, cüzdanın uçup gitmesinin sebebidir.
View OriginalReply0
Anon4461vip
· 17h ago
Bu kodu kimseyle oynamaya cesaret edemez.
View OriginalReply0
Trade Crypto Anywhere Anytime
qrCode
Scan to download Gate app
Community
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)