Solidity derleyici güvenlik açığı analizi: Göz ardı edilemeyecek akıllı sözleşmeler tehlikesi

robot
Abstract generation in progress

Solidity Derleyici Açığı Analizi ve Önlemler

Derleyici, modern bilgisayar sistemlerinin temel bileşenlerinden biridir ve işlevi, yüksek seviyeli programlama dili kaynak kodunu bilgisayarın çalıştırabileceği talimat koduna dönüştürmektir. Geliştiriciler ve güvenlik uzmanları genellikle uygulama kodunun güvenliğine odaklansalar da, derleyici kendisi bir bilgisayar programı olarak güvenlik açıklarına sahip olabilir ve bazı durumlarda ciddi güvenlik riskleri doğurabilir.

Örneğin, bir tarayıcı JavaScript kodunu derleyip çalıştırırken, analiz motorundaki bir güvenlik açığı nedeniyle uzaktan kod yürütme gerçekleşebilir ve bu da saldırganların mağdurun tarayıcısı veya hatta işletim sistemi üzerinde kontrol elde etmesine neden olabilir. Ayrıca, araştırmalar C++ derleyicilerindeki hataların da uzaktan kod yürütme gibi ciddi sonuçlara yol açabileceğini göstermektedir.

Solidity derleyicisinde de güvenlik açıkları bulunmaktadır. Geliştirme ekibinin güvenlik uyarılarına göre, birden fazla sürümde Solidity derleyicisinde güvenlik sorunları tespit edilmiştir.

Solidity Derleyici Açıkları Analizi ve Önlem Alma

Solidity derleyicisinin görevi, akıllı sözleşme kodunu Ethereum Sanal Makinesi (EVM) talimat koduna dönüştürmektir. Solidity derleyici açıklarını EVM'nin kendi açıklarından ayırmak gerekir. EVM açıkları, sanal makinenin talimatları yürütmesi sırasında oluşan güvenlik sorunlarıdır ve tüm Ethereum ağını etkileyebilir. Öte yandan, Solidity derleyici açıkları, Solidity'nin EVM koduna dönüştürülmesi sırasında meydana gelen sorunlardır; bunlar doğrudan Ethereum ağını etkilemez, ancak üretilen EVM kodunun geliştiricinin beklediği ile uyuşmamasına yol açabilir.

Akıllı sözleşmeler genellikle kullanıcı kripto para varlıklarını içerdiğinden, derleyici kaynaklı herhangi bir hata ciddi sonuçlara yol açabilir. Sözleşme kaynak kodunu denetleyerek, derleyici hatalarını tespit etmek zordur; belirli bir sürüm ve kod modeli ile analiz yapılması gerekir.

Aşağıda birkaç gerçek vaka ile, Solidity derleyici açıklarının belirli biçimlerini, nedenlerini ve zararlarını göstermektedir.

SOL-2016-9 YüksekDüzenByteTemizlemeDeposu

Bu güvenlik açığı daha eski Solidity derleyici sürümlerinde bulunmaktadır (>=0.1.6 <0.4.4).

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

katılık contract C { uint32 a = 0x1234; uint32 b = 0; function f() public { a += 1; } function run() public view returns (uint) { return b; } }

Değişken b değiştirilmeden, run() fonksiyonu varsayılan değer 0'ı döndürmelidir. Ancak, açık sürüm derleyicisi tarafından üretilen kodda, run() 1 döndürecektir.

Bu, EVM'nin 32 bayt boyutunda yığın öğeleri kullanmasından ve Solidity'nin uint32 gibi 32 baytın altındaki türleri desteklemesinden kaynaklanmaktadır. Derleyici, veri doğruluğunu sağlamak için yüksek bitleri temizleme işlemi yapmalıdır. Toplama taşması durumunda, derleyici yüksek bitleri düzgün bir şekilde temizleyemediği için taşan 1 bit storage'a yazılır ve b değişkenini üzer.

SOL-2022-4 InlineAssemblyMemoryYanEtkileri

Bu güvenlik açığı >=0.8.13 <0.8.15 sürümündeki derleyicilerde bulunmaktadır.

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

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

Derleyici, optimizasyon sürecinde kontrol akışını ve veri akışını analiz ederek kod boyutunu küçültür ve gaz tüketimini optimize eder. Ancak bu tür bir optimizasyon hatalara yol açabilir.

Bu örnekte, derleyici ilk assembly bloğundaki bellek 0'a yazmayı gereksiz olarak düşündü ve bunu kaldırdı, bu da f() fonksiyonunun doğru olan 0x42 yerine 0 döndürmesine neden oldu.

SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup

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

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

katılık kontrat C { function f(string[1] calldata a) public pure returns (string memory) { return abi.decode(abi.encode(a), (string[1]))[0]; } }

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

Bu, Solidity'nin calldata türündeki diziler üzerinde abi.encode işlemi yaparken bazı verileri yanlışlıkla temizlemesi ve bunun da yan verilerin değiştirilmesine yol açması nedeniyle, kodlama ve kod çözme sonrası verilerin tutarsız olmasına neden olmaktadır.

Dikkate değer bir nokta, external call ve emit event işlemlerinin implicit olarak abi.encode gerçekleştirmesidir, bu nedenle bu tür bir açığın ortaya çıkma olasılığı oldukça yüksektir.

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

Güvenlik Önerileri

Geliştiriciler için:

  • Daha yeni bir Solidity derleyici sürümü kullanmak, bilinen güvenlik sorunlarının genellikle daha az olmasını sağlar.
  • Birim test senaryolarını geliştirmek, kod kapsama oranını artırmak, derleyicinin neden olduğu sorunları keşfetmeye yardımcı olur.
  • İç içe montaj, karmaşık abi kodlama ve kod çözme gibi işlemlerden kaçının, yeni özellikleri ve deneysel işlevleri körü körüne kullanmayın.

Güvenlik personeline:

  • Denetim sırasında derleyicinin getirebileceği riskleri göz ardı etmeyin, bu SWC-102 kontrol maddesine karşılık gelir.
  • SDL sürecinde, derleyici sürümünü yükseltmeyi teşvik edin, otomatik kontrol getirmeyi düşünün.
  • Derleyici açıklarının gerçek etkisini değerlendirin, aşırı panik yapmanıza gerek yok.

Bazı pratik kaynaklar:

  • Solidity resmi güvenlik uyarı blogu
  • Solidity deposundaki hata listesi
  • Tüm sürümlerin derleyici hata listesi
  • Etherscan sözleşme sayfasındaki derleyici açığı uyarısı

Solidity derleyici açığı analizi ve önlemleri

Sonuç olarak, Solidity derleyici hataları akıllı sözleşmelerin gerçek davranışının beklentilerle uyuşmamasına neden olabilir, bu nedenle geliştiricilerin ve güvenlik uzmanlarının bu konuda dikkatli olmaları ve riskleri azaltmak için gerekli önlemleri almaları gerekmektedir.

ETH-3.3%
SOL-4.95%
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
  • 5
  • Repost
  • Share
Comment
0/400
ColdWalletGuardianvip
· 08-06 10:09
Hala eski derleyiciyi kullanmaya cesaret eden demir beyinler
View OriginalReply0
LayerZeroHerovip
· 08-06 02:28
Derleyici de pek stabil değil.
View OriginalReply0
RektRecordervip
· 08-03 12:34
Bu kadar tehlikeli, absürt fam
View OriginalReply0
BearMarketGardenervip
· 08-03 12:30
Derleyici de birçok hataya sahip, bir uyku süresinde varlıklar kayboldu.
View OriginalReply0
SnapshotBotvip
· 08-03 12:27
Derleyici yine sorun çıkardı, kaçtım kaçtım.
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)