Solidity derleyici açıkları analizi ve akıllı sözleşmelerin güvenliğini sağlamak için pratik stratejiler

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

Derleyici, modern bilgisayar sistemlerinin temel bileşenlerinden biridir; görevi yüksek seviyeli programlama dili kaynak kodunu bilgisayarın çalıştırabileceği talimat koduna dönüştürmektir. Çoğu geliştirici ve güvenlik uzmanı genellikle uygulama kodunun güvenliğine odaklanırken, genellikle derleyicinin kendisinin güvenliğini göz ardı eder. Aslında, derleyici bir bilgisayar programı olarak, güvenlik açıklarına sahip olabilir ve belirli senaryolar altında ciddi güvenlik riskleri doğurabilir.

Örneğin, bir tarayıcı JavaScript kodunu derleyip çalıştırırken, JavaScript motorundaki bir güvenlik açığı nedeniyle, kullanıcılar kötü niyetli bir web sitesine eriştiklerinde saldırganların bu açığı kullanarak uzaktan kod çalıştırmasına ve nihayetinde kurbanın tarayıcısını hatta işletim sistemini kontrol etmesine neden olabilir. Başka bir çalışma da, C++ derleyicisindeki bir hatanın uzaktan kod çalıştırma gibi ciddi sonuçlara yol açabileceğini göstermiştir.

Solidity derleyicisinde de güvenlik açıkları bulunmaktadır. Solidity geliştirme ekibinin güvenlik uyarısına göre, birden fazla versiyonunda güvenlik açıkları mevcuttur. Solidity derleyicisinin işlevi, akıllı sözleşme kodunu Ethereum sanal makinesi (EVM) talimat koduna dönüştürmektir; bu talimatlar nihayetinde Ethereum'a yüklenir ve EVM tarafından yürütülür.

Solidity derleyici hatalarını EVM'in kendine ait hatalarından ayırmak gerekir. EVM hataları, sanal makinenin talimatları yürütmesi sırasında ortaya çıkan güvenlik sorunlarıdır ve bu durum tüm Ethereum ağını etkileyebilir. Öte yandan, Solidity derleyici hataları, Solidity'nin EVM koduna dönüştürülmesi sırasında meydana gelen sorunlardır; bu durum doğrudan Ethereum ağını etkilemez, ancak üretilen EVM kodunun geliştiricinin beklediğiyle uyumsuz olmasına yol açabilir.

Solidity derleyici açıklarının bir tehlikesi, üretilen EVM kodunun akıllı sözleşme geliştiricisinin beklediğiyle uyuşmaması olabilir. Akıllı sözleşmeler genellikle kullanıcıların kripto para varlıklarını içerdiğinden, derleyicinin neden olduğu herhangi bir hata, kullanıcı varlık kaybına yol açabilir ve ciddi sonuçlar doğurabilir.

Geliştiriciler ve denetçiler genellikle sözleşme mantığına ve yaygın güvenlik sorunlarına odaklanırken, derleyici açıkları kod denetimi ile tespit edilmesi zor olabilir. Akıllı sözleşmenin derleyici açıklarından etkilenip etkilenmediğini belirlemek için belirli derleyici sürümleri ve kod kalıplarıyla birlikte analiz yapmak gerekmektedir.

Solidity Derleyici Açığı Analizi ve Önlemleri

Aşağıda birkaç gerçek Solidity derleyici açığı örneği bulunmaktadır:

  1. SOL-2016-9 HighOrderByteCleanStorage

Bu açık, daha eski sürüm Solidity derleyicisinde bulunmaktadır (>=0.1.6 <0.4.4). Aşağıdaki kodu dikkate alın:

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

Teorik olarak b değişkeni değiştirilmemiş olmalı, run() fonksiyonu 0 döndürmelidir. Ancak, açık olan sürümderleyici tarafından üretilen kodda, run() 1 döndürüyor. Bunun nedeni, EVM'nin 32 baytlık boyutta yığın öğeleri kullanması ve Solidity'nin uint32 gibi daha küçük veri türlerini desteklemesidir. Derleyici işlem yaparken yüksek bitleri temizlemesi gerekiyor (clean up), ancak toplama taşması durumunda bunu doğru bir şekilde işleyemedi ve yüksek bitteki 1 b değişkenine yazıldı.

  1. SOL-2022-4 InlineAssemblyMemorySideEffects

Bu güvenlik açığı 0.8.13 ile 0.8.15 versiyonları arasındaki derleyicide bulunmaktadır. Aşağıdaki kodu dikkate alın:

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

Derleyici, optimizasyon amacıyla görünüşte gereksiz bellek yazma işlemlerini kaldırır, ancak yanlışlıkla assembly blokları arasındaki bellek erişimlerini de optimize eder. Bu, f() fonksiyonunun 0 yerine doğru olan 0x42'yi döndürmesine neden olur.

  1. SOL-2022-6 AbiReencodingHeadOverflowWithStaticArrayCleanup

Bu güvenlik açığı 0.5.8 ile 0.8.16 sürümleri arasındaki derleyicileri etkilemektedir. Aşağıdaki kodu dikkate alınız:

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

Normal şartlar altında, bu fonksiyon girilen stringi döndürmelidir. Ancak, açık versiyonda boş bir string döndürmektedir. Bunun nedeni, derleyicinin calldata dizisini abi kodlarken bazı verileri yanlış bir şekilde temizlemesi ve bu nedenle kod çözme sonrası verilerin tutarsızlık göstermesidir.

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

Solidity derleyici açığına karşı, Cobo blok zinciri güvenlik ekibi aşağıdaki önerileri sunmaktadır:

Geliştiricilere:

  1. Daha yeni bir Solidity derleyici sürümü kullanın, bilinen güvenlik sorunları genellikle daha azdır.

  2. Birim test vaka sayısını iyileştirin. Çoğu derleyici düzeyindeki hata, kodun çalışma sonuçlarının beklenenle tutarsız olmasına yol açar, test kapsamını artırarak bu tür sorunların önüne geçilebilir.

  3. İç içe assembly, 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. Çoğu derleyici açığı bu karmaşık işlemlerle ilgilidir.

Güvenlik personeline:

  1. Denetim sırasında derleyicinin oluşturabileceği güvenlik risklerini göz ardı etmeyin. İlgili kontrol öğesi SWC-102: Güncel Olmayan Derleyici Sürümü.

  2. Geliştirme sürecinde, geliştirme ekibini derleyici sürümünü güncellemeye teşvik edin, CI/CD içinde sürüm otomatik kontrolü eklenebilir.

  3. Derleyici açıkları konusunda aşırı endişelenmeye gerek yok. Çoğu açık yalnızca belirli kod desenlerinde tetiklenir, güvenlik etkilerini proje bazında değerlendirmek gerekir.

Bazı pratik kaynaklar:

  • Solidity resmi güvenlik uyarısı:
  • Solidity resmi hata listesi:
  • Her versiyon için derleyici hata listesi:
  • Etherscan Sözleşme sayfasının sağ üst köşesindeki uyarı simgesi, mevcut sürüm derleyicisindeki güvenlik açıklarını bildirebilir.

Solidity Derleyici Açığı Analizi ve Önlemler

Sonuç olarak, geliştiricilerin ve güvenlik uzmanlarının Solidity derleyici açıklarının potansiyel güvenlik risklerine önem vermesi, riskleri azaltmak için uygun önlemler alması ve akıllı sözleşmelerin güvenliğini sağlaması gerekmektedir.

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
  • 6
  • Share
Comment
0/400
MetaverseLandlordvip
· 07-12 19:10
Derleyici ile ilgili bir sorun var.
View OriginalReply0
NFTHoardervip
· 07-12 03:00
Derleyici bile hata verebilir.
View OriginalReply0
0xOverleveragedvip
· 07-10 21:09
Derleyici, atalarımızdır.
View OriginalReply0
TestnetNomadvip
· 07-10 21:08
Derleyici mini ders çok güzel.
View OriginalReply0
ParallelChainMaxivip
· 07-10 21:06
Derleyici güvenliği göz ardı edilemez.
View OriginalReply0
DegenApeSurfervip
· 07-10 20:55
Sözleşme güvenliği gerçekten basit değil.
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)