Ders 05 / 22
Elmas Modeli
Dört köşeli ilişki modelinin bağlantı sayımına çevrilmesi: 20 gözlemde aktör, altyapı, yetenek ve kurban köşelerinin 134 olası bağlantıdan 77'sini doldurması, bir köşeyi bilmenin daraltma oranının o köşe ikilisinin bağlantı seyrekliğine tam olarak eşit çıkması, en güçlü köşenin (%50) zincirin yedinci adımında ve 41 kalem sonra görünür olması, en erken görünen köşenin yalnız %30,7 daraltması, yetenek köşesinin 1 kalem bedelle %43,1 daraltma vermesi ve ikinci köşenin eklenmesinin daraltmaya yalnız 10 ile 13,1 puan eklemesi.
İçindekiler
Matris bir soruyu yanıtsız bıraktı. Hücreler “bu adım bu teknikle yürünebilir” der ve bir denetimin o tekniği görüp görmediğini yazar. Ama elde bir gözlem varken — bir kayıt, bir bağlantı, bir dosya izi — o gözlemin hangi olaya ait olduğu matristen okunamaz. Aynı teknik sınıfı birbirinden bağımsız birçok olayda geçer.
Bu boşluğu dolduran ikinci bir yapı, olayı dört köşeyle anar: kim (aktör profili), hangi altyapıyla, hangi yetenekle ve kime karşı. Dört köşe altı ikili bağlantı üretir ve modelin taşıdığı iddia şudur: bir köşe bilindiğinde diğerleri daralır. Bu ders o daralmayı bağlantı sayımı olarak ölçer.
Dört Köşe, Altı Bağlantı
Aşağıdaki gözlem kümesi kurgudur: gerçek bir aktör, altyapı kalemi, kampanya ya da kurum adı geçmez; aktör köşesi yalnız yetenek ve motivasyon düzeyiyle yazılır.
TM13: bir gözlem dört köşeyi birlikte kaydeder ve dört köşe altı ikili bağlantı üretir. TM14: bir köşeyi bilmek, o değeri taşıyan gözlemlerle sınırlı kalmaktır; kalan aday sayısı o alt kümede hedef köşenin farklı değer sayısıdır. TM15: her köşe zincirin belirli bir adımında görünür olur ve o adıma kadar erişilmiş kalem sayısı, o köşeyi kullanmanın bedelidir.
// tehdit/kose.mjs — dort koseli iliski modelinin veri yapisi: her gozlem bir olayin dort // kosesini birlestirir. Gozlemler kurgudur; gercek bir aktor, altyapi kalemi, kampanya ya da // kurum adi gecmez. Aktor kosesi yalnizca yetenek ve motivasyon duzeyiyle yazilir. // TM13: bir gozlem dort koseyi birlikte kaydeder: aktor profili, altyapi kalemi, yetenek // (teknik sinifi) ve kurban kalemi. Dort kose 6 ikili baglanti uretir. export const KOSE = ["aktor", "altyapi", "yetenek", "kurban"]; export const GOZLEM = ` yetenek-2-gelir paylasimli-barindirma ekli-dosya-yoluyla sube-ucu yetenek-2-gelir paylasimli-barindirma ekli-dosya-yoluyla abone-portali yetenek-2-gelir acik-vekil gecerli-kimlikle-giris abone-portali yetenek-2-gelir paylasimli-barindirma gecerli-kimlikle-giris sube-ucu yetenek-2-gelir acik-vekil ekli-dosya-yoluyla saha-uygulamasi yetenek-3-gelir paylasimli-barindirma dis-servis-istismari abone-portali yetenek-3-gelir kiralik-uc dis-servis-istismari fatura-servisi yetenek-3-gelir kiralik-uc yorumlayici-cagrisi fatura-servisi yetenek-3-gelir acik-vekil ekli-dosya-yoluyla saha-uygulamasi yetenek-3-gelir paylasimli-barindirma gecerli-kimlikle-giris abone-portali yetenek-3-ic-erisim kendi-ucu kimlik-yeniden-kullanimi saha-uygulamasi yetenek-3-ic-erisim kendi-ucu gecerli-kimlikle-giris fatura-servisi yetenek-3-ic-erisim kendi-ucu kimlik-yeniden-kullanimi fatura-servisi yetenek-3-ic-erisim kendi-ucu sifreli-kanal sube-ucu yetenek-5-hedefli ele-gecirilmis-uc dis-servis-istismari saha-uygulamasi yetenek-5-hedefli ele-gecirilmis-uc yorumlayici-cagrisi saha-uygulamasi yetenek-5-hedefli ele-gecirilmis-uc kimlik-yeniden-kullanimi fatura-servisi yetenek-5-hedefli ele-gecirilmis-uc sifreli-kanal sube-ucu yetenek-5-hedefli kiralik-uc sifreli-kanal fatura-servisi yetenek-5-hedefli kiralik-uc yorumlayici-cagrisi abone-portali` .trim().split("\n").map((r) => { const [aktor, altyapi, yetenek, kurban] = r.trim().split(/\s+/); return { aktor, altyapi, yetenek, kurban }; }); export const deger = (k) => [...new Set(GOZLEM.map((g) => g[k]))]; // TM14: bir koseyi bilmek, o degeri tasiyan gozlemlerle sinirli kalmaktir; kalan aday sayisi // o alt kumede hedef kosenin farkli deger sayisidir, kumeler uzerinden ortalanir. export function daraltma(bilinen, hedef) { const toplam = deger(hedef).length; const kumeler = new Map(); for (const g of GOZLEM) { const anahtar = bilinen.map((k) => g[k]).join("|"); if (!kumeler.has(anahtar)) kumeler.set(anahtar, new Set()); kumeler.get(anahtar).add(g[hedef]); } const ort = [...kumeler.values()].reduce((t, s) => t + s.size, 0) / kumeler.size; return { ort, toplam, oran: 1 - ort / toplam, kume: kumeler.size }; } // TM15: her kose zincirin belirli bir adiminda gorunur olur; o adima kadar erisilmis kalem // sayisi, o koseyi kullanmanin bedelidir. Aktor kosesi dogrudan gorunmez, cikarilir. export const GORUNURLUK = { kurban: { adim: "ilk-erisim", kalem: 0 }, yetenek: { adim: "yurutme", kalem: 1 }, altyapi: { adim: "sizdirma", kalem: 41 }, aktor: { adim: "-", kalem: null } };
// tehdit/pivot.mjs — bir koseyi bilmek diger koselerden kacini daraltiyor. import { KOSE, GOZLEM, deger, daraltma, GORUNURLUK } from "./kose.mjs"; const yaz = (g, ...s) => console.log(s.map((v, i) => (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join("")); const ikili = KOSE.flatMap((a, i) => KOSE.slice(i + 1).map((b) => [a, b])); const olasi = ikili.reduce((t, [a, b]) => t + deger(a).length * deger(b).length, 0); const gorulen = ikili.reduce((t, [a, b]) => t + new Set(GOZLEM.map((g) => `${g[a]}|${g[b]}`)).size, 0); console.log(`${GOZLEM.length} gozlem, ${KOSE.length} kose ` + `(${KOSE.map((k) => `${k} ${deger(k).length}`).join(", ")}); ` + `${ikili.length} kose ikilisi, ${olasi} olasi baglanti, ${gorulen} gozlemde var ` + `(%${((gorulen / olasi) * 100).toFixed(1)})`); const A = [-10, -10, 9, 11, 12]; console.log("\n1. kose ikilileri: kac baglanti gozlemde var"); yaz(A, "kose", "kose", "olasi", "gorulen", "seyreklik %"); for (const [a, b] of ikili) { const n = new Set(GOZLEM.map((g) => `${g[a]}|${g[b]}`)).size; const o = deger(a).length * deger(b).length; yaz(A, a, b, o, n, (100 - (n / o) * 100).toFixed(1)); } const B = [-10, -10, 8, 15, 12, 11]; console.log("\n2. bir kose bilinirse otekinden kac aday kaliyor"); yaz(B, "bilinen", "hedef", "toplam", "ortalama aday", "daraltma %", "kume"); for (const b of KOSE) for (const h of KOSE) { if (b === h) continue; const d = daraltma([b], h); yaz(B, b, h, d.toplam, d.ort.toFixed(2), (d.oran * 100).toFixed(1), d.kume); } const C = [-10, 14, 14, 16, 9]; console.log("\n3. hangi kose ne zaman gorunuyor, ne kadar daraltiyor"); yaz(C, "kose", "gorunur adim", "o ana kalem", "ort daraltma %", "sira"); const guc = KOSE.map((k) => ({ k, g: KOSE.filter((h) => h !== k) .reduce((t, h) => t + daraltma([k], h).oran, 0) / (KOSE.length - 1) })) .sort((x, y) => y.g - x.g); for (const { k, g } of guc) yaz(C, k, GORUNURLUK[k].adim, GORUNURLUK[k].kalem ?? "cikarim", (g * 100).toFixed(1), guc.findIndex((x) => x.k === k) + 1); const D = [-24, -10, 15, 12, 15]; console.log("\n4. ikinci kose eklenirse ne kazaniliyor"); yaz(D, "bilinen kose(ler)", "hedef", "ortalama aday", "daraltma %", "ek daraltma %"); for (const h of KOSE) { const tekli = KOSE.filter((k) => k !== h) .map((k) => ({ k, d: daraltma([k], h) })).sort((x, y) => x.d.ort - y.d.ort)[0]; const oteki = KOSE.filter((k) => k !== h && k !== tekli.k); const cift = daraltma([tekli.k, oteki[0]], h); yaz(D, tekli.k, h, tekli.d.ort.toFixed(2), (tekli.d.oran * 100).toFixed(1), "-"); yaz(D, `${tekli.k} + ${oteki[0]}`, h, cift.ort.toFixed(2), (cift.oran * 100).toFixed(1), ((cift.oran - tekli.d.oran) * 100).toFixed(1)); } console.log("uc kose bilinirse kalan ortalama aday: " + KOSE.map((h) => `${h} ${daraltma(KOSE.filter((k) => k !== h), h).ort.toFixed(2)}`).join(", ")); const enIyi = guc[0]; console.log(`en guclu kose ${enIyi.k} (%${(enIyi.g * 100).toFixed(1)}), ` + `gorunurlugu ${GORUNURLUK[enIyi.k].adim} adiminda ve o ana kadar ` + `${GORUNURLUK[enIyi.k].kalem} kaleme erisilmis; en erken gorunen kose ` + `kurban (${GORUNURLUK.kurban.kalem} kalem) ve daraltmasi ` + `%${(guc.find((x) => x.k === "kurban").g * 100).toFixed(1)}`);
20 gozlem, 4 kose (aktor 4, altyapi 5, yetenek 6, kurban 4); 6 kose ikilisi, 134 olasi baglanti, 77 gozlemde var (%57.5) 1. kose ikilileri: kac baglanti gozlemde var kose kose olasi gorulen seyreklik % aktor altyapi 20 8 60.0 aktor yetenek 24 13 45.8 aktor kurban 16 13 18.8 altyapi yetenek 30 15 50.0 altyapi kurban 20 12 40.0 yetenek kurban 24 16 33.3 2. bir kose bilinirse otekinden kac aday kaliyor bilinen hedef toplam ortalama aday daraltma % kume aktor altyapi 5 2.00 60.0 4 aktor yetenek 6 3.25 45.8 4 aktor kurban 4 3.25 18.8 4 altyapi aktor 4 1.60 60.0 5 altyapi yetenek 6 3.00 50.0 5 altyapi kurban 4 2.40 40.0 5 yetenek aktor 4 2.17 45.8 6 yetenek altyapi 5 2.50 50.0 6 yetenek kurban 4 2.67 33.3 6 kurban aktor 4 3.25 18.8 4 kurban altyapi 5 3.00 40.0 4 kurban yetenek 6 4.00 33.3 4 3. hangi kose ne zaman gorunuyor, ne kadar daraltiyor kose gorunur adim o ana kalem ort daraltma % sira altyapi sizdirma 41 50.0 1 yetenek yurutme 1 43.1 2 aktor - cikarim 41.5 3 kurban ilk-erisim 0 30.7 4 4. ikinci kose eklenirse ne kazaniliyor bilinen kose(ler) hedef ortalama aday daraltma % ek daraltma % altyapi aktor 1.60 60.0 - altyapi + yetenek aktor 1.20 70.0 10.0 aktor altyapi 2.00 60.0 - aktor + yetenek altyapi 1.38 72.3 12.3 altyapi yetenek 3.00 50.0 - altyapi + aktor yetenek 2.25 62.5 12.5 altyapi kurban 2.40 40.0 - altyapi + aktor kurban 1.88 53.1 13.1 uc kose bilinirse kalan ortalama aday: aktor 1.05, altyapi 1.00, yetenek 1.33, kurban 1.11 en guclu kose altyapi (%50.0), gorunurlugu sizdirma adiminda ve o ana kadar 41 kaleme erisilmis; en erken gorunen kose kurban (0 kalem) ve daraltmasi %30.7
Sayılar ölçüm sınıfındadır; girdileri TM13–TM15’tir.
Daraltma Bir Seyreklik Ölçüsüdür
Dört köşenin değer sayıları 4, 5, 6 ve 4’tür. Altı köşe ikilisi toplam 134 olası bağlantı tanımlar; 20 gözlem bunların 77’sini doldurur. Kalan 57 bağlantı hiç görülmemiştir ve modelin bütün gücü buradan gelir.
İkinci tablo ile birinci tablo yan yana okunduğunda bir eşitlik ortaya çıkar: her köşe ikilisinin seyreklik yüzdesi, o ikili için hesaplanan daraltma yüzdesine tam olarak eşittir. Aktör ile altyapı ikilisinin seyrekliği %60,0’dır; aktörü bilmek altyapıyı %60,0 daraltır, altyapıyı bilmek aktörü de %60,0 daraltır. Aktör ile kurban ikilisinin seyrekliği %18,8’dir ve daraltması da öyle.
Eşitlik tesadüf değildir. Bir köşenin her değeri için kalan aday sayılarının toplamı, tam olarak o ikilideki farklı bağlantı sayısıdır; küme sayısına bölündüğünde ortalama aday çıkar ve hedef köşenin toplam değer sayısına oranlandığında bağlantı yoğunluğu elde edilir. Daraltma gücü, bağlantı matrisinin ne kadar boş olduğudur. Model bu yüzden bir sezgi değil, sayılabilir bir şeydir: iki köşe arasında ne kadar az kombinasyon gerçekleşmişse, birini bilmek ötekini o kadar daraltır.
Buradan çıkan uyarı da aynı ölçüdedir. Gözlem sayısı arttıkça bağlantı matrisi dolar ve daraltma gücü azalır. Bir gözlem havuzunun büyümesi çıkarımı otomatik olarak güçlendirmez; matris dolmaya başladığında aynı köşe daha az ayırt eder.
En Güçlü Köşe En Pahalı Köşedir
Üçüncü tablo bu dersin asıl karşılaştırmasıdır: her köşenin ortalama daraltma gücü ile zincirde görünür olduğu adım yan yana yazılır.
Sıralamanın başında altyapı vardır: diğer üç köşeyi ortalama %50,0 daraltır. Ama altyapı köşesi ancak sızdırma adımında görünür hale gelir — dış uç, veri dışarı çıkarken belli olur — ve o ana kadar 41 kaleme erişilmiştir. En güçlü ipucu, zincirin en geç halkasında doğar.
Bu geç doğuş modelin kendi yapısından gelir. Altyapı köşesi güçlüdür çünkü aktörle arasındaki bağlantı matrisi en boş olanıdır — her aktör profili yalnız birkaç altyapı biçimi kullanır. Aynı seyreklik, o köşenin savunma tarafında geç görünmesinin de nedenidir: seyrek kullanılan bir kalem ancak zincirin sonunda, dışa dönük bir adımda kayda düşer.
Sıralamanın sonunda kurban vardır: %30,7 daraltma. Bu köşe savunma tarafında bedelsizdir, çünkü hangi kalemin hedeflendiği ilk erişim adımında bellidir ve o noktada 0 kalem kaybedilmiştir. Bedelsiz olan en zayıf, en güçlü olan en pahalıdır.
Aradaki satır kararı verir. Yetenek köşesi %43,1 daraltır ve yürütme adımında görünür — o ana kadar erişilmiş kalem 1. Altyapının 6,9 puanlık üstünlüğü 40 kalem daha pahalıya gelir. Zincirin ölçüsüyle bakıldığında en iyi köşe en çok daraltan köşe değil, birim kalem başına en çok daraltan köşedir; bu kümede yetenek köşesi diğerlerinin kırk katı verimlidir.
İkinci tablonun kendi içinde de bir asimetri vardır. Aynı ikili için daraltma yüzdesi iki yönde eşit olsa da kalan aday sayısı eşit değildir: altyapıyı bilmek aktörü 4 adaydan 1,60’a indirir, aktörü bilmek altyapıyı 5 adaydan 2,00’a. Yüzde aynı, mutlak sayı farklıdır ve karar mutlak sayıyla verilir. Değer kümesi küçük olan köşeyi hedef almak, aynı seyreklikle daha kesin bir sonuç üretir.
Aktör köşesi tabloda ayrı durur: hiçbir adımda doğrudan görünmez, diğer üç köşeden çıkarılır. Daraltma gücü %41,5’tir ama bu güç yalnız çıkarımın hedefi olarak anlamlıdır — aktörü bilmek diğer köşeleri daraltır, ancak aktörü bilmenin tek yolu diğer köşelerden geçer.
İkinci Köşenin Getirisi
Dördüncü tablo her hedef köşe için en iyi tek pivotu bulur, sonra ona ikinci bir köşe ekler.
Aktörü daraltmak için en iyi tek köşe altyapıdır: dört adaydan 1,60‘a iner (%60,0). Yetenek köşesi de eklendiğinde 1,20’ye iner (%70,0) — ikinci köşenin katkısı 10 puandır. Diğer üç satırda ek katkı 12,3, 12,5 ve 13,1 puandır. Dört durumda da ikinci köşe, birincinin sağladığının altıda biri kadar ek daralma getirir.
Azalan getirinin nedeni birinci tablodadır. İkinci köşe yalnız birincinin bıraktığı alt kümede iş görür ve o alt küme zaten seyrektir; ikinci pivotun kaldırabileceği bağlantı sayısı birincinin kaldırdığından çok daha azdır. Son satır sınırı gösterir: üç köşe birden bilindiğinde kalan ortalama aday 1,00 ile 1,33 arasındadır — yani üçüncü köşeden sonra eklenecek bir şey kalmamıştır.
Bu, dört köşeli modelin pratikte nasıl kullanıldığını yazar. İlk pivot kararın neredeyse tamamını verir; ikinci pivot bir doğrulama aracıdır. Aktör köşesinde 1,60’tan 1,20’ye inmek, ortalama olarak “iki aday” yerine “bir aday” demektir ve bu fark bazı gözlem kümelerinde belirleyici olur — ama 40 kalemlik bir bekleme pahasına elde ediliyorsa ödenen bedel kazanılan daralmadan büyüktür.
Zincir ölçüsüyle söylenirse: bir köşeyi daha beklemek, zincirde bir adım daha ilerlemek demektir. Önceki dersin sayılarıyla bu bekleme yürütmeden sızdırmaya gitmek ise 1 kalemden 41 kaleme geçmektir. İlişki modeli daralma sağlar, ama daralmanın bedeli zincirin kendi ölçüsüyle yazılmadıkça karar taşımaz.
Özet
- Dört köşe (aktör, altyapı, yetenek, kurban) altı ikili bağlantı üretir; 20 gözlem 134 olası bağlantının 77’sini doldurur ve kalan 57 boşluk modelin bütün gücünü sağlar.
- Bir köşeyi bilmenin daraltma yüzdesi, o köşe ikilisinin bağlantı seyrekliğine tam olarak eşittir; daraltma gücü bağlantı matrisinin ne kadar boş olduğudur.
- Gözlem sayısı arttıkça matris dolar ve daraltma gücü azalır; havuzu büyütmek çıkarımı kendiliğinden güçlendirmez.
- En güçlü köşe altyapıdır (%50,0) ama sızdırma adımında, 41 kalem sonra görünür; en erken görünen köşe kurbandır (0 kalem) ve yalnız %30,7 daraltır.
- Yetenek köşesi 1 kalem bedelle %43,1 daraltır; altyapının 6,9 puanlık üstünlüğü 40 kalem daha pahalıdır.
- İkinci köşenin katkısı 10,0 ile 13,1 puan arasındadır — ilk pivotun sağladığının yaklaşık altıda biri; ilk pivot kararı verir, ikincisi doğrular.
Sonraki Adım
Beş ders boyunca ölçülen her şey aynı varsayımın üstünde durdu: denetimlerin gördüğü şeyler önceden bilinen şeylerdi. Matristeki her hücre bir teknik sınıfına, her denetim kalemi tanınan bir kayıt örüntüsüne bağlıydı; ilişki modelindeki her köşe daha önce görülmüş bir bağlantıya dayandı.
Oysa bir tekniğin ilk kez kullanıldığı an bu varsayımın dışındadır. Tanınacak bir örüntü henüz yoktur, bağlantı matrisinde o satır boştur ve düzeltmesi de çıkmamıştır. Konunun son dersi bu durumu kapsam cinsinden ölçer: bilinen tehditte kaç halka kırılabiliyorsa bilinmeyen tehditte kaçı kırılabiliyor, imza tabanlı denetim kaç adımı kaçırıyor, davranış tabanlı denetim kaçını hâlâ yakalıyor ve düzeltme yayımlanana kadar geçen pencerede kaç kalem açık kalıyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.