BinaryFormatter ve ilgili türlerin kullanımında seri durumdan çıkarma riskleri

Bu makale aşağıdaki türler için geçerlidir:

Bu makale aşağıdaki .NET uygulamaları için geçerlidir:

  • .NET Framework tüm sürümleri
  • .NET Core 2.1 - 3.1
  • .NET 5 ve üzeri

Uyarı

Tür BinaryFormatter tehlikelidir ve veri işleme için önerilmez. İşledikleri verilerin güvenilir olduğuna inansalar bile uygulamalar en kısa sürede kullanmayı BinaryFormatter bırakmalıdır. BinaryFormatter güvenli değildir ve güvenli hale getirilemiyor.

Seri durumdan çıkarma güvenlik açıkları

Seri durumdan çıkarma güvenlik açıkları, istek yüklerinin güvenli olmayan bir şekilde işlendiği bir tehdit kategorisidir. Bir uygulamada bu güvenlik açıklarından başarıyla yararlanan bir saldırgan, hedef uygulamada hizmet reddine (DoS), bilgilerin açığa çıkmasına veya uzaktan kod yürütülmesine neden olabilir. Bu risk kategorisi tutarlı bir şekilde OWASP İlk 10'u oluşturur. Hedefler arasında C/C++, Java ve C# gibi çeşitli dillerde yazılmış uygulamalar bulunur.

.NET'te en büyük risk hedefi, verileri seri durumdan BinaryFormatter çıkarmak için türünü kullanan uygulamalardır. BinaryFormatter gücü ve kullanım kolaylığı nedeniyle .NET ekosistemi genelinde yaygın olarak kullanılmaktadır. Ancak bu güç, saldırganlara hedef uygulama içindeki denetim akışını etkileme olanağı sağlar. Başarılı saldırılar, saldırganın hedef işlem bağlamında kod çalıştırabilmesine neden olabilir.

Daha basit bir benzetme olarak, yük üzerinden çağrılmasının BinaryFormatter.Deserialize bu yükü tek başına yürütülebilir dosya olarak yorumlamaya ve başlatmaya eşdeğer olduğunu varsayalım.

BinaryFormatter güvenlik açıkları

Uyarı

Yöntemi BinaryFormatter.Deserialize güvenilmeyen giriş ile kullanıldığında hiçbir zaman güvenli değildir. Tüketicilerin bunun yerine bu makalenin devamında özetlenen alternatiflerden birini kullanmayı düşünmelerini kesinlikle öneririz.

BinaryFormatter seri durumdan çıkarma güvenlik açıkları iyi anlaşılmış bir tehdit kategorisi olmadan önce uygulandı. Sonuç olarak, kod modern en iyi yöntemleri izlemez. Yöntemi, Deserialize saldırganların uygulamaları tüketmeye karşı DoS saldırıları gerçekleştirmesi için vektör olarak kullanılabilir. Bu saldırılar uygulamanın yanıt vermemesini veya beklenmeyen işlem sonlandırması ile sonuçlanmasına neden olabilir. Bu saldırı kategorisi bir veya başka BinaryFormatter bir SerializationBinder yapılandırma anahtarıyla azaltılamaz. .NET bu davranışı tasarım gereği kabul eder ve davranışı değiştirmek için bir kod güncelleştirmesi yayınlamaz.

BinaryFormatter.Deserialize bilgilerin açığa çıkması veya uzaktan kod yürütülmesi gibi diğer saldırı kategorilerine karşı savunmasız olabilir. Özel SerializationBinder gibi özelliklerin kullanılması bu riskleri düzgün bir şekilde azaltmak için yetersiz olabilir. .NET'in pratikte bir güvenlik güncelleştirmesi yayımlayamadığı yeni bir güvenlik açığının keşfedilmesi olasılığı vardır. Tüketiciler kendi senaryolarını değerlendirmeli ve bu risklere maruz kalma olasılıklarını dikkate almalıdır.

Tüketicilerin BinaryFormatter uygulamalarında bireysel risk değerlendirmeleri gerçekleştirmelerini öneririz. kullanılıp kullanılmayacağını BinaryFormatterbelirlemek tüketicinin sorumluluğundadır. Kullanmayı düşünüyorsanız güvenlik, teknik, saygınlık, yasal ve yasal sonuçları değerlendirmeniz gerekir.

Tercih edilen alternatifler

.NET, güvenilmeyen verileri güvenli bir şekilde işleyebilen çeşitli yerleşik serileştiriciler sunar:

Tehlikeli alternatifler

Aşağıdaki serileştiricilerden kaçının:

Yukarıdaki serileştiricilerin tümü kısıtlanmamış polimorfik seri durumdan çıkarma gerçekleştirir ve aynı gibi BinaryFormattertehlikelidir.

Verilerin güvenilir olduğunu varsayma riskleri

Genellikle bir uygulama geliştiricisi yalnızca güvenilir girişi işlediğini düşünebilir. Güvenli giriş durumu bazı nadir durumlarda doğrudur. Ancak, bir yükün geliştirici bunu fark etmeden bir güven sınırını aşması çok daha yaygındır.

Çalışanların hizmetle etkileşime geçmek için iş istasyonlarındaki bir masaüstü istemcisini kullandığı bir şirket içi sunucu düşünün. Bu senaryo, kullanımın BinaryFormatter kabul edilebilir olduğu "güvenli" bir kurulum olarak saf olarak görülebilir. Ancak bu senaryo, kuruluş genelinde yayılabilmesi için tek bir çalışanın makinesine erişim sağlayan kötü amaçlı yazılım vektörü sunar. Bu kötü amaçlı yazılım, çalışanın iş istasyonundan arka uç sunucusuna geçebilmek için kuruluşun kullanım BinaryFormatter alanından yararlanabilir. Daha sonra şirketin hassas verilerinin dışarı sızmasını sağlayabilir. Bu tür veriler ticari gizli dizileri veya müşteri verilerini içerebilir.

Kaydetme durumunu kalıcı hale getirmek için kullanan BinaryFormatter bir uygulamayı da göz önünde bulundurun. Kendi sabit sürücünüzde veri okuma ve yazma küçük bir tehdidi temsil ettiğinden, bu ilk başta güvenli bir senaryo gibi görünebilir. Ancak, belgeleri e-posta veya İnternet üzerinden paylaşmak yaygın bir durumdur ve çoğu son kullanıcı indirilen bu dosyaların açılmasını riskli bir davranış olarak algılamaz.

Bu senaryo, kötü amaçlı etki için kullanılabilir. Uygulama bir oyunsa, dosyaları paylaşan kullanıcılar farkında olmadan kendilerini riske attırır. Geliştiricilerin kendileri de hedeflenebilir. Saldırgan, geliştiricilerin teknik desteğine e-posta göndererek kötü amaçlı bir veri dosyası ekleyebilir ve destek personelinden dosyayı açmasını isteyebilir. Bu tür bir saldırı, saldırgana kuruluşta bir yer verebilir.

Başka bir senaryo da veri dosyasının bulut depolama alanında depolandığı ve kullanıcının makineleri arasında otomatik olarak eşitlendiği senaryodur. Bulut depolama hesabına erişim sağlayabilen bir saldırgan veri dosyasını zehirleyebilir. Bu veri dosyası kullanıcının makineleriyle otomatik olarak eşitlenir. Kullanıcı veri dosyasını bir sonraki açışında saldırganın yükü çalışır. Bu nedenle saldırgan, tam kod yürütme izinleri elde etmek için bulut depolama hesabının güvenliğinin aşılmasından yararlanabilir.

Masaüstü yükleme modelinden bulut öncelikli bir modele taşınan bir uygulamayı düşünün. Bu senaryo, bir masaüstü uygulamasından veya zengin istemci modelinden web tabanlı bir modele taşınan uygulamaları içerir. Masaüstü uygulaması için çekilen tehdit modelleri bulut tabanlı hizmet için geçerli olmayabilir. Masaüstü uygulamasının tehdit modeli belirli bir tehdidi "istemcinin kendisine saldırması ilginç değil" olarak kapatabilir. Ancak bulut hizmetinin kendisine saldıran bir uzak kullanıcı (istemci) dikkate alındığında aynı tehdit ilginç hale gelebilir.

Not

Genel olarak, serileştirmenin amacı bir nesneyi bir uygulamaya veya uygulamaya aktarmaktır. Tehdit modelleme alıştırması neredeyse her zaman bu tür bir veri aktarımını güven sınırını aşıyor olarak işaretler.

Ayrıca bkz.