
LavaMoat'ın yazılım geliştirme döngüsünde üç katmanlı koruma sunduğunu ve uygulamanızı bugün bir saldırıdan nasıl koruyabileceğinizi öğrenin.

14 Aralık'ta Ledger'ın yazılım kütüphanelerinden biri olan Ledger Connect Kit, bir yazılım tedarik zinciri saldırısına maruz kaldı.
İhlalın, yayımlama erişimi hâlâ aktif olan eski bir çalışanın kimlik avı saldırısına kurban gitmesiyle başladığı ileri sürülmektedir. Bu saldırı, söz konusu kişinin npm kimlik bilgilerini ele geçirdi. npm (Node Package Manager), web geliştirme sektöründe ve web3 ekosisteminde yaygın biçimde kullanılan, açık kaynaklı yazılım kütüphanelerini içe aktarmaya yarayan bir araçtır.
Bu saldırı sayesinde ilgili kütüphanenin kötü amaçlı bir sürümü yayımlandı. Söz konusu kütüphane, Ethereum ekosistemindeki pek çok web uygulamasına bir İçerik Dağıtım Ağı (CDN) aracılığıyla canlı güncelleme yöntemiyle dahil edilmektedir. Bu durum, kötü amaçlı kodun söz konusu web uygulamalarına enjekte edilmesiyle sonuçlandı.
LavaMoat, web uygulama geliştiricilerinin karşılaştığı yazılım tedarik zinciri güvenlik sorunlarını çözmeye yardımcı olmak amacıyla özel olarak geliştirilmiş bir araçlar bütünüdür.
LavaMoat, yazılım geliştirme yaşam döngüsünün üç farklı noktasında tedarik zinciri saldırılarına karşı koruma sağlar: bağımlılık kurulumu sırasında (tüm bu kütüphaneleri içe aktardığınızda), derleme zamanında (uygulama İnternet üzerinden sunulmaya hazırlanırken) ve çalışma zamanında (derlenmiş uygulama çalışırken).
LavaMoat, çalışma zamanı korumaları açısından benzersizdir. Geliştirme sürecinde kullanılabilecek başka araçlar da mevcuttur; örneğin yalnızca bilinen güvenlik açıklarına ilişkin uyarılar sunan snyk.io ya da daha kapsamlı kod analizi yapan ve bulguların bir merkezi veritabanına raporlanmasını beklemeyen socket.dev. Bu tarama araçları son derece değerli bir işlev üstlenir ve socket.dev'in GitHub Entegrasyonunu kullanmanızı öneririz.
Ancak bu araçlar çalışma zamanında herhangi bir güvence sağlayamaz. Bu nedenle yalnızca bu araçlara güvenmeyi yetersiz buluyoruz.
LavaMoat'ın güvenlik korumaları, uygulamanızın bağımlılıklarına yalnızca belirlenmiş yeteneklerin devredilmesine dayanır.
Bu ne anlama geliyor? Okumaya devam edin ve LavaMoat'ın nasıl çalıştığını ve nasıl kullanıldığını daha iyi anlamak için Devcon 6 konuşmamıza göz atın.
Bir sistemi yeteneklere sahip olarak düşünebilirsiniz: bilgi gösterme, yerel olarak depolanan verileri okuma ya da sunuculara web istekleri veya cüzdanlara işlem istekleri gibi diğer sistemlere istek gönderme gibi yapabilecekleri şeyler ve bu yetenekleri başkalarına devretme imkânı.
Bir yeteneği devrettiğinizde, o yeteneğin sınırlı veya kısıtlanmış bir sürümünü sunabilirsiniz. Bu, zayıflatma (attenuation) olarak bilinir.
Bu üç bileşen, nesne yeteneği güvenlik modelinin temelini oluşturur. Bu modeli kullanarak kimin ne yapma yetkisine sahip olduğunu anlayabilirsiniz.
Tarayıcılar, uygulamaları sandbox ortamında tutma; yani birbirinden yalıtarak bilgisayarınıza veya diğer web sitelerine müdahale etmelerini önleme konusunda makul bir iş çıkarır.
Ancak tarayıcılar, web uygulama geliştiricilerine uygulamalarının belirli bölümlerini daha ileri düzeyde sandbox ortamına almak için sağlam yapı taşları sunmaz. Bu yapı taşları, uygulamanın belirli bileşenlerinin tüm uygulamayı tehlikeye atmasını engelleyebilirdi.
Bu nedenle, uygulamanıza bir kütüphane içe aktardığınızda, aslında tüm yetenekleri o kütüphaneye devretmiş olursunuz. Çoğu JavaScript kütüphanesinin yalnızca kendi kodunu değil, farklı yazarlar tarafından yazılmış bir kütüphane koleksiyonunu da beraberinde getirdiği gerçeği bu durumu daha da karmaşık hâle getirir.
@ledger/connect-kit-loader kütüphanesi, Ledger'ın kendi ürünleriyle entegrasyon için önerdiği yöntemdir. Bu paket, kütüphanenin en güncel sürümünü bir CDN'den yükleyen ince bir sarmalayıcıdır.
Bu durum, uygulamanızın her zaman kütüphanenin en son sürümüne sahip olacağı anlamına gelse de web uygulamanızın kontrolünü fiilen Ledger loader kütüphanesine devrettiğiniz anlamına da gelir; bu kütüphane de kontrolü CDN'de barındırılan koda devreder.
Devir zincirini şu şekilde modelleyebilirsiniz:
**@ledger/connect-kit-loader** → jsDelivr CDN → npm → Ledger → Ledger eski çalışanı → saldırganBu bile bir basitleştirmedir. jsDeliver CDN gibi tek bir bileşene yakından bakıldığında, tedarik zincirinin parçası olan ve saldırı başlatmak için potansiyel dayanak noktaları oluşturan çok sayıda ek hizmetin şaşırtıcı karmaşıklığı ortaya çıkabilir.
Tarayıcıların kendileri, bir uygulamanın alt bileşenlerinin yeteneklerini sınırlamak için fazla araç sunmasa da JavaScript dili bu görev için aslında oldukça uygundur.
JavaScript, dikkatli bir çabayla, kodun neye erişebileceğini sınırlayan Compartment'lar oluşturmanıza olanak tanır. Compartment'ların bir uygulaması için Agoric'in Hardened Javascript çalışmasına bakabilirsiniz.
LavaMoat'ın bunu önleyip önleyemeyeceğini sormak, bir daire testeresindeki dokunulduğunda dur özelliğinin uçurumdan atlarken testereyi tutarsanız işe yarayıp yaramayacağını sormaya benziyor; evet, parmaklarınız muhtemelen atlayıştan sonra elinize bağlı kalırdı.
Prensipte, @ledgerhq/connect-kit-loader'ın çalışma biçimi, uygulama geliştiricisini yerleşik güvenlik en iyi uygulamalarının büyük bölümünden vazgeçmeye zorlar. Ancak her şey kaybolmuş değil.
LavaMoat'ın (ve diğer tedarik zinciri güvenlik araçlarının) size yardımcı olmasını sağlamanın en iyi yolu, loader'a tüm kontrolü devretmeden @ledgerhq/connect-kit'i doğrudan kullanmaktır.
LavaMoat, "event-stream olayı" olarak da bilinen Copay cüzdan hack'i gibi saldırıları hafifletmek amacıyla tasarlanmıştır ve bu tür saldırılara karşı iyi koruma sağlar. Peki LavaMoat bu farklı saldırıya karşı nasıl bir performans gösterir?
Ne yazık ki yanıt, kadim "duruma göre değişir" ifadesidir. LavaMoat, uygulama çalışma zamanına entegre olma biçimi nedeniyle kütüphane geliştiricileri için değil, uygulama geliştiricileri için bir araçtır. Bu, bazı web uygulamalarının LavaMoat ile kendilerini koruyabilmiş olabileceği anlamına gelse de LavaMoat kullanmayan uygulamalar yine de savunmasız kalacaktır.
Ayrıca LavaMoat yalnızca geliştiriciler tarafından belirlenen bir politikayı uygular. Güvensiz bir politika belirlerseniz LavaMoat sizi koruyamaz.
LavaMoat, bir bağımlılığın hangi yeteneklere —global platform API'leri biçiminde— sahip olması gerektiğini belirlemek için bir politika dosyası kullanır. Bunu kolaylaştırmak amacıyla LavaMoat'ın bir paketi analiz etmesini ve paketin çalışması için neye ihtiyaç duyduğunu otomatik olarak belirlemesini sağlayabilirsiniz. Bu, statik analiz olarak bilinir.
Statik analiz, bazı kodların ne yapmaya çalıştığını anlamanın kusurlu bir yöntemi olsa da LavaMoat statik analizi yalnızca kolaylık amacıyla kullanır ve politika dosyası oluşturmanıza yardımcı olur. Çalışma zamanında politikalarını uygulamak için statik analiz kullanmaz. Oluşturulan politikalar daha sonra geliştirici tarafından incelenir, düzenlenir ve onaylanır.
İlk soruya bir yanıt şudur: Evet, LavaMoat uygulamanızı ve kullanıcılarınızı tedarik zinciri saldırılarından koruyabilir; paketlerin çalışma zamanında yeni kod yükleme yeteneğine sahip olmasını engelleyerek. Doğru yapılandırdıysanız ve aşırı güçlü yetenekler talep etmeyen bağımlılıklar kullandıysanız sizi koruyabilir.
Bir diğer yanıt ise şudur: Hayır. LavaMoat'ı **@ledgerhq/connect-kit-loader**'ın normal şekilde çalışmasına ve istediği herhangi bir kodu çalıştıran bir script etiketi enjekte etmesine izin verecek şekilde yapılandırdıysanız, LavaMoat çalışma zamanının dışında, saldırı yine de başarıya ulaşırdı. Bu durum, LavaMoat'ın geriye dönük uyumluluk ile daha güvenli bir sistem arasındaki uzlaşısının bir parçasıdır. LavaMoat, maksimum uyumluluk sağlamak amacıyla son derece esnektir; böylece uygulamanızı sıfırdan yeniden yazmak zorunda kalmadan entegre edebilirsiniz. Makul politikalar belirlemek ve makul bağımlılıklar seçmek yine de uygulama geliştiricisinin sorumluluğundadır. LavaMoat, global tarayıcı API'lerini seçici biçimde sağlamanıza olanak tanır; ancak bazı global API'ler, üçüncü taraf bir pakete güvenle verilmek için fazla güç içerir. Bu güçleri daha da sınırlamak için çeşitli yöntemler araştırıyoruz; ancak kontrollerini sınırlamak için hiçbir çaba göstermeyen paketler için işe yarayan bir şey üretmek zorlu olmaya devam etmektedir.
LavaMoat'ın Scuttling adlı özelliği, @ledgerhq/connect-kit-loader tarafından yüklenen hem kötü amaçlı hem de orijinal pakete müdahale ederdi. Scuttling, LavaMoat sandbox'ı dışında çalışan kodun yeteneklere erişimini kaldırır. Bu, güvensiz @ledgerhq/connect-kit-loader'ı kullanmanızı baştan engelleyerek sizi @ledgerhq/connect-kit'i doğrudan kullanmaya ve dolayısıyla güncelleme sürecini sahiplenmeye yönlendirir; böylece uygulamanızda çalışan kod üzerinde tam kontrolü elinizde tutarsınız.
Yarınki bir saldırıya karşı şu an yapabilecekleriniz:
Ücretsiz Socket.dev bağımlılık monitörünü ekleyin (2 dakika).
Kaynak kontrolü sıkı tutulmuş bir CSP ekleyin (30 dakika).
LavaMoat'ı derleme sisteminize ve uygulama paketinize ekleyin (1 saat).
Yapay zeka tarafından çevrildi. Hatalar içerebilir. Lütfen her zaman bilgileri doğrulayın.