Back to Blog

Solucan Deliği Saldırılarının Yeniden İncelenmesi

Code Auditing
March 22, 2022
4 min read

1. Arka Plan

Einstein-Rosen köprüsü olarak da bilinen Solucan Deliği (Wormhole), uzay-zamandaki birbirinden uzak noktaları birbirine bağlayan spekülatif bir yapıdır. Blokzincir dünyasında wormhole, farklı zincirler arasında köprü olarak kullanılmaktadır (örneğin, Solana ve Ethereum). Kullanıcılar, wormhole aracılığıyla tokenize edilmiş varlıkları blokzincirler arasında transfer edebilir.

2 Şubat 2022'de Wormhole saldırıya uğradı ve saldırgan 320 milyon dolar değerinde 120.000 sarılmış Ether basmayı başardı; bu, DeFi tarihinde Poly Network'ten sonraki en büyük ikinci kayıptır.

2. Wormhole Nasıl Çalışır

Wormhole, her zincirde yayılan mesajları izleyerek çalışır. İzlenen mesaj, zincirler arası bir iletişim protokolü oluşturulabilmesi için hedef zincire iletilir.

Sezgisel soru, izlenen mesajın nasıl güvenilir olduğunun garanti edileceğidir. Bu sorunu çözmek için Wormhole, koruyucular (guardians) olarak adlandırılan 19 ekstra düğüm tanıtmaktadır. Mevcut koruyucu kümesi Wormhole Explorer'da kontrol edilebilir. Her koruyucu, izlenen mesajı bağımsız olarak doğrulayabilir ve mesajı imzalayabilir.

Wormhole'da mesaj, VAA formatında düzenlenir. VAA iki bölümden oluşur. Biri, koruyuculardan gelen imzaları toplayan başlıktır (header). Diğeri ise hedef zincir, mesaj yükü vb. bilgileri içeren gövdedir (body).

Koruyuculardan gelen imzalar bir uzlaşma eşiğine ulaştığında, VAA zincire gönderilebilir.

Özetle, koruyucular transfer edilen mesajın bütünlüğünden sorumludur.

3. Token Köprüsü

Mesajın farklı zincirler arasında nasıl transfer edildiğini anlattıktan sonra, wormhole'daki ana uygulama olan Token köprüsünün nasıl çalıştığını anlamak zor olmayacaktır.

Token'ları A zincirinden B zincirine transfer etmek için Wormhole, token'ları A'da kilitler ve B'de basar. Bu, üst düzey fikirdir. Pratikte bu üç adıma bölünebilir. Birincisi, A zincirindeki token'lar kilitlenir. İkincisi, A zincirindeki token'ların B zincirine transfer edilmesi gerektiğine dair mesaj yayınlanır. Üçüncüsü, B zinciri mesajı alır ve ilgili token'lar basılır. Her şey tamamdır.

4. Solana Talimatları

Solana'da bir işlem, birden fazla talimatdan oluşur. Her talimat bir program kimliği, hesaplar ve veri içerir. Program kimliği, talimatı işleyecek programı (bir akıllı sözleşme) temsil eder. Program, veriyi yorumlar ve sağlanan hesaplar üzerinde işlem yapar.

5. Wormhole Saldırısı

Kısaca söylemek gerekirse, saldırgan Ethereum'da herhangi bir varlık kilitlemeden Solana'da 120.000 ETH basmayı başardı. İşlem burada.

Dolayısıyla soru, saldırganın Solana'da 120.000 ETH'yi nasıl basabildiğidir. Adımları ayrıntılı olarak inceleyelim. Token basmak için complete_wrapped talimatı çağrılır. Bu talimat birkaç adres alır ve üçüncüsü, imzalı mesajı depolayan adrestir. 120.000 ETH basılmadan önce, B zinciri (yani Solana), A zincirinde (yani Ethereum) 120.000 ETH'nin kilitlendiğini belirten imzalı mesajı (yani VAA) almalıdır.

Mesajı göndermek için post_vaa.rs dosyasında tanımlanan post_vaa çağrılır. Sonuç olarak, mesajı depolamak için bir hesap oluşturulur. Ancak post_vaa, koruyuculardan gelen imzaları kontrol etmez. Bunun yerine, veryify_signatures.rs dosyasında tanımlanan verify_signatures imzaları doğrular.

verify_signatures'a beslenen dördüncü hesap, sistem talimat hesabıdır. Şimdi verify_signatures'ın nasıl çalıştığını inceleyelim.

103. satırda, önceden yürütülen secp_ix talimatını yüklemek için load_instruction_at fonksiyonu çağrılır. secp_ix, Secp256k1 imza doğrulama fonksiyonunu çağırır. Dolayısıyla verify_signatures, önceden yürütülen secp_ix talimatını kontrol ederek imzaları doğrular. Şimdi her şeyi anladınız mı? load_instruction_at fonksiyonu, talimatların nereden yükleneceğini kontrol etmez!!! Talimatları Sysvar:Instructions'dan yüklemeniz beklenmektedir.

Ancak saldırı işleminin dördüncü hesabı, Sysvar:Instructions yerine 2tHS1cXX2h1KBEaadprqELJ6sV9wLoaSdX68FqsrrZRd'dir. Bu durumda saldırgan, imza doğrulama sürecini başarıyla atlatmayı başardı. Wormhole, doğrulamanın geçildiğini sandı ve mesaj zincire gönderildi; bu da herhangi bir şey kilitlenmeden 120K ETH basılmasıyla sonuçlandı!

Yasal bir doğrulama talimatına bakalım. Bu işlem iki talimatdan oluşur. Birincisi Secp256k1 doğrulama fonksiyonunu çağırırken ikincisi verify_signatures talimatını çağırır. Dördüncü hesabın burada Sysvar:Instructions olduğuna dikkat edin.

120K ETH basıldıktan sonra, saldırgan bunu Ethereum'a geri çekebilir ve kâr elde etmek için diğer token'lara dönüştürebilir.

6. Yama

Depoda belirtildiği gibi, 1.8.0 sürümünden itibaren load_instruction_at güvenli değildir ve Sysvar hesaplarının adresi kontrol edilmez. Bunun yerine load_instruction_at_checked önerilmektedir.

7. Düşüncelerimiz

  • Geliştiriciler, kullandıkları harici fonksiyonlara çok iyi aşina olmalıdır.
  • Kullanılan kütüphanelerdeki önemli değişikliklere odaklanmaya devam edin. Kütüphane değişirse, kütüphaneyi kullanan kodun da değiştirilmesi gerekebilir.
  • Kütüphane bakıcısı, belirli değişikliklerin olası risklerinin farkında olmalı ve tüm topluluğu zamanında bilgilendirmelidir. Yalnızca açıklama eklemek yeterli olmayabilir ve yetmez.
  • Kütüphane ve kodun sürümleri değiştirilirse, sözleşme kodunuzun denetlenmesi gerekir.

BlockSec Hakkında

BlockSec, 2021 yılında küresel çapta tanınmış güvenlik uzmanlarından oluşan bir grup tarafından kurulmuş öncü bir blokzincir güvenlik şirketidir. Şirket, kitlesel benimsenmesini 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 denetimi hizmetleri, güvenlik geliştirme ve tehditleri proaktif olarak engelleme için Phalcon platformu, fon takibi ve araştırma için MetaSleuth platformu ve web3 geliştiricilerinin kripto dünyasında verimli bir şekilde gezinmesi için MetaSuites eklentisi sunmaktadır.

Bugüne kadar şirket, MetaMask, Uniswap Foundation, Compound, Forta ve PancakeSwap gibi 300'den fazla seçkin müşteriye hizmet vermiş ve Matrix Partners, Vitalbridge Capital ve Fenbushi Capital gibi önde gelen yatırımcılardan iki tur finansmanda on milyonlarca ABD doları almıştır.

Resmi web sitesi: https://blocksec.com/

Resmi Twitter hesabı: https://twitter.com/BlockSecTeam

Best Security Auditor for Web3

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

BlockSec Audit