Nym mixnet ve hakediş sözleşmeleri güvenlik denetimi
Nym'in mixnet ve hakediş sözleşmelerinin güvenlik denetimi
Giriş
Aralık 2022'de, Nym bağımsız bir güvenlik denetimine tabi tutuldu. Denetim, üçüncü nesil blokzincirler ve merkeziyetsiz protokollerin denetimi konusunda uzmanlaşmış Almanya merkezli siber güvenlik danışmanlık firması Oak Security tarafından gerçekleştirildi. Cosmos, Terra, Polkadot ve Flow gibi ekosistemlerde geniş deneyime sahip olan Oak Security, Nym ekosisteminin iki kritik bileşenini değerlendirmekle görevlendirildi: (1) Nym mixnet ve hakediş sözleşmeleri (tam raporu inceleyin) ve (2) Nym Cüzdanı (tam raporu inceleyin). Denetimin amacı, bu bileşenlerin dayanıklılığını değerlendirmek, potansiyel güvenlik açıklarını tespit etmek ve kod geliştirme konusunda en iyi uygulamalara uyumu sağlamakti. Takibi kolaylaştırmak adına, her bileşene ait bulguları ayrı ayrı sunduk. Nym cüzdan denetim özetine buradan ulaşabilirsiniz.
Oak Security tarafından yapılan Nym Mixnet ve Hakediş Sözleşmeleri Güvenlik Denetimi
2 hafta süren denetim, 4 uzman ekip tarafından gerçekleştirildi. Nym ekibi, Oak Security'ye projenin kod tabanına, detaylı proje spesifikasyonlarına ve destekleyici belgelere tam erişim sağladı. Denetimin kapsamı, Nym mixnet ve hakediş sözleşmeleri için contracts/mixnet, contracts/hakediş depolarını ve bu sözleşmelerin ilgili içeri aktarımlarını kapsıyordu.
Oak Security, güvenlik açıklarını bulmak, kod kalitesini değerlendirmek ve güvenli kodlama standartlarına uyumu kontrol etmek için otomatik kaynak kodu ve bağımlılık analizini, manuel satır satır incelemeyle birleştirerek kodu dikkatlice inceledi. Bu kapsamlı yaklaşım, yarış durumu açıkları, alt ve üst sınır hataları, anahtar yönetimi, kriptografik güvenlik, veri sızıntısı riskleri, şifre yönetimi ve erişim ile yetkilendirme kontrolleri gibi önemli alanların ayrıntılı analizini içeriyordu.
Denetimin odak noktası, protokollerin doğru çalıştığından emin olmak, kullanılabilir güvenlik açıkları veya akıllı sözleşme hatalarını tespit etmek ve kodun güvenliği ve okunabilirliği için iyileştirme önerileri sunmaktı.
Bulguların Genel Özeti
Nym mixnet ve hakediş sözleşmeleri, yüksek okunabilirlik ve netlik ile tanımlandı ve sağlam test kapsamı, güvenilirliklerini destekledi. Değerlendirmelerinde, denetçiler 19 bulgu tespit etti; bunlar arasında 9 güvenlik açığı – kritik ve büyük öneme sahip sorunlar – ve 10 genel zayıflık yer alıyordu, bu zayıflıklar ise küçük veya bilgilendirici olarak kategorize edildi.
Nym ekibi tüm kritik ve önemli sorunları hızlı bir şekilde çözdü. Oak Security ekibi düzeltmelerimizi doğruladı ve onayladı.
NYM-MIX-VEST-CONTRACT-1: Başarısız bir dönem veya aralık olayının çalıştırılması, dönem ilerlemesini kalıcı olarak engeller (Kritik).
Denetim, contracts/mixnet/src/interval/transactions.rs dosyasındaki AdvanceCurrentEpoch mesajlarının işlenmesinde bir güvenlik açığı tespit etti. Sıralı bir döngü, tüm bekleyen olayları doğrudan işlem bağlamında işler; bu da tek bir başarısız olayın tüm işlemi geri alabileceği, bu durumun ise dönem ve aralık ilerlemesini durdurarak protokolün takılmasına yol açabileceği anlamına gelir.
Bunu çözmek için, denetçiler, olay yürütmesini alt mesajlar içinde sarmayı ve bir yanıt politikası eklemeyi önerdi. Bu yaklaşım, sistemin tüm işlemi geri almadan hataları zarif bir şekilde ele almasına izin verecektir. Ancak, bu öneriyi takip etmeme kararı bilinçli olarak alındı. Olay yürütme sırasında bir hata, ödül sisteminin zarar görmesine neden olabilecek büyük bir mantık hatasını işaret eder. Bu yüzden, sistemin bozulmuş bir durumda çalışmasını riske atmak yerine, dönem ilerlemesini durdurup manuel olarak incelenmesi daha uygun olur. Bunun yerine, başarısız dönem ilerlemelerini tespit etmek ve bize bildirim göndermek için Nym API'sinde gelişmiş izleme özellikleri ekledik. Bu yaklaşım, böyle bir hatanın hızla tespit edilmesini sağlar ve sorunların çözülmesi için zamanında müdahale edilmesine olanak tanır.
NYM-MIX-VEST-CONTRACT-2: Saldırganlar, yetkisiz olarak büyük bir miktarda yetkisiz mix node'unu aynı katmanda toplamak için onları aileye katılmaya zorlayabilir (Kritik).
JoinFamilyOnBehalf mesajında bir zafiyet tespit edildi. Bu zafiyet, bir saldırganın bir mix node'u, sahibinin onayı olmadan bir aileye eklemesine olanak tanıyabilir. Zarar verici bir aile oluşturarak ve mağdur mix node'unun kimlik anahtarını, özel anahtarıyla imzalayarak saldırgan, mix node'u aileye hapsedecek şekilde tuzağa düşürebilir. Bu durum, saldırganın yetkisiz mix node'larını tek bir ailede toplayarak, ağda node'ların aynı katmanda yoğunlaşmasına ve saldırganın yönlendirmeyi etkileme şanslarının artmasına yol açarak ağı bozmasına neden olabilir.
JoinFamilyOnBehalf mesajındaki güvenlik açığını gidermek için, sözleşmenin imza mekanizması yeniden tasarlandı. Mix node'un kimliğini sadece imzalamak yerine, imzalar, net bir amacı ve benzersiz bir nonce içeren bir mesajla güncellendi. Bu değişiklik, imzaların yeniden kullanılmasını veya tekrar oynatılmasını engeller.
NYM-MIX-VEST-CONTRACT-3: TrackUndelegation mesajı işleme sırasında sınırlandırılmamış yineleme, kullanıcının delegasyonunu iptal etmesini engelleyebilir ve bu da dönemi ilerletmeyi kalıcı olarak engeller (Kritik).
TrackUndelegation mesajının sınırlandırılmamış yinelemesi, çok sayıda delegasyonu olan hesapları işlerken gas'ın tükenmesine neden olabilir ve bu da kullanıcıların delegasyonlarını iptal etmelerini engeller. Bu hata, dönem ilerlemesini de durdurur ve protokolün mevcut durumunda sıkışmasına neden olur.
Bu sorunu çözmek için, her hesap başına 25 hakediş delegasyonu limiti uyguladık. Bu çözüm, o dönemde gözlemlenen en yüksek vesting delegasyon sayısına dayanmaktadır.
Güncelleme: 2024 itibarıyla, vesting delegasyonları yapma seçeneği tamamen devre dışı bırakılmıştır.
NYM-MIX-VEST-CONTRACT-4: Bir saldırgan, BondMixNodeOnBehalf ve CreateFamilyOnBehalf mesajlarını önceden işleyerek payload'ı değiştirebilir (Kritik).
Bu güvenlik açığı, bir saldırganın BondMixNodeOnBehalf ve CreateFamilyOnBehalf mesajlarını önceden işlemeye sokarak, imzayı çıkarmasına ve payload'ı değiştirmesine olanak tanıyordu. BondMixNodeOnBehalf durumunda, saldırgan kendisini vekil olarak atayarak kaydedilmiş bond üzerinde tam kontrol elde edebilirdi.
Bu güvenlik açığını çözmek için iki aşamalı bir çözüm uyguladık. İlk olarak, NYM-MIX-VEST-CONTRACT-2'de açıklanan imza oluşturma değişikliklerini uyguladık; bu değişiklikler, belirgin bir amaç ve benzersiz bir nonce ekledi. İkinci olarak, geçerli proxy adresini yalnızca vesting hesabı ile sınırladık, böylece saldırganların kendilerini proxy olarak ayarlayıp kaydedilmiş teminatlar üzerinde yetkisiz kontrol sağlamalarının önüne geçtik.
Güncelleme: 2024 itibarıyla tüm proxy işlemleri devre dışı bırakılmış olup, bu saldırı geçersiz hale gelmiştir.
NYM-MIX-VEST-CONTRACT-5: İmzalar, "adına" yapılan işlemlerde tekrar kullanılabilir ve saldırganların kullanıcıları taklit etmesine olanak tanır (Kritik).
Bu güvenlik açığı, "adına" yapılan işlemlerde imzaların tekrar kullanılmasına izin verir ve saldırganların kullanıcıları taklit etmelerini sağlar. İmzalar yalnızca ham verileri içerdiği için, nonce veya mesaj tanımlayıcıları gibi ek meta veriler bulunmaz. Bu da bir saldırganın, bir mesajdan aldığı imzayı başka bir mesaj için tekrar kullanarak aile üyelerini zorla çıkarabilmesine yol açabilir. Ayrıca, saldırganlar aynı mesaj türü için imzaları tekrar kullanabilir, bu da bir üyenin aynı imzayı kullanarak bir aileye birden fazla kez katılmasına olanak tanır.
Bu sorunun çözümü, NYM-MIX-VEST-CONTRACT-4'te uygulanan çözümle aynı şekildedir.
NYM-MIX-VEST-CONTRACT-6: (Sahip, vekil) çiftleri için anahtar üretimi, çakışmalara yol açabilir (Kritik).
Bu güvenlik açığı, iki farklı (sahip, vekil) adres çiftinin generate_owner_storage_subkey fonksiyonunda aynı XOR sonucunu üretmesine izin verir; bu da anahtar çakışmalarına ve veri üzerine yazılmasına yol açabilir.
NYM-MIX-VEST-CONTRACT-4'te uygulanan, yasal vekili yalnızca hakediş sözleşmesi adresiyle sınırlama çözümü, bu güvenlik açığını da gideriyor. XOR işleminin her zaman sabit bir dizeyle yapılmasını sağlayarak, bu değişiklik çakışma riskini ortadan kaldırır.
NYM-MIX-VEST-CONTRACT-7: track_delegation, aynı blok içinde birden fazla delegasyon işlenirse mevcut delegasyonu kaybedebilir (Kritik).
Bu sorun, aynı blok içinde birden fazla delegasyon yapılırsa anahtar çakışmalarına neden olabilir. Bu da save_delegation fonksiyonunun mevcut delegasyonu üzerine yazmasına ve önceki delegasyonun kaybolmasına yol açar.
Sorunu çözmek için, save_delegation fonksiyonunun mantığını değiştirdik. Yeni delegasyonu kaydetmeden önce, önce mevcut delegasyon miktarını okuyoruz. Eğer aynı anahtar için zaten bir delegasyon varsa, önce mevcut miktar alınır, ardından yeni delegasyon eklenir ve toplam miktar güncellenerek kaydedilir. Bu şekilde mevcut delegasyon korunur ve üzerine yazılmaz.
NYM-MIX-VEST-CONTRACT-8: Eğer bond, bir proxy tarafından "adına" oluşturulmuşsa, bond sahibi işlemler yapamaz (Kritik).
Bu sorun, bond "adına" oluşturulduysa ve mevcut işlem proxy yerine sahibi tarafından başlatıldıysa, bond sahibinin bond üzerinde herhangi bir işlem yapmasını engeller. Proxy ele geçirilebilir veya kaybolabilir ve sahibi bunu değiştiremez, bu da sahibinin bond üzerindeki kontrolünü kaybetmesine neden olabilir.
Bunu bir sorun olarak görmüyoruz, çünkü bu, tasarım gereği kasıtlı bir davranıştır. Bir mix node, hakediş sözleşmesi üzerinden bağlandıysa (veya ona delegasyon yapıldıysa), bundan sonraki tüm işlemler yine bu hakediş sözleşmesi üzerinden yapılmalıdır.
Güncelleme: 2024 itibarıyla, hakediş sözleşmesi kaldırılmıştır.
NYM-MIX-VEST-CONTRACT-9: Eğer bir ailede çok fazla mix node varsa, LeaveFamily ve LeaveFamilyOnBehalf işlemleri çalışmayabilir. Bu da node’ların aileden ayrılamamasına neden olabilir (Önemli bir sorun).
Bu sorun, MEMBERS haritasında çok fazla üye olduğunda hepsini tek tek kontrol etmek gerektiği için gazın bitmesine neden olabiliyordu. Bu da LeaveFamily ve LeaveFamilyOnBehalf mesajlarının çalışmamasına yol açıyordu. Bu durum, mix node’ların aileden çıkmasını engeller ve onları mevcut ailelerinde çıkamaz hale getirirdi.
Çözüm: Çözüm, mix node’un üye olup olmadığını kontrol etmek için MEMBERS haritasına doğrudan erişecek şekilde kodun yeniden düzenlenmesiydi. Bu değişiklik, yinelemeye gerek kalmadığı için "gas tükenmesi" hatalarının oluşmasını önledi ve ailede çok sayıda üye olsa bile, üyelerin başarılı bir şekilde ayrılabilmesini sağladı.
Güncelleme: 2024 itibarıyla, node aileleri kaldırılmıştır.
Son Sözler
Bu denetim süreci boyunca gösterdikleri uzmanlık ve özveri için Oak Security ekibine teşekkür ederiz. Ayrıca denetimin planlama ve yürütme aşamalarında gösterilen iş birliği ve profesyonellik için de minnettarız. Güvenliğe olan bağlılığımız en yüksek önceliğimiz olmaya devam ediyor ve ekosistemimizde en yüksek standartları korumak için güvenlik uzmanlarıyla olan iş birliklerimizi sürdürmeyi dört gözle bekliyoruz.