Lua Academy · Lektion

Förhindra att sandlådor kringgås

Blockera åtkomst till biblioteket debug, missbruk av rawget/rawset och läckor av upvalues.

Lektion 3 av 414 steg

Förhindra att sandlådor kringgås är en gratis lektion i Lua Academy på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lua Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lua Academy innehåller totalt 4 lektioner.

Problemet med flyktvägar

Även med en vitlistad miljö kan kreativa angripare hitta sätt att komma åt den riktiga globala miljön. Den här lektionen behandlar kända flyktvägar och hur de stängs.

Utnyttjande av strängars metatabell

I Lua har strängar en gemensam metatabell som exponerar strängbiblioteket. Sandlådekod kan använda en sträng för att få en referens till string.rep och därifrån nå andra bibliotek.

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

Blockering via rawget/rawset

Om rawget finns i sandlådan kan koden använda det för att kringgå __index-begränsningar och läsa direkt från riktiga tabeller.

-- Fix: exclude rawget, rawset, rawequal, rawlen from the sandbox env

Åtkomst till debug-biblioteket

debug-biblioteket kan läsa och ändra alla upvalues, inklusive _ENV. Uteslut det helt från sandlådan.

package.loaded-tabell

Om require eller package är åtkomliga kan kod i sandlådan nå redan inlästa moduler, inklusive os och io.

-- Fix: exclude require and package from the sandbox env

Coroutiner och återupptagning

En coroutine i sandlådan som återupptas av värdprocessen kan användas för att exfiltrera tillstånd. Använd coroutine.wrap med försiktighet och återuppta inte coroutiner i sandlådan med utökade privilegier.

Vandra genom upvalues

Utan debug-biblioteket kan kod i sandlådan inte vandra genom upvalues. Men om debug.getupvalue av misstag inkluderas kan det användas för att nå _G.

__newindex i safeEnv

Lägg till en __newindex i sandlådemiljöns metatabell för att förhindra att kod i sandlådan skapar nya globala variabler som skuggar säkra sådana.

setmetatable(safeEnv, {
  __newindex = function(_, k, v)
    -- allow only whitelisted keys or reject
    error("Global assignment not allowed: " .. k)
  end
})

Proxy för math-biblioteket

I stället för att skicka med den riktiga tabellen math (som delar metatabell med standardbiblioteket) skapar du en ytlig kopia med endast de funktioner som behövs.

Automatiserade tester av utbrytningar

Underhåll en fuzzningstestsvit som provar kända utbrytningsmönster mot sandlådan. Kör den vid varje ändring av sandlådekoden.

Försvar i flera lager

Ingen sandlåda är perfekt. Lägg försvar i flera lager: begränsad miljö + instruktionsgränser + minnesgränser + isolering på operativsystemnivå (separat underprocess eller container).

Sandlåda på operativsystemnivå

För maximal säkerhet kör du Lua i en underprocess med begränsningar på operativsystemnivå: seccomp (Linux), App Sandbox (macOS) eller Docker med ett skrivskyddat filsystem.

Fråga om utbrytning ur sandlådan

Varför måste rawget uteslutas från en sandlåda?

Sammanfattning: Förhindra utbrytningar ur sandlådan

Uteslut debug, rawget/rawset, package, require och load från sandlådan. Skydda sandlådemiljön med __newindex. Kopiera bibliotekstabeller i stället för att referera till originalen. Lägg till isolering på operativsystemnivå i flera lager för maximal säkerhet.

Gratis att börja

Lär dig Lua med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
40
Lektioner
159

Vanliga frågor

Är lektionen ”Förhindra att sandlådor kringgås” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lua Academy, inklusive ”Förhindra att sandlådor kringgås”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lua Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Förhindra att sandlådor kringgås”?

Blockera åtkomst till biblioteket debug, missbruk av rawget/rawset och läckor av upvalues. Ni övar på Lua Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Lua Academy?

Du behöver inga förkunskaper. Utbildningen i Lua Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Förhindra att sandlådor kringgås”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Lua Academy-lektionen?

Ja. Varje Lua Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. _ENV-modellen i Lua 5.2+
  2. Bygga en begränsad sandlåda
  3. Förhindra att sandlådor kringgås
  4. Resursbegränsningar och instrumentering
← Tillbaka till Lua Academy