---
title: 'Yapay Zekâ Kırmızı Takım Yöntemi'
source: 'https://academia.sh/tr/kurslar/yz-guvenlik-ve-degerlendirme/yapay-zeka-kirmizi-takim-yontemi'
course: 'Yapay Zekâ Güvenliği ve Değerlendirme'
language: tr
updated: '2026-08-17T18:06:33+00:00'
license: 'CC BY-SA 4.0'
---

# Yapay Zekâ Kırmızı Takım Yöntemi

Kırmızı takım yönteminin bir saldırı yordamı olarak değil, kapsam ve sayım olarak ele alınması: dört sınıfı on denemeyle tarayan dar bir kampanya 40 denemede 4 geçen kayıt ve 0,1000 geçen pay bildiriyor, aynı kampanyaya beşinci sınıf eklendiğinde sayı 50 denemede 12 geçen ve 0,2400 oluyor ve eklenen sınıf tek başına 8'ini veriyor. Deneme seçimini değiştirmek aynı büyüklükte 0,1800 veriyor, tüm zararlı kayıtlar 0,2043 veriyor, genişletilmiş kural 0,0860'a indiriyor. Raporda satırı olmayan sınıfın denemesi sıfırdır ve geçen payı ölçülmemiştir; kampanyanın kapsamı dünya hakkında değil planın kendisi hakkında bir ifadedir. Ders konu kapanışıdır ve sekiz dersin savunmasının tek bir süzgeç olduğunu yazar.

Önceki ders bir sınıfı adıyla ekledi ve savunmanın orada neredeyse kör olduğunu gösterdi. O sınıf,
kimse aramadığı için yıllarca sayılmadan durabilirdi; sayıya dönüşmesinin tek nedeni birinin bakmayı
akıl etmesiydi. Bu, savunma tarafında rahatsız edici bir boşluk bırakır: bir sistemin denenmiş
olduğunu söylemek, denenmemiş olanın ne olduğunu söylemez.

Kırmızı takım yöntemi bu boşluğu kapatmaya çalışan sistematik denemedir. Bu derste **yordam olarak
ele alınmaz**. Sızma testinin yordamı Güvenlik Araçları ve Sızma Testi kursunda ölçüldü ve
tekrarlanmaz; burada kırmızı takım tek bir şeye indirgenir: **kapsam ve sayım.** Kaç sınıf denendi,
her birinde kaç deneme yapıldı, savunmayı geçen pay ne, ve denenmemiş olan raporda hangi sayıyla
görünüyor.

- **SY88.** Kayıt kümesi, sınıflar, öznitelikler ve savunma **kurgudur**; gerçek bir model ya da
  süzgeç çağrılmaz. Tohum **20260218**.
- **SY89.** **Saldırı bir metin değil bir öznitelik profilidir**; kayıtların metni tümüyle zararsız
  destek talepleridir ve sınıfla hiçbir ilişkisi yoktur.
- **SY90.** **Deneme üretmek diye bir adım yoktur.** Kampanya, kümede zaten duran kayıtları sınıf
  sınıf seçmektir. Çalışan hiçbir saldırı, yük ya da atlatma yöntemi yazılmaz.
- **SY91.** Kampanyanın ölçtüğü tek sayı **savunmayı geçen paydır**; bu, o sınıftaki duyarlılığın
  tümleyenidir.
- **SY92.** Kampanya **yanlış alarmı ölçmez**. Yalnız zararlı kayıtlara bakar, dolayısıyla kursun
  iki sayısından yalnız birini üretir; ikincisi kümenin tamamından okunur.
- **SY93.** Savunmasız taban aynıdır: durdurulan zararlı **0**, yanlış alarm **0**, geçen pay
  **1,0000**.
- **SY94.** Çözünürlük iki katmanlıdır: kümenin adımı **1/93 = 0,0108**, kampanyanın adımı
  **1/deneme**, sınıfın adımı **1/o sınıftaki deneme**. Her satır kendi adımını yazar.

## Kampanya Bir Yordam Değil Bir Kapsamdır

Bir kampanyayı üç şey belirler: hangi sınıflar kapsandı, her sınıfta kaç deneme yapıldı ve hangi
savunmaya karşı yapıldı. Üçü de plan kararıdır ve üçü de rapordaki sayıyı doğrudan oynatır. İlk blok
ortak tanımı kurar: 240 kurgu destek talebi, altı sınıf, yedi yapısal öznitelik ve kural süzgeci.
Öznitelikler bayraktır, içerik değildir; kaydın metni sınıfından bağımsızdır.

```python
TOHUM, M32 = 20260218, 0xFFFFFFFF


def uretec(t):
    x = ((t ^ (t >> 16)) * 2246822507) & M32
    x = ((x ^ (x >> 13)) * 3266489909) & M32
    s = [(x ^ (x >> 16)) & M32]

    def sonraki():
        s[0] = (s[0] * 1664525 + 1013904223) & M32
        return s[0] / 4294967296
    return sonraki


def ayrik(u, w):
    t = 0.0
    for i, x in enumerate(w):
        t += x
        if u < t:
            return i
    return len(w) - 1


# ---- KURGU kayitlar: saldiri METNI yazilmaz, saldiri bir OZELLIK PROFILIDIR
SINIF = ["temiz", "dolayli_yonerge", "gizli_alan_istegi", "yetki_asimi",
         "kaynak_taklidi", "bozulmus_girdi"]
KAYNAK = ["kullanici", "erisilen_belge", "arac_ciktisi"]
# Ozellikler yapisaldir; hicbiri calisan bir yuk degildir.
OZELLIK = ["yonerge_kipi", "rol_degistirme_istegi", "gizli_alan_adi", "yan_etkili_arac_adi",
           "kaynak_damgasi_uyusmuyor", "olagandisi_damga_dagilimi", "asiri_uzunluk"]
# Sinif basina ozellik olasiligi (kurgu). Temiz kayitlarda da dusuk paylar var:
# gercek dunyada iyi niyetli metin de bu ozellikleri tasiyabilir.
PROFIL = {
    "temiz":              [0.06, 0.02, 0.05, 0.03, 0.02, 0.04, 0.05],
    "dolayli_yonerge":    [0.88, 0.42, 0.10, 0.30, 0.35, 0.08, 0.12],
    "gizli_alan_istegi":  [0.35, 0.15, 0.86, 0.12, 0.10, 0.06, 0.08],
    "yetki_asimi":        [0.30, 0.25, 0.12, 0.84, 0.14, 0.05, 0.07],
    "kaynak_taklidi":     [0.22, 0.55, 0.08, 0.10, 0.82, 0.07, 0.06],
    "bozulmus_girdi":     [0.05, 0.03, 0.04, 0.03, 0.06, 0.80, 0.62],
}
KAYNAK_PAYI = {
    "temiz":             [0.72, 0.20, 0.08],
    "dolayli_yonerge":   [0.05, 0.70, 0.25],
    "gizli_alan_istegi": [0.55, 0.30, 0.15],
    "yetki_asimi":       [0.40, 0.35, 0.25],
    "kaynak_taklidi":    [0.10, 0.60, 0.30],
    "bozulmus_girdi":    [0.65, 0.20, 0.15],
}
# Kurgu, tumuyle zararsiz destek metinleri. Sinifla iliskisi YOKTUR;
# sinif bilgisi yalnizca ozellik profilinde durur.
METIN = ["bu ayki fatura tutari gecen aya gore yuksek geldi",
         "sayac endeksi yanlis girilmis olabilir",
         "mahallede kesinti ne zaman bitecek",
         "tarife basamagimi ogrenmek istiyorum",
         "ariza kaydim icin ekip ne zaman gelir",
         "adres degisikligi nasil yapilir"]

KAYIT = []
for i in range(240):
    r = uretec(TOHUM + 6151 * i)
    s = SINIF[ayrik(r(), [0.62, 0.10, 0.07, 0.07, 0.07, 0.07])]
    kaynak = KAYNAK[ayrik(r(), KAYNAK_PAYI[s])]
    oz = {o: (r() < p) for o, p in zip(OZELLIK, PROFIL[s])}
    KAYIT.append({"no": i + 1, "sinif": s, "kaynak": kaynak, "ozellik": oz,
                  "metin": METIN[int(r() * len(METIN))],
                  "uzunluk": 40 + int(r() * 260)})


def zararli(k):
    return k["sinif"] != "temiz"


# ---- SAVUNMA 1: kural suzgeci (yapisal, aciklanabilir)
def kural_suzgeci(k, kurallar=("yonerge_kipi", "gizli_alan_adi", "yan_etkili_arac_adi",
                               "kaynak_damgasi_uyusmuyor")):
    return any(k["ozellik"][o] for o in kurallar)


# ---- OLCU: durdurulan ve yanlislikla durdurulan birlikte yazilir
def olc(kayitlar, karar):
    dp = yp = dn = yn = 0
    for k in kayitlar:
        isaret, gercek = karar(k), zararli(k)
        if isaret and gercek:
            dp += 1
        elif isaret and not gercek:
            yp += 1
        elif not isaret and gercek:
            yn += 1
        else:
            dn += 1
    kesinlik = dp / (dp + yp) if dp + yp else 0.0
    duyarlilik = dp / (dp + yn) if dp + yn else 0.0
    return {"dp": dp, "yp": yp, "yn": yn, "dn": dn,
            "kesinlik": round(kesinlik, 4), "duyarlilik": round(duyarlilik, 4),
            "yanlis_engelleme_payi": round(yp / (yp + dn), 4) if yp + dn else 0.0}
```

## Kapsanan Sınıf ve Geçen Pay

İkinci blok kampanyayı bir işleve indirger ve iki planı yan yana koşar. Dar plan, bozulmuş girdi
sınıfı henüz bilinmezken yazılmış olanıdır: dört sınıf, sınıf başına on deneme. Geniş plan aynı
kampanyaya beşinci sınıfı ekler ve başka hiçbir şeyi değiştirmez.

```python
ZARARLI_SINIF = SINIF[1:]
GENIS = ("yonerge_kipi", "gizli_alan_adi", "yan_etkili_arac_adi",
         "kaynak_damgasi_uyusmuyor", "olagandisi_damga_dagilimi")


def kural_genis(k):
    return kural_suzgeci(k, GENIS)


def kampanya(siniflar, basina, karar, bastan=True):
    """Kirmizi takim KAPSAM sayimi. Deneme uretmek degil kumeden kayit secmektir;
    hicbir saldiri yordami calistirilmaz. Olculen sey savunmayi gecen paydir."""
    satir, top_d, top_g = [], 0, 0
    for s in siniflar:
        a = [k for k in KAYIT if k["sinif"] == s]
        alt = a[:basina] if bastan else a[-basina:]
        g = sum(1 for k in alt if not karar(k))
        satir.append((s, len(alt), g, g / len(alt), 1 / len(alt)))
        top_d, top_g = top_d + len(alt), top_g + g
    return satir, top_d, top_g


def rapor(ad, siniflar, basina, karar, bastan=True):
    satir, d, g = kampanya(siniflar, basina, karar, bastan)
    print(f"{ad}: kapsanan sinif {len(satir)}/{len(ZARARLI_SINIF)}  deneme {d}  gecen {g}"
          f"  gecen pay {g / d:.4f}  kampanya adimi {1 / d:.4f}")
    for s, n, gc, p, c in satir:
        print(f"   {s:<20} deneme {n:>2}  gecen {gc:>2}  pay {p:.4f}  adim {c:.4f}")


rapor("dar kampanya  ", ZARARLI_SINIF[:4], 10, kural_suzgeci)
rapor("genis kampanya", ZARARLI_SINIF, 10, kural_suzgeci)
```

```
dar kampanya  : kapsanan sinif 4/5  deneme 40  gecen 4  gecen pay 0.1000  kampanya adimi 0.0250
   dolayli_yonerge      deneme 10  gecen  0  pay 0.0000  adim 0.1000
   gizli_alan_istegi    deneme 10  gecen  1  pay 0.1000  adim 0.1000
   yetki_asimi          deneme 10  gecen  1  pay 0.1000  adim 0.1000
   kaynak_taklidi       deneme 10  gecen  2  pay 0.2000  adim 0.1000
genis kampanya: kapsanan sinif 5/5  deneme 50  gecen 12  gecen pay 0.2400  kampanya adimi 0.0200
   dolayli_yonerge      deneme 10  gecen  0  pay 0.0000  adim 0.1000
   gizli_alan_istegi    deneme 10  gecen  1  pay 0.1000  adim 0.1000
   yetki_asimi          deneme 10  gecen  1  pay 0.1000  adim 0.1000
   kaynak_taklidi       deneme 10  gecen  2  pay 0.2000  adim 0.1000
   bozulmus_girdi       deneme 10  gecen  8  pay 0.8000  adim 0.1000
```

Dar kampanyanın raporu iyi bir rapordur. Kırk deneme yapıldı, dördü geçti, geçen pay **0,1000**.
Dört satırın hiçbiri alarm vermiyor: en kötü sınıf 0,2000, en iyisi 0,0000. Bu tablonun okuyucusuna
söylediği şey açıktır — savunma denemelerin onda dokuzunu durdurdu.

Geniş kampanya aynı savunmayı, aynı deneme yoğunluğunu ve aynı dört satırı taşıyor. Tek fark bir
satır daha olması. Geçen pay **0,2400**'e çıkıyor, yani ikiye katlanıyor, ve on iki geçen kaydın
**sekizi** yeni satırdan geliyor. Dört satır harfi harfine aynı kaldı; değişen tek şey neye
bakıldığı. Bir kampanyanın sayısı savunmanın gücünü ölçmez, **planın kapsamını** ölçer.

## Denenmeyen Sınıfın Sayısı

Üçüncü blok kapsamı üç yönde daha oynatır: aynı büyüklükte başka bir deneme seçimi, tüm zararlı
kayıtlar, ve genişletilmiş kural. Sonunda kümenin iki sayısı ve dar kampanyanın raporunda satırı
olmayan sınıf basılır.

```python
rapor("ayni kampanya, sondan secim", ZARARLI_SINIF, 10, kural_suzgeci, bastan=False)
rapor("tum zararli kayitlar     ", ZARARLI_SINIF, 999, kural_suzgeci)
rapor("tum kayitlar, genis kural", ZARARLI_SINIF, 999, kural_genis)
print("\nsavunmanin iki sayisi (tum kume):")
for ad, karar in (("savunmasiz taban", lambda k: False), ("kural", kural_suzgeci),
                  ("kural + bayrak", kural_genis)):
    o = olc(KAYIT, karar)
    print(f"  {ad:<17} durdurulan {o['dp']:>2}  yanlis alarm {o['yp']:>2}"
          f"  duyarlilik {o['duyarlilik']:.4f}  yanlis engelleme {o['yanlis_engelleme_payi']:.4f}")
print("\nkumede tanimli zararli sinif:", len(ZARARLI_SINIF),
      " dar kampanyanin raporunda satiri olmayan:", ZARARLI_SINIF[4:],
      " o satirin denemesi:", 0)
```

```
ayni kampanya, sondan secim: kapsanan sinif 5/5  deneme 50  gecen 9  gecen pay 0.1800  kampanya adimi 0.0200
   dolayli_yonerge      deneme 10  gecen  0  pay 0.0000  adim 0.1000
   gizli_alan_istegi    deneme 10  gecen  0  pay 0.0000  adim 0.1000
   yetki_asimi          deneme 10  gecen  1  pay 0.1000  adim 0.1000
   kaynak_taklidi       deneme 10  gecen  1  pay 0.1000  adim 0.1000
   bozulmus_girdi       deneme 10  gecen  7  pay 0.7000  adim 0.1000
tum zararli kayitlar     : kapsanan sinif 5/5  deneme 93  gecen 19  gecen pay 0.2043  kampanya adimi 0.0108
   dolayli_yonerge      deneme 24  gecen  0  pay 0.0000  adim 0.0417
   gizli_alan_istegi    deneme 17  gecen  1  pay 0.0588  adim 0.0588
   yetki_asimi          deneme 10  gecen  1  pay 0.1000  adim 0.1000
   kaynak_taklidi       deneme 23  gecen  3  pay 0.1304  adim 0.0435
   bozulmus_girdi       deneme 19  gecen 14  pay 0.7368  adim 0.0526
tum kayitlar, genis kural: kapsanan sinif 5/5  deneme 93  gecen 8  gecen pay 0.0860  kampanya adimi 0.0108
   dolayli_yonerge      deneme 24  gecen  0  pay 0.0000  adim 0.0417
   gizli_alan_istegi    deneme 17  gecen  1  pay 0.0588  adim 0.0588
   yetki_asimi          deneme 10  gecen  1  pay 0.1000  adim 0.1000
   kaynak_taklidi       deneme 23  gecen  3  pay 0.1304  adim 0.0435
   bozulmus_girdi       deneme 19  gecen  3  pay 0.1579  adim 0.0526

savunmanin iki sayisi (tum kume):
  savunmasiz taban  durdurulan  0  yanlis alarm  0  duyarlilik 0.0000  yanlis engelleme 0.0000
  kural             durdurulan 74  yanlis alarm 23  duyarlilik 0.7957  yanlis engelleme 0.1565
  kural + bayrak    durdurulan 85  yanlis alarm 30  duyarlilik 0.9140  yanlis engelleme 0.2041

kumede tanimli zararli sinif: 5  dar kampanyanin raporunda satiri olmayan: ['bozulmus_girdi']  o satirin denemesi: 0
```

İlk satır kampanyanın kendi bandını verir. Aynı savunma, aynı beş sınıf, aynı elli deneme; tek fark
hangi kayıtların seçildiği. Geçen pay 0,2400 yerine **0,1800** çıkıyor. Üç kayıtlık bu fark
savunmayla ilgili değildir ve kampanyanın toplam adımı 0,0200 olduğu için gürültüye de
yıkılamaz — kapsam sabitken bile **seçim tek başına 0,0600 oynatıyor.** Bir kampanya sayısı
tekrarlanabilir değildir; tekrar edilen kampanya başka bir sayı verir.

İkinci satır kapsamı yoğunlaştırır: sınıf başına on yerine tüm kayıtlar, 93 deneme. Geçen pay
0,2043. Bozulmuş girdi satırı 0,8000'den **0,7368**'e iniyor, fark 0,0632; on denemelik kampanyanın
adımı 0,1000 olduğuna göre o kampanya bu iki sayıyı **birbirinden ayıramazdı**. Sayıyı ondalıkla
yazmak onu hassas yapmaz.

Üçüncü satır kampanyayı savunma değişikliğine karşı koşar. Genişletilmiş kural geçen payı 0,2043'ten
**0,0860**'a indiriyor; kazancın tamamı yine tek satırdadır, 0,7368'den 0,1579'a. Kampanya bunu
başarı olarak bildirir ve **eksik bildirir**. Aynı savunmanın yanlış alarmı 23'ten 30'a çıktı ve bu
sayı kampanyanın hiçbir satırında yoktur, çünkü kampanya yalnız zararlı kayıtlara bakar. Kırmızı
takım raporu, yapısı gereği kursun iki sayısından **yalnız birini** üretir; ikincisi tüm kümeden
ayrıca okunmalıdır.

Son satır dersin en önemli cümlesini taşır. Dar kampanyanın raporunda `bozulmus_girdi` için bir
satır yoktur ve o satırın deneme sayısı sıfırdır. Tabloyu toplayan biri 40 deneme, 4 geçen ve 0,1000
görür; kayıp sınıf toplamlara sıfır katkı yapar. Ama o sıfır **ölçülmüş bir sıfır değildir** —
bakılmamış olmanın sayısıdır. Sınıf kapsama girer girmez tek başına on iki geçen kaydın sekizini
verdi. **Denenmeyen sınıfın sayısı sıfır değil bilinmezdir**, ve bir raporun bu ikisini ayırt
edecek biçimde yazılması zorunludur: kapsanan sınıflar ve kapsanmayanlar ayrı listelenmedikçe,
kapsam boşluğu bir başarı sayısı gibi görünür.

Bunun daha sert bir hâli de vardır. Bu kümede tanımlı zararlı sınıf sayısı beştir; altıncı bir
yüzey varsa, üzerinde koşturulan **hiçbir** kampanyanın hiçbir satırında görünmez. Kapsam bir sayı
değil bir iddiadır ve dünya hakkında değil **planın kendisi** hakkında bir şey söyler.

## Özet

- Kırmızı takım burada bir yordam değil bir sayımdır: kapsanan sınıf, sınıf başına deneme ve
  savunmayı geçen pay.
- Dar kampanya dört sınıfta 40 denemede 0,1000 geçen pay bildirir; beşinci sınıf eklenince aynı
  savunma 50 denemede 0,2400 verir ve on iki geçen kaydın sekizi yeni satırdan gelir.
- Kampanyanın sayısı kendi seçiminden bir band taşır: aynı büyüklükte başka bir seçim 0,1800 verir,
  fark 0,0600 ve savunmayla ilgisi yoktur.
- Kapsam yoğunlaştıkça çözünürlük artar: 93 denemede geçen pay 0,2043, bozulmuş girdi satırı
  0,7368; on denemelik kampanya bunu 0,8000'den ayıramazdı.
- Kampanya yalnız zararlı kayıtlara baktığı için kursun iki sayısından birini üretir; genişletilmiş
  kural geçen payı 0,0860'a indirirken yanlış alarmı 23'ten 30'a çıkarır ve bu sayı raporda yoktur.
- Raporda satırı olmayan sınıfın deneme sayısı sıfırdır ve geçen payı bilinmezdir; kapsanan ile
  kapsanmayan ayrı yazılmadıkça boşluk başarı gibi görünür.

## Sonraki Adım

Sekiz derste yüzey sayıldı. Modele giren metin sınıflara ayrıldı, kaynağına göre dağıtıldı, eşik
süpürmesiyle tarandı, gizli alan adı taşıyan kayıtlar sayıldı, yan etkili araç isteği ayrıldı,
çıktı tarafı ölçüldü, anlam taşımayan bozulma ayrı bir sınıf olarak eklendi ve sonunda kapsamın
kendisi bir sayıya dönüştü. Bütün bunlarda savunma **hep aynı şeydi**: tek bir süzgeç. Kimi zaman
dört kurallık bir liste, kimi zaman bir bayrakla genişletilmiş beş kurallık liste, kimi zaman bir
puan ile bir eşik. Yaptığı iş hiç değişmedi — kaydı ya geçirdi ya engelledi, ve bedelini hep aynı
para biriminden ödedi: yanlış alarm. Oysa engellemek savunmanın tek hamlesi değildir. Bir alanı
silmek, bir metni yönerge saymamak, bir aracın yetkisini daraltmak ve bir eylemi insana sormak da
savunmadır ve hiçbiri kaydı durdurmaz. Sonraki konu bu katmanları tek tek kurar ve her birini kendi
bedeliyle ölçer: neyi yakaladığını, neyi yanlışlıkla durdurduğunu ve hangi yeteneği götürdüğünü.
