33.2.1 Ellenséges CAPTCHA generálás

2025.10.06.
AI Biztonság Blog

Mi történik, ha a CAPTCHA-kat nem a védekező, hanem a támadó generálja? A megszokott szerepek felcserélése egy új, kifinomult támadási vektort nyit meg, ahol a cél nem a CAPTCHA megoldása, hanem annak alapvető megbízhatóságának aláásása.

Kapcsolati űrlap

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

A szerepek felcserélése: Adatmérgezés a CAPTCHA-ökoszisztémában

A hagyományos modellben a szolgáltató generál egy ember számára (ideális esetben) könnyű, de gép számára nehéz feladatot. Az ellenséges generálás ezt a logikát fordítja a feje tetejére. A támadó egy olyan generatív modellt (pl. GAN-t vagy diffúziós modellt) hoz létre, amely szándékosan olyan CAPTCHA-kat állít elő, amelyek egy specifikus MI-számára triviálisak, de egy emberi megoldó számára kétértelműek vagy félrevezetőek.

De miért tenné ezt? A célpont általában nem a végfelhasználói weboldal, hanem a CAPTCHA-megoldó szolgáltatások (ún. „CAPTCHA farmok”) mögött álló adathalmazok és modellek. Ezek a szolgáltatások gyakran emberi munkaerőt alkalmaznak a nehezebb CAPTCHA-k címkézésére, ezzel folyamatosan tanítva és finomhangolva a saját automatizált megoldóikat. Az ellenségesen generált CAPTCHA-k beküldésével a támadó adatmérgezést (data poisoning) hajt végre.

A gyakorlati támadási lánc

Képzelj el egy támadót, aki meg akarja gyengíteni a „KonkurensCaptchaSolver” szolgáltatást. A folyamat a következőképpen néz ki:

  1. Generátor létrehozása: A támadó betanít egy generatív modellt, hogy olyan képeket hozzon létre (pl. torzított szövegeket), amelyekre a saját, privát megoldó MI-je 100%-os pontossággal tudja a helyes címkét.
  2. Emberi megtévesztés optimalizálása: A modell tanítása során a veszteségfüggvénybe beépítenek egy második komponenst: a generált képnek maximalizálnia kell az emberi félreértelmezés valószínűségét. Például egy „rn” karaktersorozatot vizuálisan úgy alakít, hogy az egy „m”-nek tűnjön, vagy egy „d” betűt egy „cl” kombinációnak.
  3. Tömeges beküldés: A támadó nagy mennyiségben vásárol kreditet a „KonkurensCaptchaSolver” platformon, és beküldi a saját generált, „mérgezett” CAPTCHA-it megoldásra.
  4. Hibás címkézés: A konkurens szolgáltatás emberi dolgozói a vizuális benyomás alapján megpróbálják megoldani a feladványokat. A megtévesztő képeket nagy arányban hibásan címkézik fel (pl. az MI által „dog”-nak generált, de emberileg „clog”-nak látszó képet „clog”-ként címkézik).
  5. A modell degradálódása: Ezek a hibás címkék bekerülnek a „KonkurensCaptchaSolver” tanító adathalmazába. Amikor a szolgáltató legközelebb újratanítja a modelljét, az a mérgezett adatok miatt jelentősen veszít a pontosságából. A támadó ezzel hatékonyan szabotálta a versenytársát.
Támadó MI (Generátor) generál Mérgezett CAPTCHA Valódi címke: „cat” Látszólagos: „c@t” beküldi Célpont (Emberi megoldó) címkézi Hibás címke „c@t” Mérgezett adatbázis Visszacsatolás a tanító adathalmazba
1. ábra: Az ellenséges CAPTCHA generáláson alapuló adatmérgezési támadás folyamata.

A generálás logikája

A támadás lelke a generátor modell tanítási folyamata. A modellnek egyszerre két, egymásnak ellentmondó célt kell elérnie: a saját belső MI számára könnyen olvashatónak, az ember számára pedig nehezen vagy félreérthetően értelmezhetőnek kell lennie. Ezt egy összetett veszteségfüggvénnyel (loss function) érik el.


# Pszeudokód egy ellenséges CAPTCHA generátor tanításához

function trenirozas_lepes(generator, sajat_szolver, emberi_hiba_modell):
 # 1. Generálunk egy új CAPTCHA-t egy véletlen, helyes címkével
 helyes_cimke = "k3eper"
 uj_captcha = generator.general(helyes_cimke)

 # 2. Veszteség 1: A saját MI-nk tudja-e olvasni?
 # Cél: minimalizálni ezt a veszteséget.
 szolver_tipp = sajat_szolver.megold(uj_captcha)
 szolver_veszteseg = cross_entropy_loss(szolver_tipp, helyes_cimke)

 # 3. Veszteség 2: Mennyire fogja az ember elrontani?
 # Egy előre betanított modell megbecsüli az emberi hiba valószínűségét.
 # Cél: maximalizálni ezt az értéket, ami a veszteség minimalizálását jelenti.
 vart_emberi_hiba = emberi_hiba_modell.becsul(uj_captcha)
 emberi_veszteseg = -vart_emberi_hiba # Negatív, mert maximalizálni akarjuk

 # 4. Kombinált veszteség:
 # A lambda súlyozza a két cél fontosságát.
 lambda_suly = 0.5
 teljes_veszteseg = szolver_veszteseg + (lambda_suly * emberi_veszteseg)

 # 5. A generátor súlyainak frissítése a teljes veszteség alapján
 generator.visszaterjesztes(teljes_veszteseg)
 

Védekezési stratégiák és következmények

Az ilyen típusú támadások ellen a védekezés több rétegű lehet:

  • Anomáliadetekció: A beérkező CAPTCHA-k statisztikai elemzése. Ha egyetlen forrásból hirtelen nagy mennyiségű, szokatlan vizuális mintázatú (pl. furcsa torzítások, szokatlan betűtípusok) CAPTCHA érkezik, az gyanúra adhat okot.
  • Konszenzus alapú címkézés: Egyetlen emberi megoldó helyett több, független embernek is kiadják ugyanazt a feladatot. Ha a válaszok között nagy az eltérés, a CAPTCHA valószínűleg kétértelmű vagy megtévesztő, és kizárható a tanító adathalmazból.
  • Teljesítmény-monitorozás: Az egyes emberi megoldók teljesítményének folyamatos figyelése. Ha egy adott típusú CAPTCHA-n az összes dolgozó hirtelen elkezd rosszul teljesíteni, az a feladatok rosszindulatú természetére utalhat.

Az ellenséges CAPTCHA generálás jól példázza, hogy a mesterséges intelligencia elleni támadások egyre inkább a rendszerek alapvető logikáját és tanítási folyamatait célozzák, nem csupán a végponti védelmet. Ez a technika a Turing-teszt egyfajta perverz inverziója: nem azt teszteljük, hogy a gép képes-e emberként viselkedni, hanem olyan feladatokat hozunk létre, amelyek szándékosan szakadékot képeznek az emberi és a gépi percepció között.