Popüler bir Rust (de)serileştirme projesi olan Serde, serde_derive önceden derlenmiş bir ikili dosya olarak makro.
Hareket, gelecekteki yasal ve teknik sonuçları hakkında endişelenen geliştiriciler arasında makul miktarda geri itme ve bu ikili dosyaları yayınlayan bakım hesabının güvenliğinin ihlal edilmesi durumunda tedarik zinciri saldırıları potansiyeli yarattı.
Rust paketi kayıt defterine göre,crates.io, çekirdek kullanım ömrü boyunca 196 milyondan fazla kez indirildi, oysa serde_derive macro’nun 171 milyondan fazla indirilmesi, projenin yaygın tirajını kanıtlıyor.
Serde makrosu önceden derlenir: devre dışı bırakmanın bir yolu yoktur
Yaklaşık üç hafta önce, uygulamalarında Serde projesini kullanan bir Rust programcısı garip bir şey fark etti.
“Fedora Linux için paketleme paketi üzerinde çalışıyorum ve son sürümlerin serde_derive Fedora Paketleme Komitesi üyesi Fabio Valentini, önceden derlenmiş bir ikili dosyayı şimdi gönderin” diye yazdı.
“Bu bizim için problemli, çünkü hiçbir koşulda (bellenim veya benzerleri için çok az istisna dışında) önceden derlenmiş ikili dosyaları yeniden dağıtamayız.”
Serde yaygın olarak kullanılan bir olmaközelleştirme ve ile ilgiliWeb sitesine göre bu işlemleri “verimli ve genel olarak” yürütmek için tasarlanmış Rust veri yapıları için serileştirme çerçevesi.
Projenin web sitesinde, “Serde ekosistemi, kendilerini nasıl serileştireceğini ve serisinden çıkaracağını bilen veri yapılarının yanı sıra diğer şeyleri nasıl serileştireceğini ve serisini kaldıracağını bilen veri biçimlerinden oluşuyor” diyor. Oysa “türet” makrolarından biridir.
Valentini, proje sahiplerine ayrıca, bu yeni ikili dosyaların “gerçekte nasıl üretildiğini” ve önceden derlenmiş sürümleri tüketmek yerine ikili dosyaları yeniden yaratmasının mümkün olup olmadığını sordu.
Serde’nin birincil bakımcısı olan David Tolnay, o sırada olası geçici çözümlerle yanıt verdi. Ancak bu herkesin memnun olduğu anlamına gelmez.
Kararın neden proje için en uygun olmadığına dair geliştiricilerden gelen yorumların ardından Tolnay, GitHub sorununu kapatmadan önce geri bildirimi kabul etti.
Önceden derlenmiş ikili dosyaları gönderme gerekçesi aşağıda tamamen yeniden oluşturulmuştur.
“Önceden derlenmiş uygulama, yayınlanan makroları kullanmanın desteklenen tek yoludur. serde_derive.
Bazı derleme araçlarında buna uyum sağlamak için uygulama çalışması gerekiyorsa, birisi bu işi yapmaktan çekinmemelidir (benim kullandığım ve önemli ölçüde katkıda bulunduğum araçlar olan Buck ve Bazel için yaptığım gibi) veya kendi kaynak çatalınızı yayınlayın farklı bir adla kodlayın.
Ayrı olarak, güvenlikle ilgili yukarıdaki yorumla ilgili olarak, ileriye dönük en iyi yol, bunu önemseyen kişilerden birinin birinci sınıf önceden derlenmiş makrolar etrafında bir Cargo veyacrates.io RFC’ye yatırım yapmasıdır, böylece sizin için uygun bir yaklaşım olur. tercihler; serde_derive mevcut olduğunda bunu kabul ederdi.”
BleepingComputer, yayınlamadan önce Tolnay’e ek sorular sordu.
“Önce .NET’in Adedi ve şimdi de bu.”
Bazı Rust geliştiricileri, önceden derlenmiş ikili dosyaların saklanmasını talep eder. isteğe bağlı ve orijinal “serde_derive” kasasından ayrıyken, diğerleri hareketi tartışmalı kod değişikliğine, tepkilere yol açan Moq .NET projesine benzetti.
Bir kullanıcı, “Lütfen önceden derlenmiş serde_derive sürümünü farklı bir kasaya ve varsayılan serde_derive sürümünü kaynaktan derlemeye taşımayı düşünün, böylece önceden derlenmiş ikili dosyanın avantajlarından yararlanmak isteyen kullanıcılar onu kullanmayı seçebilir” dedi.
“Ya da tam tersi. Ya da serde_derive’a yama uygulamak zorunda kalmadan kaynaktan oluşturmaya izin veren başka bir çözüm.”
“Kasanın bir parçası olarak gönderilen bir ikili dosyaya sahip olmak, oluşturma süresi hız avantajlarını anlasam da, güvenlik nedeniyle bazı kitaplık kullanıcıları için uygun bir çözüm değil.”
Kullanıcılar, özellikle hükümet tarafından düzenlenen ortamlardan bahsederek, değişikliğin “önceden derlenmiş ikili dosyaları kendi lisanslarıyla yeniden dağıtmasına yasal olarak izin verilmeyen” varlıkları nasıl etkileyebileceğine dikkat çekti.
Avustralya merkezli bir geliştirici olan Jordan Singh, daha sonra kaldırılan bir yorumda “…Önce .NET’in Adedi ve şimdi bu,” dedi.
“Bu, kargo geliştiricilerini bir özelliği desteklemeye zorlamaksa, bunu yapmanın korkunç bir yolu. En azından bize çoğaltılabilir ikili dosyalar verin. Popüler sandıkların/kütüphanelerin geliştiricilerinin saçma kararlarla herkesi rehin almasından bıktım.”
Philadelphia merkezli Donald Stufft karşı uyarıldı sosyal medyada “ikili dosyaları gönderme” işine girmenin riskleri:
Geçen Rust programcısı Nathan West Lucretielözellikle vurgulanmış bakımcı hesabının tehlikeye girmesi durumunda önceden derlenmiş ikili dosyaların ortaya çıkardığı tedarik zinciri riskleri:
“Tam olarak izleyecekleri yol bu değil mi? Nasıl yapılacağı konusunda yarı makul bir değişiklik olarak sessizce gönderin. çekirdek çalışır, karara yönelik tüm eleştirileri uzlaşmaz bir şekilde görmezden gelir,” diye yazdı West.
“Bu *tam olarak* herkesin böyle hareketlere karşı bu kadar refleksif bir muhalefetinin olmasının nedenidir.”
“İnternette güven mükemmel değildir; bunun gerçekten öyle olduğunu *bilmiyoruz*. [the maintainer] GitHub’da yayınlama. Bu nedenle, savunma katmanlarımız ve vekillerimiz var; kabataslak sh * t, riske değmediği için reddedilir.
Teknoloji uzmanı Sanket Kanjalkar, ikili dosyaları devre dışı bırakma yolu olmadan göndermeye geçişi ” olarak adlandırdı.bir adım geri.”
Ancak, Lander’dan geçen bir güvenlik uzmanı, biraz farklı bir çekim:
“Bu Rust draması hakkında serde_derive Lander, önceden derlenmiş bir ikili dosyayı göndermek biraz komik” diye yazıyor.
“Bir yandan insanların endişelerini anlıyorum. Öte yandan kimin umurunda? Kimse proc macro okumuyor. kod/derleme.rs zaten çektikleri her proje için kod. Vazgeçmek iyi bir fikir olabilir.”
Projenin makrolarını önceden derlenmiş olarak sunma kararına katılsanız da katılmasanız da, bunları projelerinize dahil etmeden önce tüm kaynak kodlarını ve yazılım ikili dosyalarını rutin olarak incelemek iyi bir uygulamadır.
Tüyo için Michael Kearns’e teşekkürler.