Ders 04 / 22
Saldırgan Davranış Sınıflandırmaları
Tekniklerin adımlara eşlenmesi ve hiç denetimi olmayan adımın sayılması: 8 taktik ile 27 teknik sınıfının 10.800 zincir üretmesi, beş denetim kaleminin tekniklerin %40,7'sini örtmesi, üç adımın hiçbir denetimin görmediği adım kalması, zincirlerin %80'inin ilk iki adımda kırılmasına karşın 72 zincirin (%0,67) hiçbir halkada kırılamaması, en geç kırılan %1,33'lük dilimin ortalama kalemin %42,6 payını taşıması ve aynı kapsama yüzdesini (%51,9) veren iki müdahalenin 1,39 ile 0,47 kalem gibi üç kat farklı kazanç üretmesi.
İçindekiler
Önceki ders sekiz adımı ve her adımın karşısındaki tek denetimi ölçtü. Gerçekte bir adımın karşısında tek bir denetim değil, o adımın kaç ayrı biçimde yürünebildiği kadar denetim gerekir. Yanal geçiş orada bir satırdı; altında birbirinden bağımsız birçok teknik sınıfı vardır ve bir denetim bunların yalnız bir bölümünü görür.
Saldırgan davranışını sınıflandıran çalışmalar tam bu boşluk için kurulmuştur. Yapı her zaman aynıdır: adımlar sütun, teknik sınıfları satır olur ve her hücreye bir denetim eşlenir. Bu ders o yapıyı kurar ve tek soruyu sorar: kapsama yüzdesi yükselirken hiç denetimi olmayan adım sayısı düşüyor mu, yoksa kapsama zaten görülen adımlarda mı büyüyor.
Matris Bir Adım–Teknik Eşlemesidir
Aşağıdaki yapı bir modeldir: teknikler yalnız sınıf adıyla ve hangi denetimin gördüğü bilgisiyle yazılır; hiçbirinin nasıl yürütüldüğü geçmez. Kurgu ölçüm ağı üzerinde çalışılır.
TM10: her adım (taktik) altında birden çok teknik sınıfı vardır ve bir zincir her adımdan bir teknik seçer. TM11: bir denetim kalemi belirli teknikleri görür; görmediği teknik üzerinden yürünen adım o zincirde kırılamaz. TM12: zincirin kırılabildiği en erken halka, seçilen tekniklerden ilk görülenin bulunduğu adımdır; hiçbiri görülmüyorsa zincir kırılamaz.
// tehdit/matris.mjs — taktik ve teknik matrisinin modeli: satirlar teknik sinifi, sutunlar // zincir adimi. Burada calisan bir teknik yoktur; teknikler yalnizca sinif adiyla ve hangi // denetimin gordugu bilgisiyle yazilir. Rastgelelik yok. // TM10: her adim (taktik) altinda birden cok teknik sinifi vardir; bir zincir her adimdan // bir teknik secer. `kalem`, adim tamamlaninca erisilmis birikimli kurgu kalem sayisidir. export const TAKTIK = [ { ad: "kesif", kalem: 0, teknik: ["acik-kaynak-derleme", "dis-yuzey-listeleme", "calisan-listesi-toplama", "hizmet-parmak-izi"] }, { ad: "ilk-erisim", kalem: 1, teknik: ["gecerli-kimlikle-giris", "ekli-dosya-yoluyla", "dis-servis-istismari", "tedarik-baglantisi", "cikarilabilir-ortam"] }, { ad: "yurutme", kalem: 2, teknik: ["yorumlayici-cagrisi", "zamanlanmis-tetikleme", "kullanici-etkilesimi"] }, { ad: "kalicilik", kalem: 3, teknik: ["acilis-girisi", "servis-tanimi", "zamanlanmis-gorev", "hesap-olusturma", "yapilandirma-kancasi"] }, { ad: "yetki-yukseltme", kalem: 9, teknik: ["yanlis-izin-kullanma", "belirtec-devralma", "yol-degistirme"] }, { ad: "yanal-gecis", kalem: 26, teknik: ["uzak-servis-oturumu", "paylasima-yazma", "kimlik-yeniden-kullanimi"] }, { ad: "toplama", kalem: 41, teknik: ["yerel-veri-toplama", "paylasim-tarama"] }, { ad: "sizdirma", kalem: 48, teknik: ["sifreli-kanal", "bolunmus-aktarim"] }, ]; // TM11: bir denetim kalemi belirli teknikleri gorur; gormedigi teknik uzerinden yurunen adim // o zincirde kirilamaz. export const DENETIM = { "kimlik-gunlugu": ["gecerli-kimlikle-giris", "dis-servis-istismari", "hesap-olusturma"], "surec-kaydi": ["yorumlayici-cagrisi", "zamanlanmis-tetikleme"], "baslatma-envanteri": ["acilis-girisi", "servis-tanimi", "zamanlanmis-gorev"], "yetki-degisikligi": ["yanlis-izin-kullanma", "belirtec-devralma"], "cikis-hacmi": ["sifreli-kanal"], }; export const gorulenKume = (ek = {}) => new Set(Object.values({ ...DENETIM, ...ek }).flat()); export const TEKNIK_SAYISI = TAKTIK.reduce((t, k) => t + k.teknik.length, 0); export const ZINCIR_SAYISI = TAKTIK.reduce((t, k) => t * k.teknik.length, 1); // TM12: bir zincir her taktikten bir teknik secer; zincirin kirilabildigi en erken halka, // secilen tekniklerden ilk gorulenin bulundugu adimdir. Hicbiri gorulmuyorsa zincir kirilamaz. export function dagilim(ek = {}) { const g = gorulenKume(ek), sayim = new Array(TAKTIK.length + 1).fill(0); const yuru = (i, ilk) => { if (i === TAKTIK.length) return sayim[ilk === -1 ? TAKTIK.length : ilk]++; for (const t of TAKTIK[i].teknik) yuru(i + 1, ilk === -1 && g.has(t) ? i : ilk); }; yuru(0, -1); return sayim; } export const kalemOnce = (i) => (i === 0 ? 0 : TAKTIK[i - 1].kalem); export function ortalamaKalem(ek = {}) { const s = dagilim(ek); return s.reduce((t, n, i) => t + n * (i === TAKTIK.length ? TAKTIK.at(-1).kalem : kalemOnce(i)), 0) / ZINCIR_SAYISI; }
// tehdit/kapsama.mjs — kapsama yuzdesi yukselirken hic denetimi olmayan adim sayisi dusuyor mu. import { TAKTIK, DENETIM, gorulenKume, TEKNIK_SAYISI, ZINCIR_SAYISI, dagilim, kalemOnce, ortalamaKalem } from "./matris.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 G = gorulenKume(); const ortulen = TEKNIK_SAYISI - TAKTIK.reduce((t, k) => t + k.teknik.filter((x) => !G.has(x)).length, 0); const bosTaktik = TAKTIK.filter((k) => k.teknik.every((x) => !G.has(x))); console.log(`${TAKTIK.length} taktik x ${TEKNIK_SAYISI} teknik, ` + `${Object.keys(DENETIM).length} denetim kalemi; ortulen teknik ${ortulen} ` + `(%${((ortulen / TEKNIK_SAYISI) * 100).toFixed(1)}), hic denetimi olmayan adim ` + `${bosTaktik.length} (${bosTaktik.map((k) => k.ad).join(", ")}); ` + `zincir sayisi ${ZINCIR_SAYISI}, ortalama kalem ${ortalamaKalem().toFixed(2)}`); const A = [-18, 9, 9, 11, 12, 8]; console.log("\n1. matris: her adimda kac teknik, kaci gorulen"); yaz(A, "taktik", "teknik", "gorulen", "gorulmeyen", "kapsama %", "kalem"); for (const k of TAKTIK) { const gor = k.teknik.filter((x) => G.has(x)).length; yaz(A, k.ad, k.teknik.length, gor, k.teknik.length - gor, ((gor / k.teknik.length) * 100).toFixed(1), k.kalem); } const B = [-22, 8, 22, 15]; console.log("\n2. denetim kalemi basina gorulen teknik"); yaz(B, "denetim", "teknik", "hangi adim", "matris payi %"); for (const [d, t] of Object.entries(DENETIM)) { const adim = [...new Set(t.map((x) => TAKTIK.find((k) => k.teknik.includes(x)).ad))]; yaz(B, d, t.length, adim.join("/"), ((t.length / TEKNIK_SAYISI) * 100).toFixed(1)); } const C = [-18, 12, 11, 14, 16]; console.log("\n3. zincirin en erken kirilabilen halkasi"); yaz(C, "ilk gorulen adim", "zincir", "zincir %", "o ana kalem", "kalem katkisi"); const S = dagilim(); for (let i = 0; i <= TAKTIK.length; i++) { if (S[i] === 0) continue; const kalem = i === TAKTIK.length ? TAKTIK.at(-1).kalem : kalemOnce(i); yaz(C, i === TAKTIK.length ? "kirilamiyor" : TAKTIK[i].ad, S[i], ((S[i] / ZINCIR_SAYISI) * 100).toFixed(2), kalem, ((S[i] * kalem) / ZINCIR_SAYISI).toFixed(2)); } const D = [-32, 11, 10, 16, 9, 13]; console.log("\n4. bir denetim kalemi daha eklenirse"); yaz(D, "eklenen denetim", "kapsama %", "bos adim", "ortalama kalem", "kazanc", "kirilamayan"); const EK = [ ["kesif: iki teknik", { yeni: ["acik-kaynak-derleme", "dis-yuzey-listeleme"] }], ["ilk-erisim: uc teknigin tamami", { yeni: ["ekli-dosya-yoluyla", "tedarik-baglantisi", "cikarilabilir-ortam"] }], ["kalicilik: kalan tek teknik", { yeni: ["yapilandirma-kancasi"] }], ["yanal-gecis: uc teknigin tamami", { yeni: ["uzak-servis-oturumu", "paylasima-yazma", "kimlik-yeniden-kullanimi"] }], ["toplama: iki teknigin tamami", { yeni: ["yerel-veri-toplama", "paylasim-tarama"] }], ]; const taban = ortalamaKalem(); for (const [ad, ek] of EK) { const g = gorulenKume(ek); const ort = TEKNIK_SAYISI - TAKTIK.reduce((t, k) => t + k.teknik.filter((x) => !g.has(x)).length, 0); const bos = TAKTIK.filter((k) => k.teknik.every((x) => !g.has(x))).length; const o = ortalamaKalem(ek); yaz(D, ad, ((ort / TEKNIK_SAYISI) * 100).toFixed(1), bos, o.toFixed(2), (taban - o).toFixed(2), dagilim(ek)[TAKTIK.length]); } const gec = S[TAKTIK.length - 1] + S[TAKTIK.length]; console.log(`taban: kirilamayan ${S[TAKTIK.length]} zincir; en gec iki satirdaki ${gec} zincir ` + `(%${((gec / ZINCIR_SAYISI) * 100).toFixed(2)}) ortalama kalemin ` + `%${(((S[TAKTIK.length - 1] * TAKTIK.at(-2).kalem + S[TAKTIK.length] * TAKTIK.at(-1).kalem) / ZINCIR_SAYISI / taban) * 100).toFixed(1)} payini tasiyor`);
8 taktik x 27 teknik, 5 denetim kalemi; ortulen teknik 11 (%40.7), hic denetimi olmayan adim 3 (kesif, yanal-gecis, toplama); zincir sayisi 10800, ortalama kalem 1.39 1. matris: her adimda kac teknik, kaci gorulen taktik teknik gorulen gorulmeyen kapsama % kalem kesif 4 0 4 0.0 0 ilk-erisim 5 2 3 40.0 1 yurutme 3 2 1 66.7 2 kalicilik 5 4 1 80.0 3 yetki-yukseltme 3 2 1 66.7 9 yanal-gecis 3 0 3 0.0 26 toplama 2 0 2 0.0 41 sizdirma 2 1 1 50.0 48 2. denetim kalemi basina gorulen teknik denetim teknik hangi adim matris payi % kimlik-gunlugu 3 ilk-erisim/kalicilik 11.1 surec-kaydi 2 yurutme 7.4 baslatma-envanteri 3 kalicilik 11.1 yetki-degisikligi 2 yetki-yukseltme 7.4 cikis-hacmi 1 sizdirma 3.7 3. zincirin en erken kirilabilen halkasi ilk gorulen adim zincir zincir % o ana kalem kalem katkisi ilk-erisim 4320 40.00 0 0.00 yurutme 4320 40.00 1 0.40 kalicilik 1728 16.00 2 0.32 yetki-yukseltme 288 2.67 3 0.08 sizdirma 72 0.67 41 0.27 kirilamiyor 72 0.67 48 0.32 4. bir denetim kalemi daha eklenirse eklenen denetim kapsama % bos adim ortalama kalem kazanc kirilamayan kesif: iki teknik 48.1 2 0.70 0.70 36 ilk-erisim: uc teknigin tamami 51.9 3 0.00 1.39 0 kalicilik: kalan tek teknik 44.4 3 0.80 0.59 0 yanal-gecis: uc teknigin tamami 51.9 2 0.92 0.47 0 toplama: iki teknigin tamami 48.1 2 1.15 0.25 0 taban: kirilamayan 72 zincir; en gec iki satirdaki 144 zincir (%1.33) ortalama kalemin %42.6 payini tasiyor
Sayılar ölçüm sınıfındadır; girdileri TM10–TM12’dir.
Kırk Yüzde Kapsamanın İçi
Sekiz adımın altında 27 teknik sınıfı vardır ve beş denetim kalemi bunların 11’ini görür — kapsama %40,7. Tek başına bu sayı bir karar taşımaz; birinci tablo onu adım adım böldüğünde karar çıkar.
Kapsama düz dağılmaz: kalıcılık adımının beş tekniğinin dördü görülür (%80), yürütme ve yetki yükseltmenin üçte ikisi görülür, ilk erişimin beşte ikisi. Üç adımda kapsama sıfırdır — keşif, yanal geçiş ve toplama. Bu üç adım, önceki dersteki denetimsiz üç adımın aynısıdır; matris o gözlemi teknik düzeyinde doğrular ve nedenini yazar: bu adımların hiçbir tekniği beş denetim kaleminin gördüğü kümede yer almaz.
Matris yapısının bu dersteki işlevi sınıflandırmanın kendisi değildir. Sınıflandırma yalnız sayılabilir bir ızgara sağlar: her hücre “bu adım bu teknikle yürünebilir mi” sorusuna evet ya da hayır der, ve her evet hücresine bir denetim eşlenip eşlenmediği ayrıca yazılır. Izgara olmadan kapsama bir kanaat olarak kalır; ızgarayla birlikte kapsama iki sayının bölümü olur.
İkinci tablo aynı sayıyı denetim tarafından okur. Beş denetimin en genişi üç teknik görür ve matrisin %11,1’ini kapsar; en darı bir teknik görür, %3,7. İki denetim aynı adımda çakışır: kimlik günlüğü ile başlatma envanterinin ikisi de kalıcılık adımına düşen birer teknik görür. Denetim sayısını artırmak, örtülen adım sayısını artırmak değildir.
On Bin Sekiz Yüz Zincir
Adım başına teknik sayıları çarpıldığında 10.800 ayrı zincir çıkar. Üçüncü tablo her zincirin kırılabildiği en erken halkayı bulur ve zincirleri o halkaya göre gruplar.
Bu çarpım, teknik saymak ile zincir saymak arasındaki farkı yazar. Teknik sayısı toplamsaldır: bir adıma iki teknik eklemek 27’yi 29’a çıkarır. Zincir sayısı çarpımsaldır: aynı iki teknik toplamayı ikiden dörde çıkarırsa zincir sayısı 10.800’den 21.600’e çıkar. Kapsama yüzdesi teknik sayısı üzerinden hesaplandığı için toplamsal, savunmanın karşılaştığı olasılık kümesi ise çarpımsal büyür. İki ölçünün aynı yönde hareket etmesi için bir neden yoktur.
Dağılım baştan yığılıdır: zincirlerin %40’ı ilk erişimde, %40’ı yürütmede, %16’sı kalıcılıkta kırılabilir. Toplam %96 ilk üç kırılabilir halkada toplanır ve bu zincirlerde erişilmiş kalem 0, 1 ya da 2’dir. Ortalama kalem 1,39’dur. Kapsama yüzdesi düşük görünse de kapsamanın zincirin başında durması ortalamayı aşağıda tutar.
Kuyruk ise ters yöndedir. 72 zincir ancak sızdırma adımında kırılabilir — o noktada 41 kaleme erişilmiştir. Başka 72 zincir hiçbir halkada kırılamaz: sekiz adımın sekizinde de görülmeyen bir teknik seçilmiştir. Bu iki grup zincirlerin yalnız %1,33’üdür ama ortalama kalemin %42,6 payını taşır. Kapsama ortalamalarıyla değerlendirilen bir matris bu %1,33’ü hiç görmez.
Kuyruğun bu ağırlığı doğrudan kalem dizisinden gelir. Kalem sayısı adımlar boyunca 0, 1, 2, 3, 9, 26, 41, 48 diye ilerler; ilk dört adımın toplam katkısı 3’tür, son üç adımınki 45. Zincirlerin büyük çoğunluğu ucuz bölgede kırılırken, kırılamayan azınlık pahalı bölgenin tamamını taşır.
Kırılamayan 72 zincir bu kursta ilk kez ortaya çıkan bir durumdur: zincirin hiçbir halkasında bir kırma noktası yoktur. Bu durumda ölçü kırmadan tespite kayar — soru artık “hangi halkada kırılır” değil, “olay olduktan sonra hangi kayıttan görülür”dür.
Aynı Kapsama, Üç Kat Fark
Dördüncü tablo beş ayrı müdahaleyi aynı ölçekte karşılaştırır ve bu dersin asıl bulgusunu verir.
İki satır tam olarak aynı kapsama yüzdesini üretir: ilk erişimin üç görülmeyen tekniğini örtmek ve yanal geçişin üç tekniğini örtmek — her ikisi de kapsamayı %40,7’den %51,9’a çıkarır. Kazançları ise 1,39 ve 0,47 kalemdir; birincisi ötekinin üç katıdır. Aynı büyüklükte bir çaba, aynı yüzde artışı, üç kat farklı sonuç. Fark yalnız çakıştığı adımın zincirdeki sırasından gelir.
İkinci satır daha da keskindir: ilk erişim tamamen örtüldüğünde her zincir birinci adımdan sonra kırılabilir hale gelir ve ortalama kalem 0,00‘a iner — ama **boş adım sayısı 3’te kalır**. Kapsama tablosuna bakan bir değerlendirme bu müdahaleyi “hâlâ üç kör adım var” diye eksik bulur; kalem ölçüsüne bakan bir değerlendirme onu en iyi hamle olarak yazar.
Ters örnek de aynı tablodadır. Yanal geçiş ve toplamanın örtülmesi boş adım sayısını 3’ten 2’ye indirir — kapsama tablosunda görünen tek iyileşme budur — ve kazançları 0,47 ile 0,25 kalemdir, listenin en düşük ikisi. Boş adım sayısını düşürmek ile erken kırma kazancını yükseltmek ayrı hedeflerdir ve aynı müdahaleyi seçmezler.
Son sütun üçüncü bir ölçüt getirir: kırılamayan zincir sayısı. Taban 72’dir. Kalıcılığın kalan tek tekniğini örtmek kapsamayı yalnız %44,4’e çıkarır, boş adım sayısını hiç değiştirmez, ama kırılamayan zinciri 72’den 0’a indirir — çünkü o teknik, kırılamayan zincirlerin hepsinin geçtiği tek ortak boşluktur. Keşifte iki teknik örtmek aynı sayıyı yalnız yarıya indirir. Üç ölçüt üç ayrı satırı seçer; hangi ölçütün kullanıldığı yazılmadan verilen bir kapsama kararı ölçülmemiş sayılır.
Özet
- Saldırgan davranışı sınıflandırmaları adımları sütun, teknik sınıflarını satır yapan bir matris kurar: 8 adım, 27 teknik, adım başına teknik sayılarının çarpımı 10.800 zincir.
- Beş denetim kalemi 27 tekniğin 11’ini görür (%40,7); üç adımda kapsama sıfırdır ve bunlar önceki derste denetimsiz çıkan üç adımın aynısıdır.
- Zincirlerin %96’sı ilk üç kırılabilir halkada kırılır ve ortalama kalem 1,39’dur; kapsamanın zincirin başında toplanması ortalamayı düşük tutar.
- Zincirlerin %1,33’ü (144 zincir) ortalama kalemin %42,6 payını taşır; bunların 72’si hiçbir halkada kırılamaz ve o zincirlerde ölçü kırmadan tespite kayar.
- Aynı kapsama yüzdesini (%51,9) veren iki müdahale 1,39 ve 0,47 kalem kazandırır; fark yalnız örtülen adımın zincirdeki sırasından gelir.
- Üç ölçüt üç ayrı müdahaleyi seçer: kapsama yüzdesi ve kalem kazancı ilk erişimi, boş adım sayısı yanal geçişi, kırılamayan zincir sayısı kalıcılığın kalan tek tekniğini gösterir.
Sonraki Adım
Matris bir soruyu yanıtsız bırakır. 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 bir gözlem eldeyken — bir kayıt, bir bağlantı, bir dosya izi — o gözlemin hangi zincire 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ı vardır ve matristen farklı bir soru sorar: bir olayın dört köşesi — kimin yaptığı, hangi altyapıyı kullandığı, hangi yeteneği taşıdığı ve kimi hedeflediği — birbirine bağlıdır. Bir köşe bilindiğinde diğerleri daralır. Sonraki ders bu daralmayı bağlantı sayımı olarak ölçer: bir köşeyi bilmek diğer üç köşenin kaç adayını eliyor ve hangi köşe zincirin en erken halkasında görünür hale geliyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.