Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
Dikkat
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.
Not
.NET 9'dan itibaren, daha önce kullanımına izin veren ayarlara rağmen, yerleşik BinaryFormatter uygulaması kullanıldığında istisnalar fırlatır. Bu ayarlar da kaldırılır. Daha fazla bilgi için BinaryFormatter geçiş kılavuzuna bakın.
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, BinaryFormatter türünü kullanarak verileri seri durumdan çıkaran uygulamalar en büyük risk hedefidir.
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 yapacak olursak, BinaryFormatter.Deserialize üzerinden bir yükü çağırmanın, o yükü tek başına bir yürütülebilir dosya gibi yorumlamak ve başlatmakla 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 deserializasyon güvenlik açıklarının iyi anlaşıldığı bir tehdit kategorisi haline gelmesinden önce uygulandı. Sonuç olarak, kod modern en iyi yöntemleri izlemez.
Deserialize yöntemi, saldırganların hedef uygulamalarına DoS saldırıları gerçekleştirmesi için bir 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 için SerializationBinder veya başka hiçbir BinaryFormatter yapılandırma anahtarı çözüm değildir. .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 açık olabilir. Özel SerializationBinder gibi özelliklerin kullanılması, bu riskleri düzgün bir şekilde azaltmak için yetersiz olabilir. Bir saldırganın mevcut azaltmaları atlayan yeni bir açık keşfetme olasılığı vardır. .NET, bu tür atlamalara yanıt olarak düzeltme ekleri yayımlamayı taahhüt etmez. Ayrıca, bu tür düzeltme eklerinin geliştirilmesi veya dağıtılması teknik olarak uygun olmayabilir. Senaryolarınızı değerlendirmeli ve bu risklere maruz kalma olasılığınızı göz önünde bulundurmalısınız.
Tüketicilerin BinaryFormatter uygulamalarında bireysel risk değerlendirmeleri gerçekleştirmelerini öneririz.
BinaryFormatter kullanılıp kullanılmayacağına karar vermek tamamen tüketicinin sorumluluğundadır. Kullanmayı düşünüyorsanız güvenlik, teknik, itibar, yasal ve düzenleyici 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:
-
XmlSerializer ve DataContractSerializer nesne graflarını XML'e ve XML'den serileştirmek için. ile
DataContractSerializerkarıştırmayınNetDataContractSerializer. - BinaryReader ve BinaryWriter XML ve JSON için.
- System.Text.Json Nesne graflarını JSON olarak seri hale getirmek için API'ler.
Tehlikeli alternatifler
Aşağıdaki serileştiricilerden kaçının:
Önceki serileştiricilerin tümü kısıtlanmamış polimorfik deserilizasyon gerçekleştirir ve BinaryFormatter kadar tehlikelidir.
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, BinaryFormatter kullanımının kabul edilebilir olduğu "güvenli" bir yapılandırma olarak naif bir yaklaşımla değerlendirilebilir. 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 sunucunun arka ucuna geçiş yapabilmek için kuruluşun BinaryFormatter kullanımı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çtığı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 bir uygulamadan 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.
- BinaryFormatter geçiş kılavuzu
- İkili serileştirme
- YSoSerial.Net, saldırganların
BinaryFormatterkullanan uygulamalara nasıl saldırdığını araştırmak için kullanılır. - Seri durumdan çıkarma güvenlik açıklarıyla ilgili genel arka plan: