Az AI Red Teaming Arzenálja: ART, CleverHans és Foolbox a boncasztalon
Képzeld el a jelenetet. Hónapokig dolgoztál a csapatoddal egy csodálatos képfelismerő modellen. Képes megkülönböztetni egy macskát egy kutyától 99.8%-os pontossággal a tesztadatbázison. Pacsik, bónusz, sajtóközlemény. Aztán élesben valaki feltölt egy képet a macskájáról, amihez hozzáadott egy alig látható, digitális „zajt”. A te csodamodelled pedig kőkeményen rámondja: „Ez egy strucc.”
Pánik. Meetingek. Fejfájás. Mi történt?
Üdv a valóságban. Ez az a pont, ahol a laboratóriumi tisztaságú adathalmazok és a való világ brutális, ellenséges környezete összecsapnak. Ez az a pont, ahol a hagyományos szoftvertesztelés csődöt mond, és ahol az AI Red Teaming belép a képbe.
Nem azért vagyunk itt, hogy megnézzük, a modelled jól teljesít-e ideális körülmények között. Azért vagyunk itt, hogy kiderítsük, hogyan lehet a legkreatívabb, legalattomosabb módon térdre kényszeríteni. Ma nem a védekezésről fogunk beszélni, hanem a támadásról. A fegyverekről, amiket egy AI Red Teamer a kezébe vesz, amikor igazán kíváncsi egy rendszer töréspontjaira.
Három nagyágyút veszünk górcső alá: az Adversarial Robustness Toolbox (ART), a CleverHans és a Foolbox könyvtárakat. Mindhárom ugyanazt a célt szolgálja – megtalálni a modelled gyenge pontjait –, de a filozófiájuk, az erősségeik és a felhasználási területük drasztikusan eltér. Olyanok, mint egy szike, egy kalapács és egy svájci bicska. Mindegyik vág, de nagyon nem mindegy, mikor melyiket veszed elő.
Készülj fel, mert a cikk végére pontosan tudni fogod, melyik eszközt kell a virtuális fegyvertáskádba tenned.
A gondolkodásmód-váltás: Miért nem elég a klasszikus QA?
A legtöbb fejlesztőcsapat a szoftverminőséget a következő kérdéssel méri: „Megfelelően működik a szoftver?” Futtatnak unit teszteket, integrációs teszteket, mérnek pontosságot, precizitást, F1-score-t. Ez a QA, a minőségbiztosítás. Fontos, de egy AI-rendszer esetében veszélyesen hiányos.
Az AI Red Teamer nem azt kérdezi, hogy „Jól működik?”, hanem azt, hogy: „Hogyan tudom a leglátványosabban elrontani?”
Ez egy fundamentális váltás. A hagyományos tesztelés egy hidat vizsgál úgy, hogy megnézi, elbír-e tíz kamiont. A Red Teaming úgy, hogy megkeresi azt az egyetlen, stratégiai pontot a tartópilléren, ahová egy kis robbanótöltetet helyezve az egész szerkezet összeomlik. Látod a különbséget?
Mielőtt belevágunk az eszközökbe, tisztázzunk pár alapfogalmat, de felejtsd el a száraz definíciókat.
Adversarial Example: Az optikai csalódás gépeknek
Gondolj egy adversarial example-re (ellenséges példa) úgy, mint egy optikai csalódásra, ami csak a gépeket veri át. Egy ember számára egy macska képe egy alig észrevehető, gondosan kiszámított zajjal megspékelve is csak egy macska képe marad. De a modell számára ez a zaj nem véletlenszerű. Pontosan úgy van megtervezve, hogy a modell belső logikáját – a súlyokat és aktivációs függvényeket – a legérzékenyebb ponton támadja meg, és átbillentse egy másik kategóriába.
Egy adversarial example nem bug. Ez a modell matematikai természetének kihasználása. Azt használja ki, hogy a modell nem úgy „lát”, mint egy ember, hanem egy magas dimenziós térben keres mintázatokat, ahol apró elmozdulások is drámai eredményt hozhatnak.
Threat Models: Ki vagy, és mit tudsz?
Mielőtt támadsz, tudnod kell, mennyi információd van a célpontról. Ez a threat model, vagyis a fenyegetettségi modell. Három fő kategória létezik:
- White-box (Fehér doboz): A tiéd a vár teljes tervrajza. Ismered a modell architektúráját, a betanítási adatokat, a súlyokat, mindent. Ez a legkönnyebb helyzet a támadó számára, és a legrosszabb a védőnek. Itt tudod a leghatékonyabb, gradiens-alapú támadásokat végrehajtani, mert látod, hogyan reagál a modell a legkisebb változásra is.
- Black-box (Fekete doboz): Csak a bemenetet és a kimenetet látod. Olyan, mintha egy ismeretlen épület előtt állnál. Beküldesz egy képet az API-n keresztül, és visszakapod a címkét: „macska”. Nincs információd a belső működésről. Itt a támadások sokkal nehezebbek. Gyakran egy helyettesítő (substitute) modellt kell tanítani a fekete doboz viselkedésének utánzására, és azon generálni a támadásokat.
- Grey-box (Szürke doboz): A kettő között. Talán ismered a modell architektúráját (pl. egy ResNet50), de a konkrét súlyokat nem. Vagy látod a kimeneti valószínűségeket, nem csak a végső címkét. Minden extra információmorzsa fegyver a kezedben.
Az alábbi ábra segít ezt vizualizálni. A támadó tudásának szintje határozza meg, milyen eszközöket vethet be.
Most, hogy az alapokkal tisztában vagyunk, nézzük a fegyvereket!
A Nehéztüzérség: Adversarial Robustness Toolbox (ART)
Ha az AI biztonság egy csatatér, akkor az ART a svájci hadsereg teljes felszerelése egyetlen dobozban. Ez nem egy pehelysúlyú könyvtár. Az IBM által fejlesztett és karbantartott ART egy mindenre kiterjedő, framework-agnosztikus biztonsági csomag. A célja, hogy egységes interfészt nyújtson a támadásokhoz, a védekezési mechanizmusokhoz és a robusztusság méréséhez is.
Gondolj rá úgy, mint egy teljes körű biztonsági audit platformra, nem csak egy egyszerű támadóeszközre.
Az ART filozófiája és erősségei
Az ART legfőbb vonzereje az univerzalitás. Teljesen mindegy, hogy TensorFlow-ban, PyTorch-ban, Keras-ban, MXNet-ben, vagy akár scikit-learn-ben építetted a modelledet, az ART képes ráakaszkodni. Ezt úgy éri el, hogy egy absztrakciós réteget képez a modell köré, egy „wrapper”-t, ami egységesíti a különböző keretrendszerek API-jait. Ez óriási előny egy olyan céges környezetben, ahol több csapat különböző technológiai stack-kel dolgozik.
Főbb erősségei:
- Támadások széles skálája: Az egyszerű FGSM-től (Fast Gradient Sign Method) a komplexebb C&W (Carlini & Wagner) támadásokig, az evasion (kikerülés), poisoning (mérgezés), extraction (kinyerés) és inference (következtetés) kategóriákban is rengeteg implementációt tartalmaz.
- Védekezési mechanizmusok: Az ART nem csak támadni tud. Beépített védekezési stratégiákat is kínál, mint például az adversarial training (ellenséges tanítás), feature squeezing, vagy a spatial smoothing. Ez lehetővé teszi, hogy ne csak diagnosztizálj, hanem rögtön orvosolj is. – Robusztussági metrikák: Nem elég csak lefuttatni egy támadást. Az ART segít számszerűsíteni a modelled sebezhetőségét, ami elengedhetetlen a riportáláshoz és a fejlődés követéséhez.
De a nagy hatalom nagy komplexitással jár. Az ART beállítása és használata több lépcsős folyamat, és a bőséges dokumentáció ellenére is meredekebb a tanulási görbéje, mint a versenytársaké. Ez nem az az eszköz, amit öt perc alatt feltelepítesz egy gyors teszthez.
ART a gyakorlatban: Egy egyszerű FGSM támadás
Nézzük, hogyan néz ki egy alapvető white-box támadás ART segítségével egy PyTorch modellen. Tegyük fel, van egy előre betanított képfelismerő modelled.
# Feltételezzük, hogy van egy 'model' nevű PyTorch modelled és 'dataloader'-ed
import torch.nn as nn
import torch.optim as optim
from art.estimators.classification import PyTorchClassifier
from art.attacks.evasion import FastGradientMethod
# 1. Definiáljuk a kritériumot és az optimalizálót (ART-nak szüksége van rá)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)
# 2. Hozzunk létre egy ART "wrappert" a PyTorch modellünk köré
# Ez az absztrakciós réteg, ami egységesíti a kezelést
classifier = PyTorchClassifier(
model=model,
clip_values=(0, 1), # A bemeneti adatok értéktartománya (pl. normalizált kép)
loss=criterion,
optimizer=optimizer,
input_shape=(1, 28, 28), # Példa: MNIST képméret
nb_classes=10
)
# 3. Hozzuk létre a támadás objektumot
# FGSM: egy gyors, de hatékony gradiens-alapú támadás
attack = FastGradientMethod(estimator=classifier, eps=0.2)
# 4. Generáljunk ellenséges példákat
# Vegyünk egy adag képet és a hozzájuk tartozó címkéket
images, labels = next(iter(dataloader))
adversarial_images = attack.generate(x=images)
# Az 'adversarial_images' most már a manipulált képeket tartalmazza,
# amik nagy valószínűséggel félrevezetik a modellt.
Láthatod, hogy a folyamat strukturált. Először „becsomagolod” a modelledet az ART saját PyTorchClassifier osztályába, majd létrehozod a támadás egy példányát, végül pedig a generate metódussal legenerálod a megtévesztő adatokat. Ez a minta következetes a különböző támadások és keretrendszerek között, ami az ART egyik legnagyobb ereje.
Az ART a vállalati Red Teamer választása. Amikor a cél a reprodukálhatóság, a skálázhatóság és a teljes biztonsági életciklus lefedése, akkor az ART a te eszközöd. Olyan, mint egy precíziós műszerekkel teli laboratórium.
Az Akadémiai Mesterlövész: CleverHans
Ha az ART a nagyvállalati svájci bicska, akkor a CleverHans a kutatók és diákok precíziós szikéje. A nevét egy lóról kapta („Okos Hans”), akiről azt hitték, hogy tud számolni, de valójában csak az emberi testbeszéd finom jeleire reagált. Találó név egy olyan könyvtárnak, ami arra specializálódott, hogy felfedje, a modellek hogyan „csalnak” és használnak ki nem szándékolt mintázatokat az adatokban.
A CleverHans a Google Brain csapatából indult, olyan nevekkel fémjelezve, mint Ian Goodfellow, az adversarial examples egyik úttörője. Ez a származás mélyen meghatározza a könyvtár jellegét: fókuszált, letisztult és erősen kötődik a tudományos kutatáshoz.
A CleverHans filozófiája és erősségei
A CleverHans nem akar mindent is tudni. A fő célja az, hogy referencia implementációkat nyújtson a legfontosabb adversarial támadásokhoz. Ha olvasol egy tudományos cikket egy új támadási módszerről, jó eséllyel a CleverHans-ben találod meg a legegyszerűbb és legtisztább megvalósítását. Ez teszi kiváló oktatási és kísérletezési eszközzé.
Főbb erősségei:
- Oktatási fókusz: A kód és a dokumentáció arra van kihegyezve, hogy megértsd a támadások működését, nem csak arra, hogy lefuttasd őket.
- Letisztult API: Kevesebb absztrakció és „mágia”, mint az ART-ban. Közelebb vagy a keretrendszerhez (tradicionálisan TensorFlow, de egyre inkább framework-agnosztikus irányba mozdul).
- Reprodukálhatóság: Mivel a kutatói közösség de facto standardja, a CleverHans-szel írt kísérletek könnyen megoszthatók és reprodukálhatók.
A hátránya is ebből fakad. A CleverHans nem egy teljes körű biztonsági csomag. Nincsenek benne beépített védekezési mechanizmusok vagy kiterjedt riportolási eszközök. A fejlesztése is inkább a kutatási trendeket követi, mint a vállalati igényeket, így a támogatottsága és a frissítések üteme is eltérő lehet.
CleverHans a gyakorlatban: Ugyanaz az FGSM támadás
Nézzük meg, hogyan néz ki ugyanaz az FGSM támadás CleverHans segítségével, ezúttal TensorFlow 2.x környezetben.
# Feltételezzük, hogy van egy 'model' nevű TensorFlow/Keras modelled
import tensorflow as tf
from cleverhans.tf2.attacks.fast_gradient_method import fast_gradient_method
# A CleverHans gyakran függvényalapú, nem osztályalapú
# Nincs szükség wrapper-re, közvetlenül a modellel dolgozunk
# Vegyünk egy képet (pl. egy tf.Tensor)
image, label = next(iter(dataset))
# 1. Számoljuk ki a veszteséget a modell kimenete és a VALÓS címke között
# Ez a white-box információ, amit kihasználunk
with tf.GradientTape() as tape:
tape.watch(image)
prediction = model(image)
loss = tf.keras.losses.sparse_categorical_crossentropy(label, prediction)
# 2. Szerezzük meg a gradiensét a veszteségnek a BEMENETI KÉP szerint
gradient = tape.gradient(loss, image)
# 3. Hozzuk létre az ellenséges példát az FGSM képletével
# A CleverHans ehhez biztosít egy segédfüggvényt
epsilon = 0.2
adversarial_image = fast_gradient_method(model, image, epsilon, norm=np.inf)
# Az 'adversarial_image' egy Tensor, ami a manipulált képet tartalmazza.
# A folyamat sokkal "manuálisabbnak" tűnik, de jobban látszik, mi történik a háttérben.
A különbség szembetűnő. A CleverHans sokkal közelebb enged a motorháztetőhöz. Neked kell kezelned a GradientTape-et, neked kell kiszámolnod a gradienseket. Ez egyrészt több kód, másrészt sokkal jobban megérted, hogy a támadás matematikailag hogyan is működik. Az FGSM lényege, hogy a bemenetet elmozdítjuk a gradiens irányába – abba az irányba, amerre a veszteség a leggyorsabban nő. A CleverHans nem rejti el ezt a logikát egy absztrakt generate hívás mögé.
Az alábbi ábra ezt a folyamatot illusztrálja. A cél az, hogy a „Macska” adatpontot egy apró, de célzott módosítással átlökjük a döntési határon, hogy a modell „Kutyának” klasszifikálja.
A CleverHans arra kényszerít, hogy megértsd ezt az ábrát. Ez a legnagyobb értéke.
A Minimalista Gerilla: Foolbox
Ha az ART a hadsereg, a CleverHans a mesterlövész, akkor a Foolbox a gerilla harcos. Gyors, könnyen bevethető, és egyetlen célja van: a lehető leghatékonyabban elvégezni a munkát, felesleges sallangok nélkül. A Foolbox nem akar egy mindenre kiterjedő biztonsági platform lenni. Nem akarja megváltani a világot. Csak egyetlen kérdésre keresi a választ:
Mi az a legkisebb perturbáció, ami elegendő ahhoz, hogy a modelledet átverje?
Ez a minimalista filozófia teszi rendkívül vonzóvá a fejlesztők és a gyors benchmarkot végző kutatók számára.
A Foolbox filozófiája és erősségei
A Foolbox a fejlesztői élményre és a benchmarkolásra helyezi a hangsúlyt. Az API-ja hihetetlenül tiszta és intuitív. A keretrendszer-agnosztikusságot úgy éri el, hogy natívan kezeli a PyTorch, TensorFlow, JAX és NumPy objektumokat anélkül, hogy nehézkes wrapper osztályokba kényszerítene. Csak átadod a modelledet és az adatokat, a Foolbox pedig intézi a többit.
Főbb erősségei:
- Pofonegyszerű használat: A Foolbox API-ja a legegyszerűbb a három közül. Pár sor kóddal már fut is a támadás.
- Benchmark fókusz: A könyvtár arra van optimalizálva, hogy összehasonlíthatóvá tegye a különböző modellek robusztusságát. A kimenete gyakran a perturbáció mértéke (pl. L2 norma), ami egy tiszta, egyértelmű metrika.
- Modern és natív: Támogatja a legújabb keretrendszereket, és a használata nagyon természetesnek hat a modern Python adatelemzési ökoszisztémában (pl. Eager Execution TensorFlow-ban).
Természetesen a minimalizmusnak ára van. A Foolbox támadási repertoárja szűkebb, mint az ART-é, és nem foglalkozik védekezéssel vagy a támadások szélesebb kategóriáival (mint a data poisoning). Arra való, amire a neve is utal: „to fool the box”, vagyis átverni a dobozt, a lehető leghatékonyabban.
Foolbox a gyakorlatban: A letisztult FGSM
Nézzük meg, mennyivel egyszerűbb ugyanaz az FGSM támadás a Foolbox segítségével. A példa PyTorch-ot használ, de szinte ugyanígy nézne ki TensorFlow-val is.
# Feltételezzük, hogy van egy 'model' nevű PyTorch modelled és 'images', 'labels' tenzoraid
import foolbox as fb
# 1. Csomagoljuk be a modellt a Foolbox saját, pehelysúlyú wrapper-ébe
# Meg kell adnunk a bemeneti adatok határait (bounds)
fmodel = fb.PyTorchModel(model, bounds=(0, 1))
# 2. Válasszuk ki és inicializáljuk a támadást
# A Foolbox API-ja lehetővé teszi a támadások láncolását és egyszerű kiválasztását
attack = fb.attacks.FGSM()
# 3. Futtassuk a támadást
# A Foolbox visszaadja a manipulált képeket, a modell új predikcióit és a sikerességet jelző bool-t
# Az 'epsilons' megadja a perturbáció mértékét, amit kipróbálunk
raw, clipped, is_adv = attack(fmodel, images, labels, epsilons=0.2)
# Az 'is_adv' tenzor megmondja, mely képeknél volt sikeres a támadás.
# A 'clipped' tartalmazza a sikeresen generált ellenséges példákat.
# Ennyi. Nincs manuális gradiens-számítás, nincs bonyolult beállítás.
A kód magáért beszél. A Foolbox elrejti a komplexitást, és egy rendkívül magas szintű, célorientált interfészt ad. Ha a feladatod az, hogy gyorsan felmérd egy új modell robusztusságát, vagy összehasonlíts két architektúrát, a Foolbox messze a leghatékonyabb eszköz.
A Foolbox a pragmatikus fejlesztő és a gyorsan iteráló kutató barátja. Nem akar elméleti előadást tartani, csak eredményeket produkálni. Gyors, hatékony és lényegre törő.
Összehasonlítás és Döntési Mátrix: Melyiket válaszd?
Most, hogy láttuk mindhárom eszközt akció közben, foglaljuk össze a tanultakat egy táblázatban, hogy könnyebb legyen a döntés.
Eszköztár-összehasonlító Táblázat
| Jellemző | ART (Adversarial Robustness Toolbox) | CleverHans | Foolbox |
|---|---|---|---|
| Elsődleges célközönség | Vállalati biztonsági csapatok, ML Ops | Kutatók, egyetemi hallgatók | Fejlesztők, kutatók (gyors prototipizálás) |
| Filozófia | Teljes körű, skálázható biztonsági platform | Oktatás, kutatás, referencia implementációk | Minimalista, benchmark-orientált, fejlesztőbarát |
| Tanulási görbe | Meredek | Közepes (keretrendszer ismerete szükséges) | Lapos |
| Funkcionalitás | Támadások, védekezés, metrikák, riportolás | Főként támadások implementációja | Támadások és robusztusság mérése |
| Framework támogatás | Kiváló (TF, PyTorch, Keras, scikit-learn stb.) | Jó (eredetileg TF, de bővül) | Kiváló (PyTorch, TF, JAX, NumPy natívan) |
| Legjobb felhasználási eset | Automatizált biztonsági tesztelés CI/CD pipeline-ban | Tudományos cikkek reprodukálása, alapelvek megértése | Modellek robusztusságának gyors összehasonlítása |
A te helyzeted, a te eszközöd
A táblázat segít, de a végső döntés a te kontextusodon múlik. Tegyél fel magadnak néhány kérdést:
- Mi a célom? Csak gyorsan meg akarom nézni, mennyire sebezhető a modellem, vagy egy teljes, auditálható biztonsági folyamatot akarok felépíteni?
- Gyors ellenőrzés: Foolbox
- Mélyreható elemzés, teljes folyamat: ART
- Mennyi időm van? Van időm és energiám beletanulni egy komplexebb rendszerbe, vagy azonnali eredményekre van szükségem?
- Azonnal kell: Foolbox
- Rászánom az időt: ART
- Mi a fontosabb: a „hogyan” vagy a „mi”? Meg akarom érteni a támadások matematikai hátterét, vagy csak az eredmény érdekel, hogy sikeres volt-e a támadás?
- A „hogyan” érdekel (tanulás): CleverHans
- A „mi” érdekel (eredmény): Foolbox vagy ART
Nincs egyetlen „legjobb” eszköz. Egy profi Red Teamer mindhármat ismeri, és a feladathoz választ fegyvert.
A kódon túl: A Red Teamer gondolkodásmódja
Ezek az eszközök fantasztikusak, de önmagukban csak szkriptek. Az igazi érték a mögöttük lévő gondolkodásmódban rejlik. Egy AI Red Teamer nem csak lefuttat egy támadást és megnézi a kimenetet. A kontextust, az üzleti kockázatot és a lehetséges következményeket vizsgálja.
Ne feledd, a támadási felület sokkal szélesebb, mint gondolnád. Nem csak a bemeneti képeket lehet manipulálni. Nézzünk két további, alattomosabb támadási vektort, amivel egy jó Red Teamernek tisztában kell lennie.
Data Poisoning: A kút megmérgezése
Eddig evasion (kikerülés) támadásokról beszéltünk, ahol a támadó a már betanított modellt próbálja meg átverni. De mi van, ha a támadó már a tanítási folyamatba be tud avatkozni? Ez a data poisoning (adatmérgezés).
A koncepció egyszerű és félelmetes. A támadó apró, de rosszindulatú adatokat csempész a tanítási adathalmazba. Ezek az adatok arra tanítják a modellt, hogy bizonyos, a támadó által definiált esetekben szándékosan rossz döntést hozzon. Például, egy önvezető autó tanítási adatai közé olyan képeket csempésznek, ahol egy „Stop” táblára ragasztott sárga matrica azt jelenti, hogy „Szabad az út”. A modell megtanulja ezt a rejtett „hátsó kaput”. A mindennapi forgalomban tökéletesen működik, de amint meglát egy sárga matricás Stop táblát, katasztrófát okoz.
Ez a támadás sokkal nehezebben észrevehető, mert a modell a validációs adatokon még mindig kiválóan teljesít. A mérgezett viselkedés csak a speciális trigger hatására aktiválódik.
Adatvédelmi támadások: A modell, ami túl sokat tud
A támadások nem mindig a modell döntésének megváltoztatására irányulnak. Néha a cél az, hogy információt szivárogtassanak ki a modellből. Két fő típus:
- Membership Inference (Tagsági következtetés): A támadó megpróbálja kitalálni, hogy egy adott adatpont (pl. a te orvosi leleted) benne volt-e a modell tanítási adathalmazában. Ez súlyos adatvédelmi sérelem.
- Model Inversion (Modell inverzió): A támadó megpróbálja rekonstruálni a tanítási adatokat a modellhez való hozzáférés alapján. A leghíresebb példa, amikor egy arc-felismerő modellből sikerült rekonstruálni az emberek arcát, akikkel tanították, csupán az API-n keresztül.
Ezek a támadások rávilágítanak, hogy egy AI modell nem csak egy funkcionális szoftver, hanem a tanítási adatok egyfajta „tömörített” másolata. Ha nem vagy óvatos, ez a tömörítvény visszafejthető.
Záró gondolatok: A fegyver csak eszköz, a harcos te vagy
Végigvettük az ART, a CleverHans és a Foolbox arzenálját. Láttuk a vállalati nehéztüzérséget, az akadémiai precíziós puskát és a gyors bevetésű gerilla kést. Mindegyiknek megvan a maga helye és ideje.
De a legfontosabb tanulság nem az, hogy melyik parancsot kell beírni. Hanem az, hogy el kell kezdened úgy gondolkodni, mint egy támadó. Fel kell tenned a kényelmetlen kérdéseket. Mi történik, ha a bemenet nem tökéletes? Mi történik, ha valaki szándékosan akar ártani? Mi a legrosszabb dolog, ami a modellemmel történhet, és az milyen üzleti kárt okoz?
Ezek az eszközök csak segítenek megtalálni a válaszokat. A kérdéseket neked kell feltenned.
Most pedig te jössz. A te rendszered készen áll a valóságra? Vagy csak egy szépen berendezett laborban működik, ahol soha senki nem akar rosszat?