İçeriğe geç
academia.sh

Ders 02 / 21

Jailbreak Teknikleri

Güvenlik süzgecinin atlatılmasının bir yordam olarak değil bir eşik sorusu olarak ölçülmesi: aynı 240 kayıtlık kurgu kümede eşik 0,30'dan 0,80'e çıkarken kesinlik 0,7568'den 0,9787'e yükseliyor, duyarlılık 0,9032'den 0,4946'ya düşüyor ve yanlış engelleme payı 0,1837'den 0,0068'e iniyor. Eşiği yükseltmenin değişim oranı 0,50'ye kadar bire bir (7'ye 7, 11'e 12), 0,50'nin üstünde 2,33 ve 3,25 oluyor; atlatmaya en açık bölge burasıdır. Sınıf başına duyarlılık tabloda ayrı okunuyor ve savunmanın ilk çöktüğü sınıf bozulmuş girdi (0,6842'den 0,2105'e). İkinci koşumda eşik 0,40 ve 0,60'ta duyarlılık aynı kalırken 13 ve 9 kaydın kararı değişiyor.

İçindekiler

Bir önceki ders kural süzgecini ölçtü: dört bayrağa bakıyor, 93 zararlının 74’ünü durduruyor, 23 temiz kaydı yanlışlıkla engelliyor. Kararı keskindir — bayrak ya vardır ya yoktur. Puan üreten bir süzgeç araya bir eşik koyar, ve eşik bir ayar olduğu için savunmayı işletenin elindedir. Nereye konduğu bir yapılandırma ayrıntısı gibi görünür; oysa yüzeyin ne kadarının açık kaldığını belirleyen şey odur.

Güvenlik süzgecinin atlatılması burada bir yordam olarak ele alınmaz. Hiçbir atlatma yöntemi, şablonu ya da örneği yazılmaz; yazılan tek şey sınıf adı ve savunmanın o sınıfta yakaladığı paydır. Soru şudur: eşik yükseldikçe kesinlik ile duyarlılık nasıl ters yönde gider, savunmanın ilk çöktüğü sınıf hangisidir ve atlatmaya en açık bölge hangi eşiğin üstünde başlar.

  • SY9. Kayıt kümesi, sınıflar ve savunma katmanları kurgudur; bir önceki dersin tanımı değiştirilmeden sürer. Tohum 20260218.
  • SY10. Bu bir saldırı dersi değildir. Koşan kodun tamamı savunma tarafındadır: puanlama, eşik, süzgeç ve sayım. Çalışan bir atlatma yöntemi, şablonu ya da yönerge dizisi yazılmaz.
  • SY11. 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.
  • SY12. Model temelli süzgeç bir benzeticidir: ağırlıklı bir toplam, kaynağa bağlı bir ek ve dar bir belirsizlik payı üretir. Gerçek bir sınıflandırıcı eğitilmez.
  • SY13. Süpürülen eşikler beş noktadır; ara değerler ölçülmedi ve eğrinin aralarında düz olduğu varsayılmaz.
  • SY14. Sınıf başına duyarlılık o sınıftaki kayıt sayısına bölünür; yetki_asimi 10 kayıttır ve orada bir kaydın değeri 0,1000’dir.
  • SY15. İkinci koşumda küme değişmez, yalnız puanın belirsizlik payı ikinci tohumla yeniden çekilir. Ölçülen şey modelin koşum değişkenliğidir.
  • SY16. Duyarlılığın en küçük adımı 1/93 = 0,0108, yanlış engelleme payının adımı 1/147 = 0,0068’dir.

Eşik Bir Savunma Değil, Bir Takas Noktasıdır

Model temelli süzgeç her kayda bir puan verir: bayrakların ağırlıklı toplamı, kaynağa bağlı bir ek ve dar bir belirsizlik payı. Puan bir karar değildir; karar eşikle doğar. Eşik düşükse süzgeç çok kayıt işaretler, yüksekse az. Bu, savunmanın ne kadar iyi olduğunu değil nerede durduğunu belirleyen bir ayardır ve iki sayıyı aynı anda ters yönde oynatır.

# KURGUDUR. Kayit kumesi, siniflar, oznitelikler ve savunma katmanlari ders icinde
# tanimlanir; gercek bir model uc noktasi cagrilmaz. Saldiri METNI yazilmaz.
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:
# 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)


# ---- SAVUNMA 2: model temelli suzgec (puan + esik)
AGIRLIK = {"yonerge_kipi": 0.42, "rol_degistirme_istegi": 0.26, "gizli_alan_adi": 0.44,
           "yan_etkili_arac_adi": 0.40, "kaynak_damgasi_uyusmuyor": 0.38,
           "olagandisi_damga_dagilimi": 0.30, "asiri_uzunluk": 0.12}
KAYNAK_EK = {"kullanici": 0.00, "erisilen_belge": 0.18, "arac_ciktisi": 0.12}


def puan(k):
    p = sum(AGIRLIK[o] for o in OZELLIK if k["ozellik"][o]) + KAYNAK_EK[k["kaynak"]]
    r = uretec(TOHUM ^ izno(k["no"]))
    return min(max(p + (r() - 0.5) * 0.20, 0.0), 1.6)


def model_suzgeci(k, esik=0.40):
    return puan(k) >= esik


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

Süpürme ve Değişim Oranı

İkinci blok beş eşiği süpürür, sonra her adımda neyin neye takas edildiğini sayar: eşik bir basamak yükseldiğinde kaç zararlı fazladan kaçıyor ve karşılığında kaç temiz kayıt serbest kalıyor.

ESIK = (0.30, 0.40, 0.50, 0.60, 0.80)
print("esik  isaretlenen  durdurulan  yanlis alarm  kacan  kesinlik  duyarlilik  yanlis eng")
for e in ESIK:
    m = olc(KAYIT, lambda k, e=e: model_suzgeci(k, e))
    print(f"{e:.2f} {m['dp'] + m['yp']:>12} {m['dp']:>11} {m['yp']:>13} {m['yn']:>6}"
          f" {m['kesinlik']:>9.4f} {m['duyarlilik']:>11.4f} {m['yanlis_engelleme_payi']:>11.4f}")

print("\nesigi yukseltmenin degisimi")
print("adim          kacan zararli artisi  serbest kalan temiz  oran  ust esikte yanlis alarm")
for a, b in zip(ESIK, ESIK[1:]):
    ma = olc(KAYIT, lambda k, e=a: model_suzgeci(k, e))
    mb = olc(KAYIT, lambda k, e=b: model_suzgeci(k, e))
    dz, dt = mb["yn"] - ma["yn"], ma["yp"] - mb["yp"]
    print(f"{a:.2f} -> {b:.2f} {dz:>20} {dt:>20} {dz / dt:>5.2f} {mb['yp']:>22}")

print("\nfarklarin kumenin cozunurlugune gore buyuklugu")
print("adim          duyarlilik farki  adim  yanlis eng farki  adim")
for a, b in zip(ESIK, ESIK[1:]):
    ma = olc(KAYIT, lambda k, e=a: model_suzgeci(k, e))
    mb = olc(KAYIT, lambda k, e=b: model_suzgeci(k, e))
    fd = ma["duyarlilik"] - mb["duyarlilik"]
    fy = ma["yanlis_engelleme_payi"] - mb["yanlis_engelleme_payi"]
    print(f"{a:.2f} -> {b:.2f} {fd:>17.4f} {fd / (1 / 93):>5.1f} {fy:>17.4f}"
          f" {fy / (1 / 147):>5.1f}")
esik  isaretlenen  durdurulan  yanlis alarm  kacan  kesinlik  duyarlilik  yanlis eng
0.30          111          84            27      9    0.7568      0.9032      0.1837
0.40           97          77            20     16    0.7938      0.8280      0.1361
0.50           74          66             8     27    0.8919      0.7097      0.0544
0.60           64          59             5     34    0.9219      0.6344      0.0340
0.80           47          46             1     47    0.9787      0.4946      0.0068

esigi yukseltmenin degisimi
adim          kacan zararli artisi  serbest kalan temiz  oran  ust esikte yanlis alarm
0.30 -> 0.40                    7                    7  1.00                     20
0.40 -> 0.50                   11                   12  0.92                      8
0.50 -> 0.60                    7                    3  2.33                      5
0.60 -> 0.80                   13                    4  3.25                      1

farklarin kumenin cozunurlugune gore buyuklugu
adim          duyarlilik farki  adim  yanlis eng farki  adim
0.30 -> 0.40            0.0752   7.0            0.0476   7.0
0.40 -> 0.50            0.1183  11.0            0.0817  12.0
0.50 -> 0.60            0.0753   7.0            0.0204   3.0
0.60 -> 0.80            0.1398  13.0            0.0272   4.0

Süpürme tablosu tek yönlü bir iyileşme göstermez. Eşik 0,30’dan 0,80’e çıkarken kesinlik 0,7568’den 0,9787‘e yükseliyor, yanlış engelleme payı 0,1837’den 0,0068‘e iniyor ve işaretlenen 111 kayıt 47’ye düşüyor. Aynı hareket duyarlılığı 0,9032’den 0,4946‘ya indiriyor: en yüksek eşikte savunma **93 zararlının 47’sini kaçırıyor**. Yalnız kesinlik raporlanan bir kurulum 0,80’de kusursuza yakın görünür; kaçan sütunu yazılmadığı sürece bu görüntü sürer.

İkinci tablo eşik seçimini bir tercih olmaktan çıkarıp bir hesaba dönüştürür. 0,30’dan 0,50’ye kadar takas bire birdir: 7 zararlıya karşılık 7 temiz kayıt, sonra 11’e karşılık 12. 0,50’nin üstünde oran kırılıyor: 0,50 → 0,60 adımında 3 temiz kayıt 7 zararlıya mal oluyor (2,33), 0,60 → 0,80 adımında 4 temiz kayıt 13 zararlıya (3,25).

Atlatmaya en açık bölge burasıdır. Yanlış alarm şikâyetini azaltmak için eşiği 0,50’nin üstüne çıkaran bir savunma, kazandığı temiz trafiğin iki ila üç katı kadar zararlıyı serbest bırakır ve bunu hiçbir gösterge kötüleşmeden yapar: kesinlik yükselir, yanlış engelleme payı düşer, işaretlenen kayıt azalır. Atlatma burada bir yöntemle değil, savunmayı işletenin kendi ayarıyla açılır.

Son sütun bu bölgenin niçin en pahalı olduğunu yazar. Eşik 0,60’ta yanlış alarm 5 kayıttır, 147 temizin 0,0340’ı; oradan 0,80’e çıkmak 4 temiz kayıt kazandırıp 13 zararlıyı serbest bırakıyor. Gevşetmenin en pahalı olduğu yer, yanlış alarmın zaten en az olduğu yerdir: kazanılacak temiz trafik tükendiğinde her adım yalnız kaçan zararlıyı büyütür.

Üçüncü tablo bu farkların ölçülebilir olup olmadığını söyler. Duyarlılık farklarının en küçüğü 0,0752, kümenin adımının (0,0108) yedi katı; yanlış engelleme farklarının en küçüğü 0,0204, adımın (0,0068) üç katı. Süpürmenin hiçbir basamağı çözünürlüğün altında kalmıyor, dolayısıyla dört adımın tamamı gerçek bir ölçümdür. Tabana en yakın olan 0,50 → 0,60 adımıdır: ölçülebilir, ama üzerine politika kurulmayacak kadar ince.

Savunma Hangi Sınıfta Önce Çöker

Toplam duyarlılık bir ortalamadır ve beş zararlı sınıfın hepsini aynı kefeye koyar. Üçüncü blok onu sınıf başına ayırır ve yanına kural süzgecinin aynı sınıflardaki payını koyar.

ESIK = (0.30, 0.40, 0.50, 0.60, 0.80)
print("sinif basina duyarlilik: savunmanin o sinifta yakaladigi pay")
print(f"{'sinif':<18} {'kayit':>5} {'kural':>7} " + " ".join(f"{e:>6.2f}" for e in ESIK))
for s in SINIF[1:]:
    g = [k for k in KAYIT if k["sinif"] == s]
    kr = sum(1 for k in g if kural_suzgeci(k)) / len(g)
    print(f"{s:<18} {len(g):>5} {kr:>7.4f} " +
          " ".join(f"{sum(1 for k in g if model_suzgeci(k, e)) / len(g):>6.4f}" for e in ESIK))


def puan_ikinci(k):
    """Ayni kayit, ikinci kosum: puanin gurultusu ikinci tohumla yeniden cekilir."""
    p = sum(AGIRLIK[o] for o in OZELLIK if k["ozellik"][o]) + KAYNAK_EK[k["kaynak"]]
    r = uretec(20260219 ^ izno(k["no"]))
    return min(max(p + (r() - 0.5) * 0.20, 0.0), 1.6)


print(f"\n{'esik':<5} {'duyarlilik':>21} {'adim':>5} {'yanlis engelleme':>21} {'adim':>5}"
      f" {'karari degisen':>15}")
for e in ESIK:
    m1 = olc(KAYIT, lambda k, e=e: model_suzgeci(k, e))
    m2 = olc(KAYIT, lambda k, e=e: puan_ikinci(k) >= e)
    fd = abs(m2["duyarlilik"] - m1["duyarlilik"])
    fy = abs(m2["yanlis_engelleme_payi"] - m1["yanlis_engelleme_payi"])
    d = sum(1 for k in KAYIT if model_suzgeci(k, e) != (puan_ikinci(k) >= e))
    print(f"{e:<5.2f} {m1['duyarlilik']:>10.4f} {m2['duyarlilik']:>10.4f} {fd / (1 / 93):>5.1f}"
          f" {m1['yanlis_engelleme_payi']:>10.4f} {m2['yanlis_engelleme_payi']:>10.4f}"
          f" {fy / (1 / 147):>5.1f} {d:>15}")
sinif basina duyarlilik: savunmanin o sinifta yakaladigi pay
sinif              kayit   kural   0.30   0.40   0.50   0.60   0.80
dolayli_yonerge       24  1.0000 1.0000 1.0000 0.9583 0.8333 0.6667
gizli_alan_istegi     17  0.9412 0.9412 0.8824 0.7059 0.5882 0.4706
yetki_asimi           10  0.9000 0.9000 0.9000 0.8000 0.6000 0.4000
kaynak_taklidi        23  0.8696 0.9565 0.8696 0.8261 0.8261 0.6087
bozulmus_girdi        19  0.2632 0.6842 0.4737 0.2105 0.2105 0.2105

esik             duyarlilik  adim      yanlis engelleme  adim  karari degisen
0.30      0.9032     0.9140   1.0     0.1837     0.1837   0.0               5
0.40      0.8280     0.8280   0.0     0.1361     0.1293   1.0              13
0.50      0.7097     0.7419   3.0     0.0544     0.0544   0.0              11
0.60      0.6344     0.6344   0.0     0.0340     0.0136   3.0               9
0.80      0.4946     0.4624   3.0     0.0068     0.0068   0.0               5

Sınıf tablosu, tek bir duyarlılık sayısının neyi gizlediğini gösterir. Eşik 0,50’de toplam duyarlılık 0,7097 iken dolayli_yonerge sınıfında 0,9583, bozulmus_girdi sınıfında 0,2105: fark 0,7478 ve savunma birincisinde neredeyse eksiksiz, ikincisinde neredeyse yok. Bozulmuş girdi ilk çöken sınıftır — daha 0,40’ta 0,4737’ye iniyor, 0,50’de dibe vurup üç eşik boyunca orada kalıyor. Nedeni ağırlık tablosundadır: o sınıfın taşıdığı iki bayrağın ağırlıkları eşiği geçmeye yetmez. Kural süzgecinin payı da orada düşüktür (0,2632), çünkü o iki bayrak kural listesinde hiç yoktur. Bu sınıfın kendisi ayrı bir derste ele alınır.

Kural sütunu bir karşılaştırma daha verir: eşik 0,50’de model süzgeci dolayli_yonerge dışında her sınıfta ve toplamda kural süzgecinin altındadır (0,7097’ye karşı 0,7957). Daha yüksek kesinlik daha iyi savunma demek değildir; iki sayı ayrı yönlere gider ve hangisinin seçileceği bir ölçüm değil bir karardır.

Doğru soru “hangisi daha iyi” değil “hangi eşikte hangisi baskın”dır. Kural süzgecinin üçlüsü 0,7629 / 0,7957 / 0,1565. Model süzgecinin üçünde birden onu geçtiği tek nokta 0,40’tır: 0,7938 / 0,8280 / 0,1361. Böyle bir nokta bulunması zorunlu değildir; başka bir kümede hiçbir eşikte baskın olmaması da olağandır.

İkinci koşum tablosu bandı iki eksende birden verir; adim sütunları farkı kümenin adımına böler. Eşik 0,40 ve 0,60’ta duyarlılık iki koşumda tamamen aynı çıkıyor, ama aynı eşiklerde 13 ve 9 kaydın kararı değişiyor: toplam durur, tek tek kayıtlar durmaz. Duyarlılıkta 0,30 bir adım, 0,50 ile 0,80 üç adım oynuyor; yanlış engellemede 0,40 bir adım, 0,60 üç adım. Bir adımlık oynamalar bandın tam üstündedir ve bulgu sayılmaz; üç adımlık farklar ölçülebilir ama bir eşik seçimini taşımaz. İki eksenin sonucu aynıdır: bu kümede eşiği ondalık hassasiyetle seçmek anlamsızdır.

Özet

  • Eşik bir savunma değil bir takas noktasıdır: yükseldikçe kesinlik 0,7568’den 0,9787’e çıkar, duyarlılık 0,9032’den 0,4946’ya iner, yanlış engelleme payı 0,1837’den 0,0068’e düşer.
  • Eşiği yükseltmenin değişim oranı 0,50’ye kadar bire birdir; üstünde serbest kalan her temiz kayıt 2,33 ve 3,25 zararlıya mal olur.
  • Atlatmaya en açık bölge 0,50’nin üstüdür ve hiçbir gösterge kötüleşmeden açılır; en pahalı olduğu yer yanlış alarmın zaten en az olduğu yerdir (0,60’ta 5 kayıt, 0,0340).
  • Sınıf başına duyarlılık ortalamanın gizlediğini açar: eşik 0,50’de dolaylı yönerge 0,9583, bozulmuş girdi 0,2105; ilk çöken sınıf bozulmuş girdidir ve kural süzgeci de orada zayıftır.
  • Süpürmenin hiçbir basamağı çözünürlüğün altında değildir (en küçük fark duyarlılıkta 7, yanlış engellemede 3 adım); dört adımın tamamı gerçek bir ölçümdür.
  • İkinci koşumda 0,40 ve 0,60’ta duyarlılık aynı kalır ama 13 ve 9 kaydın kararı değişir; bir adımlık oynamalar bandın tam üstünde olduğu için bulgu sayılmaz.

Sonraki Adım

Bu iki derste savunmanın ölçüsü hep aynı soruya bağlıydı: kayıt durduruldu mu, durdurulmadı mı. Kimi zararın ise durdurmayla ilgisi yoktur. Bir kayıt geçtiğinde kaybedilen şey bazen bir eylem değil bir bilgidir: sistem yönergesinin kendisi, bir abonenin kimliği ya da bir erişim dizgesi. Orada savunma da başkalaşır — engellemek yerine alanı çıkarmak, yani maskeleme. Sonraki ders yalnız sayar: gizli alan adı taşıyan kaç kayıt var, maskeleme kaçından alanı çıkarıyor, süzgeç kaçını yakalıyor ve geriye hiçbirinin yakalamadığı kaç kayıt kalıyor.

İ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