Insecure deserialization güvenlik açığı nedir?

SP

Kıdemli Üye
29 Eki 2018
2,702
568
Insecure deserialization güvenlik açığı nedir?

Bu bölümde, insecure deserialization kavramının ne olduğunu ele alacağız ve web sitelerini potansiyel olarak yüksek şiddetli saldırılara nasıl maruz bırakabileceğini açıklayacağız. Tipik senaryoları vurgulayacağız ve PHP, Ruby ve Java deserialization'ı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ını da inceleyeceğiz.

Insecure deserialization güvenlik açıklarının temel kavramlarına aşinaysanız ve bunları bazı gerçekçi, kasıtlı olarak savunmasız bırakılmış hedefler üzerinde denemek istiyorsanız, bu konudaki tüm laboratuvarlara yorumlardan ulaşabilirsiniz.


41iigbh.jpg


Türkçe'de "serileştirme" anlamına gelen serialization, nesneler ve alanları gibi karmaşık veri yapılarını, sıralı bir bayt akışı olarak gönderilip alınabilecek "daha düz" bir biçime dönüştürme işlemidir. Verileri serileştirmek, işleri çok daha basit hale getirir:
  • Karmaşık verileri işlem arası belleğe (inter-process memory), bir dosyaya veya bir veritabanına yazma
  • Örneğin bir ağ üzerinden, bir uygulamanın farklı bileşenleri arasında veya bir API çağrısında karmaşık veriler gönderme
Önemli olarak, bir nesne serileştirilirken, durumu da kalıcı hale getirilir. Başka bir deyişle, nesnenin öznitelikleri atanan değerleriyle birlikte korunur.

Serialization vs deserialization

Türkçe'de "seriden çıkarma" anlamına gelen deserialization, bu bayt akışını orijinal nesnenin tamamen işlevsel bir kopyasına, tam olarak serileştirildiği durumdaki haline geri yükleme işlemidir. Web sitesinin mantığı daha sonra bu serileştirilmiş nesneyle, tıpkı diğer nesnelerle olduğu gibi etkileşime girebilir.

s7t4547.jpg


Birçok programlama dili serileştirme için yerel destek sunar. Nesnelerin tam olarak nasıl serileştirileceği dile bağlıdır. Bazı diller nesneleri ikili biçimlerde serileştirirken, diğerleri farklı derecelerde insan tarafından okunabilirliğe sahip farklı dize biçimleri kullanır. Orijinal nesnenin tüm niteliklerinin, özel alanlar da dahil olmak üzere serileştirilmiş veri akışında saklandığını unutmayın. Bir alanın serileştirilmesini önlemek için, sınıf bildiriminde açıkça "geçici" olarak işaretlenmesi gerekir.

Farklı programlama dilleriyle çalışırken serileştirmenin marshalling (Ruby) veya pickling (Python) olarak adlandırılabileceğini unutmayın. Bu terimler bu bağlamda "serileştirme" ile eş anlamlıdır.


Insecure deserialization güvenlik açıkları nasıl ortaya çıkar?

Insecure deserialization tipik olarak, kullanıcı tarafından kontrol edilebilen verilerin serileştirilmesinin ne kadar tehlikeli olabileceğine dair genel bir anlayış eksikliği nedeniyle ortaya çıkar. İdeal olarak, kullanıcı girdisi hiçbir zaman serileştirilmemelidir.

Ancak bazen web sitesi sahipleri, serileştirilmiş veriler üzerinde bir tür ek kontrol uyguladıkları için güvende olduklarını düşünürler. Bu yaklaşım genellikle etkisizdir çünkü her olasılığı hesaba katmak için doğrulama veya sanitizasyon uygulamak neredeyse imkansızdır. Bu kontroller aynı zamanda temelde kusurludur, çünkü verileri deserialize edildikten sonra kontrol etmeye dayanırlar ve bu da çoğu durumda saldırıyı önlemek için çok geç kalınır.

Güvenlik açıkları, serileştirilmiş nesnelerin genellikle güvenilir olduğu varsayıldığı için de ortaya çıkabilir. Özellikle ikili serileştirme formatına sahip diller kullanıldığında, geliştiriciler kullanıcıların verileri etkili bir şekilde okuyamayacağını veya manipüle edemeyeceğini düşünebilir. Ancak, daha fazla çaba gerektirse de, bir saldırganın ikili serileştirilmiş nesneleri istismar etmesi, dize tabanlı formatları istismar etmesi kadar mümkündür.

Deserialization tabanlı saldırılar, modern web sitelerinde var olan bağımlılıkların sayısı nedeniyle de mümkün olmaktadır. Tipik bir site, her biri kendi bağımlılıklarına da sahip olan birçok farklı kütüphaneyi uygulayabilir. Bu, güvenli bir şekilde yönetilmesi zor olan devasa bir sınıf ve yöntem havuzu oluşturur. Bir saldırgan bu sınıflardan herhangi birinin örneklerini oluşturabileceğinden, kötü amaçlı veriler üzerinde hangi yöntemlerin çağrılabileceğini tahmin etmek zordur. Bu durum özellikle bir saldırganın uzun bir dizi beklenmedik yöntem çağrısını bir araya getirerek verileri ilk kaynakla tamamen alakasız bir alıcıya aktarabilmesi halinde geçerlidir. Bu nedenle, kötü niyetli veri akışını tahmin etmek ve her olası deliği kapatmak neredeyse imkansızdır.

Kısacası, güvenilmeyen girdiyi güvenli bir şekilde serileştirmenin mümkün olmadığı söylenebilir.


Insecure deserialization etkisi nedir?

Insecure deserialization açığının etkisi çok ciddi olabilir çünkü büyük ölçüde artan bir saldırı yüzeyine giriş noktası sağlar. Bir saldırganın mevcut uygulama kodunu zararlı şekillerde yeniden kullanmasına olanak tanıyarak, genellikle uzaktan kod yürütme olmak üzere çok sayıda başka güvenlik açığına neden olur.

Uzaktan kod yürütmenin mümkün olmadığı durumlarda bile, yetki yükseltme, keyfi dosya erişimi ve hizmet reddi saldırılarına yol açabilir.


Insecure deserialization açıklarından yararlanma

https://www.turkhackteam.org/konular/insecure-deserialization-guvenlik-acigi-nedir.2046649/

Insecure deserialization güvenlik açıkları nasıl önlenir?

Genel olarak konuşmak gerekirse, kesinlikle gerekli olmadıkça kullanıcı girdisinin serileştirilmesinden kaçınılmalıdır. Potansiyel olarak mümkün kıldığı istismarların yüksek şiddeti ve bunlara karşı korunmanın zorluğu, birçok durumda faydalarından daha ağır basmaktadır.

Güvenilmeyen kaynaklardan gelen verileri yeniden serileştirmeniz 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. Bununla birlikte, tüm kontrollerin serileştirme işlemine başlamadan önce gerçekleştirilmesi gerektiğini unutmayın. Aksi takdirde çok az işe yararlar.

Mümkünse, genel serileştirme özelliklerini kullanmaktan tamamen kaçınmalısınız. Bu yöntemlerden elde edilen serileştirilmiş veriler, potansiyel olarak hassas bilgiler içeren özel alanlar da dahil olmak üzere orijinal nesnenin tüm niteliklerini içerir. Bunun yerine, en azından hangi alanların açığa çıkacağını kontrol edebilmek için kendi sınıfa özgü serileştirme yöntemlerinizi oluşturabilirsiniz.

Son olarak, güvenlik açığının daha sonra verileri işleyen gadget zincirlerinin varlığı değil, kullanıcı girdisinin serileştirmesi olduğunu unutmayın. Test sırasında tespit ettiğiniz gadget zincirlerini ortadan kaldırmaya çalışmaya güvenmeyin. Web sitenizde neredeyse kesinlikle var olan kütüphaneler arası bağımlılıklar ağı nedeniyle hepsini kapatmaya çalışmak pratik değildir. Herhangi bir zamanda, kamuya açık olarak belgelenmiş bellek bozulması açıkları da bir faktördür, bu da uygulamanızın ne olursa olsun savunmasız olabileceği anlamına gelir.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.