MKS Commit Bu, bir arka kapı açtı.
Kullanıcı tarafından yüklenen nesneleri işlemek için yeni bir özellik entegre edildi. Her şey testlerden geçti, ancak haftalar sonra yapılan bir sızma testi, saldırganların sunucuda komut çalıştırabildiğini ortaya çıkardı; bu, kodda gizlenmiş güvensiz seri hale getirme işleminin bir sonucuydu. Seri hale getirme işleminden uzaktan kod yürütmeye kadar olan boşluk, özellikle açık kaynak paketlerinden veya dahili hizmetlerden gelen seri hale getirilmiş verilerin doğrulama yapılmadan güvenilir kabul edildiği durumlarda tehlikeli derecede küçük olabilir.
Kodda Seri Hale Getirme (Deserialization) Nedir, Neden Risklidir ve Nerelerde Gizlenir?
Yazılım geliştirici terimleriyle, seri durumdan çıkarma (deserializasyon) nedir? Yapılandırılmış verileri, JSON'u, XML'i, ikili formatları veya dile özgü seri hale getirilmiş nesneleri alıp, bunları bellekteki nesnelere geri dönüştürme işlemidir.
Kendi başına, seri durumdan çıkarma Zararsızdır ve yaygındır, örneğin:
- JavaNesneleri okuma ile: Nesne Giriş Akışı
- PythonVeriler yükleniyor: turşu.yükle
- node.jsJSON'u ayrıştırmak ile JSON.parse
Güvenilmeyen verilere doğrulama yapılmadan seri durumdan çıkarma işlemi uygulandığında risk ortaya çıkar. Saldırgan, mevcut kod yollarının amaçlanmayan şekillerde kullanılmasıyla tetiklenen bir "gadget zinciri" oluşturabilecek girdiler üretebilir ve bu da uzaktan kod yürütülmesine yol açabilir.
emniyetsiz seri durumdan çıkarma sıklıkla şurada bulunur:
- Açık kaynak paketleri güvenli olmayan varsayılan değerlerle
- Özel kod Bu, serileştirilmiş girdinin güvenilir olduğunu varsayar.
- Üçüncü taraf API'ler Doğrulama yapılmadan serileştirilmiş nesneler döndürülüyor.
- Yapı öğeleri örneğin:
- Java .ser Önceden serileştirilmiş nesneler içeren dosyalar.
- Python .pkl Makine öğrenimi iş akışlarındaki model dosyaları.
- Docker imajlarına veya dağıtım konteynerlerine yerleştirilmiş serileştirilmiş yapılandırma nesneleri
- Java .ser Önceden serileştirilmiş nesneler içeren dosyalar.
- Test fikstürleri örneğin:
- Üretim anlık görüntülerinden kopyalanan eski serileştirilmiş test verileri.
- Performans veya regresyon testleri için harici depolardan indirilen serileştirilmiş veri paketleri.
- Üretim anlık görüntülerinden kopyalanan eski serileştirilmiş test verileri.
Bu dosyalar bir depoya eklenebilir ve testler veya dağıtımlar sırasında otomatik olarak yüklenerek güvensiz durumlara yol açabilir. seri durumdan çıkarma in CI/CD pipelineKod üretime geçmeden önce bile.
Güvenliksiz Seri Hale Getirmeden Uzaktan Kod Yürütmeye: Saldırı Yolu
Güvenli olmayan seri hale getirme işlemlerine yönelik istismar zinciri genellikle şu kalıplardan birini izler:
- Güvenilmeyen girdi uygulamaya giriyor.
- Güvenli olmayan seri durumdan çıkarma işlemi, nesneleri herhangi bir kısıtlama olmaksızın yeniden oluşturur.
- Bir aygıt zinciri, mevcut işlevselliği beklenmedik şekillerde tetikler.
- Saldırgan ayrıcalıklarını yükselterek uzaktan kod yürütme olanağı elde eder.
Varyasyonlar:
- Java gadget zincirleri, Apache Commons gibi eski kütüphaneleri kullanır.
- Python .pkl İçine kötü amaçlı nesneler yerleştirilmiş model yükleme.
- Node.js ile JSON ayrıştırma değerlendir() veya dinamik içe aktarmalar.
debi:
Birleştirme İşleminden Önce Güvenli Olmayan Seri Hale Getirme İşlemlerini Nasıl Tespit Edebilirsiniz?
Kod birleştirme işleminden önce güvensiz seri hale getirme işlemlerini yakalamak, dağıtımdan sonra düzeltmekten çok daha ucuzdur. Otomatik analiz ve proaktif testin birleşimi en iyi sonucu verir:
- Statik Uygulama Güvenlik Testi (SAST):
- Riskli API'leri tespit etmek için tarayıcıları yapılandırın, örneğin: Nesne Giriş Akışı, turşu.yükle, ve YAML.yükle Güvenli bir yükleyici olmadan.
- Hem kaynak kodunu hem de derleme/test çıktılarını güvensiz unsurlar açısından tarayın. seri durumdan çıkarma desenler.
- Bulguları doğrudan görüntüle pull requests Böylece geliştiriciler birleştirmeden önce bu sorunları çözebilirler.
- Riskli API'leri tespit etmek için tarayıcıları yapılandırın, örneğin: Nesne Giriş Akışı, turşu.yükle, ve YAML.yükle Güvenli bir yükleyici olmadan.
- CI/CD Entegrasyonu
:
Örnek iş akışı:
- Üretim dallarına güvenli olmayan kodların ulaşmasını önlemek için, kritik güvensiz seri hale getirme bulgularında blok birleştirmeleri kullanılır.
- Simüle Edilmiş Kötü Amaçlı Girişlerle Birim Testleri:
- Oluştur zararsız, kontrollü yükler Bunlar, yaygın seri hale getirilmiş saldırı nesnelerini taklit eder.
- Uygulamanın bu girdileri nasıl işlediğini test edin; körü körüne işlemek yerine reddetmeli, temizlemeli veya kaydetmelidir.
- Bu testleri otomatikleştirilmiş testlere dahil edin. pipeline Bu sayede her çekme isteğinde çalışırlar ve güvenli olmayan seri hale getirme davranışlarını erken aşamada yakalarlar.
- Test yüklerinin çalıştırılamaz ve depoda saklanmasının güvenli olduğundan emin olun, yalnızca tespit mantığına odaklanın.
- Oluştur zararsız, kontrollü yükler Bunlar, yaygın seri hale getirilmiş saldırı nesnelerini taklit eder.
Bu katmanlı yaklaşım, otomatik taramayı geliştiriciye ait testlerle birleştirerek, güvensiz seri hale getirme yollarının uzaktan kod yürütme güvenlik açığı haline gelmeden çok önce tespit edilmesini ve kaldırılmasını sağlar.
Geliştiriciler için Önleme Stratejileri: Seri Hale Getirme İşleminin Uzaktan Kod Yürütülmesine Dönüşmesini Engelleme
- Güven sınırlarıYalnızca kimliği doğrulanmış, onaylanmış kaynaklardan seri durumdan çıkarma işlemi yapın.
- Güvenli API'ler:
- Java: Doğrulama özelliğine sahip güvenli kütüphaneler.
- Python: Kullanım json.loads() tekrar pickle.loads() nerede mumkunse.
- Node.js: Kaçının değerlendir() veya dinamik kod yürütme.
- Java: Doğrulama özelliğine sahip güvenli kütüphaneler.
- İzin verilenler listeleri ve şemalarİzin verilen nesne türlerini kısıtlayın. JSON şemalarını zorunlu kılın.
- Bağımlılık hijyeni: Seri hale getirme veya uzaktan kod yürütme ile ilgili CVE'leri izleyin.
- Kod incelemeleri: Ekle seri durumdan çıkarma PR inceleme şablonlarına yönelik güvenlik kontrolleri.
Alet notu: Şunlar gibi aletler Xygeni Birleştirme işleminden önce, güvenli olmayan seri hale getirme işlemlerine karşı kod ve bağımlılıkları tarayarak yüksek riskli alanları belirleyin, böylece geliştiriciler bunları erken aşamada düzeltebilsinler.
Diller Arasında Örnek Tespit Kalıpları (Güvenli Sahte Kod)
Aşağıdaki örneklerin tamamı, çalışan güvenlik açıkları değil, tespit kalıplarını gösteren, temizlenmiş sözde kodlardır:
Java – Güvenli olmayan API kullanımını tespit etme:
Python – Güvenli olmayan seri durumdan çıkarma işlemlerinden kaçınma:
Node.js – Dinamik kod yürütülmesini engelleme:
DevSecOps'ta Otomatik Algılama Pipelines: Seri Hale Getirilmeden Önce Seri Hale Getirmeyi Yakalamak
Güvenli olmayan seri hale getirme işlemlerinin tespitinin otomatikleştirilmesi şunları sağlar: Güvenlik açıkları tespit edilip gideriliyor. Üretim ortamında uzaktan kod yürütülmesine yol açmadan önce.
Pipeline Tarama
- koşmak SAST Kaynak kodda, yapılandırma dosyalarında ve derleme çıktılarında her aşamada commit.
- Hem uygulama kodunda hem de diğer bileşenlerde güvensiz seri hale getirme kalıplarını tespit edin. bağımlılıklar.
Eser İncelemesi
- taramak .ser, .pkl, ve dağıtımdan önce veya testleri çalıştırmadan önce güvenli olmayan kalıplar için diğer serileştirilmiş dosyaları kontrol edin.
Pull Request bloke etme
- Güvenli olmayan seri hale getirme işlemi tespit edilirse blok birleştirme işlemi gerçekleştirilir.
- Sorun giderme sürecini hızlandırmak için pull request'lerde uygulanabilir geri bildirimler gösterin.
Birim Testi Uygulaması
- Kötü amaçlı girdileri simüle eden birim testlerini de dahil edin. CI/CD pipeline
- Uygulama, güvenli olmayan serileştirilmiş verileri reddetmek yerine işlerse derleme başarısız olur.
Kuralları Zayıflatmadan Yanlış Pozitiflerden Kaçınmak
- Uyarıları "susturmak" için algılama kurallarını devre dışı bırakmayın; bu, gerçek anlamda güvensiz seri hale getirme işlemlerinin tespit edilmeden geçmesine olanak sağlayabilir.
- Bilinen güvenli kalıplar veya bağımlılıklar için kontrollü bir beyaz liste (izin listesi) kullanın.
- Beyaz listeye alınacak öğeleri onaylamadan önce güvenlik doğrulaması yapılmasını zorunlu kılın.
- Beyaz listeyi sürüm kontrolü altında tutun ve tüm istisnaların haklı ve güvenli kalmasını sağlamak için periyodik olarak gözden geçirin.
Xygeni'nin Rolü
- Doğrudan entegre olur CI/CD pipelineHem kaynak kodunu hem de derleme çıktılarını taramak için kullanılır.
- Güvenli olmayan seri hale getirme kalıplarını ve riskli bağımlılıkları yaşam döngüsünün başlarında tespit eder.
- Güvenlik incelemesi zorunluluğuyla birlikte politika tabanlı beyaz listelemeyi destekler ve tespit doğruluğunu geliştirici verimliliğiyle dengeler.
Güvenli Seri Hale Getirme Yöntemiyle Uzaktan Kod Yürütmede Önde Kalmak
Güvenli olmayan seri hale getirme işlemi, uzaktan kod yürütülmesine doğrudan bir yol haline gelene kadar fark edilmeyebilir. Bunu önlemek için şunlar gereklidir:
- Serileştirmenin ne olduğunu ve nasıl kötüye kullanılabileceğini anlamak.
- Geliştirme iş akışına otomatik algılama özelliğinin entegre edilmesi.
- Testlerde kullanılan bağımlılıkları, derleme çıktılarını ve serileştirilmiş verileri düzenli olarak gözden geçirmek.
Xygeni'nin bu süreçteki pratik rolü:
- Kaynak Kod TaramaKod birleştirilmeden önce birden fazla dildeki güvensiz seri hale getirme kalıplarını belirler.
- Yapıt ve Bağımlılık Analizi: Riskli serileştirilmiş dosyaları tespit eder (.ser, .pkl, (Gömülü yapılandırma) ve bilinen güvenlik açıkları olan üçüncü taraf bileşenler.
- Politika Tabanlı KontrollerGüvenlik doğrulamasıyla kontrollü bir izin listesini destekler ve gerekli istisnaların gerçek riskler oluşturmamasını sağlar.
- Geliştirici Geri Bildirimi (Bağlam İçinde)Güvenli olmayan seri hale getirme işleminin tam konumunu ve nedenini işaretler. pull requestsBu sayede geliştiriciler sorunları anında giderebilir ve yeniden taramalar yoluyla çözümün doğruluğunu teyit edebilirler.
Bu tür kontrolleri doğrudan entegre ederek CI/CDEkipler, güvensizlikleri tespit edip giderebilir. Üretim ortamında uzaktan kod yürütülmesine dönüşme şansı bulmadan önce seri durumdan çıkarma işlemi gerçekleştirilir.




