22.1.4. Biztonsági sandbox létrehozása

2025.10.06.
AI Biztonság Blog

A szerszámok a helyükön, a virtuális gép fut. Mielőtt azonban fejest ugranánk a modellek tesztelésébe, fel kell építenünk a biztonságos „játszóteret”. Gondolj a sandboxra úgy, mint egy tűzszerész bombahatástalanító kamrájára: egy ellenőrzött környezet, ahol a potenciálisan veszélyes műveletek elvégezhetők anélkül, hogy a környező infrastruktúrát veszélyeztetnénk. Itt nem egy fizikai robbanástól tartunk, hanem a kontrollálatlan kódvégrehajtástól, adatszivárgástól vagy a hoszt rendszer kompromittálódásától.

Kapcsolati űrlap

AI Biztonság kérdésed van? Itt elérsz minket:

Miért elengedhetetlen a sandbox?

Az AI modellek, különösen a nagy nyelvi modellek (LLM-ek), alapvetően komplex, gyakran kiszámíthatatlan rendszerek. A Red Teaming során szándékosan provokáljuk őket, hogy nem várt vagy rosszindulatú viselkedést produkáljanak. Egy sandbox használata több kritikus kockázatot mérsékel:

  • Kártékony kód futtatása: A modell generálhat olyan kódrészletet, amely – ha lefuttatod – kárt tehet a rendszeredben. A sandbox megakadályozza, hogy ez a kód hozzáférjen a hoszt gép erőforrásaihoz.
  • Adatszivárgás: Egy rosszul konfigurált tesztkörnyezetből a modell vagy a tesztelő szkript véletlenül kiszivárogtathat érzékeny adatokat a hoszt rendszerről.
  • Környezeti integritás: A tesztek során telepített függőségek, létrehozott fájlok és egyéb módosítások „beszennyezhetik” a hoszt rendszert. A sandbox biztosítja, hogy minden teszt egy tiszta, reprodukálható környezetben induljon, és a végén nyom nélkül eltakarítható legyen.
  • Rendszerstabilitás: Egy elszabadult tesztfolyamat felemésztheti az összes CPU-t vagy memóriát, instabillá téve a hoszt gépet. Az izoláció korlátozza a teszt által felhasználható erőforrásokat.

Az izoláció rétegei: Melyiket mikor használjuk?

Nem minden teszt igényel ugyanolyan szintű elszigetelést. A megfelelő sandbox kiválasztása a feladat kockázati szintjétől függ. Az alábbi döntési fa segít a választásban.

Mekkora a kockázat? Közepes Alacsony Magas / Ismeretlen 1. szint Folyamat-szintű izoláció (pl. Firejail) 2. szint Konténerizáció (pl. Docker) 3. szint Teljes virtualizáció (pl. dedikált VM) Gyors, egyszerű tesztek, megbízható eszközökkel. Reprodukálható környezet, komplex függőségek kezelése. Ismeretlen forrású modellek, potenciálisan kártékony kód elemzése.

1. szint: Folyamat-szintű izoláció (pl. Firejail)

Ez a legkönnyebb és leggyorsabb izolációs módszer. Analógia: egy festő letakarja a padlót fóliával. Megvédi a padlót a festékcseppektől, de a festékszag (hálózati forgalom, processz-lista) továbbra is „kiszivárog”. Ideális, ha egy megbízható szkriptet futtatsz egy helyi, szöveges modell ellen, és csak a fájlrendszer-hozzáférést akarod korlátozni.

# A python szkript csak a /tmp és a saját mappájához fér hozzá
firejail --private=. --private-tmp python my_analysis_script.py

2. szint: Konténerizáció (pl. Docker)

Ez a Red Teaming gyakorlat „arany középutja”. A Docker egy komplett, izolált környezetet hoz létre (fájlrendszer, hálózat, processzek), amely megosztozik a hoszt rendszer kernelén. Analógia: egy előre gyártott, zárt laboratóriumi modul egy nagy csarnokon belül. Saját szellőzése, eszközei vannak, de a csarnok alapzatát és tetőszerkezetét használja.

Ez a módszer kiválóan alkalmas reprodukálható tesztkörnyezetek létrehozására. Definiálhatsz egy `Dockerfile`-t, ami pontosan leírja a környezetet, a telepített eszközökkel és függőségekkel együtt.

Példa: Python tesztkörnyezet Dockerben

Először hozz létre egy `Dockerfile` nevű fájlt:

# Használjunk egy minimalista Python alapimage-et
FROM python:3.10-slim

# Munkakönyvtár beállítása a konténeren belül
WORKDIR /app

# Másoljuk be a teszt szkripteket a hoszt gépről a konténerbe
COPY ./scripts/ /app/scripts/

# Telepítsük a szükséges Python csomagokat
RUN pip install --no-cache-dir requests transformers

# Alapértelmezett parancs, ha a konténer elindul
CMD ["bash"]

Ezután építsd meg az image-et és futtasd a konténert:

# 1. Image építése a Dockerfile alapján
docker build -t ai-redteam-lab .

# 2. Konténer indítása interaktív módban, hálózati izolációval
# A --rm flag biztosítja, hogy a konténer leállás után törlődjön
docker run --rm -it --network=none --name="redteam-session-1" ai-redteam-lab

A fenti parancs egy teljesen izolált shellt ad, hálózati kapcsolat nélkül. Innen biztonságosan futtathatod a szkriptjeidet anélkül, hogy azok a hoszt rendszert vagy a hálózatot elérnék.

3. szint: Teljes virtualizáció (pl. dedikált VM)

Ez a legmagasabb szintű védelem. A virtuális gép (amit a 22.1.2 fejezetben már beállítottál) egy teljes operációs rendszert emulál, saját, dedikált kernellel. Analógia: egy teljesen különálló, lezárt épület a telephelyen, saját víz-, áram- és légellátással. A hoszt rendszer és a VM között a hipervizor képez egy szigorúan ellenőrzött határt.

Mikor van erre szükség?

  • Ha egy ismeretlen, nem megbízható forrásból származó modellt vagy eszközt tesztelsz.
  • Ha a teszt célja potenciálisan kártékony kód (pl. malware) generálása és elemzése.
  • Ha attól tartasz, hogy a támadás a kernel szintjét célozhatja (konténerből való kitörés).

Ebben az esetben a teljes red team tevékenységet a dedikált virtuális gépen belül végzed. A maximális biztonság érdekében a VM hálózati beállításait is korlátozhatod (pl. „Host-only” vagy „NAT” módra), hogy megakadályozd a belső hálózat elérését.

Gyakorlati tanácsok és buktatók

A sandbox csak annyira erős, amennyire jól van konfigurálva. Íme néhány gyakori hiba, amit érdemes elkerülni:

  • Túlengedékeny kötet-csatolás (Volume Mounts): A `docker run -v /home/user:/app` parancs kényelmes, de a teljes home könyvtáradat elérhetővé teszi a konténer számára, ezzel kiiktatva a fájlrendszer-izoláció lényegét. Csak azt a konkrét mappát csatold fel, amire feltétlenül szükséged van.
  • Hálózati mód figyelmen kívül hagyása: A `–network=host` beállítás a konténernek teljes hozzáférést ad a hoszt hálózati interfészeihez. Ez rendkívül kockázatos. Mindig a legszigorúbb hálózati móddal kezdj (`none`), és csak annyira engedékenyítsd, amennyire a teszt megköveteli.
  • Futtatás root felhasználóként: Alapértelmezetten a konténerekben a folyamatok `root`-ként futnak. Ha egy támadó kitör a konténerből, root jogosultságai lehetnek a hoszt rendszeren is (bizonyos konfigurációk esetén). Használd a `docker run –user` flaget egy alacsonyabb jogosultságú felhasználó megadásához.

A következő lépés, hogy ezt a frissen létrehozott, biztonságos környezetet megtöltsük élettel: kidolgozzuk az első tesztelési protokollunkat.