. 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
- Java .ser fail yang mengandungi objek pra-siri.
- Lekapan ujian seperti:
- Data ujian bersiri lama disalin daripada petikan pengeluaran.
- Muatan bersiri yang dimuat turun daripada repositori luaran untuk ujian prestasi atau regresi.
- Data ujian bersiri lama disalin daripada petikan pengeluaran.
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:
- Input yang tidak dipercayai memasuki aplikasi.
- Penyahsiran yang tidak selamat mencipta semula objek tanpa sekatan.
- Rantaian gajet mencetuskan fungsi sedia ada dengan cara yang tidak disengajakan.
- 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.
- Konfigurasikan pengimbas untuk mengesan API berisiko seperti ObjectInputStream, jeruk.muatan, dan Muatan YAML tanpa pemuat yang selamat.
- 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.
- Buat muatan terkawal yang tidak berbahaya yang meniru objek serangan bersiri biasa.
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
- Sempadan kepercayaanHanya nyahsiri daripada sumber yang disahkan dan disahkan.
- API Selamat:
- Java: Perpustakaan selamat dengan pengesahan.
- Python: Gunakan json.loads() lebih pickle.loads() mana mungkin.
- Node.js: Elakkan eval () atau pelaksanaan kod dinamik.
- Java: Perpustakaan selamat dengan pengesahan.
- Senarai dibenarkan dan skema: Hadkan jenis objek yang dibenarkan. Kuatkuasakan skema JSON.
- Kebersihan kebergantungan: Pantau CVE yang menyebut penyahsirilan atau pelaksanaan kod jauh.
- 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.







