Yaygın Köprü Güvenlik Açıkları Nelerdir?
Ana sayfa
Makaleler
Yaygın Köprü Güvenlik Açıkları Nelerdir?

Yaygın Köprü Güvenlik Açıkları Nelerdir?

İleri Seviye
Yayınlanma: Mar 22, 2023Güncellenme: Jun 15, 2023
9m

Bu makale bir topluluk gönderisidir. Yazar, CertiK'te bir denetçi olan Minzhi He'dir.

Bu makaledeki görüşler, katkıda bulunan kişiye/yazara aittir ve Binance Academy'nin görüşlerini yansıtmayabilir.

Kısa Özet

Blockchain köprüleri, blockchain dünyasında birlikte çalışabilirliği mümkün kılmak için temel bir işleve sahiptir. Bu nedenle, köprü güvenliği çok önemlidir. Bazı yaygın köprü güvenlik açıkları arasında zayıf zincir üstü ve zincir dışı doğrulama, yerel tokenlerin uygun olmayan bir şekilde idare edilmesi ve yanlış yapılandırmalar yer alır. Doğrulama mantığının sağlam olduğundan emin olmak için köprünün tüm olası saldırı vektörlerine karşı test edilmesi önerilir.

Giriş 

Bir blockchain köprüsü, aralarında etkileşim kurulmasını mümkün kılmak için iki blockchain'i birbirine bağlayan bir protokoldür. Elinizde bitcoin varken Ethereum ağındaki DeFi etkinliklerine katılmak istiyorsanız, bir blockchain köprüsünü kullanarak bitcoin'lerinizi satmak zorunda kalmadan bunu yapabilirsiniz. 

Blockchain köprüleri, blockchain dünyasında birlikte çalışabilirliği mümkün kılmak için temel bir işleve sahiptir. Çeşitli zincir üstü ve zincir dışı doğrulamalar kullanarak faaliyet gösterirler ve bu nedenle de farklı güvenlik açıklarına sahiptirler.

Köprü Güvenliği Neden Önemlidir? 

Bir köprü genellikle, kullanıcının bir zincirden diğerine aktarmak istediği tokeni tutar. Genellikle akıllı sözleşmeler şeklinde konuşlandırılan köprülerin tuttuğu tokenler, zincirler arası transferler biriktikçe önemli miktarlara ulaşır ve bu da onları hacker'lar için kârlı hedefler haline getirir. 

Buna ek olarak, blockchain köprüleri birçok bileşen içerdiği için geniş bir saldırı yüzeyine sahiptir. Bu da kötü niyetli kişilerin büyük miktarlarda fonu hortumlamak için zincirler arası uygulamaları hedeflemesine neden olur. 

CertiK'in tahminlerine göre, köprü saldırıları 2022'de 1,3 milyar USD'nin üzerinde kayba yol açmıştır. Bu da yıl içindeki toplam kaybın %36'sını oluşturmaktadır. 

Yaygın Köprü Güvenlik Açıkları

Köprülerin güvenliğini artırmak için yaygın köprü güvenlik açıklarını bilmek ve kullanıma sunmadan önce köprüleri bunlar için test etmek gerekir. Bu güvenlik açıkları aşağıdaki dört alan altında gruplandırılabilir. 

Zayıf zincir üstü doğrulama

Basit köprülerde, özellikle de belirli DApp'ler için tasarlanmış olanlarda zincir üstü doğrulama minimumda tutulur. Bu köprüler token çıkarma, yakma ve transfer etme gibi temel işlemleri yürütmek için merkezi bir arka uç kullanır ve tüm doğrulamalar zincir dışında yapılır.

Bunun aksine, diğer köprü türleri ise mesajları doğrulamak ve doğrulamaları zincir üstünde gerçekleştirmek için akıllı sözleşmeleri kullanır. Bu senaryoda, bir kullanıcı bir zincire fon yatırdığında, akıllı sözleşme imzalı bir mesaj oluşturur ve imzayı işlemde gönderir. Bu imza yatırma işleminin kanıtı niteliğinde olup, kullanıcının diğer zincirdeki çekim talebini doğrulamak için kullanılır. Bu süreç, yeniden yürütme saldırıları ve sahte yatırma kayıtları gibi çeşitli güvenlik saldırılarını önleyebilmelidir. 

Fakat zincir üstü doğrulama işlemi sırasında bir güvenlik açığı oluşursa saldırgan ciddi zararlar verebilir. Örneğin bir köprü işlem kaydını doğrulamak için Merkle ağacı kullanırsa, saldırgan sahte kanıtlar üretebilir. Bu da doğrulama işleminde güvenlik açığı olması durumunda saldırganın kanıt doğrulamasını atlatabileceği ve yeni çıkarılan tokenlerin kendi hesabına aktarılmasını sağlayabileceği anlamına gelir.

Bazı köprüler "wrapped token" kavramını uygular. Örneğin bir kullanıcı Ethereum'dan BNB Chain'e DAI transfer ettiğinde, bu DAI'ler Ethereum sözleşmesinden alınır ve eş değer miktarda DAI BNB Chain'de çıkarılır. 

Fakat bu işlem düzgün bir şekilde doğrulanmazsa, bir saldırgan işlevi manipüle ederek wrapped tokenleri köprüden yanlış bir adrese yönlendirmek için kötü niyetli bir sözleşme konuşlandırabilir. 

Saldırganların köprü sözleşmesinden varlıkları çekmek amacıyla "transferFrom" işlevini kullanarak tokenleri aktarması için kurbanların köprü sözleşmesini de onaylaması gerekir. 

Ne yazık ki birçok köprünün DApp kullanıcılarından çok fazla sayıda token onayı talep etmesi bu durumu daha da kötüleştirir. Bu yaklaşım gas ücretlerini düşüren, ancak bir akıllı sözleşmenin kullanıcının cüzdanından sınırsız sayıda tokene erişmesine izin vererek ek riskler oluşturan yaygın bir uygulamadır. Saldırganlar, tokenleri diğer kullanıcılardan kendilerine transfer etmek için doğrulama eksikliğinden ve sürecin çok sayıda onay gerektirmesinden yararlanabilir.

Zayıf zincir dışı doğrulama

Bazı köprü sistemlerinde zincir dışı arka uç sunucusu blockchain'den gönderilen mesajların meşruluğunu doğrulamada önemli bir rol oynar. Bu örnekte, yatırma işlemlerinin doğrulanmasına odaklanacağız. 

Zincir dışı doğrulama kullanan bir blockchain köprüsünde süreç şu şekilde işler: 

  1. Kullanıcılar, kaynak zincirdeki akıllı sözleşmeye token yatırmak için DApp ile etkileşime girer.

  2. Bunun ardından da DApp, yatırma işlemi hash'ini bir API üzerinden arka uç sunucusuna gönderir.

  3. İşlem hash'i, sunucu tarafından çeşitli doğrulamalardan geçirilir. Meşru olduğu tespit edilirse, imzalayan bir mesajı imzalar ve imzayı API üzerinden kullanıcı arayüzüne geri gönderir.

  4. DApp, imzayı aldıktan sonra bu imzayı doğrular ve kullanıcının tokenlerini kaynak zincirden çekmesine izin verir.

Arka uç sunucusu, işlediği yatırma işleminin gerçekten gerçekleştiğinden ve sahte olmadığından emin olmalıdır. Bu arka uç sunucusu, bir kullanıcının kaynak zincirdeki tokenleri çekip çekemeyeceğini belirler, bu nedenle de saldırganlar için değerli bir hedeftir.

Arka uç sunucusunun işlemde iletilen olayın yapısını ve olayı ileten sözleşme adresini doğrulaması gerekir. Sözleşme adresi için doğrulama yapılmazsa, bir saldırgan meşru bir yatırma olayı ile aynı yapıya sahip bir yatırma olayı oluşturmak için kötü niyetli bir sözleşme konuşlandırabilir. 

Arka uç sunucusu olayı hangi adresin ilettiğini doğrulamazsa, bunu geçerli bir işlem addeder ve mesajı imzalar. Saldırgan böylece doğrulamayı atlatarak işlem hash'ini arka uca gönderebilir ve tokenleri kaynak zincirden çekebilir.

Yerel tokenlerin iyi idare edilmemesi

Köprüler, yerel tokenleri ve hizmet tokenlerini idare etmek için farklı yaklaşımlar benimser. Örneğin, Ethereum ağının yerel tokeni ETH'dir ve çoğu hizmet tokeni ERC-20 standardına bağlı kalır. 

Bir kullanıcı ETH'lerini başka bir zincire aktarmak istiyorsa, bunları önce köprü sözleşmesine yatırmalıdır. Bunun için de kullanıcının ETH'leri işleme eklemesi yeterlidir ve ETH miktarı işlemdeki "msg.value" alanı okunarak alınabilir.

ERC-20 tokenlerini yatırmak, ETH yatırmaktan çok farklıdır. Bir ERC-20 tokeni yatırmak için kullanıcının önce köprü sözleşmesinin tokenleri harcamasına izin vermesi gerekir. Kullanıcı bunu onayladıktan ve tokenleri köprü sözleşmesine yatırdıktan sonra, sözleşme ya "burnFrom()" işlevini kullanarak kullanıcının tokenlerini yakar ya da "transferFrom()" işlevini kullanarak kullanıcının tokenlerini sözleşmeye aktarır. 

Bunu ayırt etmeye yönelik yaklaşımlardan biri aynı işlev içinde bir if-else ifadesi kullanmaktır. Başka bir yaklaşım ise her bir senaryo için iki ayrı işlev oluşturmaktır. ERC-20 yatırma işlevini kullanarak ETH yatırma girişiminde bulunmak bu fonların kaybedilmesine neden olabilir.

Kullanıcılar, ERC-20 yatırma istekleri yaparken yatırma işlevine girdi olarak genellikle token adresini sunar. İşlem sırasında güvenilir olmayan harici çağrılar oluşabileceğinden bu önemli bir risk oluşturur. Yalnızca köprü tarafından desteklenen tokenleri içeren bir beyaz liste kullanmak, riski en aza indirmek için yaygın bir uygulamadır. Yalnızca beyaz listedeki adreslerin bağımsız değişken olarak iletilmesine izin verilir. Proje ekibi token adresini zaten filtrelediği için de harici çağrılar önlenmiş olur.

Bununla birlikte, köprüler yerel tokenin zincirler arası transferini yaptığında da sorunlar ortaya çıkabilir, çünkü yerel token bir adrese sahip değildir. Sıfır adresi (0x000...0) yerel tokeni temsil eder. Sıfır adresinin işleve iletilmesi, yanlış bir şekilde uygulansa bile beyaz liste doğrulamasını atlatabileceği için bu durum sıkıntı yaratabilir. 

Köprü sözleşmesi, kullanıcı varlıklarını sözleşmeye aktarmak için "transferFrom" işlevini çağırdığında, sıfır adresinde "transferFrom" işlevi uygulanmadığı için sıfır adresine harici çağrı false olarak döner. Fakat sözleşme döndürülen değeri uygun şekilde işlemezse işlem yine de gerçekleşebilir. Bu da saldırganların sözleşmeye hiçbir token aktarmadan işlemi gerçekleştirmesi için fırsat yaratır.

Yanlış yapılandırma

Çoğu blockchain köprüsünde tokenler ve adresleri beyaz listeye veya kara listeye almaktan, imzalayanları atamaktan veya değiştirmekten ve diğer önemli yapılandırmalardan sorumlu ayrıcalıklı bir rol yer alır. Görünüşte önemsiz gözden kaçırmalar bile önemli kayıplara yol açabileceği için tüm yapılandırmaların doğru olduğundan emin olmak gerekir.

Aslına bakarsanız, saldırganın yanlış bir yapılandırma nedeniyle aktarım kaydı doğrulamasını başarıyla atlatmayı başardığı bir vaka yaşanmıştır. Proje ekibi, saldırıdan birkaç gün önce bir değişkenin değiştirilmesini içeren bir protokol yükseltmesi yapmıştır. Değişken, güvenilir mesajın varsayılan değerini temsil etmek için kullanılmıştır. Bu değişiklik tüm mesajların otomatik olarak kanıtlanmış sayılmasına neden olmuş, böylece bir saldırganın rastgele bir mesaj göndermesine ve doğrulama sürecini geçmesine olanak vermiştir.

Köprü Güvenliği Nasıl Artırılır?

Yukarıda bahsedilen dört yaygın köprü güvenlik açığı, birbiriyle bağlantılı bir blockchain ekosisteminde güvenliği sağlamanın zorluklarını göstermektedir. Bu güvenlik açıklarının her birinin giderilmesi için dikkat edilmesi gereken noktalar vardır ve hepsi için geçerli tek bir çözüm yolu yoktur. 

Örneğin, her köprünün kendine has doğrulama gereksinimleri olduğu için, hatasız bir doğrulama süreci sağlamak amacıyla genel yönergeler sunmak zordur. Doğrulamanın atlatılmasını önlemek için en etkili yaklaşım, köprüyü tüm olası saldırı vektörlerine karşı kapsamlı bir şekilde test etmek ve doğrulama mantığının sağlam olduğundan emin olmaktır. 

Özetlemek gerekirse, olası saldırılara karşı sıkı testler yapmak ve köprülerdeki en yaygın güvenlik açıklarına özellikle dikkat etmek gerekir.  

Son Söz 

Yüksek değerlerinden dolayı zincirler arası köprüler saldırganların hedefinde uzun süredir yer almaktadır. Geliştiriciler, konuşlandırma öncesi kapsamlı testler yaparak ve üçüncü taraf denetimler yaptırarak köprülerinin güvenliğini artırabilir ve son birkaç yıldır köprülerde sıkça yaşanan saldırıların gerçekleşme riskini azaltabilir. Köprüler çok zincirli bir dünya için çok önemlidir, fakat etkili bir Web3 altyapısı tasarlarken ve geliştirirken güvenlik birinci öncelik olmalıdır.

Ek Okumalar

Blockchain Köprüsü Nedir?

Zincirler Arası Birlikte Çalışabilirlik Nedir?

Popüler Üç Kripto Köprüsü ve Bu Köprülerin Çalışma Şekilleri

Wrapped Token (Sarılmış Token) Nedir?

Sorumluluk Reddi ve Risk Uyarısı: Bu içerik, size herhangi bir beyan veya garanti verilmeksizin yalnızca genel bilgi sunma ve eğitim amacıyla "olduğu gibi" sunulmaktadır. Bu içerik finansal, hukuki veya diğer herhangi bir profesyonel tavsiye olarak yorumlanmamalıdır ve belirli bir hizmet veya ürünün satın alınmasını önerme amacı taşımamaktadır. Uygun profesyonel danışmanlarla görüşerek tavsiye almanız gerekir. Üçüncü bir tarafça hazırlanan makalelerde yer alan görüşlerin o üçüncü tarafa ait olduğunu ve Binance Academy'nin görüşlerini yansıtmayabileceğini lütfen dikkate alınız. Daha fazla bilgi için sorumluluk reddimizin tam metnini buradan okuyabilirsiniz. Dijital varlık fiyatları dalgalanabilir. Yatırımınızın değeri yükselebileceği gibi düşebilir de ve yatırım yaptığınız tutarı geri alamayabilirsiniz. Yatırım kararlarınızın tüm sorumluluğu size aittir ve Binance yaşanacak hiçbir kayıp için sorumluluk kabul etmez. Yatırım tavsiyesi değildir. Daha fazla bilgi için Kullanım Koşulları ve Risk Uyarısı bölümlerimize bakabilirsiniz.