Topik temu duga representatif

Temu Bual Backend: Bagaimanakah anda akan memproses arkib yang mungkin mengandungi bom penyahmampatan secara selamat?

BackendSukar
Pasukan Editorial Offer.ccDiterbitkan Dikemas kini

Soalan

Pengguna memuat naik arkib ZIP atau TAR.GZ dan perkhidmatan mengekstrak dokumen di dalamnya. Reka bentuk bahagian belakang yang tahan terhadap bom penyahmampatan, traversal laluan, arkib bersarang dan kehabisan sumber.

Gesaan dan konteks

Pengguna memuat naik arkib ZIP atau TAR.GZ untuk pengimbasan virus latar belakang, pengekstrakan teks atau import kelompok. Penyerang mungkin memuat naik fail mampat kecil yang mengembang secara besar-besaran, arkib bersarang rekursif atau laluan entri yang terlepas daripada direktori sasaran. Terangkan had muat naik, penghuraian format, belanjawan sumber, pengasingan, keadaan kegagalan dan pembersihan.

Fokusnya ialah keselamatan sumber semasa pengekstrakan. Had saiz muat naik bukanlah pertahanan yang lengkap; nisbah mampatan, bilangan entri dan output yang dikembangkan mesti menjadi sebahagian daripada reka bentuk.

Perkara yang diuji oleh penemu bual

Penemu bual menjangkakan perbezaan antara bait termampat dan kos pengekstrakan. Sertakan belanjawan fail, kedalaman direktori, penumpukan (nesting), CPU, memori, cakera dan jam dinding (wall-clock). OWASP mengesyorkan agar mempertimbangkan saiz selepas penyahmampatan; OWASP WSTG menerangkan zip bomb sebagai arkib yang menghabiskan cakera atau memori untuk menyebabkan penafian perkhidmatan (DoS).

Jawapan yang kukuh merangkumi traversal, pautan simbolik (symlinks), nama pendua, pengisytiharan saiz palsu, kelemahan penghurai dan pembersihan selepas pembatalan. Pekerja (worker) yang diasingkan, direktori bagi setiap tugas, penerbitan atomik dan telemetri mengekalkan input berniat jahat di dalam satu tugas yang terbatas.

Jawapan 30 saat

“Saya akan menganggap setiap arkib sebagai tidak dipercayai. Pinggir (edge) mengehadkan bait termampat, format, kuota dan kadar permintaan. Worker dalam kontena terhad menstrim entri ke dalam direktori sementara bagi setiap tugas sambil menguatkuasakan laluan entri, dasar symlink, kiraan entri, kedalaman nesting dan belanjawan bait yang dikembangkan. Ia juga mempunyai had CPU, memori, cakera dan jam dinding. Sebarang had akan menghentikan pengekstrakan dan melakukan pembersihan. Hanya hasil yang diimbas dan disahkan jenisnya diterbitkan secara atomik. Respons mendedahkan status yang selamat, manakala peristiwa audit menyimpan kod sebab dan penggunaan tanpa kandungan mentah.”

Reka bentuk langkah demi langkah

Langkah 1: Tetapkan sempadan input dan tugas

Hadkan saiz termampat, keserentakan bagi setiap pengguna, jumlah kuota dan kadar permintaan. Tetapkan ID tugas, penyewa (tenant), objek sumber, format dan keadaan. Simpan fail asal dalam storan bukan boleh laksana (non-executable) yang diasingkan; worker menerima akses baca jangka pendek dan tidak sekali-kali menganggap data muat naik sebagai kod atau konfigurasi.

Langkah 2: Kenal pasti format dan pilih penghurai

Jangan hanya mempercayai sambungan atau Content-Type; periksa bait ajaib (magic bytes) dan senarai dibenarkan. Pilih pustaka yang diselenggara untuk ZIP, TAR dan GZIP serta tetapkan versinya. Metadata saiz entri membantu pra-pemeriksaan tetapi tidak boleh menjadi satu-satunya autoriti; teruskan mengira bait semasa membaca. Arkib yang disulitkan, kaedah yang tidak diketahui dan pengepala yang rosak harus ditolak atau disemak.

Langkah 3: Kuat kuasakan belanjawan pelbagai dimensi

Tentukan had untuk bait termampat, bait dikembangkan, bilangan fail, saiz fail tunggal, kedalaman direktori, kedalaman arkib bersarang, masa CPU, memori, cakera dan jam dinding. Setiap tugas mempunyai siling keras. Nisbah mampatan boleh mencetuskan amaran, tetapi ia tidak boleh menggantikan pengiraan bait yang dikembangkan kerana format dan data dimampatkan secara berbeza.

Langkah 4: Lindungi laluan dan objek sistem fail

Normalkan setiap nama entri dan tolak laluan mutlak, traversal dan bait nol. Ekstrak ke dalam direktori unik untuk tugas tersebut dan sahkan setiap laluan akhir kekal di dalamnya. Tolak symlink, hard link dan fail peranti secara lalai. Tentukan dasar nama pendua, biasanya penolakan, untuk mengelakkan isu urutan tulis ganti (overwrite-order).

Langkah 5: Asingkan pengekstrakan dan pengimbasan

Jalankan worker dalam kontena atau kotak pasir (sandbox) berkeistimewaan rendah dengan akar baca sahaja, kuota cakera sementara dan tiada atau akses rangkaian yang minimum. Berikan belanjawan berasingan untuk pengekstrakan dan pengimbasan supaya satu arkib tidak dapat menggunakan kedua-duanya secara senyap. Tulis hasil imbasan, teks dan lakaran kecil sebagai objek bukan boleh laksana yang baharu, bukan terus sebagai muat turun pelayar.

Langkah 6: Batasi penumpukan (nesting), rekursi dan pembatalan

Tolak arkib bersarang apabila produk tidak memerlukannya. Jika penumpukan diperlukan, tetapkan kedalaman maksimum, belanjawan keseluruhan yang dikongsi dan pemeriksaan laluan pada setiap lapisan; rekursi tidak boleh menerima kuota baharu. Had masa tamat (timeout), pembatalan, ranap sistem worker dan pemadaman penyewa semuanya mencetuskan pembersihan idempoten supaya fail sementara tidak kekal.

Langkah 7: Gunakan mesin keadaan untuk penerbitan dan pemulihan

Keadaan boleh menjadi uploaded, inspecting, extracting, scanning, published, rejected dan cleanup_failed. Terbitkan secara atomik hanya selepas setiap entri lulus pemeriksaan dan pengimbasan. Status pengguna yang selamat boleh menyertakan tindakan seterusnya; peristiwa dalaman mengekalkan kod penolakan berstruktur, penggunaan belanjawan dan ralat pustaka. Percubaan semula tidak boleh melangkau belanjawan atau menerbitkan dua kali.

Langkah 8: Uji dan perhatikan had

Uji nisbah mampatan tinggi, arkib bersarang, traversal, symlink, nama pendua, pengepala rosak, entri besar, CRC buruk, fail disulitkan dan pembatalan pertengahan tugas. Ukur bait yang dikembangkan, bilangan fail, kedalaman maksimum, CPU, sebab penolakan, kependaman pembersihan, paras penggunaan (waterline) cakera sementara dan mula semula worker. Gunakan sampel berniat jahat sintetik terhadap versi pustaka yang tepat dalam pengeluaran.

Pertukaran (trade-offs), sempadan dan perolehan maklumat

Pra-pemeriksaan metadata adalah murah tetapi tidak boleh menggantikan pembilang penstriman; penstriman tulen adalah lebih selamat tetapi mungkin menggunakan beberapa sumber sebelum menemui had. Menolak penumpukan adalah paling selamat, manakala menyokongnya menyediakan aliran kerja sandaran dengan kos belanjawan kongsi dan pemeriksaan rekursif.

Worker yang diasingkan mengurangkan risiko perkhidmatan utama tetapi menambah kependaman baris gilir dan operasi. Mengekalkan fail asal membantu penyiasatan dan percubaan semula, tetapi memerlukan had pengekalan, kawalan akses dan penyulitan. Baris gilir tak segerak bukan sebab untuk membenarkan pengekstrakan tanpa had.

Model jawapan berkualiti tinggi

“Saya akan membahagikan muat naik dan pengekstrakan kepada dua sempadan kepercayaan. Pinggir mengehadkan bait termampat, keserentakan dan kuota. Worker tak segerak dalam kontena berkeistimewaan rendah dan tanpa rangkaian menggunakan penghurai yang diselenggara dan hanya menulis pada direktori tugas. Semasa ia membaca setiap entri, ia mengira bait dan fail yang dikembangkan serta menguatkuasakan belanjawan saiz fail tunggal, kedalaman direktori, kedalaman bersarang, CPU, memori, cakera dan jam dinding.

Laluan dinormalkan menolak laluan mutlak, traversal, symlink, hard link dan fail peranti. Jika penumpukan diperlukan, setiap lapisan berkongsi satu belanjawan. Hasil diimbas sebelum penerbitan atomik; melebihi had, timeout, pembatalan dan ranap sistem semuanya menggunakan pembersihan idempoten. Telemetri merekodkan penggunaan belanjawan, sebab penolakan, kependaman pembersihan dan disk waterline, dengan arkib berniat jahat dalam ujian regresi.”

Kesilapan biasa

  • Mengehadkan saiz muat naik termampat sahaja. Fail kecil boleh menghabiskan cakera atau memori selepas pengekstrakan.
  • Mempercayai saiz kembangan yang diisytiharkan. Pengepala boleh jadi tidak lengkap atau tidak dipercayai.
  • Menggunakan nisbah mampatan sebagai satu-satunya peraturan. Ia hanyalah isyarat, bukan belanjawan keselamatan sejagat.
  • Mengekstrak ke dalam direktori kongsi. Traversal, tulis ganti dan sisa merentasi sempadan penyewa.
  • Membenarkan symlink atau fail peranti. Entri boleh mengubah hala penulisan ke luar sasaran atau ke antara muka khas.
  • Memberi setiap lapisan penumpukan kuota baharu. Rekursi menggandakan penggunaan sumber.
  • Menerbitkan kandungan mentah selepas pengimbasan. Skrip dan jenis kandungan yang salah masih boleh menyerang pemuat turun.
  • Melangkau pembersihan selepas pembatalan. Sisa boleh menyebabkan insiden kehabisan cakera.

Soalan susulan dan jawapan

Patutkah pengimbasan dilakukan sebelum pengekstrakan?

Arkib mesti dibaca untuk mengimbas fail dalaman, tetapi pengekstrakan itu sendiri memerlukan pengasingan dan belanjawan. Lakukan pemeriksaan format dan metadata dahulu, strim pengekstrakan dalam worker terhad, kemudian imbas setiap hasil.

Pada nisbah mampatan berapakah anda harus menolak?

Tiada nombor sejagat merentas format. Gunakan nisbah untuk makluman atau penolakan awal, manakala had keras (hard limits) meliputi bait yang dikembangkan, satu fail, bilangan fail, CPU, cakera dan jam dinding.

Bagaimanakah arkib bersarang boleh disokong dengan selamat?

Tetapkan kedalaman maksimum, kongsi satu jumlah belanjawan merentas lapisan, ulangi pemeriksaan laluan dan pautan, serta pastikan rekursi kekal dalam kuota masa dan cakera worker yang sama.

Bolehkah saiz entri yang dilaporkan oleh penghurai dipercayai?

Ia adalah isyarat amaran, bukan kebenaran. Teruskan mengira bait semasa membaca dan ambil kira Zip64, pengepala rosak, deskriptor data dan batasan pustaka yang diketahui.

Patutkah tugas yang melebihi had dicuba semula?

Pelanggaran belanjawan adalah penolakan deterministik dan tidak boleh dicuba semula secara membuta tuli. Cuba semula hanya kegagalan worker sementara, mencipta direktori terpencil baharu dengan belanjawan yang sama dan keadaan idempoten.

Sumber awam

Soalan berkaitan