Back to Blog

EVM Uyumlu Zincirler Güvenlik Testini Geçebiliyor mu?

Code Auditing
January 4, 2024
5 min read

Kasım 2023'te BlockSec CEO'su Profesör Zhou Yajin, DRK Lab tarafından düzenlenen ilk Web3 Akademisyenler Zirvesi'ne davet edildi. Konferans sırasında Profesör Zhou, BlockSec'in EVM (Ethereum Sanal Makinesi) güvenlik açıklarını tespit etme konusundaki çalışmalarını ve başarılarını paylaştı. Ayrıca EVM uyumlu zincirlerin güvenliğini sağlamak amacıyla özel olarak tasarlanmış BlockSec'in otomatik diferansiyel bulanıklık testi aracını tanıttı. Bu makale, konuşmanın içeriğini özetlemektedir.

Giriş

Defillama'nın veri istatistiklerine göre, şu anda 238 adet L1 ve L2 genel zincir bulunmakta olup bunların 144'ü EVM uyumludur. Ancak şu soru akıllara gelmektedir: Bu EVM uyumlu zincirlerin uygulamalarında herhangi bir güvenlik sorunu var mı? Yaptığımız araştırmalar sonucunda yanıt olumludur. Bu endişeye yanıt olarak BlockSec, otomatik bir diferansiyel bulanıklık testi güvenlik aracı geliştirdi. EVM uyumlu zincirlerin ardındaki gerçeği keşfetmek için bize katılın.

Sanal Makinelerdeki Güvenlik Açıkları

Şekil 1: Ethereum Sanal Makinesi (EVM) iş akışı diyagramı
Şekil 1: Ethereum Sanal Makinesi (EVM) iş akışı diyagramı

Ethereum Sanal Makinesi (EVM) örnek alındığında, Sanal ROM, Program Sayacı, Yığın, Bellek ve Dünya Durumu (kalıcı) bileşenlerini içeren yığın tabanlı bir mimari benimsediği görülmektedir.

Bir sanal makine, akıllı sözleşmelerin derlenmiş ikili kodunu yorumlayan ve çalıştıran motor görevi görür. Pek çok blok zinciri platformunun temel bileşeni sanal makinedir ve Ethereum Sanal Makinesi (EVM) bu konuda özellikle öne çıkmaktadır. Bu nedenle sanal makine, akıllı sözleşmelerin yürütülmesinde, işlemlerin işlenmesinde ve blok zincirinin bütünlüğünün sağlanmasında kilit bir rol oynamaktadır.

EVM'nin kendisinin de programcılar tarafından yazılmış bir yazılım programı olduğunu biliyoruz. Peki EVM'nin sorunsuz olduğundan nasıl emin olabiliriz? Sonuçta insanlar tarafından yazılan her kodda hata olabilir.

Üstelik EVM'de bir hata ortaya çıktığında, blok zinciri ekosistemi üzerinde yıkıcı sonuçlar doğuracaktır. Nitekim EVM, geçmişte pek çok ciddi güvenlik açığıyla karşılaşmıştır.

Örneğin 2020 yılında, önceden derlenmiş bir sözleşmeden kaynaklanan bir güvenlik açığı olayı yaşandı (bkz. CVE-2020-26241) [1]. Geth'teki dataCopy önceden derlenmiş sözleşmesi (0x00...04 adresinde) çağrı sırasında sığ kopyalama yaptı; büyük miktarda veri kopyalanırken yalnızca işaretçiler kopyalandı, verinin tamamı kopyalanmadı. Bu durum, kötü amaçlı akıllı sözleşmelerin değiştirilmemesi gereken verileri değiştirmesine olanak tanıyarak farklı sanal makine sürümleri aynı akıllı sözleşmeyi çalıştırdığında veri tutarsızlığına yol açtı. Bir diğer örnek ise 2021 yılında yaşandı; bazı EVM uyumlu zincirler Ethereum ile birlikte güncellenmedi. Geth'in eski sürümlerinde, önceden derlenmiş sözleşme çağrılarındaki giriş ve çıkış verilerinin bellek bölgelerinin örtüştüğü bir güvenlik açığı (CVE-2021-39137) [2] mevcuttu. Saldırganlar bu açıktan yararlandı ve bu durum bir zincir çatallanmasına neden oldu.

BlockSec'in Karşı Önlemleri

EVM'deki güvenlik açıkları zamanında nasıl tespit edilir? Zorluklar nelerdir?

  1. Her şeyden önce, sanal makinenin karmaşık tasarımı nedeniyle, işlevsel mantığını tam anlamıyla kavrayabilen araçlar bulmak güçtür. Her uzmanlık alanı özelleşme gerektirmekte olup pek çok geliştirici, işlevsel mantığını anlamaya ve etkili önlemler almaya yeterli çaba harcayamayabilir.

  2. Ayrıca pek çok L1/L2 yeni genel zinciri, EVM sanal makinesini özelleştirmektedir; bu durum potansiyel olarak yeni güvenlik sorunlarına yol açabilir.

Açıkça görülmektedir ki EVM sanal makinesindeki bu sorunları yalnızca manuel denetimlerle tespit etmek güçtür.

Duruma uyum sağlayarak karşılık verin! Bu zorluklara yanıt olarak BlockSec, sorunları doğrudan ele almak için otomatik bir sistem geliştirdi!

Diferansiyel Bulanıklık Testi

BlockSec'te uzman ekibimiz, diferansiyel bulanıklık testi olarak bilinen akıllı bir yaklaşım benimsedi. Sanal makinenin farklı sürümlerinde aynı test senaryolarını çalıştırarak ve çıktı sonuçlarını karşılaştırarak potansiyel güvenlik açıklarını ve tutarsızlıkları ortaya çıkarabiliyoruz. Bu yöntem, geleneksel test yöntemlerinin gözden kaçırabileceği ince farklılıkları etkili biçimde tespit etmemize ve böylece sistemin genel güvenliğini artırmamıza olanak tanımaktadır.

Şekil 2: Diferansiyel Bulanıklık Testi İş Akışı
Şekil 2: Diferansiyel Bulanıklık Testi İş Akışı

Temel Çalışma Prensibi:

Diferansiyel bulanıklık testi gerçekleştirmek için test senaryosu olarak özdeş girdiler hazırlamamız gerekmektedir. Bu test senaryoları daha sonra diferansiyel bulanıklık testi motoruna beslenir. Aynı test senaryolarının sanal makinenin farklı sürümlerinde yürütülmesinden elde edilen çıktılar karşılaştırılarak olası sorunlar tespit edilebilir.

Spesifik Uygulama Adımları:

Diferansiyel bulanıklık testi için test senaryosunun iki bölümden oluşması gerekir: işlem meta verisi ve ön durum. Peki bu işlemler nasıl oluşturulur? Bu zorluğun üstesinden gelmek için iki yaklaşımımız bulunmaktadır.

  1. Geçmiş işlemleri yeniden kullanma: Blok zincirinde gerçekleşmiş geçmiş işlemleri alabilir ve bunları diferansiyel bulanıklık testi motorunda farklı sanal makine sürümlerinden geçirebiliriz. Ancak yalnızca bu yönteme güvenmek kısıtlamalar doğurur. Geçmiş işlemler genellikle çok "normal" olmakta, oysa güvenlik testleri uç durumları—olağandışı senaryoları—ortaya çıkarmayı gerektirmektedir. Bu nedenle ikinci bir yaklaşım geliştirdik.
  2. Kapsam güdümlü bulanıklık testi: Sıfırdan alışılmadık bayt kodu ve tarihsel olarak görülmemiş işlemler oluşturuyor, ardından işlemleri ve akıllı sözleşme kodunu mutasyona uğratarak sanal makineye besliyoruz. Test senaryolarının geçerliliğini ve kapsamlılığını çeşitli boyutlardan güvence altına alıyoruz.

Bu işlemler oluşturulduktan sonra diferansiyel bulanıklık testi motoruna beslenir ve sonuçlar karşılaştırılır.

Sonuçların karşılaştırılması yalnızca basit bir sayısal karşılaştırma değil, aynı zamanda sanal makinedeki hem kalıcı hem de kalıcı olmayan depolama alanlarındaki veri tutarlılığını kapsamlı biçimde değerlendirmektedir. Bu makale konuyu daha fazla ayrıntılandırmayacaktır.

Örnek Olay İncelemesi

Şekil 3: Aurora VM'deki önceden derlenmiş *ModExp* sözleşme sorununa ilişkin bir örnek
Şekil 3: Aurora VM'deki önceden derlenmiş ModExp sözleşme sorununa ilişkin bir örnek

Diferansiyel bulanıklık testi aracılığıyla Aurora VM'de keşfettiğimiz bir sanal makine güvenlik açığı vakasını paylaşmak istiyorum. Söz konusu durum, ModExp önceden derlenmiş akıllı sözleşmesindeki bir sorunla ilgilidir.

X sayısının y kuvvetinin modüler üstel alımını hesaplarken bu işlemin hesaplama kaynakları gerektirdiğini biliyoruz. Doğru bir uygulamada, gaz hesaplaması iterasyon sayısını dikkate alır; zira modüler üstel alma birden fazla iterasyon içerir. Ancak gaz hesaplamasının sorunla karşılaşabileceği belirli bir senaryo mevcuttur: üs y'nin 0'a eşit olması, yani sıfırıncı kuvvet işlemini ifade etmesi durumu. Bu durumda iterasyon sayısı sıfır olur ve son derece düşük bir gaz değeriyle sonuçlanır. Oysa aslında hesaplama hâlâ kaynak gerektirmektedir.

Sonuç

BlockSec tarafından geliştirilen diferansiyel bulanıklık testi aracı şu anda rbpf, ubpf, Aurora-engine, neon-evm, Moonbeam, revm, EvmOS, fevm ve Polygon-zkevm dahil olmak üzere çeşitli blok zinciri sanal makine ortamlarında çalışmayı desteklemekte olup genişlemeye devam etmektedir.

Bu araç sayesinde 14 yeni güvenlik açığı keşfettik, 2 CVE başvurusu yaptık: CVE-2021–46102 ve CVE-2022–23066, ve 1,3 milyon doların üzerinde hata ödülü kazandık.

Şu anda BlockSec tarafından sunulan kapsamlı EVM zinciri güvenlik çözümü (denetim hizmetleri + diferansiyel bulanıklık testi araçları), EOS ve FileCoin tarafından kabul görüp benimsendi ve bu ekosistemlerin güvenliğine ve sağlıklı gelişimine katkıda bulunacaktır.

Referans

[1] 0x4 ön derlemesindeki sığ kopyalama EVM belleğinin bozulmasına yol açabilir

[2] Veri kopyalama yoluyla RETURNDATA bozulması

BlockSec Hakkında

BlockSec, 2021 yılında küresel alanda tanınmış güvenlik uzmanlarından oluşan bir ekip tarafından kurulmuş öncü bir blok zinciri güvenlik şirketidir. Şirket, kitlesel benimsemeyi kolaylaştırmak amacıyla gelişmekte olan Web3 dünyasının güvenliğini ve kullanılabilirliğini artırmaya kendini adamıştır. Bu doğrultuda BlockSec; akıllı sözleşme ve EVM zinciri güvenlik denetim hizmetleri, güvenlik geliştirme ve tehditleri proaktif olarak engellemeye yönelik Phalcon platformu, fon takibi ve soruşturma için MetaSleuth platformu ve kripto dünyasında verimli gezinmek isteyen web3 geliştiricileri için MetaDock eklentisi sunmaktadır.

Bugüne kadar şirket, MetaMask, Uniswap Foundation, Compound, Forta ve PancakeSwap gibi 300'den fazla saygın müşteriye hizmet vermiş; Matrix Partners, Vitalbridge Capital ve Fenbushi Capital gibi önde gelen yatırımcılardan iki finansman turunda onlarca milyon ABD doları yatırım almıştır.

✉️İş görüşmeleri:[email protected]

BlockSec'in Twitter hesabı: https://twitter.com/BlockSecTeam

Phalcon'un Twitter hesabı: https://twitter.com/Phalcon_xyz

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit