Ders 12 / 16
Kalıcılık Mekanizmaları
On kalıcılık noktası türü bir envanter olarak sayılır ve altı denetim dört uç sınıfı üzerinde koşturulur: hangi denetim kaç türü kapatıyor, kaçını yalnız görünür kılıyor, hangi denetim hangi uç sınıfında uygulanamıyor; dört sınıfın dördünde birden kapanan tür sayısı sıfır, hiçbir denetimin dokunmadığı tür bir ve kapatmanın bedeli 36 engellenen meşru kalem ile 52 elle onay kalemidir.
İçindekiler
Önceki ders koşumları ölçtü ve bir koşumun geçici olduğunu gösterdi: biter, arkasında yalnız bir kayıt bırakır. Kalıcı olan, o koşumun uçta yazdığı kalemdir. Konu bu yüzden başladığı yere döner — birinci derste türlerin kullandığı noktalar sayılmıştı, bu ders o noktaları uçtaki bir envanter olarak sayar ve üzerlerine altı denetim koşturur.
Ölçülen üç sütun kursun üç sütunudur. Kaç nokta türü var; her denetim kaçını kapatıyor, kaçını yalnız görünür kılıyor; kapatmanın meşru işe bedeli ne. Buna dördüncü bir ayrım ekleniyor: bir denetim her uç sınıfında uygulanamaz. Bu derste hiçbir kalıcılık kurma yöntemi yazılmadı; sayılan şey noktanın kendisi ve üzerindeki denetimdir.
- UK31. On nokta türü, meşru kalem sayıları, altı denetim ve uygulanabilirlikleri kurgusal
bölgesel ölçüm ağına aittir. Ölçülen şey
nodeile kurulan modeldir. - UK32. Bir denetimin bir nokta türü üzerindeki etkisi üç değerden biridir: kapatır, görünür kılar, dokunmaz. Kısmi kapatma modellenmedi; bu, kapalı sütununu olduğundan iyi gösterir.
- UK33. Uygulanabilirlik uç sınıfı düzeyindedir. Gerçekte aynı sınıftaki uçların bir kısmı denetimi taşımaz; sapma ölçümü önceki konunun konusuydu ve burada girdi olarak alınıyor.
- UK34. Bedel iki kalemle sayıldı: engellenen meşru kalem ve elle onaya düşen iş. Süregelen bakım yükü sayılmadı; sayılsaydı görünürlük veren denetimlerin bedeli büyürdü.
- UK35. Kapatan bir denetim aynı noktayı kayda da düşürebilir; modelde önce kapatma sayılır. İki sütun bu yüzden ayrıktır: bir tür ya kapalıdır ya yalnız görünürdür.
Envanter ve Altı Denetim
// envanter.mjs — kalicilik noktasi turleri, uc siniflari ve denetimlerin etkisi; model // nokta turu -> bir uctaki mesru kalem sayisi export const NOKTA = { 'acilis-girisi': 14, 'servis-tanimi': 63, 'zamanlanmis-gorev': 41, 'oturum-betigi': 6, 'yukleme-yolu-kancasi': 3, 'olay-aboneligi': 2, 'mesru-ikiliye-ilisme': 0, 'ortam-otomatik-calistirma': 1, 'uygulama-uzantisi': 27, 'onyukleme-girisi': 4, }; export const TUR = Object.keys(NOKTA); export const UC = { 'saha dizustu': 120, 'sube ucu': 240, 'toplayici': 60, 'merkez sunucu': 12 }; export const SINIF = Object.keys(UC); // denetim -> [etki haritasi, uygulanabildigi uc siniflari, engellenen mesru kalem, elle onaya dusen is] export const DENETIM = { 'yazma izni daraltma': [ { 'oturum-betigi': 'kapatir', 'uygulama-uzantisi': 'kapatir', 'acilis-girisi': 'kapatir' }, ['sube ucu', 'toplayici', 'merkez sunucu'], 8, 4], 'uygulama izin listesi': [ { 'acilis-girisi': 'kapatir', 'servis-tanimi': 'kapatir', 'zamanlanmis-gorev': 'kapatir', 'ortam-otomatik-calistirma': 'kapatir', 'oturum-betigi': 'gorunur' }, ['sube ucu', 'toplayici'], 22, 31], 'imzali kod zorunlulugu': [ { 'mesru-ikiliye-ilisme': 'kapatir', 'yukleme-yolu-kancasi': 'kapatir', 'uygulama-uzantisi': 'gorunur' }, ['saha dizustu', 'sube ucu', 'toplayici'], 6, 3], 'guvenli onyukleme zinciri': [ { 'onyukleme-girisi': 'kapatir' }, ['saha dizustu', 'sube ucu', 'merkez sunucu'], 0, 2], 'taban cizgisi karsilastirmasi': [ { 'acilis-girisi': 'gorunur', 'servis-tanimi': 'gorunur', 'zamanlanmis-gorev': 'gorunur', 'oturum-betigi': 'gorunur', 'yukleme-yolu-kancasi': 'gorunur', 'uygulama-uzantisi': 'gorunur', 'ortam-otomatik-calistirma': 'gorunur' }, ['saha dizustu', 'sube ucu', 'toplayici', 'merkez sunucu'], 0, 12], 'surec olusturma kaydi': [ { 'acilis-girisi': 'gorunur', 'servis-tanimi': 'gorunur', 'zamanlanmis-gorev': 'gorunur', 'oturum-betigi': 'gorunur' }, ['saha dizustu', 'sube ucu', 'toplayici', 'merkez sunucu'], 0, 0], }; export const AD = Object.keys(DENETIM); export const gecerli = (d, s) => DENETIM[d][1].includes(s); export function durum(tur, sinif) { const etkiler = AD.filter((d) => gecerli(d, sinif)).map((d) => DENETIM[d][0][tur]).filter(Boolean); return etkiler.includes('kapatir') ? 'kapali' : etkiler.includes('gorunur') ? 'gorunur' : 'karanlik'; } export const uc = (s) => UC[s]; export const TOPLAM_UC = Object.values(UC).reduce((a, b) => a + b, 0);
// kosum1.mjs — nokta turu envanteri ve her denetimin kapattigi / gorunur kildigi tur import { NOKTA, TUR, DENETIM, AD, SINIF, TOPLAM_UC } from './envanter.mjs'; const kalem = Object.values(NOKTA).reduce((a, b) => a + b, 0); console.log(`${TUR.length} kalicilik noktasi turu, uc basina ${kalem} mesru kalem, ${TOPLAM_UC} uc\n`); console.log(`${'nokta turu'.padEnd(26)} ${'mesru kalem'.padStart(11)} ${'kapatan denetim'.padStart(15)} ${'goren denetim'.padStart(13)}`); for (const t of TUR) { const k = AD.filter((d) => DENETIM[d][0][t] === 'kapatir'), g = AD.filter((d) => DENETIM[d][0][t] === 'gorunur'); console.log(`${t.padEnd(26)} ${String(NOKTA[t]).padStart(11)} ${String(k.length).padStart(15)} ${String(g.length).padStart(13)}`); } console.log(`\n${'denetim'.padEnd(30)} ${'kapatir'.padStart(7)} ${'gorunur kilar'.padStart(13)} ${'uc sinifi'.padStart(9)} ` + `${'engellenen kalem'.padStart(16)} ${'elle onay'.padStart(9)}`); for (const d of AD) { const e = DENETIM[d][0]; console.log(`${d.padEnd(30)} ${String(Object.values(e).filter((x) => x === 'kapatir').length).padStart(7)} ` + `${String(Object.values(e).filter((x) => x === 'gorunur').length).padStart(13)} ` + `${`${DENETIM[d][1].length}/${SINIF.length}`.padStart(9)} ${String(DENETIM[d][2]).padStart(16)} ${String(DENETIM[d][3]).padStart(9)}`); } const hic = TUR.filter((t) => !AD.some((d) => DENETIM[d][0][t])); console.log(`\nhicbir denetimin dokunmadigi nokta turu: ${hic.length}/${TUR.length} (${hic.join(', ') || '-'})`); console.log(`toplam engellenen mesru kalem: ${AD.reduce((a, d) => a + DENETIM[d][2], 0)}; ` + `elle onaya dusen is: ${AD.reduce((a, d) => a + DENETIM[d][3], 0)}`);
10 kalicilik noktasi turu, uc basina 161 mesru kalem, 432 uc nokta turu mesru kalem kapatan denetim goren denetim acilis-girisi 14 2 2 servis-tanimi 63 1 2 zamanlanmis-gorev 41 1 2 oturum-betigi 6 1 3 yukleme-yolu-kancasi 3 1 1 olay-aboneligi 2 0 0 mesru-ikiliye-ilisme 0 1 0 ortam-otomatik-calistirma 1 1 1 uygulama-uzantisi 27 1 2 onyukleme-girisi 4 1 0 denetim kapatir gorunur kilar uc sinifi engellenen kalem elle onay yazma izni daraltma 3 0 3/4 8 4 uygulama izin listesi 4 1 2/4 22 31 imzali kod zorunlulugu 2 1 3/4 6 3 guvenli onyukleme zinciri 1 0 3/4 0 2 taban cizgisi karsilastirmasi 0 7 4/4 0 12 surec olusturma kaydi 0 4 4/4 0 0 hicbir denetimin dokunmadigi nokta turu: 1/10 (olay-aboneligi) toplam engellenen mesru kalem: 36; elle onaya dusen is: 52
Alt tablo iki denetim ailesini kesin bir çizgiyle ayırıyor. Kapatan dört denetim toplam on nokta türü kapatıyor ve karşılığında otuz altı meşru kalem engelliyor. Görünürlük veren iki denetim hiçbir tür kapatmıyor, on bir tür görünür kılıyor ve tek bir meşru kalem engellemiyor. Bedelleri farklı yerdedir: kapatan denetimlerin bedeli engellenen kalemde, gören denetimlerinki elle onaya düşen işte — ve toplam elli iki kalemlik elle onay yükünün on ikisi tek bir görünürlük denetiminden geliyor.
Uygulanabilirlik sütunu üçüncü ayrımı veriyor ve kapatan denetimlerin hepsi burada zayıf. Dört uç sınıfının dördünde birden uygulanabilen iki denetim var ve ikisi de yalnız görünürlük veriyor. Kapatan denetimlerin hiçbiri dört sınıfın dördünde uygulanamıyor; en dar olan uygulama izin listesi yalnız ikisinde. Kapatmak ile yaymak arasında bir gerilim var: bir denetim ne kadar çok şey kapatıyorsa o kadar az uçta uygulanabiliyor.
Üst tablodaki iki satır ayrıca dikkat çekiyor. Kalıcı olay aboneliğine hiçbir denetim dokunmuyor — ne kapatan var ne gören. Önyükleme girişini bir denetim kapatıyor ama hiçbiri görmüyor: kapatmanın uygulanamadığı bir uçta o tür tamamen karanlıkta kalır. En kalabalık iki nokta türü olan servis tanımı ve zamanlanmış görev ise birer denetimle kapanıyor ve ikişer denetimle görünüyor.
Uç Sınıfına Göre Üç Sütun
// kosum2.mjs — uc sinifi basina kapali / yalniz gorunur / karanlik nokta turu sayimi import { TUR, NOKTA, SINIF, AD, DENETIM, durum, uc, TOPLAM_UC } from './envanter.mjs'; console.log(`${'nokta turu'.padEnd(26)} ${SINIF.map((s) => s.padStart(14)).join(' ')}`); for (const t of TUR) console.log(`${t.padEnd(26)} ${SINIF.map((s) => durum(t, s).padStart(14)).join(' ')}`); console.log(`\n${'uc sinifi'.padEnd(14)} ${'uc'.padStart(4)} ${'uygulanan denetim'.padStart(17)} ${'kapali'.padStart(6)} ` + `${'yalniz gorunur'.padStart(14)} ${'karanlik'.padStart(8)} ${'karanlik kalem'.padStart(14)}`); const say = (s, d) => TUR.filter((t) => durum(t, s) === d); for (const s of SINIF) console.log(`${s.padEnd(14)} ${String(uc(s)).padStart(4)} ${String(AD.filter((d) => DENETIM[d][1].includes(s)).length).padStart(17)} ` + `${String(say(s, 'kapali').length).padStart(6)} ${String(say(s, 'gorunur').length).padStart(14)} ` + `${String(say(s, 'karanlik').length).padStart(8)} ${String(say(s, 'karanlik').reduce((a, t) => a + NOKTA[t], 0)).padStart(14)}`); const agirlik = (d) => SINIF.reduce((a, s) => a + uc(s) * say(s, d).length, 0) / TOPLAM_UC; console.log(`${'filo ortalamasi'.padEnd(14)} ${String(TOPLAM_UC).padStart(4)} ${''.padStart(17)} ` + `${agirlik('kapali').toFixed(1).padStart(6)} ${agirlik('gorunur').toFixed(1).padStart(14)} ${agirlik('karanlik').toFixed(1).padStart(8)}`); const herYerde = TUR.filter((t) => SINIF.every((s) => durum(t, s) === 'kapali')); const hicKapali = TUR.filter((t) => SINIF.every((s) => durum(t, s) !== 'kapali')); console.log(`\ndort uc sinifinin dordunde de kapali nokta turu: ${herYerde.length}/${TUR.length} (${herYerde.join(', ') || '-'})`); console.log(`hicbir uc sinifinda kapanmayan nokta turu : ${hicKapali.length}/${TUR.length} (${hicKapali.join(', ')})`); const enKor = SINIF.map((s) => [s, say(s, 'karanlik').length]).sort((a, b) => b[1] - a[1])[0]; console.log(`en cok karanlik nokta turu tasiyan uc sinifi : ${enKor[0]} (${enKor[1]} tur, ${uc(enKor[0])} uc)`);
nokta turu saha dizustu sube ucu toplayici merkez sunucu acilis-girisi gorunur kapali kapali kapali servis-tanimi gorunur kapali kapali gorunur zamanlanmis-gorev gorunur kapali kapali gorunur oturum-betigi gorunur kapali kapali kapali yukleme-yolu-kancasi kapali kapali kapali gorunur olay-aboneligi karanlik karanlik karanlik karanlik mesru-ikiliye-ilisme kapali kapali kapali karanlik ortam-otomatik-calistirma gorunur kapali kapali gorunur uygulama-uzantisi gorunur kapali kapali kapali onyukleme-girisi kapali kapali karanlik kapali uc sinifi uc uygulanan denetim kapali yalniz gorunur karanlik karanlik kalem saha dizustu 120 4 3 6 1 2 sube ucu 240 6 9 0 1 2 toplayici 60 5 8 0 2 6 merkez sunucu 12 4 4 4 2 2 filo ortalamasi 432 7.1 1.8 1.2 dort uc sinifinin dordunde de kapali nokta turu: 0/10 (-) hicbir uc sinifinda kapanmayan nokta turu : 1/10 (olay-aboneligi) en cok karanlik nokta turu tasiyan uc sinifi : toplayici (2 tur, 60 uc)
Sıfır, bu tablonun en önemli sayısıdır. On nokta türünün hiçbiri dört uç sınıfının dördünde birden kapalı değil. Filo ortalaması yedi virgül bir kapalı, bir virgül sekiz yalnız görünür ve bir virgül iki karanlık türdür; ama ortalama bu tabloyu yanlış özetler, çünkü dağılım sınıflara göre keskin biçimde ayrışıyor. Şube uçlarında on türün dokuzu kapalı, saha dizüstülerinde üçü. Aynı envanter, aynı denetim listesi, farklı uygulanabilirlik.
Saha dizüstü sütunu kapatmanın nerede tıkandığını gösteriyor. Dört denetim uygulanabiliyor ve altı nokta türü yalnız görünür kalıyor. Bu uçlarda meşru işin çeşitliliği uygulama izin listesini ve yazma izni daraltmasını uygulanamaz kılıyor; karşılığında bu uçlar kapatılamayan altı türü kayda düşürüyor. Ölçüm burada bir seçim değil bir sonuç veriyor: kapatılamayan yerde kalan tek şey görünürlüktür ve bu uçlarda görünürlük altı türün tamamını taşıyor.
Karanlık sütunu ise ne kapatılan ne görülen türleri sayıyor ve en yüksek olduğu yer toplayıcı makineleri. Toplayıcılarda iki tür karanlık: kalıcı olay aboneliği ve önyükleme girişi. İkincisinin nedeni donanım — güvenli önyükleme zinciri bu sınıfta uygulanamıyor ve o türü gören hiçbir denetim yok. Altı meşru kalem bu iki türde duruyor ve hiçbir denetim onlara bakmıyor. Merkez sunucularında da iki tür karanlık; on iki uç için küçük bir sayı gibi görünür, ama bu on iki uç kursun ölçtüğü en değerli veriyi taşıyor.
Filo Ölçeğinde Bedel
Uç başına sayılan bedel bir kararı taşımaz; kararı taşıyan sayı, denetimin uygulandığı uç sayısıyla çarpılmış hâlidir. Aynı model filo ölçeğinde de koşturulabilir.
// kosum3.mjs — filo olceginde bedel: denetim basina kapsanan uc, engellenen kalem ve onay yuku import { TUR, NOKTA, SINIF, AD, DENETIM, durum, uc, TOPLAM_UC } from './envanter.mjs'; console.log(`${'denetim'.padEnd(30)} ${'kapsanan uc'.padStart(11)} ${'engellenen kalem'.padStart(16)} ` + `${'onay kalemi'.padStart(11)} ${'kapattigi nokta-uc'.padStart(18)}`); let [eng, onay] = [0, 0]; for (const d of AD) { const n = DENETIM[d][1].reduce((a, s) => a + uc(s), 0); const kapali = Object.entries(DENETIM[d][0]).filter(([, v]) => v === 'kapatir').length; eng += n * DENETIM[d][2]; onay += n * DENETIM[d][3]; console.log(`${d.padEnd(30)} ${String(n).padStart(11)} ${String(n * DENETIM[d][2]).padStart(16)} ` + `${String(n * DENETIM[d][3]).padStart(11)} ${String(n * kapali).padStart(18)}`); } console.log(`${'toplam'.padEnd(30)} ${String(TOPLAM_UC).padStart(11)} ${String(eng).padStart(16)} ${String(onay).padStart(11)}`); const cift = (d) => SINIF.reduce((a, s) => a + uc(s) * TUR.filter((t) => durum(t, s) === d).length, 0); const kalemCift = (d) => SINIF.reduce((a, s) => a + uc(s) * TUR.filter((t) => durum(t, s) === d).reduce((x, t) => x + NOKTA[t], 0), 0); console.log(`\n${'sutun'.padEnd(16)} ${'nokta-uc cifti'.padStart(14)} ${'pay'.padStart(6)} ${'mesru kalem'.padStart(11)}`); const toplamCift = TOPLAM_UC * TUR.length; for (const d of ['kapali', 'gorunur', 'karanlik']) console.log(`${d.padEnd(16)} ${String(cift(d)).padStart(14)} ${`%${(cift(d) * 100 / toplamCift).toFixed(1)}`.padStart(6)} ` + `${String(kalemCift(d)).padStart(11)}`); console.log(`${'toplam'.padEnd(16)} ${String(toplamCift).padStart(14)}`);
denetim kapsanan uc engellenen kalem onay kalemi kapattigi nokta-uc yazma izni daraltma 312 2496 1248 936 uygulama izin listesi 300 6600 9300 1200 imzali kod zorunlulugu 420 2520 1260 840 guvenli onyukleme zinciri 372 0 744 372 taban cizgisi karsilastirmasi 432 0 5184 0 surec olusturma kaydi 432 0 0 0 toplam 432 11616 17736 sutun nokta-uc cifti pay mesru kalem kapali 3048 %70.6 48912 gorunur 768 %17.8 19536 karanlik 504 %11.7 1104 toplam 4320
Filo ölçeğinde sıralama değişiyor. Uygulama izin listesi uç başına en çok tür kapatan denetimdi; filo ölçeğinde en pahalı olan da odur: altı bin altı yüz engellenen kalem ve dokuz bin üç yüz onay kalemi. Buna karşılık güvenli önyükleme zinciri üç yüz yetmiş iki nokta-uç çiftini sıfır engellenen kalemle kapatıyor. İki denetim arasındaki fark, kapattıkları nokta türünün meşru kalem yoğunluğudur: biri uçtaki en kalabalık noktalara dokunuyor, öteki neredeyse boş olan bir noktaya.
Alt tablo konunun kapanış sayısını veriyor. Dört yüz otuz iki uç ve on nokta türü dört bin üç yüz yirmi nokta-uç çifti eder; bunun yüzde yetmiş virgül altısı kapalı, yüzde on yedi virgül sekizi yalnız görünür ve yüzde on bir virgül yedisi karanlıktır. Karanlık çiftlerin taşıdığı meşru kalem yalnızca bin yüz dört — yani karanlıkta kalan noktalar uçtaki en seyrek noktalar. Bu, iyi bir haber gibi okunabilir ama tersi de doğrudur: seyrek nokta, üzerine bir kalem eklendiğinde en kolay fark edilecek noktadır — eğer bakan bir kayıt varsa. Karanlık sütununun tanımı tam olarak böyle bir kaydın olmamasıdır.
Özet
- 10 kalıcılık noktası türü uç başına 161 meşru kalem barındırıyor. 4 kapatan denetim toplam 10 tür kapatıyor ve 36 meşru kalem engelliyor; 2 görünürlük denetimi hiç tür kapatmıyor, 11 tür görünür kılıyor ve 0 kalem engelliyor.
- Kapatan denetimlerin hiçbiri 4 uç sınıfının dördünde birden uygulanamıyor; dört sınıfta da uygulanabilen iki denetim yalnız görünürlük veriyor. Ne kadar çok kapatan, o kadar az uçta.
- 4 uç sınıfının dördünde birden kapalı nokta türü sayısı 0/10. Şube uçlarında 9 tür kapalı, saha dizüstülerinde 3; aynı envanter, farklı uygulanabilirlik.
- Kalıcı olay aboneliğine hiçbir denetim dokunmuyor: ne kapatan var ne gören. Önyükleme girişini bir denetim kapatıyor, hiçbiri görmüyor — kapatmanın uygulanamadığı uçta tamamen karanlıkta kalır.
- Karanlık türlerin en yüksek olduğu sınıf toplayıcı makineleridir (2 tür, 6 meşru kalem, 60 uç). Filo ortalaması 7,1 kapalı, 1,8 yalnız görünür, 1,2 karanlıktır.
- Kapatmanın toplam bedeli 36 engellenen meşru kalem ve 52 elle onay kalemidir; 52’nin 31’i tek bir denetimden (uygulama izin listesi), 12’si tek bir görünürlük denetiminden gelir.
Sonraki Adım
Bu konu altı derste koruma katmanlarını tek tek saydı ve her katmanın neyi kaçırdığını yazdı: kalıcılık noktası kapatmanın on türün yedisini durduramadığını, imza ile davranışın iki yanlışını birden sıfırlayan bir eşiğin olmadığını, telemetrinin sekiz noktanın ikisini hiç görmediğini, konak tabanlı filtrenin eşler arası meşru trafiği kapatamadığını, yerleşik araçların imza kuralına hiç görünmediğini ve dört uç sınıfının dördünde birden kapalı hiçbir noktanın bulunmadığını. Her derste kaçırılan bir küme kaldı ve her seferinde aynı cümle yazıldı: kapatılamayan nokta en azından görünür kılınmalıdır.
Ama görünürlük bir varsayıma yaslanıyordu ve o varsayım hiç sınanmadı. Bir noktanın “kayda düştüğü” söylendiğinde o kaydın nerede durduğu, kimin okuyabildiği, ne kadar süre kaldığı ve — en önemlisi — üzerinde oynanmadığını neyin kanıtladığı sorulmadı. Kaçırılanın kaçırıldığını ancak bir kayıt gösterebilir; o kayıt kendisi kaçırılabiliyorsa geriye ölçülecek bir şey kalmaz. Sonraki konu Sistem Günlükleri bu soruyla başlar: uçtaki kayıtlar hangi kaynaklarda tutuluyor, o kaynakların hangisi uçta duran birinin erişebildiği bir yerde, ve bir günlük kümesinin kurcalanmadığı hangi kanıtla söylenir.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.