Mencegah Pelarian dari Sandbox
Blokir akses ke pustaka debug, penyalahgunaan rawget/rawset, dan kebocoran upvalue.
Mencegah Pelarian dari Sandbox adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.
Masalah Pelolosan
Bahkan dengan lingkungan yang menggunakan daftar izin, penyerang kreatif mungkin menemukan cara untuk mengakses lingkungan global yang sebenarnya. Pelajaran ini membahas vektor pelolosan yang telah diketahui dan cara menutupnya.
Eksploitasi Metatabel String
Dalam Lua, string memiliki metatabel bersama yang mengekspos pustaka string. Kode dalam sandbox dapat menggunakan string untuk mendapatkan referensi ke string.rep, lalu dari sana menjangkau pustaka lain.
-- Escape vector (before patching):
local s = "hello"
local getenv = s.rep -- reaches string library
-- Fix: use setmetatable on all sandboxed strings (not practical)
-- Better fix: override debug.getmetatable in the sandboxMemblokir melalui rawget/rawset
Jika rawget ada di dalam sandbox, kode dapat menggunakannya untuk melewati pembatasan __index dan membaca langsung dari tabel yang sebenarnya.
-- Fix: exclude rawget, rawset, rawequal, rawlen from the sandbox envAkses Pustaka debug
Pustaka debug dapat membaca dan mengubah upvalue apa pun, termasuk _ENV. Keluarkan pustaka tersebut sepenuhnya dari sandbox.
Tabel package.loaded
Jika require atau package dapat diakses, kode dalam kotak pasir dapat mengakses modul yang sudah dimuat, termasuk os dan io.
-- Fix: exclude require and package from the sandbox envKorutin dan resume
Korutin dalam kotak pasir yang dilanjutkan oleh host dapat digunakan untuk mengeksfiltrasi keadaan. Gunakan coroutine.wrap dengan hati-hati dan jangan melanjutkan korutin dalam kotak pasir dengan hak istimewa yang lebih tinggi.
Menelusuri Variabel Lingkup Luar
Tanpa pustaka debug, kode dalam kotak pasir tidak dapat menelusuri variabel lingkup luar. Namun, jika debug.getupvalue tidak sengaja disertakan, kode tersebut dapat digunakan untuk mencapai _G.
__newindex pada safeEnv
Tambahkan __newindex ke metatabel lingkungan kotak pasir untuk mencegah kode dalam kotak pasir membuat global baru yang menutupi global yang aman.
setmetatable(safeEnv, {
__newindex = function(_, k, v)
-- allow only whitelisted keys or reject
error("Global assignment not allowed: " .. k)
end
})Proksi untuk Pustaka Matematika
Daripada meneruskan tabel math yang asli (yang berbagi metatabel dengan pustaka standar), buat salinan dangkal yang hanya berisi fungsi yang diperlukan.
Pengujian Pelolosan Otomatis
Pelihara rangkaian pengujian dengan masukan acak yang mencoba pola pelolosan yang diketahui terhadap kotak pasir Anda. Jalankan pengujian tersebut setiap kali kode kotak pasir diubah.
Pertahanan Berlapis
Tidak ada kotak pasir yang sempurna. Lapisilah pertahanan: lingkungan terbatas + batas instruksi + batas memori + isolasi proses tingkat OS (subproses atau kontainer terpisah).
Kotak Pasir Tingkat OS
Untuk keamanan maksimum, jalankan Lua dalam subproses dengan pembatasan tingkat OS: seccomp (Linux), App Sandbox (macOS), atau Docker dengan sistem berkas hanya-baca.
Pertanyaan tentang Pelolosan dari Kotak Pasir
Mengapa rawget harus dikecualikan dari kotak pasir?
Ringkasan: Mencegah Pelolosan dari Kotak Pasir
Kecualikan debug, rawget/rawset, package, require, dan load dari kotak pasir. Lindungi lingkungan kotak pasir dengan __newindex. Salin tabel pustaka, bukan merujuk ke tabel aslinya. Terapkan isolasi tingkat OS secara berlapis untuk keamanan maksimum.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Mencegah Pelarian dari Sandbox” gratis?
Ya — teks lengkap “Mencegah Pelarian dari Sandbox” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Mencegah Pelarian dari Sandbox”?
Blokir akses ke pustaka debug, penyalahgunaan rawget/rawset, dan kebocoran upvalue. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Lua Academy?
Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Mencegah Pelarian dari Sandbox” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?
Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Model _ENV dalam Lua 5.2+
- Membangun Sandbox Terbatas
- Mencegah Pelarian dari Sandbox
- Batas Sumber Daya dan Instrumentasi