Ett nätverk som säger nej
A network that says no
Del två om sandlådan för AI-agenter handlar om nätverket, för det är här den verkliga risken bor: en promptinjektion som lurar agenten blir farlig på riktigt först när bytet också kan lämna lådan. Grundregeln är därför enkel — som standard går ingenting ut.
Part two on the AI-agent sandbox is about the network, because this is where the real risk lives: a prompt injection that fools the agent only becomes truly dangerous once the loot can also leave the box. So the ground rule is simple — by default, nothing gets out.
Ingen väg ut
No way out
Tricket sitter i topologin, inte i en brandväggsregel. Sandlådan hänger på ett internt nät utan gateway — det finns bokstavligen ingen rutt till internet. Den enda grannen den kan nå är proxyn, som i sin tur står med ett ben på utsidan. Det gör skyddet robust på ett skönt sätt: det håller även om agenten struntar i sina proxyinställningar, för paketen har ändå ingenstans att ta vägen.
The trick is in the topology, not in a firewall rule. The sandbox sits on an internal network with no gateway — there is literally no route to the internet. The only neighbour it can reach is the proxy, which in turn stands with one foot on the outside. That makes the control pleasantly robust: it holds even if the agent ignores its proxy settings, because the packets have nowhere to go anyway.
En kort lista med undantag
A short list of exceptions
Proxyn släpper bara igenom anslutningar till värdnamn på en kort, versionshanterad lista: modell-API:et, GitHub, de paketkällor man valt att lita på. Den tittar enbart på värdnamn — trafiken dekrypteras aldrig. Alternativet, att terminera TLS och inspektera innehållet, ger förstås mer kontroll, men kräver egna certifikat i varje klient och går sönder mot allt som fäster sina certifikat. Enkelheten är en poäng i sig: en lista som går att läsa på tio sekunder är en lista som faktiskt blir granskad.
The proxy only lets through connections to hostnames on a short, version-controlled list: the model API, GitHub, the package feeds you've chosen to trust. It looks at hostnames only — traffic is never decrypted. The alternative, terminating TLS and inspecting the contents, buys more control but requires your own certificate in every client and breaks against anything that pins its certificates. The simplicity is a feature in itself: a list you can read in ten seconds is a list that actually gets reviewed.
DNS är också en kanal
DNS is a channel too
En klassisk väg förbi utgående filter är DNS-tunnling — att smuggla data i själva namnuppslagen. Därför pekar sandlådans DNS på ett svart hål: uppslag inifrån går ingenstans. De tillåtna namnen slår proxyn i stället upp själv, på utsidan. Inifrån lådan finns alltså varken en väg för paketen eller en väg för namnen.
A classic way around egress filtering is DNS tunnelling — smuggling data inside the name lookups themselves. So the sandbox's DNS points at a black hole: lookups from inside go nowhere. The allowed names are resolved by the proxy itself, on the outside. From inside the box there is neither a route for the packets nor a route for the names.
Det som inte uttryckligen är tillåtet händer helt enkelt inte.
What isn't explicitly allowed simply doesn't happen.
En ärlig hotmodell
An honest threat model
En kanal är alltid öppen: den till modelleverantören. Det är så inferensen och fjärrstyrningen fungerar — stänger man den finns ingen agent kvar. Noll exfiltration skulle kräva lokal inferens, och det är en annan design. Det filtret faktiskt ger är något annat, men värdefullt: varje nekat anrop misslyckas rent och tydligt och hamnar i loggen. Den loggen blir ett arbetsflöde — listan över nekade domäner är precis det underlag som behövs för att medvetet besluta vad som ska släppas igenom härnäst, i stället för att gissa i förväg.
One channel is always open: the one to the model provider. That's how inference and remote control work — close it and there is no agent left. Zero exfiltration would require local inference, and that's a different design. What the filter actually buys is something else, but valuable: every denied request fails cleanly and loudly, and lands in a log. That log becomes a workflow — the list of denied domains is exactly the evidence you need to decide, deliberately, what to allow next, instead of guessing up front.
Det märks också från insidan. En agent i en miljö med tydliga nej beter sig bättre än en i en miljö med mystiska fel: ett blockerat anrop är ett rent 403, inte något som hänger sig — och då är omvägen aldrig långt borta.
You notice it from the inside, too. An agent in an environment of clear no's behaves better than one in an environment of mysterious failures: a blocked request is a clean 403, not something that hangs — and then the workaround is never far away.
Nästa del
Next up
I del 3 handlar det om nycklarna: var tokens ska bo, varför agenten helst inte ska hålla i några alls — och varför sista spärren alltid är en människa.
Part 3 is about the keys: where tokens should live, why the agent ideally holds none at all — and why the final gate is always a human.