apakah penyahsirilan - pelaksanaan kod jarak jauh

Bagaimana Penyahsiran Tidak Selamat Menjadi Pelaksanaan Kod Jauh (dan Cara Menanganinya Sebelum Gabungan)

. Commit Itu Membuka Pintu Belakang

Satu ciri baharu telah digabungkan untuk mengendalikan objek yang dimuat naik pengguna. Semuanya lulus ujian, tetapi beberapa minggu kemudian, pentest mendedahkan penyerang boleh melaksanakan arahan pada pelayan; hasil penyahsiriaan tidak selamat tersembunyi dalam kod. Jurang daripada penyahsiriaan kepada pelaksanaan kod jauh boleh menjadi sangat kecil, terutamanya apabila data bersiri daripada pakej sumber terbuka atau perkhidmatan dalaman dipercayai tanpa pengesahan.

Apakah Deserialization dalam Kod, Mengapa Ia Berisiko, dan Di Mana Ia Menyembunyikan

Dalam istilah pembangun, apakah itu penyahsirian? Ia merupakan proses mengambil data berstruktur, JSON, XML, format binari atau objek bersiri khusus bahasa dan menukarkannya kembali menjadi objek dalam ingatan.

Dengan sendirinya, penyahsiran tidak berbahaya dan biasa, contohnya:

  • Java: Membaca objek dengan ObjectInputStream
  • Python: Memuatkan data dengan jeruk.muatan
  • Node.js: Menghuraikan JSON dengan JSON.parse

Risiko ini muncul apabila penyahsirian digunakan pada data yang tidak dipercayai tanpa pengesahan. Penyerang boleh mereka input yang mencetuskan rantaian gajet, laluan kod sedia ada yang digunakan dengan cara yang tidak disengajakan, yang boleh menyebabkan pelaksanaan kod jarak jauh.

Tidak selamat penyahsiran sering dijumpai dalam:

  • Pakej sumber terbuka dengan lalai yang tidak selamat
  • Kod tersuai yang menganggap input bersiri boleh dipercayai
  • API pihak ketiga mengembalikan objek bersiri tanpa pengesahan
  • Bina artifak seperti:
    • Java .ser fail yang mengandungi objek pra-siri.
    • Python .pkl fail model dalam aliran kerja pembelajaran mesin.
    • Objek konfigurasi bersiri yang dibenamkan dalam imej Docker atau bekas pelaksanaan
  • Lekapan ujian seperti:

    • Data ujian bersiri lama disalin daripada petikan pengeluaran.
    • Muatan bersiri yang dimuat turun daripada repositori luaran untuk ujian prestasi atau regresi.

Fail-fail ini boleh dimasukkan ke dalam repositori dan dimuatkan secara automatik semasa ujian atau penggunaan, mencetuskan masalah yang tidak selamat penyahsiran in CI/CD pipelines sebelum kod tersebut mencapai pengeluaran.

Daripada Penyahsiriaan Tidak Selamat kepada Pelaksanaan Kod Jauh: Laluan Serangan

Rantaian eksploitasi untuk penyahsirian yang tidak selamat sering mengikuti salah satu corak ini:

  1. Input yang tidak dipercayai memasuki aplikasi.
  2. Penyahsiran yang tidak selamat mencipta semula objek tanpa sekatan.
  3. Rantaian gajet mencetuskan fungsi sedia ada dengan cara yang tidak disengajakan.
  4. Penyerang meningkatkan keistimewaan dan mencapai pelaksanaan kod jarak jauh.

Varian:

  • Rangkaian gajet Java mengeksploitasi pustaka lama seperti Apache Commons.
  • Python .pkl pemuatan model dengan objek berniat jahat yang terbenam.
  • Penghuraian JSON Node.js dengan eval () atau import dinamik.

aliran:

				
					Untrusted Input → Deserialization → Gadget Chain → Remote Code Execution
				
			

Cara Mengenal Pasti Penyahsirian Tidak Selamat Sebelum Penggabungan

Menangani penyahsirian yang tidak selamat sebelum penggabungan kod adalah jauh lebih murah daripada membaikinya selepas penggunaan. Gabungan analisis automatik dan ujian proaktif berfungsi dengan paling baik:

  • Pengujian Keselamatan Aplikasi Statik (SAST):
    • Konfigurasikan pengimbas untuk mengesan API berisiko seperti ObjectInputStream, jeruk.muatan, dan Muatan YAML tanpa pemuat yang selamat.
    • Imbas kedua-dua kod sumber dan bina/uji artifak untuk memastikan ia tidak selamat penyahsiran corak.
    • Paparkan dapatan secara langsung dalam pull requests supaya pembangun boleh menanganinya sebelum penggabungan.
  • CI/CD Integrasi:

Contoh aliran kerja:

				
					sql

Commit → SAST scan → PR alert → Fix before merge

				
			
  • Blok bergabung pada penemuan penyahsirian tidak selamat yang kritikal untuk mengelakkan kod yang tidak selamat daripada sampai ke cawangan pengeluaran.
  • Ujian Unit dengan Input Berniat Jahat yang Disimulasikan:

    • Buat muatan terkawal yang tidak berbahaya yang meniru objek serangan bersiri biasa.
    • Uji bagaimana aplikasi mengendalikannya; ia harus menolak, membersihkan atau merekodkan input dan bukannya memprosesnya secara membuta tuli.
    • Sertakan ujian-ujian ini dalam ujian automatik pipeline jadi mereka menjalankan setiap PR, mengesan tingkah laku penyahsiran yang tidak selamat lebih awal.
    • Pastikan muatan ujian tidak boleh dilaksanakan dan selamat disimpan dalam repositori, dengan memberi tumpuan semata-mata pada logik pengesanan.

Pendekatan berlapis ini menggabungkan pengimbasan automatik dengan ujian milik pembangun, memastikan laluan penyahsirian yang tidak selamat dikenal pasti dan dialih keluar lama sebelum ia boleh menjadi kelemahan pelaksanaan kod jauh.

Strategi Pencegahan untuk Pembangun: Menghentikan Penyahsirilan daripada Menjadi Pelaksanaan Kod Jauh

  1. Sempadan kepercayaanHanya nyahsiri daripada sumber yang disahkan dan disahkan.
  2. API Selamat:

     

    • Java: Perpustakaan selamat dengan pengesahan.
    • Python: Gunakan json.loads() lebih pickle.loads() mana mungkin.
    • Node.js: Elakkan eval () atau pelaksanaan kod dinamik.

       

  3. Senarai dibenarkan dan skema: Hadkan jenis objek yang dibenarkan. Kuatkuasakan skema JSON.
  4. Kebersihan kebergantungan: Pantau CVE yang menyebut penyahsirilan atau pelaksanaan kod jauh.
  5. Ulasan kod: Tambah penyahsiran pemeriksaan keselamatan pada templat semakan PR.

Nota perkakas: Alat seperti Xygeni imbas kod dan kebergantungan untuk penyahsirian yang tidak selamat sebelum penggabungan, mengenal pasti kawasan berisiko tinggi supaya pembangun boleh membetulkannya lebih awal.

Contoh Corak Pengesanan Merentasi Bahasa (Kod Pseudo Selamat)

Semua contoh di bawah adalah pseudo-kod yang telah disanitasi yang menunjukkan corak pengesanan, bukan eksploitasi yang berfungsi:

Java – Mengesan penggunaan API yang tidak selamat:

				
					java
// BAD: Accepting untrusted input without validation
ObjectInputStream in = new ObjectInputStream(userInputStream);
Object obj = in.readObject(); // Unsafe - no class type checks

// GOOD: Validate allowed classes before processing
if (allowedClasses.contains(obj.getClass().getName())) {
    process(obj); // Safe processing of approved classes
}

				
			

Python – Mengelakkan penyahsirilan yang tidak selamat:

				
					python
import pickle

# BAD: Loading untrusted serialized data directly
data = pickle.loads(untrusted_input)  # Unsafe - arbitrary object execution risk

# GOOD: Use JSON with schema validation
import json
data = json.loads(untrusted_input)  # Safe when validated against schema

				
			

Node.js – Mencegah pelaksanaan kod dinamik:

				
					javascript
// BAD: Executing code from parsed data
let obj = JSON.parse(untrustedInput);
eval(obj.code); // Unsafe - allows arbitrary code execution

// GOOD: Use fixed logic without dynamic execution
let safeObj = JSON.parse(untrustedInput);
process(safeObj); // Handle only expected properties and values

				
			

Mengautomasikan Pengesanan dalam DevSecOps Pipelines: Menangkap Penyahsirilan Sebelum Mencapai Pengeluaran

Mengautomasikan pengesanan penyahsirian yang tidak selamat memastikan kelemahan dikesan dan dibaiki sebelum ia membawa kepada pelaksanaan kod jarak jauh dalam pengeluaran.

Pipeline Mengimbas

  • Main SAST pada kod sumber, fail konfigurasi dan artifak binaan pada setiap commit.
  • Mengesan corak penyahsirian yang tidak selamat dalam kedua-dua kod aplikasi dan kebergantungan.

Pemeriksaan Artifak

  • Scan .ser, .pkl, dan fail bersiri lain untuk corak yang tidak selamat sebelum menggunakan atau menjalankan ujian.

Pull Request menyekat

  • Blok bergabung jika penyahsirian yang tidak selamat dikesan.
  • Tunjukkan maklum balas yang boleh diambil tindakan dalam PR untuk mempercepatkan pemulihan.

Penguatkuasaan Ujian Unit

  • Sertakan ujian unit dengan input berniat jahat yang disimulasikan dalam CI/CD pipeline
  • Gagal dibina jika aplikasi memproses data bersiri yang tidak selamat dan bukannya menolaknya.

Mengelakkan Positif Palsu Tanpa Melemahkan Peraturan

  • Jangan lumpuhkan peraturan pengesanan untuk "menyenyapkan" amaran; ini boleh membenarkan penyahsirian sebenar yang tidak selamat berlalu tanpa dikesan.
  • Gunakan senarai putih terkawal (senarai-benar) untuk corak atau kebergantungan selamat yang diketahui.
  • Memerlukan pengesahan keselamatan sebelum meluluskan entri senarai putih.
  • Kekalkan senarai putih di bawah kawalan versi dan semaknya secara berkala untuk memastikan semua pengecualian kekal wajar dan selamat.

Peranan Xygeni

  • Bersepadu terus ke dalam CI/CD pipelines untuk mengimbas kedua-dua kod sumber dan membina artifak.
  • Mengesan corak penyahsirian yang tidak selamat dan kebergantungan berisiko pada awal kitaran hayat.
  • Menyokong senarai putih berasaskan dasar dengan semakan keselamatan mandatori, mengimbangi ketepatan pengesanan dengan produktiviti pembangun.

Kekal Mendahului Pelaksanaan Kod Jauh Melalui Penyahsirialan Selamat

Penyahsiran yang tidak selamat boleh kekal tidak disedari sehingga ia menjadi laluan langsung kepada pelaksanaan kod jauh. Mencegahnya memerlukan:

  • Memahami apa itu penyahsirilan dan bagaimana ia boleh disalahgunakan.
  • Menyematkan pengesanan automatik dalam aliran kerja pembangunan.
  • Menyemak kebergantungan, membina artifak dan data bersiri yang digunakan dalam ujian secara berkala.

Peranan praktikal Xygeni dalam proses ini:

  • Pengimbasan Kod Sumber: Mengenal pasti corak penyahsirian yang tidak selamat merentasi berbilang bahasa sebelum kod digabungkan.
  • Analisis Artifak dan Kebergantungan: Mengesan fail bersiri berisiko (.ser, .pkl, konfigurasi terbenam) dan komponen pihak ketiga dengan kelemahan yang diketahui.
  • Kawalan Berasaskan DasarMenyokong senarai kebenaran terkawal dengan pengesahan keselamatan, memastikan pengecualian yang diperlukan tidak menimbulkan risiko sebenar.
  • Maklum Balas Pembangun dalam Konteks: Menandakan lokasi yang tepat dan punca penyahsiran tidak selamat di dalam pull requests, membolehkan pembangun menyelesaikan masalah dengan segera dan mengesahkan mitigasi melalui imbasan semula.

Dengan mengintegrasikan cek seperti ini secara langsung ke dalam CI/CD, pasukan boleh menangkap dan membetulkan keadaan tidak selamat penyahsirian sebelum ia berpeluang untuk meningkat kepada pelaksanaan kod jarak jauh dalam pengeluaran.

alat-analisis-komposisi-perisian-alat-sca
Utamakan, pulihkan dan lindungi risiko perisian anda
Dapatkan Akaun Percuma anda.
Tiada kad kredit yang diperlukan.

Lindungi pembangunan dan penghantaran perisian anda

dengan Suit Produk Xygeni