Bu bölümde, Insecure Deserialization ne olduğunu ele alacağız ve web sitelerini potansiyel olarak yüksek önemdeki saldırılara nasıl maruz bırakabileceğini açıklayacağız. Tipik senaryoları vurgulayacağız ve PHP, Ruby ve Java serisini kaldırmanın somut örneklerini kullanarak yaygın olarak uygulanabilir bazı teknikleri göstereceğiz. Ayrıca, kendi web sitelerinizdeki Insecure Deserialization güvenlik açıklarından kaçınmanın bazı yollarına da bakacağız.
Insecure Deserialization kullanılması, zor olduğu için bir üne sahiptir. Ancak, bazen düşündüğünüzden çok daha basit olabilir. Seri durumdan çıkarma konusunda yeniyseniz, bu bölüm öncelikle kendinizi tanımanız gereken temel arka plan bilgilerini içerir. Seri durumdan çıkarmanın temellerini zaten biliyorsanız, onu nasıl kullanacağınızı öğrenmeye doğrudan geçebilirsiniz.
Serialization nedir?
Serialization , nesneler ve bunların alanları gibi karmaşık veri yapılarını sıralı bir bayt akışı olarak gönderilip alınabilen “daha düz” bir biçime dönüştürme işlemidir. Verileri seri hale getirmek, şunları yapmayı çok daha basit hale getirir:
- İşlemler arası belleğe, bir dosyaya veya bir veritabanına karmaşık veriler yazın
- Örneğin bir ağ üzerinden, bir uygulamanın farklı bileşenleri arasında veya bir API çağrısında karmaşık veriler gönderin
En önemlisi, bir nesneyi serileştirirken, durumu da kalıcıdır. Başka bir deyişle, nesnenin nitelikleri, atanan değerleriyle birlikte korunur.
Serialization vs deserialization
Deserialization , bu bayt akışını, orijinal nesnenin tam olarak seri hale getirildiği zamanki tam durumunda tam işlevsel bir kopyasına geri yükleme işlemidir. Web sitesinin mantığı, daha sonra, diğer herhangi bir nesnede olduğu gibi, bu seri durumdan çıkarılmış nesneyle etkileşime girebilir.
Insecure Deserialization Nedir?
Insecure Deserialization, kullanıcı tarafından kontrol edilebilen verilerin bir web sitesi tarafından seri durumdan çıkarılmasıdır. Bu , saldırganın zararlı verileri uygulama koduna geçirmek için serileştirilmiş nesneleri değiştirmesine olanak tanır.
Serileştirilmiş bir nesneyi tamamen farklı bir sınıftan bir nesneyle değiştirmek bile mümkündür. Endişe verici bir şekilde, web sitesinde mevcut olan herhangi bir sınıfın nesneleri, hangi sınıftan beklendiğine bakılmaksızın seri hale getirilecek ve somutlaştırılacaktır. Bu nedenle, Insecure Deserialization, bazen bir “nesne yerleştirme” güvenlik açığı olarak bilinir.
Beklenmeyen bir sınıfın nesnesi bir istisnaya neden olabilir. Ancak bu zamana kadar, hasar zaten yapılmış olabilir. Birçok seri durumdan çıkarma tabanlı saldırı, seri durumdan çıkarma tamamlanmadan önce tamamlanır.
Bu , web sitesinin kendi işlevselliği kötü amaçlı nesneyle doğrudan etkileşime girmese bile, seri durumdan çıkarma işleminin kendisinin bir saldırı başlatabileceği anlamına gelir. Bu nedenle mantığı güçlü yazılan dillere dayanan web siteleri de bu tekniklere karşı savunmasız kalabilir.
Insecure Deserialization Güvenlik Açıkları Nasıl Ortaya Çıkıyor?
Insecure Deserialization, tipik olarak, kullanıcı tarafından kontrol edilebilen verilerin seri durumdan çıkarmanın ne kadar tehlikeli olabileceğine dair genel bir anlayış eksikliği olduğu için ortaya çıkar. İdeal olarak, kullanıcı girişi hiçbir zaman seri durumdan çıkarılmamalıdır.
Bununla birlikte, bazen web sitesi sahipleri, seri durumdan çıkarılmış veriler üzerinde bir tür ek kontrol uyguladıkları için güvenli olduklarını düşünürler. Bu yaklaşım genellikle etkisizdir, çünkü her olasılığı hesaba katmak için doğrulama veya temizleme uygulamak neredeyse imkansızdır. Bu kontroller ayrıca, verilerin seri durumdan çıkarıldıktan sonra kontrol edilmesine dayandıkları için temelde kusurludur ve çoğu durumda saldırıyı önlemek için çok geç olacaktır.
Seri durumdan çıkarılmış nesnelerin genellikle güvenilir olduğu varsayıldığından güvenlik açıkları da ortaya çıkabilir. Özellikle ikili Serialization biçimine sahip dilleri kullanırken geliştiriciler, kullanıcıların verileri etkili bir şekilde okuyamadığını veya değiştiremeyeceğini düşünebilir. Ancak, daha fazla çaba gerektirse de, bir saldırganın ikili serileştirilmiş nesnelerden yararlanması, dize tabanlı biçimleri kullanması kadar mümkündür.
Modern web sitelerinde bulunan bağımlılıkların sayısı nedeniyle seri durumdan çıkarma tabanlı saldırılar da mümkün kılınmıştır. Tipik bir site, her biri kendi bağımlılıklarına sahip olan birçok farklı kitaplığı uygulayabilir. Bu, güvenli bir şekilde yönetilmesi zor olan büyük bir sınıf ve yöntem havuzu oluşturur. Saldırgan bu sınıflardan herhangi birinin örneğini oluşturabileceğinden, kötü amaçlı veriler üzerinde hangi yöntemlerin çağrılabileceğini tahmin etmek zordur. Bu, özellikle bir saldırgan, verileri ilk kaynakla tamamen alakasız bir havuza geçirerek uzun bir dizi beklenmeyen yöntem çağrısını birbirine zincirleyebiliyorsa geçerlidir. Bu nedenle, kötü amaçlı veri akışını tahmin etmek ve her olası deliği tıkamak neredeyse imkansızdır.
Kısacası, güvenilmeyen girdileri güvenli bir şekilde seri durumdan çıkarmanın mümkün olmadığı söylenebilir.
Insecure Deserialization etkisi nedir?
Insecure Deserialization etkisi çok şiddetli olabilir, çünkü büyük ölçüde artırılmış bir saldırı yüzeyine bir giriş noktası sağlar. Saldırganın mevcut uygulama kodunu zararlı şekillerde yeniden kullanmasına izin vererek, genellikle uzaktan kod yürütme gibi çok sayıda başka güvenlik açığına neden olur.
Uzaktan kod yürütmenin mümkün olmadığı durumlarda bile, Insecure Deserialization, ayrıcalık yükselmesine, rastgele dosya erişimine ve hizmet reddi saldırılarına yol açabilir.
Insecure Deserialization güvenlik açıklarından nasıl yararlanılır?
Artık Serialization ve Deserialization temellerini öğrendiğinize göre, Insecure Deserialization güvenlik açıklarından nasıl yararlanabileceğinize bakabiliriz.
Insecure Deserialization güvenlik açıkları nasıl önlenir?
Genel olarak konuşursak, kesinlikle gerekli olmadıkça kullanıcı girdisinin seri hale getirilmesinden kaçınılmalıdır. Potansiyel olarak etkinleştirdiği yüksek güvenlik açıkları ve bunlara karşı korumanın zorluğu, birçok durumda faydalarından daha ağır basar.
Güvenilmeyen kaynaklardan gelen verileri seri durumdan çıkarmanız gerekiyorsa, verilerin kurcalanmadığından emin olmak için sağlam önlemler alın. Örneğin, verilerin bütünlüğünü kontrol etmek için bir dijital imza uygulayabilirsiniz. Ancak, seri durumdan çıkarma işlemine başlamadan önce tüm kontrollerin yapılması gerektiğini unutmayın . Aksi takdirde, çok az kullanımları vardır.
Mümkünse, genel seriyi kaldırma özelliklerini tamamen kullanmaktan kaçınmalısınız. Bu yöntemlerden seri hale getirilmiş veriler, potansiyel olarak hassas bilgiler içeren özel alanlar da dahil olmak üzere orijinal nesnenin tüm özniteliklerini içerir. Bunun yerine, en azından hangi alanların açığa çıkacağını kontrol edebilmek için kendi sınıfa özgü Serialization yöntemlerinizi oluşturabilirsiniz.
Son olarak, güvenlik açığının, daha sonra verileri işleyen gadget zincirlerinin varlığı değil, kullanıcı girdisinin seri hale getirilmesi olduğunu unutmayın. Test sırasında tanımladığınız gadget zincirlerini ortadan kaldırmaya çalışmayın. Web sitenizde neredeyse kesinlikle var olan kütüphaneler arası bağımlılıklar ağı nedeniyle hepsini denemek ve takmak pratik değildir. Herhangi bir zamanda, genel olarak belgelenmiş bellek bozulması istismarları da bir faktördür; bu, uygulamanızın ne olursa olsun savunmasız olabileceği anlamına gelir.
Ozztech Bilgi Güvenliği Teknolojileri’nden Penetrasyon testi (sızma testi) için yardım alabilir ve işletmenizi daha güvenilir bir hale getirebilirsiniz.