Ders 08 / 11
Tehdit Sınıflandırma Yöntemleri
Sistematik tehdit üretiminin iki sayısı: 43 çizge öğesine altı kategorinin uygulanmasıyla 156 ham tehdit üretilmesi, bunların 108'inin (%69,2) bu sistem için anlamlı, 48'inin geçersiz çıkması, elemenin 72 dakikayı karşılıksız harcaması, toplam oturum yükünün 666 dakika olması ve yalnız dışa açık öğelerle sınırlı üretimin anlamlı tehditlerin %92,6'sını 63,5 dakika daha ucuza bulması.
İçindekiler
Önceki ders 23 sınır geçişinden 58 kalem çıkardı. O 58 kalem bir tehdit listesi değildi: her biri bir denetim türü söylüyordu — “burada bir kaynak kimliği gerekir”, “burada bir yetkilendirme gerekir”. Neyin ters gidebileceğini söylemiyordu.
Aradaki farkı kapatan adım, çizge öğesine bakıp “burada ne olabilir” diye sormaktır. Bu soru kişiye ve o günkü dikkate bağlıdır; iki kişi iki ayrı liste üretir. Kişiden bağımsız hale getiren şey, her öğe türüne sabit bir kategori listesi uygulamaktır. Bu ders o sistematik üretimi koşturur ve iki sayıyı ayırır: yöntem kaç tehdit üretiyor, bunların kaçı bu sistem için gerçekten geçerli.
Öğe Türü Başına Sabit Soru Listesi
Yaygın olarak kullanılan yöntem, her veri akış çizgesi öğesine sistematik tehdit üreten bir sınıflandırma yöntemidir. Altı kategoriden oluşur ve kategoriler işleviyle anılır: kimlik taklidi, kurcalama, inkâr, bilgi ifşası, hizmet engelleme ve yetki yükseltme. Yöntemin tek kuralı vardır: her öğeye, türünde uygulanabilir olan kategorilerin tamamı sorulur — biri atlanmaz, biri fazladan eklenmez.
Aşağıdaki envanter bir modeldir; önceki dersteki çizgenin aynı yapısıdır ve hiçbir saldırı adımı taşımaz. Öğe özellikleri elle yazılmaz, çizgeden türetilir.
TD9: her öğenin beş özelliği çizgeden hesaplanır — dışa açıklık, gizli sınıf taşıma, iş akışında olma, çok rollülük ve işlem üretme. TD10: üretim, öğe türüne uygulanabilir kategorilerin çarpımıdır. TD11: üretilen tehdit, öğenin özelliği ilgili koşulu sağlamıyorsa bu sistem için geçersizdir. TD12: her ham tehdit sabit bir eleme süresi, anlamlı bulunan her tehdit ek bir yazım süresi harcar.
// tehdit/oge.mjs — cizge ogelerinin envanteri (model): 02'deki cizgenin ayni yapisi, bu kez // oge listesi olarak. Gercek bir sistem yoktur; hicbir saldiri adimi tasinmaz. const BOLGE = { internet: 0, saha: 1, "dis-uc": 2, ic: 3, yonetim: 4, veri: 5 }; const DUGUM = Object.fromEntries(` abone D internet | denetim-kurumu D internet | sayac-cihazi D saha | saha-ekibi D saha abone-portali S dis-uc | toplama-ucu S dis-uc | saha-uygulamasi S saha dogrulayici S ic | faturalama S ic | is-emri S ic | rapor-ureteci S ic | kimlik-servisi S ic yonetim-konsolu S yonetim | olcum-deposu P veri | fatura-deposu P veri kimlik-deposu P veri | denetim-gunlugu P veri` .trim().split(/\s*[|\n]\s*/).map((r) => { const [ad, tur, bolge] = r.trim().split(/\s+/); return [ad, { ad, tur, bolge, duzey: BOLGE[bolge] }]; })); const AKIS = ` abone abone-portali kimlik | abone-portali kimlik-servisi kimlik kimlik-servisi kimlik-deposu kimlik | abone-portali faturalama fatura faturalama fatura-deposu fatura | faturalama abone-portali fatura sayac-cihazi toplama-ucu olcum | toplama-ucu dogrulayici olcum dogrulayici olcum-deposu olcum | dogrulayici faturalama olcum saha-ekibi saha-uygulamasi kimlik | saha-uygulamasi is-emri emir is-emri saha-uygulamasi emir | is-emri olcum-deposu olcum saha-uygulamasi toplama-ucu olcum | yonetim-konsolu dogrulayici ayar yonetim-konsolu toplama-ucu ayar | yonetim-konsolu kimlik-servisi ayar rapor-ureteci olcum-deposu olcum | rapor-ureteci fatura-deposu fatura denetim-kurumu rapor-ureteci kimlik | rapor-ureteci denetim-kurumu fatura faturalama denetim-gunlugu kayit | kimlik-servisi denetim-gunlugu kayit is-emri denetim-gunlugu kayit | faturalama is-emri emir` .trim().split(/\s*[|\n]\s*/).map((r) => { const [kaynak, hedef, sinif] = r.trim().split(/\s+/); return { kaynak, hedef, sinif, ad: `${kaynak}->${hedef}` }; }); // TD9: her ogenin ozelligi cizgeden turetilir; elle yazilmaz. const gelen = (d) => AKIS.filter((a) => a.hedef === d); const giden = (d) => AKIS.filter((a) => a.kaynak === d); const komsu = (d) => [...gelen(d), ...giden(d)]; const gizliSinif = (s) => s === "kimlik" || s === "fatura"; const isSinif = (s) => s === "olcum" || s === "fatura" || s === "emir"; export const OGE = [ ...Object.values(DUGUM).map((d) => ({ ad: d.ad, tur: d.tur, disaAcik: d.tur === "D" ? giden(d.ad).length > 0 : gelen(d.ad).some((a) => DUGUM[a.kaynak].duzey < d.duzey), gizli: komsu(d.ad).some((a) => gizliSinif(a.sinif)), kritik: komsu(d.ad).some((a) => isSinif(a.sinif)), cokRol: new Set(gelen(d.ad).map((a) => DUGUM[a.kaynak].bolge)).size >= 2, islem: d.tur === "P" || (d.tur === "D" ? giden(d.ad).length > 0 : giden(d.ad).some((a) => DUGUM[a.hedef].tur === "P")), })), ...AKIS.map((a) => ({ ad: a.ad, tur: "A", disaAcik: DUGUM[a.kaynak].bolge !== DUGUM[a.hedef].bolge, gizli: gizliSinif(a.sinif), kritik: isSinif(a.sinif), cokRol: false, islem: false, })), ]; // TD10: sistematik uretim, her oge turune o turde uygulanabilir kategorileri uygular. export const KATEGORI = ["kimlik-taklidi", "kurcalama", "inkar", "bilgi-ifsasi", "hizmet-engelleme", "yetki-yukseltme"]; export const UYGULANIR = { D: ["kimlik-taklidi", "inkar"], S: KATEGORI, P: ["kurcalama", "inkar", "bilgi-ifsasi", "hizmet-engelleme"], A: ["kurcalama", "bilgi-ifsasi", "hizmet-engelleme"], }; // TD11: uretilen tehdit, ogenin ozelligi asagidaki kosulu saglamiyorsa gecersizdir. export const GECERLI = { "kimlik-taklidi": (o) => o.disaAcik, "kurcalama": (o) => o.tur !== "A" || o.disaAcik, "inkar": (o) => o.islem, "bilgi-ifsasi": (o) => o.gizli, "hizmet-engelleme": (o) => o.kritik, "yetki-yukseltme": (o) => o.cokRol, }; // TD12: her uretilen tehdit sabit bir eleme suresi, anlamli bulunan her tehdit ek bir // yazim suresi harcar (kurgu dakika). export const ELEME_DK = 1.5, YAZIM_DK = 4;
// tehdit/uretim.mjs — sistematik uretim kac tehdit veriyor, kaci bu sistem icin gecersiz, // eleme kac dakika aliyor. import { OGE, KATEGORI, UYGULANIR, GECERLI, ELEME_DK, YAZIM_DK } from "./oge.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 uret = (ler) => ler.flatMap((o) => UYGULANIR[o.tur].map((k) => ({ oge: o, kategori: k, gecerli: GECERLI[k](o) }))); const HAM = uret(OGE), ANLAMLI = HAM.filter((t) => t.gecerli); const TUR = { D: "dis varlik", S: "surec", P: "veri deposu", A: "veri akisi" }; console.log(`${OGE.length} oge, ${KATEGORI.length} kategori; ham uretim ${HAM.length} tehdit, ` + `anlamli ${ANLAMLI.length} (%${((ANLAMLI.length / HAM.length) * 100).toFixed(1)}), ` + `gecersiz ${HAM.length - ANLAMLI.length}`); const A = [-13, 7, 10, 8, 9, 10, 11]; console.log("\n1. oge turu basina uretim"); yaz(A, "oge turu", "oge", "kategori", "ham", "anlamli", "gecersiz", "anlamli %"); for (const t of ["D", "S", "P", "A"]) { const o = OGE.filter((x) => x.tur === t), h = uret(o), g = h.filter((x) => x.gecerli); yaz(A, TUR[t], o.length, UYGULANIR[t].length, h.length, g.length, h.length - g.length, ((g.length / h.length) * 100).toFixed(1)); } const B = [-18, 8, 9, 10, 11, 2, -22]; console.log("\n2. kategori basina uretim ve eleme"); yaz(B, "kategori", "ham", "anlamli", "gecersiz", "anlamli %", "", "gecerlilik kosulu"); const KOSUL = { "kimlik-taklidi": "disa acik", "kurcalama": "akis ise sinir gecen", "inkar": "islem uretiyor", "bilgi-ifsasi": "gizli sinif tasiyor", "hizmet-engelleme": "is akisinda", "yetki-yukseltme": "cok rollu surec" }; for (const k of KATEGORI) { const h = HAM.filter((t) => t.kategori === k), g = h.filter((t) => t.gecerli); yaz(B, k, h.length, g.length, h.length - g.length, ((g.length / h.length) * 100).toFixed(1), "", KOSUL[k]); } const C = [-26, 9, 10, 11, 12, 13]; console.log("\n3. uc uretim kumesi: hepsi, yalniz disa acik, yalniz surecler"); yaz(C, "sira", "oge", "ham", "anlamli", "toplam dk", "anlamli/dk"); const kume = { "butun ogeler": OGE, "yalniz disa acik ogeler": OGE.filter((o) => o.disaAcik), "yalniz surecler": OGE.filter((o) => o.tur === "S") }; for (const [ad, ler] of Object.entries(kume)) { const h = uret(ler), g = h.filter((x) => x.gecerli); const dk = h.length * ELEME_DK + g.length * YAZIM_DK; yaz(C, ad, ler.length, h.length, g.length, dk.toFixed(1), (g.length / dk).toFixed(3)); } const disa = uret(OGE.filter((o) => o.disaAcik)).filter((x) => x.gecerli); console.log(`disa acik ogelerle sinirli uretim, anlamli tehditlerin ` + `%${((disa.length / ANLAMLI.length) * 100).toFixed(1)}'ini buluyor; kacirdigi ` + `${ANLAMLI.length - disa.length} tehdit yalnizca ic ogelerde doguyor`); const KOD = Object.fromEntries(KATEGORI.map((k) => [k, k.slice(0, 2).toUpperCase()])); const D = [-32, -12, 6, 9, 2, -20]; console.log("\n4. en cok ve en az anlamli tehdit dogduran uc oge (" + KATEGORI.map((k) => `${KOD[k]}=${k}`).join(", ") + ")"); yaz(D, "oge", "tur", "ham", "anlamli", "", "anlamli kategoriler"); const sirali = OGE.map((o) => ({ o, h: UYGULANIR[o.tur], g: UYGULANIR[o.tur].filter((k) => GECERLI[k](o)) })).sort((x, y) => y.g.length - x.g.length); for (const s of [...sirali.slice(0, 3), ...sirali.slice(-3)]) yaz(D, s.o.ad, TUR[s.o.tur], s.h.length, s.g.length, "", s.g.map((k) => KOD[k]).join(" ") || "-"); for (const t of ["S", "A"]) { const g = ANLAMLI.filter((x) => x.oge.tur === t).length; console.log(`${TUR[t]} ogeleri: ogelerin ` + `%${((OGE.filter((o) => o.tur === t).length / OGE.length) * 100).toFixed(1)}'i, ` + `anlamli tehditlerin %${((g / ANLAMLI.length) * 100).toFixed(1)}'i`); } console.log(`gecersiz ${HAM.length - ANLAMLI.length} tehdidin elenmesi ` + `${((HAM.length - ANLAMLI.length) * ELEME_DK).toFixed(1)} dakika harcar ve karsiligi sifirdir`);
43 oge, 6 kategori; ham uretim 156 tehdit, anlamli 108 (%69.2), gecersiz 48 1. oge turu basina uretim oge turu oge kategori ham anlamli gecersiz anlamli % dis varlik 4 2 8 8 0 100.0 surec 9 6 54 40 14 74.1 veri deposu 4 4 16 12 4 75.0 veri akisi 26 3 78 48 30 61.5 2. kategori basina uretim ve eleme kategori ham anlamli gecersiz anlamli % gecerlilik kosulu kimlik-taklidi 13 11 2 84.6 disa acik kurcalama 39 36 3 92.3 akis ise sinir gecen inkar 17 13 4 76.5 islem uretiyor bilgi-ifsasi 39 17 22 43.6 gizli sinif tasiyor hizmet-engelleme 39 24 15 61.5 is akisinda yetki-yukseltme 9 7 2 77.8 cok rollu surec 3. uc uretim kumesi: hepsi, yalniz disa acik, yalniz surecler sira oge ham anlamli toplam dk anlamli/dk butun ogeler 43 156 108 666.0 0.162 yalniz disa acik ogeler 38 135 100 602.5 0.166 yalniz surecler 9 54 40 241.0 0.166 disa acik ogelerle sinirli uretim, anlamli tehditlerin %92.6'ini buluyor; kacirdigi 8 tehdit yalnizca ic ogelerde doguyor 4. en cok ve en az anlamli tehdit dogduran uc oge (KI=kimlik-taklidi, KU=kurcalama, IN=inkar, BI=bilgi-ifsasi, HI=hizmet-engelleme, YE=yetki-yukseltme) oge tur ham anlamli anlamli kategoriler faturalama surec 6 6 KI KU IN BI HI YE abone-portali surec 6 5 KI KU BI HI YE dogrulayici surec 6 5 KI KU IN HI YE kimlik-servisi->denetim-gunlugu veri akisi 3 1 KU is-emri->denetim-gunlugu veri akisi 3 1 KU faturalama->is-emri veri akisi 3 1 HI surec ogeleri: ogelerin %20.9'i, anlamli tehditlerin %37.0'i veri akisi ogeleri: ogelerin %60.5'i, anlamli tehditlerin %44.4'i gecersiz 48 tehdidin elenmesi 72.0 dakika harcar ve karsiligi sifirdir
Sayılar ölçüm sınıfındadır; girdileri TD9–TD12’dir.
Yüz Elli Altı Ham Tehdit
Kırk üç öğeye altı kategorinin uygulanabilir olanları sorulduğunda 156 ham tehdit çıkar. Üretim ucuzdur ve otomatiktir: kimse “burada ne olabilir” diye düşünmez, tablo doldurulur. Yöntemin bütün değeri buradan gelir — hiçbir öğe atlanmaz ve liste kişiye göre değişmez.
Birinci tablo üretimin nereden geldiğini gösterir. Yirmi altı veri akışı öğesi üçer kategori alarak 78 tehdit üretir, yani ham üretimin yarısını. Dokuz süreç öğesi ise altışar kategori alır ve 54 tehdit üretir. Dört dış varlık öğesi yalnız iki kategori alır: dış varlığa kurcalama ya da yetki yükseltme sorulmaz, çünkü öğe sistemin dışındadır ve içeride bir yetkisi yoktur.
İkinci tabloda ham sayı kategori kategori dağılır. Kurcalama, bilgi ifşası ve hizmet engelleme 39’ar tehditle en kalabalık üçlüdür; üçü de hem süreçlerde hem depolarda hem akışlarda uygulanabilir olduğu için toplam öğe sayısına yakın bir sayı üretirler. Yetki yükseltme yalnız dokuz tehdit üretir, çünkü yalnız süreçlerde sorulur.
Yüz Sekizi Anlamlı
İkinci sayı elemeden sonra çıkar. Yüz elli altı ham tehdidin 108’i bu sistem için anlamlıdır (%69,2), 48’i geçersizdir. Geçersizlik keyfi değildir: her kategorinin bir geçerlilik koşulu vardır ve koşul öğenin çizgeden türetilen özelliğine bakar.
Ayrım kategoriden kategoriye çok değişir. Kurcalamanın %92,3’ü anlamlıdır; koşulu yalnız akışlar için sınır geçmeyi ister ve akışların 26’sının 23’ü sınır geçer. Bilgi ifşasının ise yalnız %43,6’sı anlamlıdır: koşul öğenin gizli sınıf — kimlik ya da fatura — taşımasıdır ve ölçüm, ayar ve kayıt sınıfı taşıyan 22 öğede kategori boşa düşer. Hizmet engelleme ortadadır (%61,5): iş akışında olmayan öğelerin kesintisi işi durdurmaz.
Dördüncü tablo aynı ayrımı öğe düzeyinde gösterir. faturalama altı kategorinin altısında da
anlamlı tehdit doğurur — dışa açıktır, gizli sınıf taşır, iş akışındadır, çok rollüdür ve bir
depoya yazar. Karşı uçta is-emri->denetim-gunlugu gibi akışlar üç kategoriden yalnız birinde
anlamlıdır. Yoğunlaşma dikkat çekicidir: dokuz süreç öğesi, öğelerin yalnız %20,9’u olmasına
karşın anlamlı tehditlerin %37,0’sini taşır; 26 veri akışı öğesi ise öğelerin %60,5’i olup
tehditlerin %44,4’ünü taşır.
Elemenin Dakikası
Üretimin ucuzluğu elemeyi pahalı hale getirir. Her ham tehdit değerlendirilmek zorundadır — geçersiz olan da. Modelde bir tehdidin elenmesi 1,5 kurgu dakika, anlamlı bulunan bir tehdidin yazılması ek 4 dakika sürer.
Toplam 666 dakikadır, yani 11,1 saat. Bunun 234 dakikası eleme, 432 dakikası yazımdır. Elemenin 72 dakikası geçersiz 48 tehdit için harcanır ve karşılığı sıfırdır — hiçbir karşı önleme dönüşmeyecek satırların okunup atılması. Tehdit modelleme oturumunun süresi bu yüzden üretilen tehdit sayısıyla değil, elenen tehdit sayısıyla birlikte okunmalıdır.
Üçüncü tablo üç ayrı üretim kümesini karşılaştırır. Bütün öğeler: 156 ham, 108 anlamlı, 666 dakika, dakika başına 0,162 anlamlı tehdit. Yalnız dışa açık öğeler: 135 ham, 100 anlamlı, 602,5 dakika, dakika başına 0,166. Yalnız süreçler: 54 ham, 40 anlamlı, 241 dakika, yine 0,166.
Üç kümenin dakika verimliliği neredeyse aynıdır ve bu, beklenenin tersidir. Sınır geçen öğelere öncelik vermek 63,5 dakika kazandırır ve 8 tehdit kaybettirir — kazanç toplamın onda birinden azdır, çünkü öğelerin %88’i zaten dışa açıktır. Yalnız süreçlere bakmak ise 425 dakika kazandırır ama anlamlı tehditlerin %63’ünü dışarıda bırakır.
Buradan çıkan karar şudur: bu yöntemde kısayol, verimliliği artırarak değil kapsamayı küçülterek çalışır. Süreyi düşürmek isteyen bir ekip için tek dürüst yol, hangi öğe kümesinin dışarıda bırakıldığını yazmaktır.
Özet
- Sistematik üretim, 43 çizge öğesine türlerinde uygulanabilir kategorileri sorarak 156 ham tehdit çıkarır; üretim ucuzdur, kişiye göre değişmez ve hiçbir öğeyi atlamaz.
- Ham tehditlerin 108’i (%69,2) bu sistem için anlamlı, 48’i geçersizdir; geçerlilik koşulu öğenin çizgeden türetilen özelliğine bakar.
- Anlamlılık kategoriye göre %43,6 ile %92,3 arasında değişir; bilgi ifşası 22 öğede boşa düşer, kurcalama neredeyse hiç düşmez.
- Oturumun süresi 666 dakikadır; 72 dakikası geçersiz tehditlerin elenmesine gider ve karşılığı sıfırdır. Süre üretilen tehditle değil elenen tehditle birlikte okunur.
- Üç üretim kümesinin dakika verimliliği neredeyse aynıdır (0,162–0,166); kısayol verimlilikten değil kapsamadan tasarruf eder — yalnız süreçlere bakmak anlamlı tehditlerin %63’ünü kaçırır.
Sonraki Adım
Sistematik üretim öğeden başlar: her kutuya, her oka ve her depoya aynı sorular sorulur. Bu yaklaşımın gücü de sınırı da aynı yerdedir — öğeyi tek başına ele alır. Yüz sekiz anlamlı tehdidin her biri bir öğe ile bir kategorinin kesişimidir; hiçbiri iki öğenin birlikte kullanılmasından doğmaz.
Oysa gerçek bir zarar çoğunlukla tek bir öğede değil, birkaç öğenin arka arkaya kullanılmasında oluşur: bir yerde elde edilen bilgi başka bir yerde geçerli hale gelir. Bu tür kalemleri bulmanın yolu öğeden değil hedeften başlamaktır — saldırgan ne elde etmek ister ve buraya hangi yoldan gelir. Sonraki ders senaryo temelli modellemeyi aynı çizgede koşturur ve kapsama ekseninde ölçer: senaryolar kaç tehdit buluyor, sistematik yöntemin bulduğunun kaçını kaçırıyor ve ikisinin kesişimi ne.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.