İçeriğe geç
academia.sh

Ders 04 / 21

Araç Kötüye Kullanımı

Ajan yetkisinin savunma tarafında sayılması: 240 kaydın 27'si yan etkili araç adı bayrağı taşıyor, kapısız tabanda insana giden istek 0, kapı bu 27'yi insana gönderiyor ve 24'ü gerçekten zararlı çıkıyor — kapının kesinliği 0,8889, duyarlılığı 0,2581. Kapı yetki aşımı sınıfının 10 kaydından 8'ini, gizli alan isteği sınıfının 17 kaydından 1'ini görüyor. Rol kipiyle genişleyen kapı kesinliği 0,9138'e çıkarıp duyarlılığı 0,5699'a taşıyor; kaynakla genişleyen kapı kesinliği 0,5586'ya düşürüyor ve insana 49 temiz kayıt gönderiyor. Kural süzgecinin üstüne konan kapı dört sayının hiçbirini oynatmıyor: kapıya giden 27 kaydın tamamını kural zaten işaretlemiş. İki koşumda kapının kesinliği 0,8889 ve 0,6471 çıkıyor.

İçindekiler

Üç derste saldırı yüzeyi modele giren metin üzerinden okundu: yönerge kipi taşıyan kaydın doğrudan mı dolaylı bir kaynaktan mı geldiği, güvenlik süzgecinin atlatılması sınıfında eşiğin nereye kadar dayandığı ve gizli alan adı taşıyan kayıtlarda maskelemeden sonra kalan kalıntı. Üçünde de model bir okuyucuydu: metni alıyor, bir yanıt üretiyor ve iş orada bitiyordu.

Araç çağırabilen bir model yalnız okuyucu değildir. Bir kayıt yazabiliyor, bir talebi kapatabiliyor ya da bir saha ekibi görevlendirebiliyorsa modelin elinde metin değil yetki vardır, ve o yetkinin yanlış yere harcanması metnin nasıl okunduğundan bağımsız bir yüzeydir. Bu ders o yüzeyi sayar: kaç kayıt yan etkili bir araç adı taşıyor, insan onayı kapısı bunların kaçını insana gönderiyor, gönderilenlerin kaçı gerçekten zararlı ve kapının kesinliği ne.

Model Bağlam Protokolü ve Araç Ekosistemi kursunda güvenilmeyen bir sunucunun bildirdiği üç tanım denetlenmiş ve altı bulgu vermişti; aynı denetim güvenilir üç sunucuda da iki bulgu üretiyordu. O sayım bildirim tarafındaydı: aracın ne olduğunu söyleyen tarafı denetliyordu. Burada bildirim kapanmış sayılır ve sayılan şey isteğin kendisidir. Tanım denetimi tekrarlanmaz, sayıları girdi olur.

  • SY41. Kayıt kümesi, sınıflar ve savunmalar kurgudur; gerçek bir sistem, sunucu ya da araç çağrılmaz. Tohum 20260218.
  • SY42. 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; sınıf yalnız öznitelik profilinde durur. Çalışan bir istismar, yük ya da yetki yükseltme yordamı yazılmaz.
  • SY43. yan_etkili_arac_adi bir bayraktır, bir araç adı değildir. Hangi aracın hangi yan etkiyi taşıdığı burada sayılmaz; sayılan şey bayrağı taşıyan kaydın kapıya gidip gitmediğidir.
  • SY44. Taban çizgisi kapısız kurulumdur: hiçbir istek insana gitmez, durdurulan zararlı 0, yanlış alarm 0.
  • SY45. Kapı bir engelleme değil bir yönlendirmedir; bedeli engellenen trafik değil insana giden kayıt sayısıdır.
  • SY46. Kapının kararı puanlamaya dayanmaz, tek bir bayrağa bakar; bu yüzden ölçü aynı küme üzerinde koşumdan bağımsızdır. İkinci koşum kümeyi tohum 20260219 ile yeniden çeker.
  • SY47. Çözünürlük: 93 zararlı ve 147 temiz kayıtta duyarlılığın adımı 0,0108, yanlış engelleme payının adımı 0,0068. Kapının kesinliği 27 kayıtlık bir tabandan okunur, adımı 0,0370.
  • SY48. Sanal alan, en az yetki ilkesi ve izin listesi yordamı önceki müfredatlarda ölçüldü ve tekrarlanmaz; bu ders yalnız isteğin sayımını ekler.

Yetki Bir Metin Değil Bir Bayraktır

Birinci blok kümeyi ve kapıyı kurar. Kayıtta çalışan hiçbir şey yoktur: yan_etkili_arac_adi alanı True ya da False’tır ve bu bayrak, kaydın bir yan etkili araç çağrısına dönüşme isteğini taşıdığını söyler. Bayrağın hangi araca karşılık geldiği yazılmaz, çünkü ölçülen şey araç değil kapıdır. Metin alanı ise sıradan bir destek talebidir ve sınıfla ilişkisi yoktur.

# KURGUDUR. Kayitlar, siniflar ve savunmalar ders icinde tanimlanir; gercek bir
# sistem cagrilmaz. Saldiri METNI yazilmaz: saldiri bir OZELLIK PROFILIDIR.
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


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"]
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],
}
# Tumuyle zararsiz destek metinleri; sinifla iliskisi YOKTUR.
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"]


def kume(tohum=TOHUM):
    ks = []
    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])}
        ks.append({"no": i + 1, "sinif": s, "kaynak": kaynak, "ozellik": oz,
                   "metin": METIN[int(r() * len(METIN))],
                   "uzunluk": 40 + int(r() * 260)})
    return ks


KAYIT = kume()


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


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)


def onay_kapisi(k, gerekli=True):
    """Yan etkili arac istegi tasiyan kayit insana sorulur."""
    return gerekli and k["ozellik"]["yan_etkili_arac_adi"]


def olc(kayitlar, karar):
    """Durdurulan zararli ile yanlislikla durdurulan temiz BIRLIKTE yazilir."""
    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}

Kapının Saydığı

İkinci blok dört kurulumu yan yana koşar: kapısız taban, tek bayrağa bakan kapı ve iki genişleme. Ardından kapının sınıf başına gördüğü pay, kural süzgecinin üstüne konduğunda ne kattığı ve iki koşumun bandı basılır.

def kapi_rol(k):
    """Kapi genisler: yan etkili arac adina rol degistirme istegi eklenir."""
    return k["ozellik"]["yan_etkili_arac_adi"] or k["ozellik"]["rol_degistirme_istegi"]


def kapi_kaynak(k):
    """Kapi daha da genisler: kullanici disi her kaynak insana gider."""
    return k["ozellik"]["yan_etkili_arac_adi"] or k["kaynak"] != "kullanici"


print("kayit", len(KAYIT), " zararli", sum(1 for k in KAYIT if zararli(k)),
      " yan etkili arac adi tasiyan", sum(1 for k in KAYIT if onay_kapisi(k)))
print("\nkapi              insana  zararli  temiz  kesinlik  duyarlilik")
for ad, f in (("kapisiz taban", lambda k: False), ("yan etkili ad", onay_kapisi),
              ("+ rol kipi", kapi_rol), ("+ kaynak", kapi_kaynak)):
    s = olc(KAYIT, f)
    print(f"{ad:<17} {s['dp'] + s['yp']:>6} {s['dp']:>8} {s['yp']:>6}"
          f"   {s['kesinlik']:.4f}      {s['duyarlilik']:.4f}")

print("\nsinif basina kapiya giden pay")
for s in SINIF:
    t = [k for k in KAYIT if k["sinif"] == s]
    g = [k for k in t if onay_kapisi(k)]
    print(f"  {s:<18} {len(t):>3} {len(g):>4}   {len(g) / len(t):.4f}")

kural = olc(KAYIT, kural_suzgeci)
ustuste = olc(KAYIT, lambda k: kural_suzgeci(k) or onay_kapisi(k))
print("\nkural suzgeci     dp", kural["dp"], " yp", kural["yp"],
      " kesinlik", kural["kesinlik"], " duyarlilik", kural["duyarlilik"])
print("kural + kapi      dp", ustuste["dp"], " yp", ustuste["yp"],
      " kesinlik", ustuste["kesinlik"], " duyarlilik", ustuste["duyarlilik"])
print("kapiya gidip kuralin gormedigi kayit:",
      sum(1 for k in KAYIT if onay_kapisi(k) and not kural_suzgeci(k)))

for t in (20260218, 20260219):
    ks = kume(t)
    s = olc(ks, onay_kapisi)
    print(f"kosum {t}: zararli {sum(1 for k in ks if zararli(k))}"
          f"  insana {s['dp'] + s['yp']}  zararli giden {s['dp']}"
          f"  kesinlik {s['kesinlik']:.4f}")
kayit 240  zararli 93  yan etkili arac adi tasiyan 27

kapi              insana  zararli  temiz  kesinlik  duyarlilik
kapisiz taban          0        0      0   0.0000      0.0000
yan etkili ad         27       24      3   0.8889      0.2581
+ rol kipi            58       53      5   0.9138      0.5699
+ kaynak             111       62     49   0.5586      0.6667

sinif basina kapiya giden pay
  temiz              147    3   0.0204
  dolayli_yonerge     24   10   0.4167
  gizli_alan_istegi   17    1   0.0588
  yetki_asimi         10    8   0.8000
  kaynak_taklidi      23    3   0.1304
  bozulmus_girdi      19    2   0.1053

kural suzgeci     dp 74  yp 23  kesinlik 0.7629  duyarlilik 0.7957
kural + kapi      dp 74  yp 23  kesinlik 0.7629  duyarlilik 0.7957
kapiya gidip kuralin gormedigi kayit: 0
kosum 20260218: zararli 93  insana 27  zararli giden 24  kesinlik 0.8889
kosum 20260219: zararli 83  insana 17  zararli giden 11  kesinlik 0.6471

Kapının Kesinliği

Taban satırı boştur ve boş olması bir bulgudur: kapısız kurulumda yan etkili araç adı taşıyan 27 istek hiç sorulmadan koşar, durdurulan zararlı 0, yanlış alarm 0. Kapının kattığı her şey bu sıfırın üstüne yazılır.

Kapı bu 27 kaydı insana gönderiyor ve 24’ü gerçekten zararlı: kesinlik 0,8889. Kapıya giden dört kayıttan üçünden fazlası incelemeyi hak ediyor, ki bir insan kuyruğu için yüksek bir orandır. Aynı satırın duyarlılığı ise 0,2581 — kapı 93 zararlının dörtte birini görüyor. Bu iki sayıyı yan yana yazmadan kapı hakkında konuşulamaz: tek başına kesinliğe bakan biri kapıyı iyi bir savunma sanır, tek başına duyarlılığa bakan biri işe yaramaz sanır. İkisi birlikte kapının ne olduğunu söyler: dar ve isabetli bir yönlendirme, geniş bir süzgeç değil.

Sınıf tablosu bu darlığın nereye baktığını gösteriyor. Yetki aşımı sınıfının 10 kaydından 8’i kapıya gidiyor (0,8000); gizli alan isteği sınıfının 17 kaydından 1’i gidiyor (0,0588). Kapı, bir alan istemeyi görmüyor ve görmemesi doğrudur — gizli bir alan istemek yan etkili bir eylem değildir, o sınıfın savunması başka bir katmandır. Dolaylı yönerge sınıfının 24 kaydından 10’u kapıya gidiyor (0,4167): erişilen bir belgeden gelen yönergenin işe yaraması çoğu zaman bir aracın koşmasını gerektirdiği için bu iki sınıf yapıca örtüşür. Temiz kayıtlarda pay 0,0204, yani 147 temizden 3’ü insana gidiyor.

Genişleme satırları iki ayrı hikâye anlatıyor. Rol kipini kapıya eklemek beklenenin tersini yapıyor: kesinlik 0,8889’dan 0,9138’e çıkıyor ve duyarlılık 0,2581’den 0,5699’a — 0,0108’lik adımdan yirmi dokuz adım. İnsan kuyruğu 27’den 58’e çıkıyor ama eklenen 31 kaydın 29’u gerçekten zararlı. Bu, kursta seyrek rastlanan bir satırdır: genişleyen savunma her iki sayıyı birden iyileştirmiş.

Kaynağı kapıya eklemek aynı şeyi yapmıyor. İnsana giden kayıt 111, kesinlik 0,5586, ve temiz kayıtların 49’u insan kuyruğuna düşüyor. Rol kipli kapıya göre yakalanan zararlı 53’ten 62’ye çıkıyor, dokuz adım; insana giden temiz kayıt 5’ten 49’a çıkıyor, kırk dört adım. Dokuz zararlı için kırk dört inceleme satın alınmış. Bu noktada kapı bir kapı olmaktan çıkıp bir kuyruk olur, ve kuyruğa bakan insan da bir savunma katmanıdır: yüz on bir kaydın hepsine aynı dikkatle bakılmayacağı için kapının gerçek duyarlılığı tablodaki 0,6667’nin altındadır.

Son iki satırdaki sayım bu dersin en sessiz bulgusudur. Kural süzgecinin üstüne kapı konduğunda dört sayının hiçbiri oynamıyor: dp 74, yp 23, kesinlik 0,7629, duyarlılık 0,7957 — kapılı ve kapısız kurulum birebir aynı. Nedeni son satırda yazılı: kapıya giden 27 kaydın hiçbiri kural süzgecinin gözünden kaçmıyor, çünkü yan_etkili_arac_adi zaten kuralların biri. Bir kurulumda hem kural süzgeci hem onay kapısı bulunduğunu söyleyip iki katman saymak, tespit tarafında sıfır eklemeyi iki diye saymaktır. Kapının değeri başka yerdedir ve bu dört sayıda görünmez: engellenen bir kaydı incelenen bir kayda çevirir. O değerin ölçüsü savunma konusunun işidir ve bu tabloda yoktur.

Bildirim tarafındaki sayı ile istek tarafındaki sayı aynı şeyi ölçmez, ve ikisini birbirinin yerine koymak bu konudaki en kolay hatadır. Önceki kursta denetlenen şey üç tanımdı ve altı bulgu verdi; bulgu tanım başına ikiye düşüyordu ve aynı denetim güvenilir sunucularda da iki bulgu üretiyordu. O sayı trafiğe bağlı değildir: tanım kümesi değişmedikçe değişmez, kaç istek geldiğinden bağımsızdır ve bir kereye mahsus okunur. Buradaki sayı ise tümüyle trafiğe bağlıdır: 240 kaydın 27’si bayrağı taşıyor, yaklaşık her dokuz kayıttan biri, ve bu pay kümenin bileşimi değiştiğinde değişir. Tanım tarafında sıfır bulgu veren bir kurulum istek tarafı hakkında hiçbir şey söylemez, çünkü tanımı temiz bir araç da yanlış bir istekle çağrılabilir. Tersi de doğrudur: kapının 0,8889’luk kesinliği, aracın tanımını kimin yazdığı sorusunu kapatmaz. İki sayı iki ayrı yüzeye aittir ve bir kurulumun güvenliği ancak ikisi birlikte yazıldığında okunur.

İki koşum kapının kesinliğinin ne kadar oynadığını gösteriyor. Aynı kapı, aynı kural, ikinci çekimde 17 kaydı insana gönderiyor ve bunların 11’i zararlı: kesinlik 0,6471. Birinci koşumun 0,8889’u ile arasındaki fark 0,2418, yani 27 kayıtlık tabanın 0,0370’lik adımından altmış katından fazla. Kapının kesinliği kapının bir özelliği değil, çekimin yan etkili bayrağı hangi sınıflara dağıttığının bir özelliğidir. Tek koşumdan okunan 0,8889 bir ölçüm değil bir gözlemdir.

Özet

  • Kapısız tabanda yan etkili araç adı taşıyan 27 istek sorulmadan koşar; durdurulan zararlı 0, yanlış alarm 0.
  • Kapı 27 kaydı insana gönderir, 24’ü gerçekten zararlıdır: kesinlik 0,8889, duyarlılık 0,2581. Kapı dar ve isabetli bir yönlendirmedir, geniş bir süzgeç değil.
  • Kapı yetki aşımı sınıfının 10 kaydından 8’ini, gizli alan isteği sınıfının 17 kaydından 1’ini görür; dolaylı yönergenin 24 kaydından 10’u kapıya gider.
  • Rol kipiyle genişleyen kapı iki sayıyı birden iyileştirir; kaynakla genişleyen kapı dokuz zararlı için kırk dört temiz incelemesi satın alır ve kesinliği 0,5586’ya düşürür.
  • Kural süzgecinin üstüne konan kapı dört sayının hiçbirini oynatmaz; kapıya giden 27 kaydın tamamını kural zaten işaretlemiştir.
  • Kapının kesinliği iki koşumda 0,8889 ve 0,6471 çıkar; fark 27 kayıtlık tabanın çözünürlüğünün çok üstündedir.

Sonraki Adım

Bu derste sayılan şey isteğe aitti: kayıt geldi, bir bayrak taşıdı ve kapı onu insana yönlendirdi ya da yönlendirmedi. Kapının kararı da, kural süzgecinin kararı da kaydın kendisine bakıyordu. Ama bir kaydın hangi sınıfa düşeceğini belirleyen tek şey kaydın kendisi değildir: modelin neyi meşru bir istek sayacağı, hangi kaynaktan gelen metne ne kadar ağırlık vereceği ve hangi kalıbı tanıdık bulacağı, beslendiği veriden gelir. Kaynakların hepsi aynı değildir ve hiçbir ders şu ana kadar şunu sormadı: kullanıcıdan, erişilen belgeden ve araç çıktısından gelen kayıtların taşıdığı zararlı payı birbirinden ne kadar farklı, ve bir kaynağı kapatmak neyi kazandırıp neyi kaybettiriyor. Sonraki ders bunu sayar.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat