İçeriğe geç
academia.sh

Ders 12 / 21

Yetki ve Sanal Alan

Araç yetkisinin bir savunma katmanı olarak sayılması: aynı 240 kayıtlık kurgu küme beş yetki kümesinde koşturulur ve durdurulan zararlı, yanlış alarm ile tamamlanan görev yan yana basılır. Savunmasız tabanda durdurulan zararlı 0, yanlış alarm 0; çalıştırma yeteneğini kapatmak 12 zararlı durdurup hiçbir temiz kaydı engellemiyor ve kesinliği 1,0000; yan etkili yeteneği kapatmak 24 zararlıya karşılık 3 yanlış alarm veriyor; izin listeli küme 34 zararlı durdurup tamamlanan görevi 0,8844'e, salt okuma 62 zararlı durdurup 0,6667'ye indiriyor. Daralmanın marjinal kesinliği 1,0000'dan 0,4167'ye düşüyor: son iki adım durdurduğu her zararlıya karşılık birden fazla temiz kaydı engelliyor. Sınıf dağılımı kapının kör noktasını gösteriyor: yetki aşımı sınıfının 1,0000'i durduruluyor, gizli alan isteği sınıfının yalnızca 0,0588'i.

İçindekiler

Üç derste savunma metnin üzerinde çalıştı. Girdi ve çıktı süzgeçleri bir kaydı okuyup işaretledi, içerik denetimi sınıf başına ayırdı, maskeleme modele giden alanı sildi. Üçünün de dokunduğu şey aynıydı: modele giren ya da modelden çıkan metin. Ajanın o metni okuduktan sonra yaptığı şeye hiç dokunulmadı.

Bu ders savunmayı metinden eyleme taşır. Bir kayıt süzgeçten geçse bile, dokunmak istediği yetenek hiç verilmemişse zararsızdır. Ölçülen tek şey şudur: yetki daraldıkça kaç zararlı kayıt duruyor, kaç temiz kayıt yanlışlıkla duruyor ve geriye kaç görev tamamlanabiliyor.

  • SV41. Kod bir benzeticidir; gerçek bir araç, dosya sistemi ya da çalışma zamanı çağrılmaz. Kayıt kümesi, sınıflar ve öznitelikler kurgudur, tohum 20260218.
  • SV42. Saldırı bir metin değil, bir öznitelik profilidir. Kayıtların taşıdığı altı cümle sıradan destek talepleridir ve sınıfla hiçbir ilişkisi yoktur; sınıf yalnız yapısal bayraklarda durur. Kodun hiçbir yerinde çalışan bir yük, şablon ya da yönerge dizisi yoktur.
  • SV43. Taban çizgisi savunmasız kurulumdur: hiçbir süzgeç, işaretleme ya da kapı yok; durdurulan zararlı 0, yanlış alarm 0.
  • SV44. Kursun kuralı: durdurduğu pay ile yanlışlıkla durdurduğu pay birlikte yazılmayan savunma ölçülmemiş sayılır.
  • SV45. Yetki yüzeyi bu derste bir ikilidir: aracın bildirdiği yetenek (okuma, dış erişim, yazma, çalıştırma) ve dokunabildiği erişim alanı (kaynak sınıfı). Bir kaydın istediği yetenek yalnız var olan bayraklardan türetilir; kümeye yeni metin eklenmez.
  • SV46. Sanal alan bu ikilinin çizdiği sınırdır ve kapı yürütücünün önünde durur: geçmeyen istek araca hiç ulaşmaz. Kapı yalnız durdurur; sınırın dışına çıkan bir yol yoktur.
  • SV47. Tamamlanan görev, durdurulmayan temiz kayıt payıdır: 147 temiz kaydın kaçı işini bitirebiliyor.
  • SV48. Çözünürlük: duyarlılığın adımı 1/93=0,01081/93 = 0{,}0108, yanlış engelleme payının adımı 1/147=0,00681/147 = 0{,}0068. Kapının kararında hiçbir çekiliş yoktur, bu yüzden ölçü koşumdan bağımsızdır; aynı küme her koşumda aynı sayıyı verir.

Ortak Tanım

Kayıt kümesi, sınıflar, savunma katmanları ve ölçü kurs boyunca aynıdır. Kümede 240 kurgu destek kaydı vardır; her kaydın bir sınıfı, bir kaynağı ve yedi yapısal özniteliği bulunur. Ölçü işlevi olc her kararı beş sayıyla birlikte döndürür ve durdurulanı yanlışlıkla durdurulandan hiç ayırmaz.

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


def izno(m):
    h = 2166136261
    for c in str(m):
        h = ((h ^ ord(c)) * 16777619) & M32
    return h


# ---- 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:
# 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}


print("kayit:", len(KAYIT), "- zararli:", sum(zararli(k) for k in KAYIT),
      "- temiz:", sum(not zararli(k) for k in KAYIT))
print("kaynak:", {s: sum(k["kaynak"] == s for k in KAYIT) for s in KAYNAK})
kayit: 240 - zararli: 93 - temiz: 147
kaynak: {'kullanici': 137, 'erisilen_belge': 72, 'arac_ciktisi': 31}

Yetki Yüzeyi ve Sanal Alanın Sınırı

En az yetki ilkesi Siber Güvenliğe Giriş kursunda kuruldu, sanal alan ve izin listeleri Uç Nokta ve Sistem Sertleştirme kursunda, dosya izinleri Linux’a Giriş kursunda ölçüldü. Yapay Zekâ Ajanları kursu aynı kapıyı ajan döngüsünde ölçtü: tam yetkide görevlerin 0,9583’ü tamamlanıyordu, izin listeli kümede 0,8333 ve kapı 20 çağrı durduruyordu. Bu yordamların hiçbiri tekrarlanmaz; sayılar girdi olarak alınır. Buradaki soru başkadır: aynı kapı bir savunma olarak kaç zararlı kaydı durduruyor ve bunun bedeli ne.

Kapının yalnız durdurduğuna dikkat etmek gerekir. Kodda sınırı aşan bir yol tanımlı değildir; sanal_alan işlevi bir isteğin geçip geçemeyeceğine karar verir ve geçmeyen istek araca hiç ulaşmaz. Beş yetki kümesi giderek daralır: her satır bir öncekinin alt kümesidir.

# ---- Bu derse ozgu: kaydin dokunmak istedigi YETENEK, var olan bayraklardan okunur
def istenen_yetenek(k):
    """Yeni bir metin ya da yuk eklenmez; yetenek yalnizca yapisal bayraklardan turetilir."""
    if k["ozellik"]["yan_etkili_arac_adi"]:
        return "calistirma" if k["ozellik"]["yonerge_kipi"] else "yazma"
    if k["kaynak"] != "kullanici":
        return "dis_erisim"
    return "okuma"


TUM_YETENEK = ("okuma", "dis_erisim", "yazma", "calistirma")
TUM_ALAN = ("kullanici", "erisilen_belge", "arac_ciktisi")
YETKI = {
    "tam yetki":      (TUM_YETENEK, TUM_ALAN),
    "calistirma yok": (("okuma", "dis_erisim", "yazma"), TUM_ALAN),
    "yan etki yok":   (("okuma", "dis_erisim"), TUM_ALAN),
    "izin listeli":   (("okuma", "dis_erisim"), ("kullanici", "erisilen_belge")),
    "salt okuma":     (("okuma",), ("kullanici",)),
}


def sanal_alan(k, y):
    """Kapi yurutucunun onunde durur ve YALNIZ durdurur; sinirin disina cikan
    hicbir yol yoktur. Gecmeyen istek araca hic ulasmaz."""
    yetenek, alan = y
    return istenen_yetenek(k) not in yetenek or k["kaynak"] not in alan


print("istenen yetenek:", {g: sum(istenen_yetenek(k) == g for k in KAYIT)
                           for g in TUM_YETENEK})
print("\nyetki kumesi     durdur  yanlis  kesinlik  duyarlilik  yanlis-eng  gorev   marjinal")
onceki_dp = onceki_yp = 0
for ad, y in YETKI.items():
    s = olc(KAYIT, lambda k, y=y: sanal_alan(k, y))
    dd, dy = s["dp"] - onceki_dp, s["yp"] - onceki_yp
    mk = f"{dd / (dd + dy):.4f}" if dd + dy else "-"
    print(f"{ad:<15} {s['dp']:>6} {s['yp']:>7} {s['kesinlik']:>9.4f} {s['duyarlilik']:>11.4f}"
          f" {s['yanlis_engelleme_payi']:>11.4f} {s['dn'] / 147:>6.4f} {mk:>10}")
    onceki_dp, onceki_yp = s["dp"], s["yp"]

print("\nsinif basina durdurulan pay (izin listeli kume)")
for s in SINIF[1:]:
    g = [k for k in KAYIT if k["sinif"] == s]
    d = sum(sanal_alan(k, YETKI["izin listeli"]) for k in g)
    print(f"  {s:<18} {d:>2}/{len(g):<3} {d / len(g):.4f}")


def izin_listeli(k):
    return sanal_alan(k, YETKI["izin listeli"])


print("\nkatmanin ustune katman   durdur  yanlis  kesinlik  duyarlilik  yanlis-eng")
for ad, karar in (("kural suzgeci", kural_suzgeci),
                  ("yetki kapisi", izin_listeli),
                  ("kural VEYA yetki", lambda k: kural_suzgeci(k) or izin_listeli(k))):
    s = olc(KAYIT, karar)
    print(f"{ad:<24} {s['dp']:>6} {s['yp']:>7} {s['kesinlik']:>9.4f}"
          f" {s['duyarlilik']:>11.4f} {s['yanlis_engelleme_payi']:>11.4f}")
yalniz = [k for k in KAYIT if izin_listeli(k) and not kural_suzgeci(k)]
print("yalniz yetkinin ekledigi:", len(yalniz), "kayit,",
      sum(zararli(k) for k in yalniz), "zararli")
istenen yetenek: {'okuma': 129, 'dis_erisim': 84, 'yazma': 15, 'calistirma': 12}

yetki kumesi     durdur  yanlis  kesinlik  duyarlilik  yanlis-eng  gorev   marjinal
tam yetki            0       0    0.0000      0.0000      0.0000 1.0000          -
calistirma yok      12       0    1.0000      0.1290      0.0000 1.0000     1.0000
yan etki yok        24       3    0.8889      0.2581      0.0204 0.9796     0.8000
izin listeli        34      17    0.6667      0.3656      0.1156 0.8844     0.4167
salt okuma          62      49    0.5586      0.6667      0.3333 0.6667     0.4667

sinif basina durdurulan pay (izin listeli kume)
  dolayli_yonerge    14/24  0.5833
  gizli_alan_istegi   1/17  0.0588
  yetki_asimi        10/10  1.0000
  kaynak_taklidi      6/23  0.2609
  bozulmus_girdi      3/19  0.1579

katmanin ustune katman   durdur  yanlis  kesinlik  duyarlilik  yanlis-eng
kural suzgeci                74      23    0.7629      0.7957      0.1565
yetki kapisi                 34      17    0.6667      0.3656      0.1156
kural VEYA yetki             78      37    0.6783      0.8387      0.2517
yalniz yetkinin ekledigi: 18 kayit, 4 zararli

Daralmanın Marjinal Değeri

İlk satır tabandır: kapı hiçbir şeyi durdurmuyor, 93 zararlının hepsi geçiyor ve 147 temiz kaydın tamamı işini bitiriyor. Bundan sonraki her satır bir şey durduruyor ve bir bedel ödüyor.

İkinci satır bu dersin en ucuz kazancıdır. Çalıştırma yeteneğini kapatmak 12 zararlı kaydı durduruyor, hiçbir temiz kaydı engellemiyor, kesinliği 1,0000 ve tamamlanan görevi 1,0000’da bırakıyor. Bunun nedeni yapıdadır: çalıştırma yeteneği iki bayrağın birlikte bulunmasını gerektirir ve temiz trafiğin gittiği yer orası değildir. En az yetki ilkesinin ölçülebilir çekirdeği budur — temiz trafiğin uğramadığı bir yeteneği kapatmak bedava bir savunmadır.

Son sütun bunun nerede bittiğini söyler. Marjinal kesinlik, bir daraltma adımının fazladan durdurduğu zararlının, o adımda fazladan durdurulan toplam kayda oranıdır. Sıra 1,0000, 0,8000, 0,4167, 0,4667 diye gidiyor. Üçüncü adımda oran 0,5000’in altına düşüyor: izin listesine geçmek 10 zararlı daha durdururken 14 temiz kaydı fazladan engelliyor. Dördüncü adım daha da ağırdır — 28 zararlıya karşılık 32 temiz kayıt. Kursun ikinci iddiasının bu derse düşen kanıtı budur: daraltmayı sürdürmek bir noktadan sonra zararlıdan çok görevi durdurur. Sayı hâlâ büyüyor, çünkü duyarlılık 0,3656’dan 0,6667’ye çıkıyor; ama aynı adımda tamamlanan görev 0,8844’ten 0,6667’ye iniyor. Tek başına duyarlılığa bakan bir okuma bu adımı iyileşme sayardı.

Farkların ölçülüp ölçülmediğini çözünürlük söyler. Duyarlılıktaki 0,3011’lik son sıçrama, 0,0108 adımının yirmi sekiz katıdır; tamamlanan görevdeki 0,2177’lik düşüş 0,0068 adımının otuz iki katıdır. İkisi de bandın çok üstündedir. Buna karşılık calistirma yok ile tam yetki arasındaki yanlış engelleme farkı tam olarak sıfırdır ve bu bir yuvarlama değil, sayımın kendisidir.

Kapının Kör Olduğu Yer

Son blok tek bir ortalamanın gizlediğini açıyor. İzin listeli küme genelde 0,3656 duyarlılık veriyor, ama sınıf başına dağılım hiç düz değil: yetki_asimi sınıfının 1,0000‘i duruyor, dolayli_yonerge sınıfının 0,5833’ü, gizli_alan_istegi sınıfının ise yalnızca 0,0588’i.

Bunun nedeni kapının ne ölçtüğüdür. Yetki kapısı bir kaydın ne yapmak istediğine bakar, ne söylediğine değil. Gizli alan isteği taşıyan bir kayıt çoğunlukla yalnız okuma yeteneği ister; okuma her kümede açık kalır, çünkü kapatıldığında geriye hiçbir görev kalmaz. Yetki kapısı o sınıfa karşı yapısı gereği kördür ve bu körlük daraltmayla kapanmaz.

Buradan iki sonuç çıkar. Birincisi, yetki katmanı bir süzgecin yerine geçmez: iki katman ayrı sınıflara bakar ve birinin duyarlılığı öbürünün kör noktasını doldurmaz. İkincisi, bir savunmanın tek bir ortalama oranla bildirilmesi yanıltıcıdır — 0,3656 sayısı hem 1,0000’i hem 0,0588’i içeriyor ve hangi saldırının hangi katmanla durduğunu söylemiyor.

Katmanın Üstüne Katman

Kör noktanın akla ilk gelen cevabı iki katmanı üst üste koymaktır: kural süzgeci metne, yetki kapısı eyleme baksın, bir kayıt ikisinden birine takılsın yeter. Son tablo bunun sayısını veriyor ve sonuç beklenenin tersi çıkıyor.

Kural süzgeci tek başına 74 zararlı durduruyor ve 23 temiz kaydı engelliyor. Yetki kapısını üstüne koymak duyarlılığı 0,7957’den 0,8387‘ye çıkarıyor, yani dört zararlı kayıt daha. Aynı adımda yanlış engelleme payı 0,1565’ten 0,2517‘ye çıkıyor ve kesinlik 0,7629’dan 0,6783’e iniyor. Son satır nedenini söylüyor: yetki kapısının süzgece eklediği 18 kaydın yalnızca 4’ü zararlıdır, 14’ü temizdir. Katmanın marjinal kesinliği 4/18=0,22224/18 = 0{,}2222’dir.

Dört zararlı kayıt 0,0108 adımının dört katıdır ve ölçülmüş bir kazançtır; on dört temiz kayıt 0,0068 adımının on dört katıdır ve ölçülmüş bir kayıptır. İkisi de gerçektir; hangisinin ağır bastığı sayıdan değil, engellenen bir görevin ne kadar pahalıya mal olduğundan okunur. Sayının söylediği tek kesin şey şudur: iki savunmayı üst üste koymak duyarlılığı karşılıksız büyütmez. Bu tablonun yalnız duyarlılık sütunuyla bildirilmesi, eklenen katmanın kazancını olduğundan büyük gösterirdi.

Özet

  • Yetki yüzeyi, bir aracın bildirdiği yetenek ile dokunabildiği erişim alanı ikilisidir; sanal alan bu ikilinin çizdiği sınırdır ve kapı yürütücünün önünde yalnız durdurur.
  • Savunmasız tabanda durdurulan zararlı 0, yanlış alarm 0; çalıştırma yeteneğini kapatmak 12 zararlı durdurup hiçbir temiz kaydı engellemiyor, kesinlik 1,0000 ve tamamlanan görev 1,0000. İzin listeli küme 34 zararlı durdurup görevi 0,8844’e, salt okuma 62 durdurup 0,6667’ye indiriyor: duyarlılık 0,6667’ye çıkarken görevin üçte biri kayboluyor.
  • Marjinal kesinlik 1,0000’dan 0,4167’ye düşüyor: son iki daraltma adımı durdurduğu her zararlıya karşılık birden fazla temiz kaydı engelliyor.
  • Yetki kapısı sınıf seçicidir: yetki_asimi sınıfının 1,0000’ini, gizli_alan_istegi sınıfının yalnızca 0,0588’ini durduruyor; tek bir ortalama oran bu ayrımı gizler.
  • Yetki kapısını kural süzgecinin üstüne koymak duyarlılığı 0,7957’den 0,8387’ye çıkarırken yanlış engellemeyi 0,1565’ten 0,2517’ye taşıyor; eklenen 18 kaydın yalnızca 4’ü zararlıdır.
  • Kapının kararında çekiliş yoktur, ölçü koşumdan bağımsızdır; duyarlılık adımı 0,0108, yanlış engelleme adımı 0,0068.

Sonraki Adım

Bu dersteki her savunma aynı biçimde çalıştı: bir kaydı durdurdu. Durdurmanın bir bedeli olduğu da tabloda yazılı — dört daraltma adımı toplam 49 temiz kaydı engelledi. Oysa zararlı bir kaydı etkisiz kılmanın tek yolu onu durdurmak değildir. Bir kaydın zararı, çoğu zaman içeriğinden değil, o içeriğin yönerge olarak okunmasından gelir; erişilen bir belgeden gelen metin veri sayılırsa, hiç engellenmeden zararsızlaşır. Sonraki ders bu engellemeyen savunmayı ölçer ve iki şeyi sayar: işaretleme 93 zararlının kaçını hiçbir kaydı durdurmadan etkisizleştiriyor, geriye hangi sınıflar kalıyor ve bunun yanlış alarm karşılığı ne oluyor.

İ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