Ders 09 / 14
Erişim Denetim Listeleri
Aynı kırk akışta dört kural kümesi: yedi kurallık dar küme 40/40 doğru, altı kurallık geniş küme 2 akış fazladan geçirir, sekiz kurallık bozuk sıralı küme de 2 geçirir ve 1 kuralı gölgeler, yedi kurallık sıkılaştırılmış küme ise sızıntıyı sıfırlarken 2 akışı fazladan durdurur.
İçindekiler
Önceki ders diziyi sabit tuttu ve onu işleten düzeneği değiştirdi. Durum bilgili düzenek yedi kuralla kırk akışın kırkında niyetle aynı kararı verdi — ama o yedi kuralın doğru yedi kural olduğunu hiçbir yerde göstermedik. Kabul edilmişti.
Bu ders bunun tersini yapar: düzenek sabittir, değişen şey dizinin kendisidir. Bir erişim denetim listesi (access control list) sıralı bir (eylem, ölçüt) çiftleri dizisidir; ölçüt, yazılan alanların hepsinin birden tutmasını ister ve yazılmayan alan her değeri karşılar. Sorusu şudur: bir kural kümesinin niyeti ne kadar karşıladığını, kümeye bakarak söyleyebilir miyiz?
Diziyi Anlam Yapan İki Şey
Değerlendirme sırası (evaluation order) ölçütün kendisi kadar belirleyicidir. Akış diziye baştan girer, ilk eşleşen kuralın eylemi uygulanır, dizi orada biter. Aynı kuralları başka bir sırayla dizmek başka bir sınır çizer.
Örtük ret (implicit deny) dizinin bittiği yerde durur ve yazılmaz. Bu dersteki dört kümenin de bütün kuralları geçir eylemlidir; durduran tek şey örtük rettir. Bunun bir ölçüm sonucu vardır: durdurulan her akış tek bir yerden, adı olmayan bir yerden durdurulur.
Siber Güvenlik müfredatının Çevre Savunması konusu erişim denetim listelerinin yazımını öğretti — hangi alanın nereye geldiğini, listenin nasıl kurulduğunu. O yazım burada tekrarlanmaz. Ölçülen şey listenin yazımı değil, sıralı bir dizinin kendi semantiğidir: dizi niyetten iki yönde birden nerede ayrılıyor.
Önceki dersin yedi kurallık dar kümesinin yanına üç küme daha konur.
# ogretilen kural dokumu , calistirilmamistir # sozdizimi kurgudur ve hicbir cihazin bicimi degildir genisletilmis (6) : dar kumenin ilk iki kurali tek kurala indirildi 1 gecir dis dmz * <- 80 ve 443 yerine her bnokta 2..6 = dar kumenin 3..7. kurallari sirasi bozuk (8) : dar kumenin basina bir kural eklendi 1 gecir dmz * * <- yeni , dizinin en basinda 2..8 = dar kumenin 1..7. kurallari sikilastirilmis (7) : dar kumenin 6. kurali daraltildi 6 gecir ic dis 443 <- her bnokta yerine yalniz 443
Kural Gölgelemesi
Üçüncü kümedeki değişiklik bir kuralı erişilemez kılar. dmz kaynaklı her akışı
geçiren bir kural dizinin başına konduğunda, aşağıdaki “yalnız dmzden ice 3306” kuralına
hiçbir akış ulaşamaz — çünkü ona ulaşabilecek her akış yukarıda zaten eşleşmiştir. Buna
kural gölgelemesi (rule shadowing) denir.
Tanım durağandır: bir kural, kendinden önceki bir kuralın ölçütünü tümüyle içeriyorsa gölgelenmiştir. Bu, trafiğe bakılmadan, yalnız diziye bakılarak söylenebilir. Ayrımın neden önemli olduğu ölçümden sonra görülecek.
Ölçümün varsayımları:
- AG8 — Kırk akış ortak kurgudan değiştirilmeden alınır; kaynağı, hedefi ve bağlantı noktası kurgudandır. Kâhin niyetin kendisidir ve kurguyu biz yazdığımız için bilinir.
- AG9 — Dört küme de aynı düzenekte işletilir: ilk eşleşen kazanır, dizi örtük retle biter, akışların hepsi yeni bağlantı sayılır. Önceki dersin evre ayrımı burada yoktur.
- AG10 — Bir kuralın yazmadığı ölçüt her değeri karşılar; yazılan ölçütlerin ise hepsi birden tutmalıdır.
- AG11 — Dört kümenin kuralları da geçir eylemlidir. Durduran tek şey örtük rettir; böylece fazla duranın kaynağı tek bir yerde toplanır.
- AG12 — Kural gölgelemesi durağan tanımlanır ve trafiğe bakmaz; eşleşme sayacı ise yalnız trafiğe bakar. İkisi ayrı ölçülür.
- AG13 — Eşleşme sayacı dizinin kesildiği yeri sayar: akış eşleştiği ilk kuralda durur, sonraki kurallara hiç girmez.
- AG14 — Kırk olaylık kümede ölçülebilen en küçük fark 1/40 = 0,025’tir.
Ölçüm
"""Erisim denetim listeleri: kural sayisi, degerlendirme sirasi, golgeleme. Bolum 1 - dort kume ayni kirk akista. Bolum 2 - hangi kural kac akis esledi, ortuk rete kac akis dustu. """ TOHUM = 20260811 BOLGELER = ("dis", "dmz", "ic", "yonetim") NOKTALAR = (80, 443, 22, 3306, 8080) 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": NOKTALAR[r(5)]}) return liste def politika(a): """Niyet: disaridan yalniz DMZ'nin 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 golgeli(kurallar): """Kendinden onceki bir kuralin tumuyle kapsadigi kurallarin sirasi.""" liste = [] for i, (_, olcut) in enumerate(kurallar): for _, onceki in kurallar[:i]: if all(olcut.get(k) == v for k, v in onceki.items()): liste.append(i) break return liste def golgelenen(kurallar): return len(golgeli(kurallar)) def izle(kurallar, ak): """Her kuralin esledigi akis sayisi ve ortuk rete dusen akis sayisi.""" sayac, ortuk = [0] * len(kurallar), 0 for a in ak: for i, (_, olcut) in enumerate(kurallar): if all(a[k] == v for k, v in olcut.items()): sayac[i] += 1 break else: ortuk += 1 return sayac, ortuk 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"})] GENIS = [(True, {"kaynak": "dis", "hedef": "dmz"})] + DAR[2:] SIRASI_BOZUK = [(True, {"kaynak": "dmz"})] + DAR SIKI = DAR[:5] + [(True, {"kaynak": "ic", "hedef": "dis", "bnokta": 443})] + DAR[6:] KUMELER = (("dar", DAR), ("genişletilmiş", GENIS), ("sırası bozuk", SIRASI_BOZUK), ("sıkılaştırılmış", SIKI)) AK = akislar() print(f"akış {len(AK)} | niyetin geçirdiği {sum(1 for a in AK if politika(a))} " f"| niyetin durdurduğu {sum(1 for a in AK if not politika(a))}") print() print(f"{'kural kümesi':<16s} {'kural':>5s} {'gölgelenen':>10s} {'örtük ret':>9s} " f"{'doğru':>5s} {'fazla geçen':>11s} {'fazla duran':>11s}") for ad, k in KUMELER: d = fark(AK, politika, kural_dizisi(k)) _, ortuk = izle(k, AK) print(f"{ad:<16s} {len(k):5d} {golgelenen(k):10d} {ortuk:9d} " f"{d['dogru_gecti'] + d['dogru_durdu']:5d} {d['yanlis_gecti']:11d} " f"{d['yanlis_durdu']:11d}") print() print("dar kümede kural başına eşleşme:", izle(DAR, AK)[0]) print("sırası bozuk kümede kural başına eşleşme:") sayac, ortuk = izle(SIRASI_BOZUK, AK) golge = golgeli(SIRASI_BOZUK) for i, ((_, olcut), n) in enumerate(zip(SIRASI_BOZUK, sayac)): print(f" {i + 1}. {str(olcut):<48s} {n:3d}" f" {'gölgelenmiş' if i in golge else ''}".rstrip()) print(f" örtük ret{'':42s} {ortuk:3d}") print() for ad, k in KUMELER[1:]: d = kural_dizisi(k) print(f"{ad}: fazla geçen", [(a["no"], a["kaynak"], a["hedef"], a["bnokta"]) for a in AK if d(a) and not politika(a)], "| fazla duran", [(a["no"], a["kaynak"], a["hedef"], a["bnokta"]) for a in AK if politika(a) and not d(a)])
akış 40 | niyetin geçirdiği 22 | niyetin durdurduğu 18
kural kümesi kural gölgelenen örtük ret doğru fazla geçen fazla duran
dar 7 0 18 40 0 0
genişletilmiş 6 0 16 38 2 0
sırası bozuk 8 1 16 38 2 0
sıkılaştırılmış 7 0 20 38 0 2
dar kümede kural başına eşleşme: [0, 1, 0, 11, 4, 3, 3]
sırası bozuk kümede kural başına eşleşme:
1. {'kaynak': 'dmz'} 2
2. {'kaynak': 'dis', 'hedef': 'dmz', 'bnokta': 80} 0
3. {'kaynak': 'dis', 'hedef': 'dmz', 'bnokta': 443} 1
4. {'kaynak': 'dmz', 'hedef': 'ic', 'bnokta': 3306} 0 gölgelenmiş
5. {'kaynak': 'yonetim'} 11
6. {'kaynak': 'ic', 'hedef': 'dmz'} 4
7. {'kaynak': 'ic', 'hedef': 'dis'} 3
8. {'kaynak': 'ic', 'hedef': 'ic'} 3
örtük ret 16
genişletilmiş: fazla geçen [(3, 'dis', 'dmz', 3306), (18, 'dis', 'dmz', 8080)] | fazla duran []
sırası bozuk: fazla geçen [(23, 'dmz', 'yonetim', 8080), (39, 'dmz', 'yonetim', 8080)] | fazla duran []
sıkılaştırılmış: fazla geçen [] | fazla duran [(30, 'ic', 'dis', 3306), (35, 'ic', 'dis', 3306)]
Kural Saymak Politika Ölçmez
Dört satırı kural sayısına göre okursak sıra şudur: 6, 7, 7, 8. Doğru sayısına göre okursak sıra şudur: 38, 40, 38, 38. İki sıralama arasında bir bağ yok.
Yedi kural iki kez yazıldı ve iki ayrı sonuç verdi. Dar küme 40/40 doğru; sıkılaştırılmış küme aynı kural sayısıyla 38. Sekiz kural yedi kuraldan iyi değil: sırası bozuk küme bir kural daha uzun ve 38’de kaldı. Altı kural yedi kuraldan sade değil: genişletilmiş küme bir kural kısa ve yine 38. Kümenin uzunluğu, niyetten sapmasına dair hiçbir şey söylemiyor.
Sapmanın yönü de kümeden okunamıyor. Üç kusurlu kümenin üçü de 38 doğru veriyor, ama:
Genişletilmiş küme 2 fazla geçen, 0 fazla duran. Bir kuralın bağlantı noktası alanı
silindi ve disten dmzye giden iki akış — biri 3306, biri 8080 — niyet onları
durduracakken geçti. Kural sayısı bir azaldı, açık yüzey iki akış büyüdü.
Sırası bozuk küme 2 fazla geçen, 0 fazla duran. Dizinin başına eklenen kural dmz
kaynaklı her şeyi geçiriyor; dmzden yönetim bölgesine giden iki akış böyle sızdı. Oysa
niyetin en kesin cümlesi buydu: yönetim bölgesine dışarıdan kimse.
Sıkılaştırılmış küme 0 fazla geçen, 2 fazla duran. Burada hiçbir sızıntı yok — kâğıt
üzerinde kusursuz. Bedeli öbür sütunda: icten dise giden iki akış, bağlantı noktaları
443 olmadığı için kesildi ve niyet ikisini de geçirecekti. Yalnız sızıntıyı sayan bir
denetim bu kümeyi dar kümeden ayırt edemez.
İkişer akış, kırklık bir kümede 0,050’lik paylardır; ölçülebilen en küçük fark 0,025 olduğuna göre ikisi de ölçüm bandının içindedir.
Sıfır Eşleşme İki Ayrı Şey Söyler
Alt tablo dizinin işleyişini kural kural gösteriyor. Sırası bozuk kümede iki kuralın
eşleşmesi 0: ikinci kural (dis dmz 80) ve dördüncü kural (dmz ic 3306). Sayaç ikisi
için de aynı şeyi yazıyor. Nedenleri aynı değil.
İkinci kural erişilebilir; kırk akışın içinde ona uyan akış yok. Trafik değişirse eşleşir. Dördüncü kural ise erişilemez: ona ulaşabilecek her akış birinci kuralda kesiliyor. Trafik ne olursa olsun eşleşmeyecek. Sayaç bu ikisini ayırt edemez; durağan tarama ayırt eder ve son sütunda yalnız dördüncüsünü işaretler. Dar kümede de üçüncü kuralın eşleşmesi 0’dır ve orada gölgelenen kural yoktur — aynı gözlem, başka neden.
Gölgelenen kuralın eylemi gölgeleyeninkinden başka olsaydı sonuç bu kadar sessiz olmazdı. Bu dersteki dört kümenin de bütün kuralları geçir eylemliydi (AG11). Karışık bir dizide, geniş bir geçir kuralının altında kalan bir durdur kuralı yazıldığı hâlde hiç uygulanmaz; dizi, yazarının kapattığını sandığı bir yolu açık tutar. Durağan tarama iki durumu da aynı biçimde işaretler — eylemleri karşılaştırmak taramanın işi değildir — ama işaretin ağırlığı aynı değildir: birinde yalnız okunabilirlik, öbüründe politikanın kendisi bozulur.
Gölgelenen kuralın kendisi bu ölçümde zarar vermiyor. Onu gölgeleyen kuralla aynı eylemi
taşıyor, dolayısıyla silinmesi kırk akışta hiçbir kararı değiştirmez. Zarar veren şey
gölgeleyen kuraldır ve zararı başka bir yerde ödenir: iki akışın yönetim bölgesine
sızmasında. Gölgelenen kural bir belirtidir, sızıntının kendisi değil. Belirtinin
söylediği şudur: diziyi okuyan biri “dmzden ice yalnız veri kalemi açık” satırını
görüp inanır, oysa iki satır yukarısı o bölgeyi zaten tümüyle açmıştır. Kural dizisi,
okunduğu gibi çalışmıyor.
Açık Kalan Yüzeyler ve Daraltmalar
Birinci yüzey — silinen ölçüt alanı. Genişletilmiş kümede bağlantı noktası alanının silinmesi bir kural kazandırdı ve iki akış sızdırdı. Daraltma: ölçütü yazmak. Bedeli tam olarak bir kuraldır ve karşılığında fazla geçen 2’den 0’a iner. Ölçüt alanı silinerek yapılan sadeleştirme, kural sayısını okuyan bir denetimde iyileşme gibi görünür.
İkinci yüzey — dizinin başına konan geniş kural. Bir bölgenin tümünü açan kural en başa konduğunda kendinden sonraki bütün daraltmaları etkisizleştirir. Daraltma: yerleştirmeyi ekleme sırasına değil ölçüt kapsamına göre yapmak — dar ölçütlü kurallar önce, geniş olanlar sonra — ve diziyi her değişiklikten sonra durağan taramadan geçirmek. Tarama bu kümede gölgelenen kuralı yakalıyor ve geniş kuralı işaret ediyor.
Üçüncü yüzey — örtük retin sessizliği. Sıkılaştırılmış kümede örtük ret 20 akış kesiyor; bunların 18’i niyetin de kestiği akışlar, 2’si fazla duran. İkisi de aynı yerden, adı olmayan bir yerden kesiliyor ve karşılarında bir kural adı yok. Daraltma: dizinin sonuna, eylemi durdur olan ve her ölçütü açık bırakan bir kural yazmak. Kararı değiştirmez — örtük ret zaten aynısını yapıyordu — ama durdurulan akışı sayılabilir kılar. Fazla duran ancak sayılabildiği yerde ölçülebilir.
Özet
- Bir erişim denetim listesinin anlamı ölçütlerinden değil, ölçütler ile değerlendirme sırasının birlikte kurduğu diziden gelir; dizi yazılmayan bir örtük retle biter.
- Aynı kırk akışta dar küme 7 kuralla 40/40 doğru verir; genişletilmiş küme 6 kuralla 2 fazla geçen, sırası bozuk küme 8 kuralla 2 fazla geçen ve 1 gölgelenen kural, sıkılaştırılmış küme 7 kuralla 2 fazla duran üretir.
- Kural sayısı ile niyetten sapma arasında bağ yoktur: yedi kural iki kez yazıldı, biri 40 biri 38 doğru verdi. Kural saymak politika ölçmez.
- Sapmanın yönü de kümeden okunmaz; üç kusurlu küme de 38 doğru verir ama ikisi fazladan geçirir, biri fazladan durdurur.
- Sıfır eşleşme iki ayrı nedenden gelir — kullanılmayan kural ile erişilemez kural — ve sayaç ikisini ayırt edemez; kural gölgelemesi ancak durağan taramayla görülür.
- Gölgelenen kural bir belirtidir; sızıntıyı üreten şey onu gölgeleyen geniş kuraldır.
Sonraki Adım
Bu dersteki bütün kurallar dört ad üzerine yazıldı: dis, dmz, ic, yonetim. Bu adlar
kurgudan geldi ve sorgulanmadı — sanki ağın bölgeleri verilmiş şeylermiş gibi. Oysa bölge
sayısı bir tasarım kararıdır: aynı ağ iki bölgeye de bölünebilir, altıya da. Sonraki ders
kuralları sabit bir niyetten türetip bölge grafiğini değiştirir ve iki şeyi birden ölçer:
bölge sayısı arttıkça kaç kural gerekiyor, ve bölgeleri birleştirmek ile bölmek niyetten
sapmayı hangi yönde kaydırıyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.