İçeriğe geç
academia.sh

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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat