Ders 03 / 22
Saldırı Yaşam Döngüsü
Kursun ölçü biriminin kurulması: sekiz adımın önkoşullarıyla yazılması, beş ortam koşulundan birinin kaldırılmasının zinciri kesin olarak kesmesi, kırılmadan sona varılırsa 48 kalem erişilirken beklenen kalemin 20,14 olması, hiç kırılmadan sona varan payın (0,2384) beklenen toplamın yarısından fazlasını taşıması, ortam koşulu kaldırmanın 20,14 ile 1,67 kalem arasında değişen kesin kazanç vermesi ve aynı denetim kaleminin sekiz adıma tek tek konmasının 7,05'ten 0,58 kaleme inen bir erken kırma kazancı üretmesi.
İçindekiler
İki ders zinciri iki ayrı eksenden ölçtü: aktörün yeteneği kaç adım geçildiğini, adımın süresi kaç fırsat penceresi doğduğunu belirledi. Her ikisinde de zincirin kendisi verili kabul edildi — sekiz adım, sabit sıra, her adım bir öncekinin ardından.
Zincirin asıl yapısı sıralamada değil önkoşullardadır. Bir adım neye ihtiyaç duyar, o ihtiyaç karşılanmazsa sonraki adım neden olmaz. Bu ders zinciri önkoşullarıyla kurar ve kursun ölçü birimini tanımlar: erken kırma kazancı, aynı savunmanın zincirde bir adım öne alınmasıyla kurtarılan kalem sayısıdır.
Adım Neye İhtiyaç Duyar
Aşağıdaki yapı bir modeldir; adımın nasıl yapıldığı hiçbir yerde yazılmaz, yalnız neye ihtiyaç duyduğu ve neyi sağlar hale getirdiği yazılır. Kurgu ölçüm ağı üzerinde çalışılır.
TM7: ortam koşulları saldırganın üretmediği, savunmanın kaldırabildiği koşullardır. TM8: her adım önkoşulları sağlandığında yürünebilir; denetim varsa bir yakalama olasılığıyla zinciri orada kırar. TM9: bir adım ancak bütün önkoşulları sağlanmışsa yürünebilir; ilk sağlanamayan adım zinciri yapısal olarak keser ve sonraki adımların hiçbiri yürünemez.
// tehdit/dongu.mjs — saldiri yasam dongusunun onkosul modeli: burada calisan bir saldiri adimi // yoktur. Her adim "neye ihtiyac duydugu" (onkosul) ve "neyi saglar hale getirdigi" (uretir) // ile yazilir; adimin nasil yapildigi yazilmaz. Rastgelelik yok, bekleyen deger hesaplanir. // TM7: ortam kosullari, saldirganin uretmedigi, savunmanin kaldirabildigi kosullardir. export const ORTAM = ["dis-gorunur-kalem", "acik-giris-ucu", "yerel-zayif-yapilandirma", "duz-ag", "dis-cikis-yolu"]; // TM8: her adim onkosullari saglandiginda yurunebilir; denetim varsa `yakalama` olasiligiyla // zinciri orada kirar. `kalem`, adim tamamlaninca erisilmis olan birikimli kurgu kalem sayisi. export const ADIM = [ { ad: "kesif", onkosul: ["dis-gorunur-kalem"], uretir: "hedef-listesi", denetim: null, yakalama: 0, kalem: 0 }, { ad: "ilk-erisim", onkosul: ["hedef-listesi", "acik-giris-ucu"], uretir: "gecerli-kimlik", denetim: "kimlik-gunlugu", yakalama: 0.15, kalem: 1 }, { ad: "yurutme", onkosul: ["gecerli-kimlik"], uretir: "kod-calistirma", denetim: "surec-kaydi", yakalama: 0.25, kalem: 2 }, { ad: "kalicilik", onkosul: ["kod-calistirma"], uretir: "yeniden-baslatmada-surer", denetim: "baslatma-envanteri", yakalama: 0.2, kalem: 3 }, { ad: "yetki-yukseltme", onkosul: ["kod-calistirma", "yerel-zayif-yapilandirma"], uretir: "yonetici-yetkisi", denetim: "yetki-degisikligi", yakalama: 0.15, kalem: 9 }, { ad: "yanal-gecis", onkosul: ["yonetici-yetkisi", "duz-ag"], uretir: "komsu-erisimi", denetim: null, yakalama: 0, kalem: 26 }, { ad: "toplama", onkosul: ["komsu-erisimi"], uretir: "toplu-veri", denetim: null, yakalama: 0, kalem: 41 }, { ad: "sizdirma", onkosul: ["toplu-veri", "dis-cikis-yolu"], uretir: "etki", denetim: "cikis-hacmi", yakalama: 0.45, kalem: 48 }, ]; // TM9: bir adim ancak butun onkosullari saglanmissa yurunebilir; ilk saglanamayan adim // zinciri yapisal olarak keser ve sonraki adimlarin hicbiri yurunemez. export function yurunebilir(kaldirilan = []) { const saglanan = new Set(ORTAM.filter((k) => !kaldirilan.includes(k))); let n = 0; for (const s of ADIM) { if (!s.onkosul.every((k) => saglanan.has(k))) break; saglanan.add(s.uretir); n++; } return n; } // Beklenen kalem: zincir i. adimda kirilirsa o ana kadar erisilmis kalem kalem(i-1)'dir. // Kirilma olasiligi, onceki adimlarin kacirma olasiliklarinin carpimi ile o adimin yakalamasidir. export function beklenenKalem(kaldirilan = [], ek = {}) { const son = yurunebilir(kaldirilan); let kalan = 1, toplam = 0; for (let i = 0; i < son; i++) { const p = 1 - (1 - ADIM[i].yakalama) * (1 - (ek[ADIM[i].ad] || 0)); toplam += kalan * p * (i === 0 ? 0 : ADIM[i - 1].kalem); kalan *= 1 - p; } return toplam + kalan * (son === 0 ? 0 : ADIM[son - 1].kalem); }
// tehdit/kazanc.mjs — zincir hangi halkada kirilabiliyor ve erken kirmanin kazanci kac kalem. import { ORTAM, ADIM, yurunebilir, beklenenKalem } from "./dongu.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 TABAN = beklenenKalem(); const denetimsiz = ADIM.filter((s) => !s.denetim); console.log(`${ADIM.length} adim, ${ORTAM.length} ortam kosulu; ` + `${ADIM.length - denetimsiz.length} adimda denetim var, ${denetimsiz.length} adim ` + `hicbir denetimin gormedigi adim (${denetimsiz.map((s) => s.ad).join(", ")}); ` + `kirilmadan erisilen kalem ${ADIM.at(-1).kalem}, beklenen kalem ${TABAN.toFixed(2)}`); const A = [-18, -42, -26, 20, 10, 7]; console.log("\n1. her adim neye ihtiyac duyuyor, ne saglar hale getiriyor"); yaz(A, "adim", "onkosul", "uretir", "denetim", "yakalama", "kalem"); for (const s of ADIM) yaz(A, s.ad, s.onkosul.join(" + "), s.uretir, s.denetim || "-", s.denetim ? s.yakalama.toFixed(2) : "-", s.kalem); const B = [-26, -18, 12, 15, 11]; console.log("\n2. yapisal kirma: bir ortam kosulu kaldirilirsa"); yaz(B, "kaldirilan kosul", "imkansiz adim", "yurunen adim", "beklenen kalem", "kazanc"); for (const k of ORTAM) { const n = yurunebilir([k]), e = beklenenKalem([k]); yaz(B, k, ADIM[n].ad, n, e.toFixed(2), (TABAN - e).toFixed(2)); } const C = [-18, 10, 14, 17, 13, 13]; console.log("\n3. olasilikli kirma: zincir hangi adimda kiriliyor"); yaz(C, "adim", "yakalama", "buraya varan", "burada kirilan", "o ana kalem", "katki"); let kalan = 1, toplam = 0; for (let i = 0; i < ADIM.length; i++) { const p = ADIM[i].yakalama, kirilan = kalan * p, once = i === 0 ? 0 : ADIM[i - 1].kalem; toplam += kirilan * once; yaz(C, ADIM[i].ad, p.toFixed(2), kalan.toFixed(4), kirilan.toFixed(4), once, (kirilan * once).toFixed(3)); kalan -= kirilan; } console.log(`hic kirilmadan sona varan pay ${kalan.toFixed(4)} x ${ADIM.at(-1).kalem} kalem = ` + `${(kalan * ADIM.at(-1).kalem).toFixed(3)}; beklenen kalem toplami ` + `${(toplam + kalan * ADIM.at(-1).kalem).toFixed(2)}`); const D = [-18, 10, 16, 10, 23]; console.log("\n4. erken kirma kazanci: ayni denetim kalemi (yakalama 0.35) hangi adima konursa"); yaz(D, "konan adim", "onceki", "beklenen kalem", "kazanc", "bir onceki adima gore"); let oncekiKazanc = null; for (const s of ADIM) { const e = beklenenKalem([], { [s.ad]: 0.35 }), kazanc = TABAN - e; yaz(D, s.ad, s.denetim ? s.yakalama.toFixed(2) : "yok", e.toFixed(2), kazanc.toFixed(2), oncekiKazanc === null ? "-" : (kazanc - oncekiKazanc).toFixed(2)); oncekiKazanc = kazanc; } const enIyi = ADIM.map((s) => ({ ad: s.ad, k: TABAN - beklenenKalem([], { [s.ad]: 0.35 }) })) .sort((x, y) => y.k - x.k); console.log(`en yuksek kazanc ${enIyi[0].ad} (${enIyi[0].k.toFixed(2)} kalem), en dusuk ` + `${enIyi.at(-1).ad} (${enIyi.at(-1).k.toFixed(2)}); denetimsiz uc adimin en iyisi ` + `${enIyi.find((x) => denetimsiz.some((s) => s.ad === x.ad)).ad}`);
8 adim, 5 ortam kosulu; 5 adimda denetim var, 3 adim hicbir denetimin gormedigi adim (kesif, yanal-gecis, toplama); kirilmadan erisilen kalem 48, beklenen kalem 20.14 1. her adim neye ihtiyac duyuyor, ne saglar hale getiriyor adim onkosul uretir denetim yakalama kalem kesif dis-gorunur-kalem hedef-listesi - - 0 ilk-erisim hedef-listesi + acik-giris-ucu gecerli-kimlik kimlik-gunlugu 0.15 1 yurutme gecerli-kimlik kod-calistirma surec-kaydi 0.25 2 kalicilik kod-calistirma yeniden-baslatmada-surer baslatma-envanteri 0.20 3 yetki-yukseltme kod-calistirma + yerel-zayif-yapilandirma yonetici-yetkisi yetki-degisikligi 0.15 9 yanal-gecis yonetici-yetkisi + duz-ag komsu-erisimi - - 26 toplama komsu-erisimi toplu-veri - - 41 sizdirma toplu-veri + dis-cikis-yolu etki cikis-hacmi 0.45 48 2. yapisal kirma: bir ortam kosulu kaldirilirsa kaldirilan kosul imkansiz adim yurunen adim beklenen kalem kazanc dis-gorunur-kalem kesif 0 0.00 20.14 acik-giris-ucu ilk-erisim 1 0.00 20.14 yerel-zayif-yapilandirma yetki-yukseltme 4 2.00 18.14 duz-ag yanal-gecis 5 4.60 15.54 dis-cikis-yolu sizdirma 7 18.47 1.67 3. olasilikli kirma: zincir hangi adimda kiriliyor adim yakalama buraya varan burada kirilan o ana kalem katki kesif 0.00 1.0000 0.0000 0 0.000 ilk-erisim 0.15 1.0000 0.1500 0 0.000 yurutme 0.25 0.8500 0.2125 1 0.212 kalicilik 0.20 0.6375 0.1275 2 0.255 yetki-yukseltme 0.15 0.5100 0.0765 3 0.229 yanal-gecis 0.00 0.4335 0.0000 9 0.000 toplama 0.00 0.4335 0.0000 26 0.000 sizdirma 0.45 0.4335 0.1951 41 7.998 hic kirilmadan sona varan pay 0.2384 x 48 kalem = 11.444; beklenen kalem toplami 20.14 4. erken kirma kazanci: ayni denetim kalemi (yakalama 0.35) hangi adima konursa konan adim onceki beklenen kalem kazanc bir onceki adima gore kesif yok 13.09 7.05 - ilk-erisim 0.15 13.09 7.05 0.00 yurutme 0.25 13.39 6.75 -0.30 kalicilik 0.20 13.61 6.53 -0.22 yetki-yukseltme 0.15 13.79 6.35 -0.18 yanal-gecis yok 14.70 5.44 -0.91 toplama yok 17.28 2.86 -2.58 sizdirma 0.45 19.56 0.58 -2.28 en yuksek kazanc kesif (7.05 kalem), en dusuk sizdirma (0.58); denetimsiz uc adimin en iyisi kesif
Sayılar ölçüm sınıfındadır; girdileri TM7–TM9’dur.
Önkoşul Sütunu Zincirin Kendisidir
Birinci tablonun ikinci sütunu bu dersin taşıyıcısıdır. Her adım ne yaptığıyla değil, neyin var olmasını gerektirdiğiyle yazılır. Yürütme adımı geçerli kimlik ister; kalıcılık adımı kod çalıştırma ister; yanal geçiş hem yönetici yetkisi hem düz ağ ister. Adımın hangi yöntemle yapıldığı burada hiç geçmez ve geçmesi de gerekmez — savunma tarafının kararı için gereken tek bilgi ihtiyaç listesidir.
Üçüncü sütun eşleşmeyi kapatır: her adım bir koşul üretir ve o koşul sonraki adımın önkoşulunda yer alır. Zincir bu yüzden bir sıra değil, bir bağımlılık dizisidir. Sıra bozulamaz, çünkü her adımın girdi koşulu bir öncekinden gelir.
Önkoşullar iki kaynaktan doldurulur. Bir kısmı zincirin kendi ürettiği koşullardır; kalanı ortam koşullarıdır — dışarıdan görünen kalem, açık giriş ucu, yerel zayıf yapılandırma, düz ağ ve dış çıkış yolu. Beş ortam koşulunun hiçbirini saldıran taraf üretmez; hepsi savunma tarafının elindedir. Bu ayrım bir sonraki tablonun tamamını belirler.
İki Ayrı Kırma Biçimi
Zincir iki şekilde kırılabilir ve ikisi ölçü olarak birbirine benzemez.
Yapısal kırma bir önkoşulu ortadan kaldırır. İkinci tablo beş ortam koşulunu tek tek kaldırır ve hangi adımın imkânsız hale geldiğini yazar. Dışarıdan görünen kalem kaldırılırsa keşif adımı yürünemez ve zincir hiç başlamaz; açık giriş ucu kaldırılırsa ilk erişim yürünemez. Her iki durumda beklenen kalem 0,00’dır ve kazanç 20,14 kalemin tamamıdır. Yerel zayıf yapılandırmanın kaldırılması zinciri dördüncü adımdan sonra keser (2,00 kalem), düz ağın kaldırılması beşinci adımdan sonra (4,60), dış çıkış yolunun kaldırılması ise yedinci adımdan sonra — beklenen kalem 18,47 ve kazanç yalnız 1,67.
Aynı türden bir hamlenin değeri, zincirin neresinde uygulandığına göre on iki kat değişir. Dış çıkış yolunu kapatmak, toplamanın tamamlanmasına izin verdiği için 41 kalemi zaten kaybettirmiş olur.
Olasılıklı kırma ise adımı yürünebilir bırakır ve bir denetimin görmesini bekler. Üçüncü tablo bunu yürütür: her adıma varan pay, orada kırılan pay ve o ana kadar erişilmiş kalem. Beş denetimin yakalama oranları 0,15 ile 0,45 arasındadır; bunların hiçbiri kesin değildir. Zincirin sonuna hiç kırılmadan varan pay 0,2384’tür ve tek başına 11,44 kalem taşır — beklenen 20,14 kalemin yarısından fazlası. Beş denetimli bir zincirde en büyük tek kalem, hiç kırılmama payıdır.
Beklenen kalem sayısı bir tahmin değil, girdilerden türetilen bir toplamdır: her satırın katkısı o adımda kırılma payı ile o ana kadar erişilmiş kalemin çarpımıdır ve sekiz satırın toplamı 20,14’tür. Model iki şeyi varsayar — denetimlerin birbirinden bağımsız olduğu ve bir denetimin gördüğü anda zinciri durdurduğu. İkisi de iyimser varsayımlardır; gerçek bir kurulumda uyarının görülmesi ile yanıt verilmesi arasında geçen süre kalem sayısını daha da büyütür. Bu yüzden 20,14 sayısı bir üst sınır değil, alt sınırdır.
Denetimsiz Üç Adım
Üçüncü tablonun en dikkat çekici satırları yanal geçiş ve toplamadır. İkisinin de yakalama oranı 0,00’dır, ikisi de hiçbir zinciri kırmaz — ama ikisi zincirin kalem sayısını 3’ten 41’e çıkarır. Kalem artışının %79’u, hiçbir denetimin bakmadığı iki adımda olur.
Bu, savunma tarafında sık görülen bir dağılımın sonucudur. Denetimler kaydı bol olan adımlara konur: kimlik girişleri, süreç başlatmaları, yetki değişiklikleri. Yanal geçiş ve toplama adımları kendi başlarına yeni bir kayıt türü doğurmaz; zaten var olan yetkilerle, zaten var olan yollardan yürünür. Denetim, olayın gürültüsünü izler; kalem ise sessiz adımlarda birikir.
Keşif adımı üçüncü denetimsiz adımdır ama ters uçtadır: kalem sayısını hiç artırmaz, çünkü henüz hiçbir şeye dokunulmamıştır. Denetimsizlik aynı sözcüktür, sonucu iki farklı yerde iki farklı şeydir.
Erken Kırma Kazancı
Dördüncü tablo bu kursun ölçü birimini tanımlar. Elde tek bir denetim kalemi vardır — yakalama oranı 0,35 — ve sekiz adıma tek tek konur. Her satırda beklenen kalem yeniden hesaplanır; kazanç, tabandan olan farktır.
Kazanç sırası şudur: 7,05, 7,05, 6,75, 6,53, 6,35, 5,44, 2,86, 0,58. Aynı denetim, zincirin başında sonundakinin on iki katı kadar kalem kazandırır. İlk iki satırın eşitliği yapısaldır: keşifte ya da ilk erişimde kırmak aynı sonucu verir, çünkü ikisinde de henüz hiçbir kaleme dokunulmamıştır.
Son sütun bir adım gecikmenin bedelini ayrı ayrı verir. Zincirin ilk beş adımında bu bedel küçüktür — 0,00 ile 0,30 arasında. Yanal geçişte 0,91, toplamada 2,58, sızdırmada 2,28’dir. Kayıp düzgün dağılmaz: ilk beş adımda gecikmek neredeyse bedava, beşinciden sonra her adım bir öncekinin üç katıdır. Sıralama tesadüf değildir; kalem sayısı da tam orada 3’ten 26’ya sıçrar.
Denetimsiz üç adım arasında en iyi seçim keşiftir (7,05), en kötüsü toplamadır (2,86). Elde tek bir denetim kalemi olan bir ekip için karar burada yazılıdır: hiç bakılmayan üç adımdan en erkenine koymak, en geç olanına koymanın 2,5 katı kalem kurtarır.
Yine de dördüncü tablonun en yüksek satırı bile ikinci tablonun en düşük satırına ancak yaklaşır. En iyi denetim yerleştirmesi 7,05 kalem kazandırır; en zayıf yapısal kırma 1,67, ama en güçlüsü 20,14 kazandırır. Bir önkoşulu kaldırmak kesin, bir denetim koymak olasılıklıdır. Ölçü birimi aynıdır, büyüklük sınıfı değildir.
Özet
- Saldırı yaşam döngüsü adımların nasıl yapıldığıyla değil, neye ihtiyaç duyduklarıyla yazılır; her adım bir koşul üretir ve o koşul sonraki adımın önkoşuludur.
- Beş önkoşul saldıranın üretmediği ortam koşullarıdır; birini kaldırmak zinciri kesin olarak keser ve kazanç 20,14 ile 1,67 kalem arasında değişir — aynı hamle zincirin başında on iki kat değerlidir.
- Beş denetimin yakalama oranı 0,15 ile 0,45 arasındadır; zincirin sonuna hiç kırılmadan varan pay 0,2384’tür ve 11,44 kalem taşır, yani beklenen 20,14 kalemin yarısından fazlası.
- Üç adım hiçbir denetimin görmediği adımdır; ikisi (yanal geçiş, toplama) kalem sayısını 3’ten 41’e çıkarır, yani artışın %79’unu taşır.
- Erken kırma kazancı bu kursun ölçü birimidir: aynı denetim kalemi sekiz adıma tek tek konduğunda 7,05’ten 0,58 kaleme inen bir kazanç dizisi verir.
- Bir adım geç kırmanın bedeli ilk beş adımda 0,30 kalemin altındadır, altıncıdan sonra 0,91, 2,58 ve 2,28 kalemdir; kalem sayısının 3’ten 26’ya sıçradığı yerde bedel de sıçrar.
Sonraki Adım
Bu 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ş bir satırdır burada; oysa altında birbirinden bağımsız birçok teknik 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şluğu doldurmak için kurulmuştur: adımlar sütun, teknikler satır olarak dizilir ve her hücreye bir denetim eşlenir. Sonraki ders bu yapıyı kurar ve tek soruyu sorar: kapsama yüzdesi yükselirken hiç denetimi olmayan adım sayısı düşüyor mu, yoksa kapsama yalnız zaten görülen adımlarda mı büyüyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.