Blok zinciri Uygulamaları ve Güvenlik Sorunları
--
Bu yazı ilk defa Arka Kapı dergisinin 3'üncü sayısında yayınlanmıştır.
Blok zinciri alanında, sonunda, gerçek uygulamaları görmeye ve kullanmaya başlıyoruz. Hala daha emekleme adımlarında olduğunu düşündüğüm bu teknolojinin en büyük getirilerinden bir tanesi ‘Decentralised Applications’ (DApp) yani merkezi olmayan uygulamaların geliştirilmesine olanak tanıması. Bu tarz uygulamaların yaygınlaşmasında en çok etkisi olan teknoloji de şüphesiz ki Ethereum blok zinciridir. Daha önceleri birçok arkadaşım bu konunun detaylarından bahsettiği için detaylarına girmeyeceğim. Ancak bu yazıda ele almak istediğim konuyla da ilgili olduğu için ‘Ethereum Virtual Machine’ (EVM) yani Ethereum Sanal Makinesinden biraz daha detaylı bahsedeceğim ve farklı saldırı vektörlerini anlatmaya çalışacağım.
Ethereum Virtual Machine
Ethereum’un desteklediği ve akıllı kontrat hazırlamamıza olanak sağlayan yazılım geliştirme dilleri derlenerek sanal makine seviyesinde anlaşılabilecek 16’lık düzende ifade edilebilen talimatlara dönüştürülür. Bu şekilde sanal makine, Just-In-Time (JIT) derleme yaparak üzerinde çalıştığı işletim sistemine göre optimizasyonları gerçekleştirerek akıllı kontratların çalışmasına olanak tanır. Tabi ki bu işlemler izole bir alanda şekilde çalıştırılıyor ve dışarıdan müdahale edilerek manipülasyon yapılması engelleniyor. Yani özetlemek gerekirse Solidity diliyle yazılan uygulamalar derleme işlemi sonrası bu byte-code adı verilen bir formata dönüştürülür ve aynı bir değer transferi işlemi gibi ağ üzerinde madenciler tarafından çalıştırılmak üzere ağa gönderilir.
Bu işlem bir kere yaratılıp, madenciler tarafından onaylandıktan sonra artık bir daha değiştirilmesi mümkün olmaz. Yani eğer bir akıllı kontratı derleyip ağa gönderirsem, bu kurduğum uygulama artık bu ağ hayatta kaldığı sürece değiştirilemez ve daha da önemlisi geri alınamaz. Eğer bu uygulamada bir güvenlik açığı ya da başka bir hata varsa o zaman bu hata sonsuza kadar orada kalacaktır. Bu da haliyle bizim klasik yazılım geliştirme yöntemlerinden alışkın olduğumuz, ‘çalışmazsa yeniden kurarız, ne olacak’ yaklaşımından uzaklaşmamıza sebep olmaktadır. Dolayısıyla, uygulama geliştirme sürecinin klasik uygulama geliştirme yöntemlerinden biraz daha farklı olması gerektiğini söylemek yanlış olmaz. Ancak bu konuyu bir sonraki…