Tedarik zinciri saldırıları ve deterministik derlemeler

·7 dk okuma·Yazar: SSP Editorial Team
Cüzdan, anahtar, kalkan ve çip simgeleri ile Tedarik zinciri saldırıları ve deterministik derlemeler başlığını taşıyan kapak görseli

Kripto kullanıcılarına yönelik güvenlik tavsiyelerinin çoğu görebildiğiniz yüzeylere odaklanır: tohum ifadeniz, tıkladığınız bağlantılar, giriş yaptığınız siteler. Bunlar önemlidir. Ama bütün bunların altında daha sessiz bir risk yatar — yazılımın kendisi ve hangi parçalardan inşa edildiği. Bir cüzdan kusursuz yazılmış olsa bile yine de bir arka kapı dağıtabilir; çünkü modern uygulamalar yüzlerce üçüncü taraf yapı taşından ve kaynak kodu kurduğunuz ikili dosyaya dönüştüren bir derleme hattından bir araya getirilir. O zincirdeki herhangi bir halkayı ele geçirin, akıştaki her kullanıcıyı ele geçirmiş olursunuz.

İşte bu yazılım tedarik zinciridir ve saldırganlar bunun kriptodaki en yüksek kaldıraçlı hedeflerden biri olduğunu öğrendi. Bu makale, bir tedarik zinciri saldırısının gerçekte ne olduğunu, cüzdanların neden bu kadar cazip hedefler olduğunu, pratikte işe yarayan savunmaları ve deterministik derlemelerin size ne kazandırdığını — SSP'nin tüm bunları nasıl uyguladığı dahil — açıklar.

Tedarik zinciri saldırısı nedir

Bir tedarik zinciri saldırısı uygulamaya doğrudan girmez. Bunun yerine uygulamanın güvendiği bir şeyi ele geçirir: çektiği bir bağımlılığı, bir bakımcının hesabını ya da nihai yapıtı bir araya getiren derleme hattını. Kötü amaçlı kod meşru bir güncelleme üzerinden, imzalı ve normal kanallardan teslim edilerek girer; böylece tam olarak kurmak istediğiniz yazılım gibi görünür.

Bu dolaylılık işin tüm özüdür. Yaygın kullanılan tek bir kütüphaneye — ya da tek bir derleme sunucusuna — saldırmak, akıştaki binlerce projeye ve aynı anda milyonlarca kullanıcıya ulaşabilir. Bir kripto cüzdan için ödül doğrudandır: cüzdanınızın içinde çalışan kodun, bir işlem imzalandığında ve adresler gösterildiğinde, önemli olan ana zaten erişimi vardır. Tek bir kurcalanmış bağımlılık, size hiç oltalama yoluyla ya da zayıf tohum ifadesi hijyeni üzerinden dokunmadan bir hedef adresi değiştirebilir veya anahtar materyalini dışarı sızdırabilir. İşte bu yüzden bu saldırı sınıfı zihinsel modelinizde bir yer hak eder.

Eve yakın iki örnek

İki gerçek olay bunun nasıl işlediğini gösteriyor — biri doğrudan kriptoyu hedef alan, diğeri neredeyse tüm interneti vuran.

event-stream ve Copay cüzdanı

2018'de event-stream adlı popüler bir npm paketi, yardım teklif eden yeni bir gönüllü bakımcıya devredildi. Açık kaynakta sürekli olan türden, rutin ve iyi niyetli görünen bir devirdi. Yeni bakımcı ardından gizlenmiş kötü amaçlı kod içeren yeni bir bağımlılık, flatmap-stream, ekledi.

Yük alışılmadık biçimde hedefliydi. Herkes için tetiklenmek yerine, yalnızca belirli bir akış projesinin içinde etkinleşiyordu: Copay Bitcoin cüzdanı. Orada o uygulamanın kullanıcılarının tohum materyalini ve fonlarını çalmak üzere hazırlanmıştı. event-stream çeken geliştiricilerin çoğu hiç etkilenmedi — kod tam olarak hangi kurbanı aradığını biliyordu.

Bu, "yalnızca küçük bir kütüphane kurdum" sözünün hiçbir zaman hikâyenin tamamı olmadığının kanonik hatırlatmasıdır. O kütüphanenin güvendiği her şeyi de kurdunuz.

XZ Utils arka kapısı

2024 XZ Utils olayı (CVE-2024-3094) daha da sabırlıydı. XZ Utils, çoğu Linux sisteminde sessizce bulunan bir sıkıştırma kütüphanesidir. Yıllar boyunca bir saldırgan, yardımsever bir katkıcı olarak güven inşa etti, yavaş yavaş bakımcı sorumlulukları kazandı ve sonra her yerdeki sunuculara uzaktan oturum açmayı güvenceye alan yazılım olan OpenSSH'a müdahale etmek için tasarlanmış bir arka kapı yerleştirdi.

Neredeyse tesadüfen, saniyenin kesri kadar bir gecikmeyi fark eden bir mühendis sayesinde yakalandı. Geniş çapta dağıtılmış olsaydı, sayısız makineye uzaktan erişim sağlayabilirdi.

Kripto için ders ayıltıcı: saldırı akıllı bir hatadan değil, açık kaynağın güven modelinin kendisinden yararlandı; herkesin güvendiği kişi olmak için yıllar süren bir sosyal mühendislik oyunu oynadı.

Gerçekten işe yarayan savunmalar

Hiçbir tek kontrol tedarik zinciri saldırılarını durdurmaz. İşe yarayan, her biri saldırganın seçeneklerini daraltan bir kontrol yığınıdır:

  • Sabitlenmiş bağımlılıklar ve kilit dosyaları. Tam sürümleri sabitlemek ve bir kilit dosyasını sürüm denetimine almak, bir derlemenin sessizce daha yeni ve kurcalanmış bir sürümü çekememesi demektir. Güncellemeler otomatik değil, bilinçli ve gözden geçirilebilir olaylar haline gelir.
  • Asgari bağımlılıklar. Eklediğiniz her paket, güvendiğiniz bir taraftır. Daha az bağımlılık, daha küçük bir saldırı yüzeyi ve ele geçirilebilecek daha az bakımcı demektir.
  • Bağımlılık kum havuzu. LavaMoat gibi araçlar her paketin çalışma zamanında ne yapabileceğini sınırlar; böylece ele geçirilmiş bir bağımlılık serbestçe ağa ya da hassas API'lere ulaşamaz.
  • Kod imzalama. İmzalı sürümler, kullanıcıların bir ikilinin gerçek yayıncıdan geldiğini ve aktarımda değiştirilmediğini doğrulamasına olanak tanır.
  • Üçüncü taraf denetimleri. Bağımsız güvenlik firmaları kodu ve bağımlılıkları rakip gözüyle inceler; iç ekiplerin normalleştirdiğini yakalar.
  • Yeniden üretilebilir, deterministik derlemeler. En güçlü yapısal savunma ve ayrıntısıyla anlamaya değer olan.

Deterministik derlemeler, açıklandı

Normalde aynı kaynaktan iki kez derleme yapmak, birbirinden hafifçe farklı iki ikili üretebilir — zaman damgaları, dosya sıralaması ve derleme makinesi ayrıntıları içeri sızar. Bu değişkenlik bir sorundur, çünkü zararsız bir farkı kötü amaçlı bir farktan ayıramamanız anlamına gelir.

Deterministik (ya da yeniden üretilebilir) bir derleme bu değişkenliği ortadan kaldırır. Aynı kaynak kod verildiğinde, herkes, her yerde, her makinede bayt bayt aynı yapıtı üretir. Çıkarım güçlüdür: bağımsız kişiler cüzdanı genel kaynak kodundan yeniden derleyebilir ve indirdiğiniz ikilinin, bit bit, kaynağın ürettiğiyle eşleştiğini doğrulayabilir. Bir saldırgan derleme hattını kurcaladıysa ya da sonradan bir şey sıkıştırdıysa, özetler eşleşmez ve kurcalama anında görünür hale gelir.

Bu, güven modelini tersine çevirir. Artık yayıncıya sözüne güvenmek zorunda değilsiniz; doğrulama, tüm topluluğun gerçekleştirip çapraz kontrol edebileceği bir şey olur. Reproducible Builds projesi bu uygulamayı tüm ekosistem boyunca belgeler ve SLSA gibi çerçeveler, bir projeden talep edebileceğiniz derleme bütünlüğü güvence seviyelerini tanımlar.

SSP bunu nasıl uyguluyor

SSP, derleme hattını sonradan akla gelen bir şey olarak değil, tehdit modelinin bir parçası olarak ele alır. Cüzdan, Dockerfile öncelikli deterministik bir derlemeyle dağıtılır: Docker tarafından tanımlanan aynı ortam her seferinde aynı yapıtı üretir; böylece yayımlanmış bir sürüm, genel kaynaktan yeniden derlenip indirdiğinizle bit bit karşılaştırılabilir. SSP ayrıca, denetimleri hem kodu hem de dayandığı bağımlılıkları inceleyen Halborn tarafından bağımsız güvenlik incelemesinden geçti.

SSP'nin nasıl inşa edildiğine özgü bir katman daha var ve burada önemli. SSP, 2'ye 2 çoklu imza bir cüzdandır: her işlem, ayrı bir cihazdaki ikinci bir anahtar olan SSP Key'den bağımsız bir onay gerektirir. Bunun ne yapıp ne yapmadığı konusunda kesin olun. Deterministik derlemeler ve denetimler, kurcalanmış bir derlemenin en baştan dağıtılması olasılığını azaltır; bunlar ön cephedir. Ama en kötü durumda bile — bir şekilde sıyrılmış bir derlemede — ikinci anahtar, her işlemi yine de imzalaması gereken ayrı bir onay yüzeyidir.

Bu sihirli bir kalkan değildir ve ele geçirilmiş bir derlemeyi kabul edilebilir kılmaz. Yalnızca, bir cihazdaki tek bir kurcalanmış bileşenin tek başına fonlarınızı hareket ettiremeyeceği anlamına gelir. Derinlemesine savunma — mesele budur.

Kendiniz neyi kontrol edebilirsiniz

Tüm bunlardan yararlanmak için bir güvenlik mühendisi olmanıza gerek yok. Birkaç alışkanlık uzun yol kat ettirir:

  • Yalnızca resmi kaynaklardan indirin. Cüzdanı resmi sitesinden ya da mağaza kaydından alın; asla bir mesajdaki bağlantıdan veya bir arama reklamından değil. Bu, tarayıcı uzantısı hijyeni konusunda ele alınan aynı disiplindir.
  • Deterministik derlemeler ve denetimler yayımlayan projeleri tercih edin. Topluluğun sürümlerini doğrulamasına izin veren — ve bağımsız inceleme için ödeme yapan — bir proje, nasıl düşündüğü hakkında size bir şey söyler.
  • Sunulduğunda imzaları ve özetleri doğrulayın. Bir sürüm bir imza veya sağlama toplamı içeriyorsa, kontrol etmek için bir dakikanızı ayırın. Yeniden üretilebilir derlemeler yalnızca biri gerçekten karşılaştırmayı yaparsa sizi korur.
  • Genel opsec'inizi sıkı tutun. Tedarik zinciri savunmaları daha büyük bir tablonun içinde durur; hiçbir katmanın tüm yükü taşımaması için opsec kontrol listenizi düzenli olarak gözden geçirin.

Bunların hiçbiri tek bir tarafa güvenmeyi gerektirmez. Bu, kendine saklama yazılımından istediğiniz tam da o özelliktir.

Devam edin

Bir cüzdan, ancak onu inşa eden zincir kadar güvenilirdir. İyi haber şu ki bu, temiz ve yapısal bir yanıtı olan az sayıdaki güvenlik sorununda biridir: deterministik derlemeler ve bağımsız denetimler "bize güvenin"i "kendin doğrula"ya dönüştürür.

Savunmalarınızı oltalama farkındalığı, tohum ifadesi en iyi uygulamaları, tarayıcı uzantısı hijyeni ve düzenli bir opsec kontrol listesi ile inşa etmeyi sürdürün. Her biri bir kapıyı kapatır; birlikte, kendine saklama güvenliğinin gerçekte nasıl göründüğüdür.

Bu makaleyi paylaş

İlgili makaleler