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
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 başlayarak, daha önce kullanımını etkinleştiren ayarlarda bile, kutu BinaryFormatter içi uygulama kullanımda özel durumlar oluşturur. 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 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ı BinaryFormatter
belirlemek 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:
- XmlSerializer ve DataContractSerializer nesne graflarını XML'de ve XML'den seri hale getirmek için. ile NetDataContractSerializerkarıştırmayın
DataContractSerializer
. - 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:
Yukarıdaki serileştiricilerin tümü kısıtlanmamış polimorfik seri durumdan çıkarma gerçekleştirir ve aynı gibi BinaryFormatter
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, 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.
- BinaryFormatter geçiş kılavuzu
- İkili serileştirme
- saldırganların kullanan
BinaryFormatter
uygulamalara nasıl saldırdığını araştırmak için YSoSerial.Net. - Seri durumdan çıkarma güvenlik açıklarıyla ilgili genel arka plan: