34.1.5. Evolúciós támadási stratégiák

2025.10.06.
AI Biztonság Blog

Amikor az automatizált promptolás brute-force jellege már nem elég hatékony, és a finomhangolt, manuális támadások túl sok erőforrást emésztenek fel, egy sokkal kifinomultabb megközelítésre van szükség. Mi lenne, ha a támadó promptok nem statikusak lennének, hanem képesek lennének „fejlődni”, alkalmazkodni a célmodell védelméhez, és a sikeresebb variánsok génjeit továbbörökítve egyre potensebbé válnának? Ez a gondolat az evolúciós támadási stratégiák alapja, ahol a természetes szelekció elveit alkalmazzuk a jailbreak promptok generálására.

Kapcsolati űrlap

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

Ez a módszer túllép az egyszerű iteráción. Nem csupán variációkat próbálgatunk, hanem egy teljes „populációt” hozunk létre támadó promptokból, és hagyjuk, hogy a „legéletképesebbek” szaporodjanak és mutálódjanak, amíg egy olyan variáns nem jön létre, amely áttöri a modell védelmét.

Az evolúció mint támadási modell

Az evolúciós algoritmusok ereje abban rejlik, hogy képesek komplex, nem lineáris problématereket bejárni anélkül, hogy előre ismernénk a tökéletes megoldást. Esetünkben a „problématér” az összes lehetséges prompt kombinációja. A folyamat a biológiai evolúcióhoz hasonlóan épül fel:

Populáció (Génkészlet)

Ez egy kezdeti készlet különböző támadó promptokból. Lehetnek ezek korábban sikeres jailbreak-ek, manuálisan írt kísérletek vagy akár véletlenszerűen generált szövegrészletek. Minél változatosabb a kiindulási populáció, annál nagyobb az esély a sikerre.

Fitnesz függvény (Életképesség mérése)

Ez a folyamat legkritikusabb eleme. Egy automatizált metrika, ami megmondja, hogy egy adott prompt mennyire volt „sikeres”. A sikerességet többféleképpen mérhetjük: a modell válaszában tiltott kulcsszavak hiánya, a káros tartalom jelenléte, vagy akár egy másodlagos, „bíró” LLM értékelése alapján, amely pontozza a kapott választ. Egy rosszul definiált fitnesz függvény az egész folyamatot kisiklatja.

Szelekció

A legmagasabb fitnesz értékkel rendelkező promptokat („egyedeket”) választjuk ki a „szaporodásra”. A gyengébb próbálkozások kiesnek a génkészletből, így a populáció átlagos minősége generációról generációra javul.

Keresztezés (Crossover)

Két sikeres „szülő” promptot véletlenszerűen kombinálunk, hogy új „utód” promptokat hozzunk létre. Például az egyik prompt elejét a másik prompt végével fűzzük össze. Ez lehetővé teszi a sikeres stratégiák és szövegrészletek rekombinációját.

Mutáció

Az új utód promptokon apró, véletlenszerű változtatásokat hajtunk végre: egy szó cseréje, egy karakter hozzáadása vagy törlése, egy mondat átrendezése. A mutáció biztosítja a genetikai változatosságot, és segít elkerülni, hogy az algoritmus egy helyi optimumban ragadjon.

Az evolúciós ciklus vizualizálva

A folyamat egy folyamatos ciklus, amely addig ismétlődik, amíg el nem érünk egy előre meghatározott fitnesz szintet (azaz egy sikeres jailbreak-et), vagy el nem fogy a számítási kapacitásunk.

1. Kezdeti Populáció 2. Értékelés (Fitnesz) 3. Szelekció (A legjobbak kiválasztása) 4. Új Generáció (Keresztezés + Mutáció)

Pszeudokód példa

Egy egyszerűsített pszeudokód segít megérteni a logika mögötti kódszerkezetet. Ez nem egy működő implementáció, hanem a koncepció vázlata.

# Pszeudokód egy evolúciós támadási algoritmushoz

def evolucios_tamadas(cel_modell, kezdeti_promptok, generaciok):
 # 1. A kezdeti populáció létrehozása
 populacio = kezdeti_promptok

 for i in range(generaciok):
 # 2. Fitnesz értékelés minden egyedre
 # A fitnesz_ertekeles lefuttatja a promptot a cél modellen
 # és pontozza a választ (pl. 0-1 skálán)
 ertekelt_populacio = []
 for prompt in populacio:
 valasz = cel_modell.kerdes(prompt)
 fitnesz = fitnesz_ertekeles(valasz)
 ertekelt_populacio.append((prompt, fitnesz))
 
 # Siker esetén kilépünk
 if max(fitnesz for prompt, fitnesz in ertekelt_populacio) == 1.0:
 print("Sikeres jailbreak:", [p for p, f in ertekelt_populacio if f == 1.0][0])
 return

 # 3. Szelekció: a legjobb 50% megtartása
 ertekelt_populacio.sort(key=lambda x: x[1], reverse=True)
 szulok = [prompt for prompt, fitnesz in ertekelt_populacio[:len(populacio)//2]]

 # 4. Új generáció létrehozása
 uj_generacio = szulok # Az eliteket egyből átvisszük
 while len(uj_generacio) < len(populacio):
 szulo1 = random.choice(szulok)
 szulo2 = random.choice(szulok)
 
 # 5. Keresztezés
 utod = keresztezes(szulo1, szulo2)
 
 # 6. Mutáció (pl. 10% eséllyel)
 if random.random() < 0.1:
 utod = mutacio(utod)
 
 uj_generacio.append(utod)
 
 populacio = uj_generacio

 print("Nem sikerült jailbreak-et találni a megadott generációszám alatt.")

Gyakorlati megfontolások és buktatók

Bár rendkívül hatékony tud lenni, az evolúciós megközelítésnek komoly költségei és kihívásai vannak, amelyeket egy támadónak mérlegelnie kell.

Előnyök (Támadói szempontból) Hátrányok és Kihívások
Automatizált felfedezés: Olyan komplex és nem intuitív sebezhetőségeket is megtalálhat, amire emberi operátor nem gondolna. Extrém számítási igény: Minden generáció minden egyedének értékelése egy API hívást jelent. Egy 100 egyedből álló populáció 50 generáción át 5000 API hívást igényel.
Adaptív képesség: Ha a modell védelmét frissítik, az algoritmus képes lehet új utakat találni a megváltozott környezetben, amíg a fitnesz függvény releváns marad. A fitnesz függvény törékenysége: A támadás sikere vagy kudarca szinte teljes mértékben a fitnesz függvény minőségén múlik. Ha rosszul méri a „sikert”, az egész evolúció rossz irányba halad.
Skálázhatóság: Több számítási erőforrással a populáció mérete és a generációk száma is növelhető, ami felgyorsítja a keresést. Lokális optimum: Az algoritmus beleragadhat egy „elég jó, de nem tökéletes” megoldásba, és a mutációk nem elég erősek ahhoz, hogy kimozdítsák onnan.
Újrafelhasználhatóság: Egy sikeresen kifejlesztett genetikus algoritmus és fitnesz függvény más modellek ellen is bevethető lehet, minimális módosításokkal. Detektálhatóság: A nagyszámú, hasonló, de kissé eltérő, gyanús prompt küldése anomáliaként jelenhet meg a védelmi rendszerek naplóiban.

Az evolúciós stratégiák jelentik az LLM kontra LLM hadviselés egyik csúcsát. Itt már nem egyszerű szkriptek harcolnak a védelmi rendszerekkel, hanem egy önfejlesztő, adaptív folyamat, amely a túlélésért és a sikeres behatolásért „küzd”. A védekező oldal számára ez azt jelenti, hogy a statikus szűrők és kulcsszólisták helyett sokkal dinamikusabb, viselkedésalapú anomáliadetektálásra van szükség.