6.2.5. Eredmények elemzése: Adattól a belátásig

2025.10.06.
AI Biztonság Blog

Az AI Red Teaming hadműveletek legcsillogóbb részei gyakran a támadások megtervezése és végrehajtása. Azonban a valódi értékteremtés, ami a modellek ellenállóbbá tételéhez vezet, a futtatások után kezdődik. 

Kapcsolati űrlap

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

A nyers kimenetek, a sikeres és sikertelen próbálkozások puszta listája önmagában csak zaj. A feladatunk az, hogy ebből a zajból szignált, a jelből pedig cselekvési tervet formáljunk. 

A PyRIT nem csupán a támadások orkesztrálására, hanem az eredmények strukturált tárolására és lekérdezésére is kiváló alapot nyújt, ami az elemzési fázist nagyságrendekkel hatékonyabbá teszi a manuális naplófájl-bogarászásnál,

A nyers adatok tengerében: Mit is látunk?

Minden PyRIT-ben futtatott támadási ciklus strukturált adatokat hagy maga után a beállított memóriában (például a `DuckDBMemory`-ben). Mielőtt bármilyen elemzésbe kezdenénk, meg kell érteni, milyen építőkövekből állnak az eredményeink. A legfontosabb entitások általában a `PromptRequestPiece` objektumok, amelyek a teljes interakciót rögzítik.

Egy tipikus kérés a következőket tartalmazza:

  • conversation_id: A teljes párbeszéd egyedi azonosítója. Ez kulcsfontosságú a multi-turn interakciók kontextusának megértéséhez.
  • sequence: A párbeszéden belüli üzenet sorszáma.
  • role: Az üzenet küldőjének szerepe (`user` vagy `assistant`).
  • original_prompt_text: A ténylegesen elküldött prompt, mindenféle formázás vagy sablonozás után.
  • converted_prompt_text: A prompt a célrendszer által megkövetelt formátumban.
  • response_text: A modell válasza.
  • scorer_responses: Ha használtál pontozókat (scorers), azok értékelései itt tárolódnak.
  • orchestrator_class_name: Melyik orkesztrátor generálta ezt a kérést (pl. `RedTeamingOrchestrator`).

Ezeknek az adatoknak a programozott elérése az első lépés. Ahelyett, hogy egy adatbázis-kezelőben kattintgatnánk, a PyRIT memóriakezelőjét használhatjuk a releváns adatok kinyerésére.

# Példa a PyRIT memóriából az összes kérés lekérdezésére
from pyrit.memory import DuckDBMemory

# Feltételezzük, hogy a memóriánk az alapértelmezett helyen van
memory_interface = DuckDBMemory()

# Az összes prompt kérés lekérése
all_prompt_requests = memory_interface.get_all_prompt_requests()

# Vizsgáljuk meg az első találatot, ha van
if all_prompt_requests:
 first_result = all_prompt_requests[0]
 print(f"Beszélgetés ID: {first_result.conversation_id}")
 print(f"Orkesztrátor: {first_result.orchestrator_identifier.get('orchestrator_class_name')}")
 print(f"Prompt (részlet): {first_result.original_prompt_text[:120]}...")
 
 # Pontozói eredmények kiírása, ha léteznek
 for score in first_result.prompt_metadata.get('scorer_responses', []):
 print(f" - Pontozó: {score.get('scorer_class_name')}, Érték: {score.get('score_value')}")

Az első szűrés: Triage és kategorizálás

Több ezer vagy akár tízezer kérés elemzése lehetetlen manuálisan! Az első és legfontosabb lépés a triage: a legérdekesebb, leginkább problémás esetek gyors azonosítása. Itt válnak felbecsülhetetlen értékűvé a pontozók (scorers).

Ahelyett, hogy minden egyes választ elolvasnánk, a pontozók eredményei alapján szűrhetünk. Például egy `SelfAskJailbreakScorer` magas pontszáma egyértelműen jelzi a sikeres „jailbreak” kísérletet. A szűrési folyamat egyfajta tölcsérként működik, ahol a hatalmas adathalmazból egy kezelhető méretű, mélyebb elemzésre érdemes mintát kapunk.

Példák a triage során alkalmazott szűrési stratégiákra
Szűrési kritérium Cél Példa (PyRIT)
Magas pontszámú találatok A legnyilvánvalóbb sebezhetőségek, sikeres támadások azonosítása. score.score_value > 0.8
Adott támadási stratégia Egy specifikus technika (pl. szerepjáték) hatékonyságának elemzése. prompt.attack_strategy == "Role Playing"
Közepes pontszámú találatok A „majdnem” sikeres támadások, rejtett információ-szivárgások feltárása. 0.4 < score.score_value < 0.7
Válaszban szereplő kulcsszavak Specifikus hibajelenségek keresése (pl. a modell elnézést kér, de mégis válaszol). "sajnálom, de" in response.text.lower()

Mélyelemzés: A mintázatok és anomáliák feltárása

Miután leszűkítettük a vizsgálandó esetek körét, kezdődhet a valódi detektívmunka. A cél itt már nem csupán a hibák listázása, hanem a mögöttes okok és mintázatok megértése. Ez a folyamat iteratív és felfedező jellegű.

Nyers Eredmények (PyRIT Memória) Triage és Szűrés (Pontszámok, metaadatok) Mintázatelemzés (Ok-okozati összefüggések) Akcióterv (Riport, Mitigáció)

Az elemzési folyamat lépései: az adatoktól a cselekvésig.

A sikeres támadások közös nevezője

Vizsgáld meg a legsikeresebb (legmagasabb pontszámú) támadásokat! Van bennük valami közös? Lehet, hogy egy bizonyos típusú persona (pl. „Nagyanyó, aki mesét mesél”) következetesen kijátssza a szűrőket. Vagy talán a több lépésből álló, fokozatosan eszkalálódó beszélgetések sokkal hatékonyabbak, mint az egylövéses próbálkozások. Ezen mintázatok azonosítása segít megérteni a modell „vakfoltjait”. Gyakran érdemes egyszerű szövegelemzési technikákat bevetni, például a leggyakoribb szavak vagy n-grammok kigyűjtését a sikeres promptokból.

A „majdnem” sikeres próbálkozások értéke

Ne dobd el azokat az eseteket, ahol a modell megtagadta a kérést! A válaszok elemzése itt különösen fontos. Egy válasz, mint például: „Sajnálom, de nem generálhatok kódot, amely illegális tevékenységre használható. Azonban, ha egy biztonsági szimulációhoz szeretnél egy szkriptet írni, ami a hálózati portokat ellenőrzi…”, aranyat ér. Bár a modell technikailag megtagadta az eredeti, kártékony kérést, egyben utat is mutatott a védelem megkerülésére. Ezek a „hasznos elutasítások” (helpful refusals) gyakran súlyosabb sebezhetőségeket jeleznek előre, mint a direkt jailbreak-ek.

A pontozók kalibrálása és a hamis pozitívok

Egyetlen automatizált pontozó sem tökéletes. Az elemzési fázis része a pontozók teljesítményének felülvizsgálata is. Találtál olyan eseteket, ahol a pontozó magas értéket adott, de a válasz valójában ártalmatlan volt (hamis pozitív)? Vagy fordítva, a pontozó szerint minden rendben volt, de a válasz mégis rejtett kockázatot (hamis negatív)? Ezen anomáliák vizsgálata nemcsak a modellről, hanem a tesztelési metodológiád erősségeiről és gyengeségeiről is fontos visszajelzést ad.

A kör bezárul: Riportálás és visszacsatolás

Az elemzés végső célja, hogy a feltárt sebezhetőségeket kommunikáljuk a fejlesztői és a termékmenedzsment csapatok felé. Egy jó Red Team riport nem csupán egy hibalista, hanem egy konstruktív dokumentum, amely segít a javításban.

A PyRIT által biztosított strukturált adatok itt ismét segítenek. Minden egyes jelentett problémához csatolni kell a releváns `conversation_id`-t, ami lehetővé teszi a fejlesztők számára, hogy pontosan reprodukálják a hibát. Egy hatékony riport általában a következő elemeket tartalmazza:

  • Összefoglalás: Rövid, vezetői szintű áttekintés a legfontosabb megállapításokról.
  • Sebezhetőség leírása: A feltárt probléma kategóriája (pl. PII szivárgás, jailbreak, káros tartalom generálása).
  • Reprodukálási lépések: A konkrét prompt(ok) és a modell válasza, a `conversation_id`-val együtt.
  • Hatáselemzés: Milyen kockázatot jelent ez a sebezhetőség a valós felhasználás során?
  • Javasolt mitigációs lépések: Konkrét javaslatok a probléma orvoslására (pl. a rendszerprompt módosítása, új tartalomszűrők bevezetése, a modell finomhangolása).

Az itt megszerzett tudás és a feltárt mintázatok közvetlenül táplálják a következő Red Teaming ciklust. Ha például azt találtuk, hogy a modell különösen sebezhető a fordított pszichológiát alkalmazó támadásokra, a következő fejezetben tárgyalt egyedi tesztek írásakor már célzottan erre a technikára koncentrálhatunk.