A nagy absztrakciós tévhit
Tévhit: Az AI modellek matematikai konstrukciók. A futtatásukhoz használt hardver – a GPU, a RAM, a CPU gyorsítótár – puszta implementációs részlet, aminek nincs biztonsági relevanciája. A modell logikája és a fizikai végrehajtás két külön világ.
Valóság: A modell logikájának minden egyes lépése fizikai lenyomatot hagy a hardveren. Minden memóriahozzáférés, minden számítás időbe telik, és ezek az időzítési különbségek egy kifinomult mellékcsatornát hoznak létre. A memóriahozzáférés mintázata elárulja, hogy a modell éppen *min* és *hogyan* gondolkodik. A Red Teamer számára ez a hardver-szoftver határvonal nem fal, hanem egy információgazdag membrán.
A memóriamintázat mint mellékcsatorna
Amikor egy transzformer modell inferenciát végez, nem egy légüres térben lebegő algoritmusként működik. Folyamatosan adatokat mozgat a GPU VRAM (vagy a RAM) és a processzor különböző szintű gyorsítótárai (L1, L2, L3) között. A kulcs a sebességkülönbség: egy adat elérése a gyorsítótárból nagyságrendekkel gyorsabb, mint a fő memóriából. Ezt a jelenséget használják ki a klasszikus gyorsítótár-időzítésen alapuló támadások, mint a Flush+Reload vagy a Prime+Probe.
A támadó, aki ugyanazon a fizikai hardveren (de más virtuális gépen vagy konténerben) futtatja a saját kódját, képes megfigyelni ezeket az időzítési anomáliákat. Ha a támadó egy memóriaterületet „előkészít” (prime), majd később ellenőrzi (probe), és azt tapasztalja, hogy az adatok elérése lassú, az azt jelenti, hogy az áldozat (az AI modell) kilökte az ő adatait a gyorsítótárból, mert éppen azt a memóriarészt használta. Ez a gyorsítótár-ütközés (cache collision) a támadás alapja.
Az AI modellek esetében ez a technika különösen hatékony, mert a működésük determinisztikus memóriahozzáférési mintázatokat generál, amelyek közvetlenül kapcsolódnak a feldolgozott adatokhoz.
Konkrét kiszivárogtatási vektorok
Nem minden memóriahozzáférés egyformán informatív. Két terület különösen érzékeny az ilyen típusú elemzésre:
Beágyazási táblák (Embedding Tables)
A modellek a szavakat (tokeneket) sűrű vektorokká, úgynevezett beágyazásokká (embedding) alakítják. Ezt egy hatalmas keresőtábla segítségével teszik, ami a memóriában helyezkedik el. Ha a bemeneti prompt tartalmazza a „titkos” szót, a modell a „titkos” tokennek megfelelő sort fogja kiolvasni a beágyazási táblából. Ez egy specifikus memóriacímhez való hozzáférést jelent.
Egy támadó, aki képes monitorozni a beágyazási tábla memóriaterületét, észlelni tudja, hogy mely részek válnak „forróvá”. Bár nem látja a konkrét adatot, a hozzáférési mintázatból következtethet a bemeneti promptban használt szavak típusára vagy akár konkrét szavakra, ha elég kifinomult a megfigyelési technikája.
Szakértők Keveréke (Mixture of Experts – MoE) modellek
Az MoE architektúrák (mint pl. a Mixtral) több, kisebb, specializált „szakértő” alhálózatot használnak. Minden egyes bemeneti tokenhez egy úgynevezett gating network (kapuzó hálózat) kiválasztja, hogy melyik egy vagy két szakértő dolgozza fel azt. A különböző szakértők súlyai a memória különböző, jól elkülöníthető területein helyezkednek el.
Ez egy aranybánya a Red Teamer számára. Ha a támadó azonosítja, hogy mely memóriablokkok melyik szakértőhöz tartoznak (pl. van egy Python kódolásra, egy jogi szövegekre és egy kreatív írásra specializálódott szakértő), akkor a memóriahozzáférési mintázatok figyelésével meg tudja állapítani, hogy a felhasználó éppen milyen jellegű feladatot ad a modellnek. Ha a „jogi szakértő” memóriaterülete aktív, szinte biztos, hogy a prompt valamilyen szerződéssel, törvénnyel vagy jogi kérdéssel kapcsolatos, még akkor is, ha a támadó egyetlen bitet sem lát a tényleges bemenetből.
Ábra 1: MoE modell memóriahozzáférési mintázata. A Gating Hálózat a „Szakértő B”-t választja, ami a memória egy specifikus régiójának aktív használatát eredményezi. Ezt az aktivitást egy mellékcsatornán keresztül a támadó észlelheti.
Támadási forgatókönyv pszeudokóddal
Nézzünk egy egyszerűsített pszeudokódot egy MoE szakértő-azonosító támadásra, a Prime+Probe technika logikáját követve.
def azonosits_aktiv_szakertot(szakerto_memoria_cimek, kuszob):
// A szakértők memóriacímeit tartalmazó lista
// pl. {"szakerto_A": 0x1000, "szakerto_B": 0x2000, ...}
// 1. Prime fázis: A támadó feltölti a gyorsítótárat a saját adataival
// azokon a memóriaterületeken, ahol a szakértők súlyai vannak.
for cim in szakerto_memoria_cimek.values():
toltsd_fel_gyorsitotarat(cim)
// Várunk, amíg az áldozat (AI modell) fut és potenciálisan
// kilöki az adatainkat a gyorsítótárból.
varakozas()
// 2. Probe fázis: Mérjük a saját adataink elérésének idejét.
aktiv_szakertok = []
for nev, cim in szakerto_memoria_cimek.items():
eleresi_ido = merj_hozzaferesi_idot(cim)
// Ha az elérési idő magas (cache miss), akkor az AI modell
// használta ezt a memóriaterületet.
if eleresi_ido > kuszob:
aktiv_szakertok.append(nev)
return aktiv_szakertok
Ez a kód, bár leegyszerűsített, bemutatja a támadás lényegét: a memóriahozzáférési idők mérésével láthatóvá válik a modell belső működése, ami normál esetben teljesen rejtve maradna.
Red Teamerként a feladatod megérteni, hogy a felhős környezetekben, ahol a hardver erőforrások megosztottak, ezek a „klasszikus” hardveres támadások újra relevánssá válnak az AI rendszerek ellen. A memóriahozzáférés nem csak egy implementációs részlet, hanem egy gazdag, kiaknázható információs felület.