Ders 13 / 14
Sıfır Güven Ağ Modeli
Konum ölçütü kural dizisinden silindiğinde bir kural örtük evete dönüşür, üç kural gölgelenir ve fazla geçen sıfırdan on sekize çıkar; yerine kimlik ölçütü konduğunda kural sayısı yediden ona, belge koşulu eklendiğinde fazla duran birden dörde çıkar.
İçindekiler
Uçtan uca tünelin bütün numarası, dışarıdaki bir ucu kural dizisine içeriden gelmiş gibi
göstermekti. O numaranın zorunlu olmasının nedeni tek bir satırdaydı: kural dizisi kaynak
ölçütünü okuyor ve okuyacak bir bölge bekliyor. Tünel bir bölge uyduruyor, çünkü dizinin
sorduğu soru “nereden geliyorsun” idi.
Sıfır güven (zero trust) bu soruyu bırakmayı önerir. İlkenin kendisi Siber Güvenlik
müfredatında kuruldu ve burada tekrarlanmaz. Bu dersin sorusu ilke değil, cerrahidir:
kaynak ölçütü kural dizisinden çıkarıldığında dizide ne kalır, kaç kural gölgelenir, iki
yönlü hata nasıl değişir ve boşalan yere ne konmak zorundadır.
Konum Ölçütü Neyi Temsil Ediyordu
Kursun dar kural kümesi yedi kuraldan oluşur ve yedisi de kaynak ölçütünü taşır. Ölçüt
akışın hangi bölgeden geldiğini söyler ve bölge, kural yazan kişi için bir kısaltmadır:
“iç bölütteki bir makine” ile “kurumun çalışanı” aynı şey sayılmıştır.
Bu kısaltmanın bir bedeli yoktur — kısaltma doğru olduğu sürece. Kablonun ucundaki makine gerçekten çalışanın makinesiyse, konum kimliğin yerine geçer ve dizi doğru karar verir. Bir önceki dersin uçtan uca tüneli tam olarak bu kısaltmayı ayakta tutmak için vardı: uzak ucun bir bölgesi yoktu, tünel ona bir bölge atadı ve kısaltma yeniden çalışır oldu.
Sıfır güvenin iddiası kısaltmanın artık taşımadığıdır. Bu dersin ölçtüğü şey iddianın doğru olup olmadığı değil — kısaltmayı kaldırmanın kural dizisine ne yaptığıdır.
Ölçütü Silmek
Silme işlemi mekaniktir: her kuralın ölçüt sözlüğünden kaynak anahtarı çıkarılır. Kural
sayısı değişmez, eylemler değişmez, sıra değişmez.
# ogretilen dokum , calistirilmamistir konum ölçütlü dizi konum ölçütü silinmiş dizi 1 izin kaynak=dis hedef=dmz bn=80 1 izin hedef=dmz bn=80 2 izin kaynak=dis hedef=dmz bn=443 2 izin hedef=dmz bn=443 3 izin kaynak=dmz hedef=ic bn=3306 3 izin hedef=ic bn=3306 4 izin kaynak=yonetim 4 izin (ölçüt kalmadı) 5 izin kaynak=ic hedef=dmz 5 izin hedef=dmz 6 izin kaynak=ic hedef=dis 6 izin hedef=dis 7 izin kaynak=ic hedef=ic 7 izin hedef=ic (sonda örtük ret) (sonda örtük ret)
Dördüncü kural sorunun tamamını taşır. Konum ölçütlü hâlinde tek ölçütü vardı ve o ölçüt
kaynak idi; silindiğinde geriye hiçbir ölçüt kalmaz. Ölçütsüz bir kural her akışla
eşleşir: “ilk eşleşen kazanır” kuralı gereği dördüncü satır artık bir örtük evettir ve
kendisinden sonraki üç kuralı gölgeler. Örtük ret ise hiç sıra bulamaz.
Yerine Ne Konur
Konum ölçütü, akışın kim adına açıldığını dolaylı olarak söylüyordu. Kaldırıldığında
yerine doğrudan söyleyen bir ölçüt konmalıdır. Bu ölçüt akışın kendisiyle gelir ve kabloya
bağlı değildir; dersin kurgusunda adı kimlik, aldığı değerler konuk, calisan, hizmet
ve yonetici sınıflarıdır.
İkinci bir alan zorunludur: belge. Kimlik bir bildirimdir ve bildirimi doğrulayan bir
şeyin bulunması gerekir. Belgesi bulunmayan bir akışın kimliği bilinmiyor sayılır ve dizi
onu örtük rete düşürür. Bu, sıfır güvenin “doğrula, varsayma” cümlesinin kural dizisindeki
karşılığıdır — ve bedeli ölçülecektir.
Kimlik ölçütlü dizi, konum ölçütlü diziden daha uzundur. Nedeni dördüncü kuraldır:
kaynak=yonetim tek satırda bütün hedefleri açıyordu, çünkü bölge zaten bir güven
bildirimiydi. Kimlik tarafında böyle bir bildirim yoktur; yonetici kimliğinin gideceği
her hedef ayrı yazılır ve bir kural dörde çıkar.
Ölçümün varsayımları:
- AG57 — Kırk akış kursun ortak kurgusundan üretilir. Kâhin
politikaişlevidir ve bu derste değiştirilmez; niyet kursun sabitidir. - AG58 —
politikakonum diliyle yazılmıştır. Kimlik ölçütlü bir diziyi bu kâhine göre ölçmek, iki dilin ayrıldığı akışları saymaktır; ölçüm kimliğin doğruluğunu değil, değişimin büyüklüğünü verir. - AG59 — Her akışa bir kimlik sınıfı eklenir. Akışların çoğunda kimlik bölgeyle eşleşir; kurgu bir azınlığı bilerek ayırır, çünkü kimlik kabloya bağlı değildir.
- AG60 — Her akışa bir
belgedurumu eklenir. Kurgu bir azınlığı belgesiz bırakır; belge alanı akışın kimlik bildiriminin doğrulanabildiğini söyler, bildirimin içeriğini değil. - AG61 — Dört dizi karşılaştırılır: konum ölçütlü, konum ölçütü silinmiş, kimlik ölçütlü, kimlik ve belge koşullu. Değerlendirme düzeneği dördünde de aynıdır: ilk eşleşen kazanır, sonda örtük ret durur.
- AG62 — Gölgelenen kural sayısı, kendinden önceki bir kuralın ölçütünü tümüyle kapsadığı kural sayısıdır; ölçüt kümesi boşalan bir kural, sonrasındaki her kuralı gölgeler.
- AG63 — Küme kırk akıştır; ölçülebilen en küçük fark
1/40 = 0,025.
Ölçüm
"""Konum olcutunu kural dizisinden cikarmanin etkisi. Bolum 1 - kaynak olcutlu dizi, olcut silinmis dizi, kimlik olcutlu dizi. Bolum 2 - silinen olcutun kural dizisinde biraktigi bosluk. """ TOHUM = 20260811 BOLGELER = ("dis", "dmz", "ic", "yonetim") KIMLIKLER = ("konuk", "calisan", "hizmet", "yonetici") ESLEME = {"dis": "konuk", "dmz": "hizmet", "ic": "calisan", "yonetim": "yonetici"} def uretec(tohum): d = tohum % 2147483646 + 1 def r(n): nonlocal d d = (d * 48271) % 2147483647 return d % n return r def akislar(sayi=40, tohum=TOHUM): r, liste = uretec(tohum), [] for i in range(sayi): liste.append({"no": i + 1, "kaynak": BOLGELER[r(4)], "hedef": BOLGELER[r(4)], "bnokta": (80, 443, 22, 3306, 8080)[r(5)]}) return liste def kimlikle(liste, tohum=TOHUM + 6): """Her akisa bir kimlik sinifi ve bir belge durumu ekler.""" r, cikti = uretec(tohum), [] for a in liste: ayrik, aday = r(9) == 0, KIMLIKLER[r(4)] cikti.append({**a, "kimlik": aday if ayrik else ESLEME[a["kaynak"]], "belge": r(8) != 0}) return cikti def politika(a): """Niyet: disaridan yalniz DMZ web kalemine; yonetime disaridan kimse.""" if a["kaynak"] == "dis": return a["hedef"] == "dmz" and a["bnokta"] in (80, 443) if a["kaynak"] == "dmz": return a["hedef"] == "ic" and a["bnokta"] == 3306 if a["kaynak"] == "yonetim": return True return a["hedef"] != "yonetim" def fark(olaylar, niyet, duzenek): d = {"dogru_gecti": 0, "dogru_durdu": 0, "yanlis_gecti": 0, "yanlis_durdu": 0} for o in olaylar: n, g = niyet(o), duzenek(o) if n and g: d["dogru_gecti"] += 1 elif not n and not g: d["dogru_durdu"] += 1 elif g: d["yanlis_gecti"] += 1 else: d["yanlis_durdu"] += 1 return d def kural_dizisi(kurallar): """Ilk eslesen kazanir; sonda ortuk ret.""" def calis(a): for eylem, olcut in kurallar: if all(a[k] == v for k, v in olcut.items()): return eylem return False return calis def golgelenen(kurallar): sayi = 0 for i, (_, olcut) in enumerate(kurallar): for _, onceki in kurallar[:i]: if all(olcut.get(k) == v for k, v in onceki.items()): sayi += 1 break return sayi DAR = [(True, {"kaynak": "dis", "hedef": "dmz", "bnokta": 80}), (True, {"kaynak": "dis", "hedef": "dmz", "bnokta": 443}), (True, {"kaynak": "dmz", "hedef": "ic", "bnokta": 3306}), (True, {"kaynak": "yonetim"}), (True, {"kaynak": "ic", "hedef": "dmz"}), (True, {"kaynak": "ic", "hedef": "dis"}), (True, {"kaynak": "ic", "hedef": "ic"})] SILINMIS = [(e, {k: v for k, v in o.items() if k != "kaynak"}) for e, o in DAR] KIMLIK = [(True, {"kimlik": "konuk", "hedef": "dmz", "bnokta": 80}), (True, {"kimlik": "konuk", "hedef": "dmz", "bnokta": 443}), (True, {"kimlik": "hizmet", "hedef": "ic", "bnokta": 3306}), (True, {"kimlik": "yonetici", "hedef": "dis"}), (True, {"kimlik": "yonetici", "hedef": "dmz"}), (True, {"kimlik": "yonetici", "hedef": "ic"}), (True, {"kimlik": "yonetici", "hedef": "yonetim"}), (True, {"kimlik": "calisan", "hedef": "dmz"}), (True, {"kimlik": "calisan", "hedef": "dis"}), (True, {"kimlik": "calisan", "hedef": "ic"})] def belge_kosullu(kurallar): """Belgesiz akis ortuk rete duser.""" ic = kural_dizisi(kurallar) return lambda a: a["belge"] and ic(a) ak = kimlikle(akislar()) print(f"akış {len(ak)} | niyetin geçirdiği {sum(1 for a in ak if politika(a))} " f"| kimliği konumdan ayrık " f"{sum(1 for a in ak if a['kimlik'] != ESLEME[a['kaynak']])} | belgesiz " f"{sum(1 for a in ak if not a['belge'])}") print() print(f"{'kural dizisi':<24s} {'kural':>5s} {'gölgelenen':>10s} {'doğru':>6s} " f"{'fazla geçen':>12s} {'fazla duran':>12s}") for ad, kurallar, duzenek in ( ("konum ölçütlü", DAR, kural_dizisi(DAR)), ("konum ölçütü silinmiş", SILINMIS, kural_dizisi(SILINMIS)), ("kimlik ölçütlü", KIMLIK, kural_dizisi(KIMLIK)), ("kimlik ve belge koşullu", KIMLIK, belge_kosullu(KIMLIK))): d = fark(ak, politika, duzenek) print(f"{ad:<24s} {len(kurallar):5d} {golgelenen(kurallar):10d} " f"{d['dogru_gecti'] + d['dogru_durdu']:6d} {d['yanlis_gecti']:12d} " f"{d['yanlis_durdu']:12d}") print() print("konum ölçütü silinmiş dizinin ölçütleri:") for i, (_, o) in enumerate(SILINMIS): print(f" {i + 1}. {o if o else '(ölçüt kalmadı)'}") print() print("kimliği konumdan ayrık akışlar (no, konum, kimlik, hedef, niyet, kimlik dizisi):") for a in ak: if a["kimlik"] != ESLEME[a["kaynak"]]: print(f" {a['no']:2d} {a['kaynak']:8s} {a['kimlik']:9s} {a['hedef']:8s} " f"{str(politika(a)):5s} {str(kural_dizisi(KIMLIK)(a)):5s}") print("belgesiz akışlarda niyetin geçirdiği:", sum(1 for a in ak if not a["belge"] and politika(a)))
akış 40 | niyetin geçirdiği 22 | kimliği konumdan ayrık 2 | belgesiz 5
kural dizisi kural gölgelenen doğru fazla geçen fazla duran
konum ölçütlü 7 0 40 0 0
konum ölçütü silinmiş 7 3 22 18 0
kimlik ölçütlü 10 0 38 1 1
kimlik ve belge koşullu 10 0 35 1 4
konum ölçütü silinmiş dizinin ölçütleri:
1. {'hedef': 'dmz', 'bnokta': 80}
2. {'hedef': 'dmz', 'bnokta': 443}
3. {'hedef': 'ic', 'bnokta': 3306}
4. (ölçüt kalmadı)
5. {'hedef': 'dmz'}
6. {'hedef': 'dis'}
7. {'hedef': 'ic'}
kimliği konumdan ayrık akışlar (no, konum, kimlik, hedef, niyet, kimlik dizisi):
34 dis yonetici dis False True
40 ic hizmet dis True False
belgesiz akışlarda niyetin geçirdiği: 3
Silmenin Bedeli
İkinci satır dersin en sert sayısını taşıyor. Kural sayısı 7‘de kaldı, tek bir kural
eklenmedi, tek bir kural çıkarılmadı — ve dizi **40 doğrudan 22’ye** düştü. Fazla geçen
0’dan 18’e çıktı; kırk akışın on sekizi, niyetin durduracağı hâlde geçti. Bu, kırk
akışlık kümede 0,450’lik bir paydır ve ölçüm bandının on sekiz katıdır.
Fazla duran ise 0’da kaldı ve bu bir iyi haber değil, aynı kusurun öbür yüzüdür. Dördüncü kural her akışla eşleştiği için hiçbir akış örtük rete ulaşamıyor; dizi artık “durdur” diyebileceği bir yol taşımıyor. Tek yönü sayan bir denetim bu diziyi kusursuz görürdü — fazla duran sıfır, hiçbir kullanıcı şikâyeti yok.
Gölgelenen kural sayısı 3’tür ve nedenini alt döküm veriyor: dördüncü satırın ölçüt kümesi boştur, boş küme her ölçüt kümesini kapsar, dolayısıyla beşinci, altıncı ve yedinci kurallar hiç değerlendirilmez. Kural gölgelemesi burada bir yazım hatasından değil, bir alanın kaldırılmasından doğuyor.
Örüntü şudur: konum ölçütü tek başına bir kuralın taşıyıcısı olabilir. Öyle bir kuraldan silindiğinde geriye kural kalmaz, evet kalır. Kural sayısı bunu göstermez — dizi hâlâ yedi satırdır. Kural saymanın politikayı ölçmediğini kurs erişim denetim listelerinde söylemişti; burada aynı cümlenin daha keskin bir hâli görünüyor: ölçüt saymak da politikayı ölçmez.
Kimlik Ölçütünün İki Yönü
Üçüncü satır kimlik ölçütlü diziyi veriyor: 10 kural, 0 gölgelenen, 38 doğru, 1 fazla geçen, 1 fazla duran. Kural sayısı yediden ona çıktı ve bu artışın tamamı dördüncü kuraldan geliyor — bölgenin taşıdığı örtük güven bildirimi, kimlik tarafında dört ayrı satır olarak yazılmak zorunda kaldı. Konum ölçütünü kaldırmanın kural maliyeti budur.
İki hata kırk akışın hangilerinde doğduğu bilinerek okunabilir; alt döküm ikisini de
gösteriyor. Otuz dördüncü akış dış bölgeden geliyor ama yonetici kimliği taşıyor: niyet
onu durduracaktı, kimlik dizisi geçirdi — fazla geçen. Kırkıncı akış iç bölütten geliyor
ama hizmet kimliği taşıyor: niyet onu geçirecekti, kimlik dizisi durdurdu — fazla
duran.
Bu iki sayı bir kusur değil, iki dilin ayrıldığı yerin ölçüsüdür. Kâhin konum diliyle
yazılmıştır; kimlik ölçütlü dizi başka bir dille yazılmıştır ve iki dil kırk akışın
otuz sekizinde aynı şeyi söylüyor, ikisinde ayrılıyor. Ayrıldıkları akışlar, konum
kısaltmasının zaten yanlış olduğu akışlardır. Ölçüm bu yüzden “kimlik yanlış karar verdi”
demez; niyetin kendisinin yeniden yazılması gereken akış sayısını verir ve bu sayı
2/40 = 0,050’dir.
Buradan çıkan kural nettir: ölçütü değiştirmek kuralı değil, politikayı değiştirmektir. Konum diliyle yazılmış bir niyeti kimlik diliyle yazılmış bir diziyle uygulamaya çalışmak, iki dilin ayrıldığı her akışta bir hata üretir. Sıfır güvene geçiş bir kural dizisi düzenlemesi değil, niyetin yeniden yazılmasıdır.
Belge Koşulunun Bedeli
Dördüncü satır tek bir koşul ekliyor: belgesiz akış örtük rete düşer. Fazla geçen 1’de kalıyor — belge koşulu bu yönü hiç değiştirmiyor, çünkü otuz dördüncü akışın belgesi vardır ve kimliği geçerlidir. Fazla duran ise 1’den 4’e çıkıyor.
Üç akışlık artışın kaynağı alt satırda: kırk akışın 5’i belgesizdir ve bunların
3’ünü niyet geçirecekti. Doğru sayısı 38’den 35’e iniyor. Bu, 3/40 = 0,075’lik
bir paydır ve bandın üç katıdır; ölçülebilir bir maliyettir.
İki yön burada birbirine karışmıyor ve karışmaması dersin sonucudur. Belge koşulu yalnız fazla duranı büyütür. Doğrulamayı zorunlu kılmak, doğrulanamayanı geçirmemek demektir ve doğrulanamayanların bir bölümü her zaman meşrudur. Belge kapsamasını genişletmek bu üç akışı geri kazandırır; kapsamayı gevşetmek, yani belgesiz akışı konuma bakarak geçirmek ise silinen ölçütü arka kapıdan geri getirir ve ikinci satırın hatasını kısmen geri çağırır.
Özet
- Konum ölçütü kural dizisinde kimliğin kısaltmasıydı; kısaltma doğru olduğu sürece bedeli yoktur ve dar küme kırk akışta 40 doğru, 0 fazla geçen, 0 fazla duran verir.
- Ölçüt mekanik olarak silindiğinde kural sayısı 7’de kalır ama tek ölçütü
kaynakolan kural bir örtük evete dönüşür: 3 kural gölgelenir, doğru 22’ye iner, fazla geçen 18 olur ve fazla duran 0’da kalır — tek yönü sayan bir denetim bu diziyi kusursuz görürdü. - Yerine kimlik ölçütü konduğunda kural sayısı 7’den 10’a çıkar; artışın tamamı, bölgenin taşıdığı örtük güven bildiriminin dört ayrı satır olarak yazılmasından gelir.
- Kimlik ölçütlü dizi 38 doğru, 1 fazla geçen, 1 fazla duran verir; iki hata kimlikle konumun ayrıldığı iki akıştır ve niyetin yeniden yazılması gereken akış sayısını ölçer, kimliğin yanlışlığını değil.
- Belge koşulu yalnız bir yönü büyütür: fazla duran 1’den 4’e çıkar, çünkü belgesiz 5 akışın 3’ünü niyet geçirecekti. Doğrulamayı zorunlu kılmanın bedeli budur.
Sonraki Adım
Kurs boyunca altı denetim kuruldu: kablosuz tarafta kuşak ve kapsama, güvenlik tarafında bölütleme, kural dizisi, tespit, tünel ve konumdan kimliğe geçen ölçüt. Her biri kendi sınırını iki yönde birden ölçtü. Geriye tek bir soru kaldı ve kursun son dersi onu sorar: bu altı denetim birlikte açıldığında, ağ saldırılarının hangi sınıfı gerçekten kapanır, kapanmayan kaç sınıf kalır ve kapanmayanlar için elde ne var?
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.