Prevenzione delle evasioni dalla sandbox
Blocchi l'accesso alla libreria debug, l'uso improprio di rawget/rawset e le perdite di upvalue.
Prevenzione delle evasioni dalla sandbox è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.
Il problema dell'evasione
Anche con un ambiente basato su whitelist, un attaccante creativo potrebbe trovare il modo di accedere all'ambiente globale reale. Questa lezione illustra i vettori di evasione noti e come neutralizzarli.
Exploit della metatabella delle stringhe
In Lua, le stringhe hanno una metatabella condivisa che espone la libreria string. Il codice nella sandbox può utilizzare una stringa per ottenere un riferimento a string.rep e da lì raggiungere altre librerie.
-- 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 sandboxBlocco tramite rawget/rawset
Se rawget è presente nella sandbox, il codice può utilizzarlo per aggirare le restrizioni di __index e leggere direttamente dalle tabelle reali.
-- Fix: exclude rawget, rawset, rawequal, rawlen from the sandbox envAccesso alla libreria debug
La libreria debug può leggere e modificare qualsiasi upvalue, incluso _ENV. La escluda completamente dalla sandbox.
Tabella package.loaded
Se require o package sono accessibili, il codice in sandbox può raggiungere moduli già caricati, inclusi os e io.
-- Fix: exclude require and package from the sandbox envCoroutine e ripresa
Una coroutine in sandbox ripresa dall'host potrebbe essere utilizzata per esfiltrare lo stato. Utilizzi coroutine.wrap con cautela e non riprenda coroutine in sandbox con privilegi elevati.
Esplorazione degli upvalue
Senza la libreria debug, il codice in sandbox non può esplorare gli upvalue. Tuttavia, se debug.getupvalue viene incluso accidentalmente, può essere utilizzato per raggiungere _G.
__newindex su safeEnv
Aggiunga un __newindex alla metatabella dell'ambiente sandbox per impedire al codice in sandbox di creare nuove variabili globali che nascondano quelle sicure.
setmetatable(safeEnv, {
__newindex = function(_, k, v)
-- allow only whitelisted keys or reject
error("Global assignment not allowed: " .. k)
end
})Proxy per la libreria math
Anziché passare la tabella math reale, che condivide una metatabella con la libreria standard, crei una copia superficiale contenente solo le funzioni necessarie.
Test automatizzati delle evasioni
Mantenga una suite di test fuzzing che provi pattern di evasione noti contro la sandbox. La esegua a ogni modifica al codice della sandbox.
Difesa stratificata
Nessuna sandbox è perfetta. Stratificare le difese: ambiente con accesso limitato + limiti sulle istruzioni + limiti di memoria + isolamento dei processi a livello del sistema operativo, tramite un sottoprocesso separato o un container.
Sandbox a livello del sistema operativo
Per ottenere la massima sicurezza, esegua Lua in un sottoprocesso con restrizioni a livello del sistema operativo: seccomp (Linux), App Sandbox (macOS) oppure Docker con un filesystem in sola lettura.
Domanda sulle evasioni della sandbox
Perché rawget deve essere escluso da una sandbox?
Riepilogo: prevenire le evasioni della sandbox
Escluda debug, rawget/rawset, package, require e load dalla sandbox. Protegga l'ambiente della sandbox con __newindex. Copi le tabelle delle librerie invece di fare riferimento agli originali. Aggiunga l'isolamento a livello del sistema operativo per ottenere la massima sicurezza.
Domande Frequenti
La lezione «Prevenzione delle evasioni dalla sandbox» è gratuita?
Sì — il testo completo di «Prevenzione delle evasioni dalla sandbox» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.
Cosa imparerò in «Prevenzione delle evasioni dalla sandbox»?
Blocchi l'accesso alla libreria debug, l'uso improprio di rawget/rawset e le perdite di upvalue. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Lua Academy?
Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Prevenzione delle evasioni dalla sandbox»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Lua Academy?
Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Il modello _ENV in Lua 5.2+
- Creazione di una sandbox limitata
- Prevenzione delle evasioni dalla sandbox
- Limiti delle risorse e strumentazione