0Pricing
Lua Academy · Lezione

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 sandbox

Blocco 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 env

Accesso 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 env

Coroutine 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

  1. Il modello _ENV in Lua 5.2+
  2. Creazione di una sandbox limitata
  3. Prevenzione delle evasioni dalla sandbox
  4. Limiti delle risorse e strumentazione
← Torna a Lua Academy