Solidity Derleyici Açığı Analizi ve Müdahale Stratejileri
Derleyici, modern bilgisayar sistemlerinin temel bileşenlerinden biridir ve ana işlevi, yüksek seviyeli programlama dili kaynak kodunu bilgisayar tarafından yürütülebilir talimat koduna dönüştürmektir.
Çoğu geliştirici ve güvenlik uzmanı, uygulama kodunun güvenliğine daha fazla odaklansa da, derleyicinin kendisinin güvenliği de göz ardı edilemez. Bir bilgisayar programı olarak, derleyicinin de güvenlik açıkları olabilir ve bazı durumlarda ciddi güvenlik riskleri doğurabilir. Örneğin, bir tarayıcı JavaScript ön uç kodunu derleyip çalıştırmadan önce, JavaScript ayrıştırma motorundaki bir güvenlik açığı nedeniyle kullanıcılar, kötü niyetli web sitelerini ziyaret ettiklerinde uzak kod yürütme saldırısına maruz kalabilir ve bu durum, saldırganın kurbanın tarayıcısını veya hatta işletim sistemini kontrol etmesine yol açabilir.
Solidity derleyicisi de bir istisna değil, birden fazla versiyonundaki Solidity derleyicisinde güvenlik açıkları bulunmaktadır. Solidity derleyicisinin görevi, akıllı sözleşme kodunu Ethereum sanal makinesi (EVM) talimat koduna dönüştürmektir; bu talimatlar nihayetinde EVM'de çalıştırılacaktır.
Dikkat edilmesi gereken husus, Solidity derleyici açıkları ile EVM'nin kendi açıkları arasında bir fark olduğudur. EVM açıkları, sanal makinenin komutları yürütmesi sırasında ortaya çıkan güvenlik sorunlarını ifade eder ve bu durum Ethereum ağını etkileyebilir. Öte yandan, Solidity derleyici açıkları, Solidity kodunun EVM koduna dönüştürülmesi sırasında ortaya çıkan sorunlardır; doğrudan Ethereum ağını etkilemez, ancak üretilen EVM kodunun geliştiricinin beklediği gibi olmamasına yol açabilir.
Solidity derleyicisi açıklarının bir tehlikesi, üretilen EVM kodunun akıllı sözleşme geliştiricilerinin beklediğiyle tutarsız olabilmesidir. Ethereum üzerindeki 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 sonuçları ciddi olabilir.
Geliştiriciler ve sözleşme denetçileri genellikle sözleşme kodu mantığına ve Solidity düzeyindeki güvenlik sorunlarına daha fazla odaklanırken, derleyici açıklarını göz ardı ederler. Sadece sözleşme kaynak kodunu denetlemek, derleyici açıklarını tespit etmekte zorlanır; belirli bir derleyici sürümü ve belirli kod desenleri ile analiz yapılması gerekir.
Aşağıda bazı gerçek Solidity derleyici açıkları örnekleri bulunmaktadır:
SOL-2016-9 YüksekDüzenBaytTemizDepolama
Bu güvenlik açığı, erken dönem Solidity derleyici sürümleri (>=0.1.6 <0.4.4)'de mevcuttur. Bazı durumlarda, derleyici yüksek bitleri doğru bir şekilde temizlememekte, bu da tam sayı taşması sonrası yüksek bitin storage'a yazılmasına ve bitişik değişkenlerin değerlerini geçersiz kılmasına neden olmaktadır. Yetki doğrulama veya varlık muhasebesi ile ilgili olduğunda, bu beklenmedik davranış ciddi sonuçlar doğurabilir.
SOL-2022-4 InlineAssemblyMemorySideEffects
Bu güvenlik açığı, 0.8.13 ile 0.8.15 versiyonları arasındaki derleyicide bulunmaktadır. Derleyici optimizasyon stratejileri nedeniyle, bazı durumlarda bellek yazma talimatlarını yanlış bir şekilde kaldırarak, fonksiyonun dönüş değerinin beklenenle uyuşmamasına neden olmaktadır. Bu optimizasyona bağlı hata, basit bir kod incelemesi ile tespit edilmesi oldukça zor olan bir durumdur.
Bu açık, 0.5.8 ile 0.8.16 versiyonları arasındaki derleyicileri etkilemektedir. calldata türündeki bir dizi üzerinde abi.encode işlemi yapıldığında, derleyici bazı verileri yanlışlıkla temizleyerek komşu verilerin değiştirilmesine neden olmuş, bu da kodlama ve çözme sonrasında verilerin tutarsız olmasına yol açmıştır. Bu sorun, external call ve emit event işlemleri sırasında da ortaya çıkabilir, çünkü bu işlemler dolaylı olarak abi.encode işlemini gerçekleştirir.
Solidity derleyici açıklarının analizi temelinde, aşağıdaki güvenlik önerileri sunulmuştur:
Geliştiricilere:
Daha yeni bir Solidity derleyici sürümü kullanın, bilinen güvenlik sorunları genellikle daha azdır.
Birim test senaryolarını geliştirmek, kod kapsamını artırmak, derleyiciden kaynaklanan sorunları keşfetmeye yardımcı olur.
Inline assembly, karma abi kod çözümü gibi karmaşık işlemlerden kaçının, yeni özellikler ve deneysel işlevleri dikkatli kullanın.
Güvenlik personeline:
Denetim sırasında derleyicinin getirebileceği güvenlik risklerini dikkate alın.
SDL sürecinde derleyici sürümünün güncellenmesini teşvik etmek, CI/CD'de sürüm otomatik kontrolünü tanıtmayı düşünmek
Projenin özel durumuna göre derleyici güvenlik açıklarının gerçek etkisini değerlendirin, gereksiz endişelerden kaçının.
Bazı pratik kaynaklar:
Solidity resmi olarak güvenlik uyarısı yayınladı
Solidity deposunda düzenli olarak güncellenen hata listesi
Farklı sürümlere ait derleyici hata listesi, otomatik kontrol için kullanılabilir
Etherscan sözleşme kodu sayfasındaki derleyici açığı uyarısı
Sonuç olarak, Solidity derleyici açıkları nadir görülse de, ciddi sonuçlar doğurabilir. Geliştiricilerin ve güvenlik uzmanlarının dikkatli olması ve riskleri azaltmak için uygun önlemler alması gerekir.
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.
20 Likes
Reward
20
5
Share
Comment
0/400
AltcoinAnalyst
· 07-21 10:23
Dikkat et, 0.8.x sürümünün eski sorunları var.
View OriginalReply0
MemecoinResearcher
· 07-21 10:12
rekt olmak üzere bekliyor fr analizime dayanarak (p\u003c0.01)
View OriginalReply0
just_another_wallet
· 07-21 10:12
Genç geliştiriciler hemen bir bakın!
View OriginalReply0
FarmHopper
· 07-21 10:11
Vay canına, bu açık korkutucu görünüyor!
View OriginalReply0
YieldWhisperer
· 07-21 10:10
2021'den beri bu aynı derleyici istismar kalıbını gördüm... geliştiriciler asla öğrenmiyor, smh
Solidity Derleyici Açığı Analizi: Güvenlik Tehditleri ve Baş Etme Yöntemleri
Solidity Derleyici Açığı Analizi ve Müdahale Stratejileri
Derleyici, modern bilgisayar sistemlerinin temel bileşenlerinden biridir ve ana işlevi, yüksek seviyeli programlama dili kaynak kodunu bilgisayar tarafından yürütülebilir talimat koduna dönüştürmektir.
Çoğu geliştirici ve güvenlik uzmanı, uygulama kodunun güvenliğine daha fazla odaklansa da, derleyicinin kendisinin güvenliği de göz ardı edilemez. Bir bilgisayar programı olarak, derleyicinin de güvenlik açıkları olabilir ve bazı durumlarda ciddi güvenlik riskleri doğurabilir. Örneğin, bir tarayıcı JavaScript ön uç kodunu derleyip çalıştırmadan önce, JavaScript ayrıştırma motorundaki bir güvenlik açığı nedeniyle kullanıcılar, kötü niyetli web sitelerini ziyaret ettiklerinde uzak kod yürütme saldırısına maruz kalabilir ve bu durum, saldırganın kurbanın tarayıcısını veya hatta işletim sistemini kontrol etmesine yol açabilir.
Solidity derleyicisi de bir istisna değil, birden fazla versiyonundaki Solidity derleyicisinde güvenlik açıkları bulunmaktadır. Solidity derleyicisinin görevi, akıllı sözleşme kodunu Ethereum sanal makinesi (EVM) talimat koduna dönüştürmektir; bu talimatlar nihayetinde EVM'de çalıştırılacaktır.
Dikkat edilmesi gereken husus, Solidity derleyici açıkları ile EVM'nin kendi açıkları arasında bir fark olduğudur. EVM açıkları, sanal makinenin komutları yürütmesi sırasında ortaya çıkan güvenlik sorunlarını ifade eder ve bu durum Ethereum ağını etkileyebilir. Öte yandan, Solidity derleyici açıkları, Solidity kodunun EVM koduna dönüştürülmesi sırasında ortaya çıkan sorunlardır; doğrudan Ethereum ağını etkilemez, ancak üretilen EVM kodunun geliştiricinin beklediği gibi olmamasına yol açabilir.
Solidity derleyicisi açıklarının bir tehlikesi, üretilen EVM kodunun akıllı sözleşme geliştiricilerinin beklediğiyle tutarsız olabilmesidir. Ethereum üzerindeki 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 sonuçları ciddi olabilir.
Geliştiriciler ve sözleşme denetçileri genellikle sözleşme kodu mantığına ve Solidity düzeyindeki güvenlik sorunlarına daha fazla odaklanırken, derleyici açıklarını göz ardı ederler. Sadece sözleşme kaynak kodunu denetlemek, derleyici açıklarını tespit etmekte zorlanır; belirli bir derleyici sürümü ve belirli kod desenleri ile analiz yapılması gerekir.
Aşağıda bazı gerçek Solidity derleyici açıkları örnekleri bulunmaktadır:
Bu güvenlik açığı, erken dönem Solidity derleyici sürümleri (>=0.1.6 <0.4.4)'de mevcuttur. Bazı durumlarda, derleyici yüksek bitleri doğru bir şekilde temizlememekte, bu da tam sayı taşması sonrası yüksek bitin storage'a yazılmasına ve bitişik değişkenlerin değerlerini geçersiz kılmasına neden olmaktadır. Yetki doğrulama veya varlık muhasebesi ile ilgili olduğunda, bu beklenmedik davranış ciddi sonuçlar doğurabilir.
Bu güvenlik açığı, 0.8.13 ile 0.8.15 versiyonları arasındaki derleyicide bulunmaktadır. Derleyici optimizasyon stratejileri nedeniyle, bazı durumlarda bellek yazma talimatlarını yanlış bir şekilde kaldırarak, fonksiyonun dönüş değerinin beklenenle uyuşmamasına neden olmaktadır. Bu optimizasyona bağlı hata, basit bir kod incelemesi ile tespit edilmesi oldukça zor olan bir durumdur.
Bu açık, 0.5.8 ile 0.8.16 versiyonları arasındaki derleyicileri etkilemektedir. calldata türündeki bir dizi üzerinde abi.encode işlemi yapıldığında, derleyici bazı verileri yanlışlıkla temizleyerek komşu verilerin değiştirilmesine neden olmuş, bu da kodlama ve çözme sonrasında verilerin tutarsız olmasına yol açmıştır. Bu sorun, external call ve emit event işlemleri sırasında da ortaya çıkabilir, çünkü bu işlemler dolaylı olarak abi.encode işlemini gerçekleştirir.
Solidity derleyici açıklarının analizi temelinde, aşağıdaki güvenlik önerileri sunulmuştur:
Geliştiricilere:
Güvenlik personeline:
Bazı pratik kaynaklar:
Sonuç olarak, Solidity derleyici açıkları nadir görülse de, ciddi sonuçlar doğurabilir. Geliştiricilerin ve güvenlik uzmanlarının dikkatli olması ve riskleri azaltmak için uygun önlemler alması gerekir.