6.1.2. Támadási módszerek implementálása

2025.10.06.
AI Biztonság Blog

A telepített és konfigurált ART önmagában még csak egy keretrendszer. Az igazi ereje akkor mutatkozik meg, amikor a benne rejlő támadási algoritmusokat a saját modelljeink ellen fordítjuk. Ez a fejezet bemutatja, hogyan keltheted életre ezeket a támadásokat, a klasszikus gradient-alapú módszerektől a kifinomultabb, black-box technikákig.

Kapcsolati űrlap

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

A támadások anatómiája az ART-ben

Mielőtt fejest ugranánk a konkrét algoritmusokba, fontos megérteni a közös mintát, ahogyan az ART a támadásokat kezeli. 

A folyamat szinte mindig három fő lépésből áll:

  1. Modell „becsomagolása” (Wrapper): Az ART nem tud közvetlenül dolgozni egy nyers PyTorch, TensorFlow vagy Scikit-learn modellel. Először egy ART-kompatibilis „wrapper” osztályba kell csomagolnunk. Ez egy absztrakciós réteget képez, amely egységes interfészt biztosít a támadási algoritmusok számára, függetlenül az alapul szolgáló keretrendszertől.
  2. Támadás inicializálása: Kiválasztod a kívánt támadási osztályt (pl. FastGradientMethod) és létrehozol egy példányt belőle. A konstruktornak jellemzően át kell adni a becsomagolt modellt (az ART Classifiert) és a támadás specifikus hiperparamétereit (pl. a zaj mértékét, az iterációk számát).
  3. Adversarial példák generálása: A létrehozott támadási objektum generate() metódusát hívod meg a tiszta, eredeti bemeneti adatokkal (pl. képekkel). A metódus visszatér az adversarial, módosított adatokkal.

Ez a standardizált folyamat rendkívül hatékonnyá teszi a kísérletezést: ha egy támadás működik, egy másik implementálása gyakran csak néhány sor kód cseréjét jelenti.


# 1. LÉPÉS: Modell becsomagolása egy ART Classifier-be
# Tegyük fel, van egy előtanított PyTorch 'model'-ünk
from art.estimators.classification import PyTorchClassifier

# Definiáljuk a veszteségfüggvényt és az optimalizálót
loss_fn = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)

# Létrehozzuk a wrapper-t
classifier = PyTorchClassifier(
 model=model,
 loss=loss_fn,
 optimizer=optimizer,
 input_shape=(1, 28, 28), # Példa MNIST képekre
 nb_classes=10,
)
 

White-box támadások: Amikor mindent tudsz

A white-box (fehér dobozos) forgatókönyvek feltételezik, hogy a támadó teljes hozzáféréssel rendelkezik a modellhez: ismeri az architektúrát, a súlyokat, sőt, a gradienseket is képes kiszámolni. Bár ez a valóságban ritkábban fordul elő külső támadó esetén, az AI Red Teaming során ez az alapvető tesztelési mód, amivel a modell legrosszabb eseteit tárhatjuk fel.

Fast Gradient Sign Method (FGSM): A gyors első csapás

Az FGSM a legegyszerűbb és leggyorsabb gradient-alapú támadás. Lényege, hogy egyetlen lépést tesz a veszteségfüggvény gradiensének „előjele” által meghatározott irányba. Célja maximalizálni a veszteséget, ezzel rontva a klasszifikáció pontosságát. Gyorsasága miatt ideális első próba, amivel felmérheted a modell alapvető sebezhetőségét.


from art.attacks.evasion import FastGradientMethod

# 2. LÉPÉS: Támadás inicializálása
# Az 'eps' paraméter szabályozza a perturbáció mértékét
attack_fgsm = FastGradientMethod(estimator=classifier, eps=0.2)

# 3. LÉPÉS: Adversarial példák generálása
# x_test_clean a tiszta, eredeti tesztadat
x_test_adv = attack_fgsm.generate(x=x_test_clean)
 

Az FGSM fő hátránya, hogy gyakran „túl nagyot lép”, ami vizuálisan észrevehetőbb zajt eredményezhet, és nem mindig a leghatékonyabb a robusztusabb modellek ellen.

Projected Gradient Descent (PGD): Az iteratív erő

A PGD az FGSM egy kifinomultabb, iteratív változata. Ahelyett, hogy egyetlen nagy lépést tenne, több kisebb lépést tesz a gradiens irányába. Minden lépés után „visszavetíti” (project) a perturbációt egy adott norma (általában L-inf, azaz a maximális eltérés) által meghatározott gömbbe. Ez biztosítja, hogy a teljes zaj ne lépjen túl egy előre meghatározott `eps` korlátot.


from art.attacks.evasion import ProjectedGradientDescent

# 2. LÉPÉS: PGD támadás inicializálása
# Több paramétert adhatunk meg, pl. iterációk száma, lépésköz
attack_pgd = ProjectedGradientDescent(estimator=classifier,
 norm=np.inf,
 eps=0.3,
 eps_step=0.01,
 max_iter=40,
 targeted=False)

# 3. LÉPÉS: Generálás (a hívás ugyanaz)
x_test_adv_pgd = attack_pgd.generate(x=x_test_clean)
 

A PGD szinte mindig erősebb támadást eredményez, mint az FGSM, és a robusztussági kutatások de facto standardjává vált a modellek értékelésében.

🐼 Eredeti kép Modell: „Panda” (98%) + ε * sign(∇J) Adversarial Támadás 🐼 Adversarial Példa Modell: „Gibbon” (91%)

Black-box támadások: A realisztikusabb forgatókönyv

A black-box (fekete dobozos) támadások nem férnek hozzá a modell belső működéséhez. Csak a modell bemenetét és kimenetét (pl. a predikált címkéket vagy valószínűségeket) képesek megfigyelni. Ez sokkal jobban modellezi a valós helyzeteket, ahol egy külső támadó egy API-n keresztül éri el a modellt.

HopSkipJumpAttack: Tánc a döntési határon

Ez egy igazán hatékony, lekérdezés-alapú black-box támadás. A működése azon alapul, hogy megpróbálja megtalálni a legrövidebb utat egy eredeti bemenet és egy már tévesen klasszifikált pont között, miközben végig a döntési határon „lépked”. Csak a végső döntésre (a predikált címkére) van szüksége, még a valószínűségi értékekre sem, ami rendkívül takarékossá teszi az információs követelményeit.


from art.attacks.evasion import HopSkipJump

# Nincs szükségünk a modell belső állapotára, csak a predikciós képességére.
# A classifier wrapper itt is kell az egységes interfész miatt.
attack_hsj = HopSkipJump(classifier=classifier,
 targeted=False,
 max_iter=50,
 max_eval=1000,
 init_eval=10)

# A generálás itt lassabb lehet, mert sok lekérdezést igényel a modelltől.
x_test_adv_hsj = attack_hsj.generate(x=x_test_clean)
 

A HopSkipJump és a hozzá hasonló támadások (pl. Square Attack, SimBA) demonstrálják, hogy a gradiensek ismerete nem feltétlenül szükséges egy modell megtévesztéséhez. A Red Teaming során ezekkel tesztelheted a rendszered ellenállását a valós, külső fenyegetésekkel szemben.

Összehasonlító elemzés: Melyik támadást mikor?

A megfelelő támadás kiválasztása a céljaidtól, a rendelkezésre álló információtól és az időkerettől függ. Az alábbi táblázat segít eligazodni a bemutatott módszerek között.

Módszer Típus Alapgondolat Előny Hátrány
FGSM White-box Egyetlen lépés a gradiens előjelének irányába. Rendkívül gyors, jó alapértékeléshez. Kevésbé hatékony, könnyen detektálható zajt hozhat létre.
PGD White-box Több, korlátozott méretű lépés a gradiens irányába. Nagyon erős, a robusztussági tesztek standardja. Lassabb, mint az FGSM, több hiperparamétert igényel.
HopSkipJump Black-box A döntési határ felderítése lekérdezésekkel. Realisztikus fenyegetést modellez, minimális információt igényel. Nagyon lassú lehet a sok modell-lekérdezés miatt.

A támadások sikeres generálása az első, kritikus lépés a modell sebezhetőségeinek feltárásában. Ezzel a tudással felvértezve már nem csak azt látod, hogy a modelled hol teljesít jól, hanem azt is, hogy hol és hogyan lehet megtörni. A következő logikus kérdés, hogy mit tehetünk ellenük, hogyan építhetünk ellenállóbb rendszereket. Ez vezet át minket a védekezési mechanizmusok világába.