Ders 02 / 15
Varlık, Tehdit ve Açık
Üç terimin aynı envanterde ayrılması: 8 varlık, 6 tehdit ve 12 açığın kartezyen çarpımı 576 iken geçerli üçlü sayısının 19'a, yani %3,3'e inmesi, ikişer açık taşıyan iki varlığın 1 ve 4 üçlü üretmesi, hiçbir tehdidin ulaşamadığı bir açığın sıfır üçlü taşıması, aynı beş üçlüyü taşıyan iki tehdidin 4 ve 5 ayrı varlığa dokunması, on iki açıktan beşinin kapatılmasının 19 üçlünün 12'sini kapatması ve bir varlığın bölgesini daraltmanın 3, 2, 1 ya da hiç üçlü kapatmaması.
İçindekiler
Önceki ders sekiz kalemi puanladı ve altı kararın bu puanları hangi yönde değiştirdiğini saydı. Bütün hesap tek bir listenin üstünde koştu ve o listenin parçalarının adı belirsiz kaldı: korunan şeye “varlık” dendi, ama puanı düşürecek olan neydi, düşmesine izin veren şey neydi. Bu ders aynı envanteri üç ayrı listeye böler ve üçünün nasıl birleştiğini sayar.
Varlık (asset) korunan şeydir: veri, servis, aygıt, kayıt. Tehdit (threat) zarar verebilecek etkendir; bunu yapabilecek taraf tehdit aktörü (threat actor) olarak anılır. Açık (vulnerability) varlıktaki, o zararın gerçekleşmesine izin veren zayıflıktır. Üçü ayrı listedir ve ayrı sayılır. Günlük konuşmada birbirinin yerine kullanılırlar; sayıldıklarında birbirinin yerine geçmedikleri görülür.
Üç Liste Üç Ayrı Soruya Karşılık Gelir
Örnek yine kurgu bölgesel ölçüm ağıdır ve varlık listesi bir önceki dersle aynı sekiz kalemdir. Aşağıdaki envanter bir modeldir: gerçek bir ağ, gerçek bir tehdit kaydı ya da gerçek bir açık listesi yoktur.
GK6: her varlık, dışarıdan ulaşılabildiği en geniş bölgeyle anılır — dis, saha, ic.
GK7: her açık tek bir varlıkta bulunur ve bir tür taşır. GK8: her tehdit, ulaşabildiği
bölge kümesi ve kullanabildiği açık türleriyle tanımlanır. GK9: bir (varlık, açık, tehdit)
üçlüsü ancak üç koşul birlikte sağlanırsa geçerlidir — açık o varlıkta bulunur, tehdit o bölgeye
ulaşır, tehdit o açık türünü kullanabilir.
// guvenlik/envanter.mjs — kurgu olcum aginin varlik, tehdit ve acik envanteri (model): gercek bir // ag, gercek bir tehdit kaydi ya da gercek bir acik listesi yok. Rastgelelik yok. // GK6: her varlik, disaridan ulasilabildigi en genis bolgeyle anilir (dis, saha, ic). export const VARLIK = ` okuma-verisi ic fatura-kaydi dis is-emri-kuyrugu saha kimlik-deposu ic yapilandirma ic denetim-gunlugu ic sayac-urun-yazilimi saha saha-uygulamasi dis` .trim().split("\n").map((r) => { const [ad, bolge] = r.trim().split(/\s+/); return { ad, bolge }; }); // GK7: her acik tek bir varlikta bulunur ve bir tur tasir. export const ACIK = ` eski-surum-kitapligi fatura-kaydi surum varsayilan-parola yapilandirma kimlik genis-okuma-yetkisi okuma-verisi yetki dogrulanmayan-girdi saha-uygulamasi girdi acik-yonetim-ucu yapilandirma yapilandirma imzasiz-guncelleme sayac-urun-yazilimi butunluk paylasilan-hesap kimlik-deposu kimlik sifresiz-aktarim is-emri-kuyrugu aktarim tutulmayan-gunluk denetim-gunlugu gorunurluk eski-surum-etmen saha-uygulamasi surum fiziksel-erisim-noktasi sayac-urun-yazilimi fiziksel dogrulanmayan-alan denetim-gunlugu girdi` .trim().split("\n").map((r) => { const [ad, varlik, tur] = r.trim().split(/\s+/); return { ad, varlik, tur, bolge: VARLIK.find((v) => v.ad === varlik).bolge }; }); // GK8: her tehdit, ulasabildigi bolge kumesi ve kullanabildigi acik turleriyle tanimlanir. export const TEHDIT = [ { ad: "dis-firsatci", bolge: ["dis"], tur: ["surum", "kimlik", "girdi", "yapilandirma"] }, { ad: "hedefli-dis", bolge: ["dis", "saha"], tur: ["surum", "kimlik", "girdi", "yapilandirma", "aktarim", "butunluk"] }, { ad: "saha-yakini", bolge: ["saha"], tur: ["fiziksel", "butunluk", "aktarim"] }, { ad: "ic-kullanici-hatasi", bolge: ["ic", "saha"], tur: ["yapilandirma", "yetki"] }, { ad: "kotu-niyetli-ic", bolge: ["ic", "saha", "dis"], tur: ["yetki", "kimlik", "gorunurluk", "aktarim"] }, { ad: "tedarik-zinciri", bolge: ["saha", "ic"], tur: ["butunluk", "surum"] }, ]; // GK9: uclu ancak acik o varlikta bulunuyorsa, tehdit o bolgeye ulasabiliyorsa ve o acik // turunu kullanabiliyorsa gecerlidir. export const gecerli = (a, t) => t.bolge.includes(a.bolge) && t.tur.includes(a.tur); export const UCLU = ACIK.flatMap((a) => TEHDIT.filter((t) => gecerli(a, t)) .map((t) => ({ varlik: a.varlik, acik: a.ad, tehdit: t.ad }))); export const acikSay = (v) => ACIK.filter((a) => a.varlik === v).length; export const ucluSay = (alan, ad) => UCLU.filter((u) => u[alan] === ad).length; // GK10: bir varligin bolgesi bir kademe daraltilabilir (dis -> saha -> ic); daraltma // o varliktaki aciklarin ulasilabilirligini degistirir, aciklari kapatmaz. export const DAR = { dis: "saha", saha: "ic", ic: "ic" }; export function darUclu(ad) { return ACIK.reduce((n, a) => n + TEHDIT.filter((t) => t.bolge.includes(a.varlik === ad ? DAR[a.bolge] : a.bolge) && t.tur.includes(a.tur)).length, 0); }
// guvenlik/say.mjs — uc liste ayni envanterde: kac varlik, kac tehdit, kac acik, kac gecerli uclu. import { VARLIK, ACIK, TEHDIT, UCLU, DAR, acikSay, ucluSay, darUclu } from "./envanter.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 kartezyen = VARLIK.length * TEHDIT.length * ACIK.length; console.log(`${VARLIK.length} varlik, ${TEHDIT.length} tehdit, ${ACIK.length} acik; ` + `kartezyen carpim ${kartezyen}, acik zaten bir varliga bagli oldugundan aday ` + `${ACIK.length * TEHDIT.length}, gecerli uclu ${UCLU.length}`); const A = [-21, 8, 8, 8, 10]; console.log("\n1. varlik basina acik ve gecerli uclu"); yaz(A, "varlik", "bolge", "acik", "uclu", "uclu/acik"); for (const v of VARLIK) yaz(A, v.ad, v.bolge, acikSay(v.ad), ucluSay("varlik", v.ad), acikSay(v.ad) ? (ucluSay("varlik", v.ad) / acikSay(v.ad)).toFixed(1) : "-"); yaz(A, "toplam", "-", ACIK.length, UCLU.length, (UCLU.length / ACIK.length).toFixed(1)); const B = [-25, 14, 8, 7]; console.log("\n2. acik basina kac tehdit kullanabiliyor"); yaz(B, "acik", "tur", "bolge", "uclu"); for (const a of [...ACIK].sort((x, y) => ucluSay("acik", y.ad) - ucluSay("acik", x.ad))) yaz(B, a.ad, a.tur, a.bolge, ucluSay("acik", a.ad)); const C = [-21, 8, 7, 7, 10]; console.log("\n3. tehdit basina erisim ve kullanim"); yaz(C, "tehdit", "bolge", "tur", "uclu", "varlik"); for (const t of TEHDIT) yaz(C, t.ad, t.bolge.length, t.tur.length, ucluSay("tehdit", t.ad), new Set(UCLU.filter((u) => u.tehdit === t.ad).map((u) => u.varlik)).size); const D = [-38, 9, 9]; console.log("\n4. carpim nerede daraliyor"); yaz(D, "adim", "aday", "kalan %"); const yuzde = (n) => ((n / kartezyen) * 100).toFixed(1); for (const [ad, n] of [["varlik x tehdit x acik", kartezyen], ["acik zaten bir varlikta (acik x tehdit)", ACIK.length * TEHDIT.length], ["tehdit o bolgeye ulasabiliyor", ACIK.reduce((a, x) => a + TEHDIT.filter((t) => t.bolge.includes(x.bolge)).length, 0)], ["tehdit o acik turunu kullanabiliyor", UCLU.length]]) yaz(D, ad, n, yuzde(n)); const sirali = [...ACIK].map((a) => ucluSay("acik", a.ad)).sort((x, y) => y - x); const birikim = sirali.map(((s) => (n) => (s += n))(0)); console.log(`\nen cok uclu tasiyan acik sirasi: ${sirali.join(" ")}`); console.log(`kapatma birikimi: ${birikim.join(" ")} (12 acigin 5'i ${birikim[4]}/${UCLU.length}` + ` ucluyu kapatir); hic uclu tasimayan acik: ` + ACIK.filter((a) => ucluSay("acik", a.ad) === 0).map((a) => a.ad).join(", ")); const E = [-21, 8, 9, 9, 9]; console.log("\n5. bir varligin bolgesi bir kademe daraltilirsa (acik sayisi degismez)"); yaz(E, "varlik", "bolge", "yeni", "uclu", "kapanan"); for (const v of VARLIK) yaz(E, v.ad, v.bolge, DAR[v.bolge], darUclu(v.ad), UCLU.length - darUclu(v.ad));
8 varlik, 6 tehdit, 12 acik; kartezyen carpim 576, acik zaten bir varliga bagli oldugundan aday 72, gecerli uclu 19 1. varlik basina acik ve gecerli uclu varlik bolge acik uclu uclu/acik okuma-verisi ic 1 2 2.0 fatura-kaydi dis 1 2 2.0 is-emri-kuyrugu saha 1 3 3.0 kimlik-deposu ic 1 1 1.0 yapilandirma ic 2 2 1.0 denetim-gunlugu ic 2 1 0.5 sayac-urun-yazilimi saha 2 4 2.0 saha-uygulamasi dis 2 4 2.0 toplam - 12 19 1.6 2. acik basina kac tehdit kullanabiliyor acik tur bolge uclu imzasiz-guncelleme butunluk saha 3 sifresiz-aktarim aktarim saha 3 eski-surum-kitapligi surum dis 2 genis-okuma-yetkisi yetki ic 2 dogrulanmayan-girdi girdi dis 2 eski-surum-etmen surum dis 2 varsayilan-parola kimlik ic 1 acik-yonetim-ucu yapilandirma ic 1 paylasilan-hesap kimlik ic 1 tutulmayan-gunluk gorunurluk ic 1 fiziksel-erisim-noktasi fiziksel saha 1 dogrulanmayan-alan girdi ic 0 3. tehdit basina erisim ve kullanim tehdit bolge tur uclu varlik dis-firsatci 1 4 3 2 hedefli-dis 2 6 5 4 saha-yakini 1 3 3 2 ic-kullanici-hatasi 2 2 2 2 kotu-niyetli-ic 3 4 5 5 tedarik-zinciri 2 2 1 1 4. carpim nerede daraliyor adim aday kalan % varlik x tehdit x acik 576 100.0 acik zaten bir varlikta (acik x tehdit) 72 12.5 tehdit o bolgeye ulasabiliyor 42 7.3 tehdit o acik turunu kullanabiliyor 19 3.3 en cok uclu tasiyan acik sirasi: 3 3 2 2 2 2 1 1 1 1 1 0 kapatma birikimi: 3 6 8 10 12 14 15 16 17 18 19 19 (12 acigin 5'i 12/19 ucluyu kapatir); hic uclu tasimayan acik: dogrulanmayan-alan 5. bir varligin bolgesi bir kademe daraltilirsa (acik sayisi degismez) varlik bolge yeni uclu kapanan okuma-verisi ic ic 19 0 fatura-kaydi dis saha 19 0 is-emri-kuyrugu saha ic 17 2 kimlik-deposu ic ic 19 0 yapilandirma ic ic 19 0 denetim-gunlugu ic ic 19 0 sayac-urun-yazilimi saha ic 16 3 saha-uygulamasi dis saha 18 1
Sayılar ölçüm sınıfındadır; girdileri GK6–GK9’dur.
Çarpım Yol Sayısı Değildir
Dördüncü tablo bu dersin ana bulgusudur. Üç listenin uzunluğu çarpıldığında 576 çıkar. Bu sayı hiçbir şeyi ölçmez, çünkü listeler bağımsız değildir. İlk daralma tanım gereğidir: her açık zaten tek bir varlıkta bulunur, o yüzden varlık boyutu ayrı bir çarpan değildir — 72 aday kalır, yani çarpımın %12,5’i. İkinci daralma erişimden gelir: tehdidin açığın bulunduğu bölgeye ulaşması gerekir, aday 42’ye iner. Üçüncüsü yetenektendir: tehdit o açık türünü kullanabilmelidir, geriye 19 üçlü, yani başlangıçtaki çarpımın %3,3’ü kalır.
Aradaki fark ölçek farkı değil, tür farkıdır. “Sekiz varlığımız, altı tehdit türümüz ve on iki açığımız var” cümlesi bir envanterdir; kaç yerden ne olabileceğini söylemez. Üçünü çarpmak bir korku sayısı üretir. Gerçekte sayılabilir olan, üçünün kesiştiği yerdir ve o kesişim iki koşulla daralır: erişim ve yetenek.
Yine de 19 sayısı hâlâ bir yol sayısı değildir. Her üçlü, tehdidin varlığa doğrudan
dokunabildiğini varsayar; bölge bir etiket olarak verilmiştir, geçilecek bir kapı olarak
sayılmamıştır. Gerçekte ic bölgedeki bir varlığa ulaşmak, önce başka varlıkların üstünden
geçmeyi gerektirir ve o geçişlerin her biri ayrı bir adımdır. Bu dersin bıraktığı sayı bir
kesişim sayısıdır; yol sayımı bu konunun son dersinde yapılacaktır.
Aynı Sayıda Açık, Dört Kat Fark
Birinci tablo açık sayısının tek başına neden bir gösterge olmadığını gösterir. denetim-gunlugu
ve saha-uygulamasi ikisi de ikişer açık taşır. Birincisi 1 üçlü üretir, ikincisi 4. Üçlü
başına oran 0,5’e karşı 2,0’dır — aynı açık sayısında dört kat fark.
Farkın kaynağı ikinci tabloda görülür. saha-uygulamasi dis bölgededir ve açıkları girdi ile
surum türündedir; dış bölgeye ulaşan üç tehdidin ikisi bu türleri kullanabilir. denetim-gunlugu
ic bölgededir ve açıkları gorunurluk ile girdi türündedir; iç bölgeye ulaşan üç tehditten
yalnız biri gorunurluk kullanır, girdi türünü hiçbiri kullanmaz.
Son satır bu dersin en keskin kalemidir: dogrulanmayan-alan açığı sıfır üçlü taşır. Açık
gerçektir, listede durur, denetimde işaretlenir — ama ona ulaşabilen ve onu kullanabilen bir tehdit
yoktur. Bu, açığın kapatılmaması gerektiği anlamına gelmez; bölge sınırı değişirse üçlü sayısı
sıfır olmaktan çıkar. Anlamı şudur: açık sayısı bir maruziyet ölçüsü değildir. On iki açığın
biri hiçbir şeye açık değildir ve bir başkası üçüne birden.
Tehdidin İki Ayrı Genişliği
Üçüncü tablo tehditleri iki eksende ölçer: kaç bölgeye ulaşıyor ve kaç açık türünü kullanabiliyor.
hedefli-dis iki bölgeye ulaşır ama altı tür kullanır; kotu-niyetli-ic üç bölgeye ulaşır ve
dört tür kullanır. İkisi de beş üçlü üretir — aynı sayı, iki ayrı yoldan.
Fark son sütundadır: hedefli-dis dört ayrı varlığa dokunur, kotu-niyetli-ic beşine. Erişim
genişliği ile yetenek genişliği toplamda aynı üçlü sayısını verse de yayılımı farklıdır.
Yetenek genişliği aynı varlıkta birden çok açığı kullanılabilir kılar; erişim genişliği daha çok
varlığa dokunur. Bir savunma kararı bu ikisinden hangisini daralttığını bilmeden yazılamaz.
tedarik-zinciri ters uçtadır: iki bölgeye ulaşır, iki tür kullanır, tek üçlü üretir ve tek
varlığa dokunur. Bu satır tehdit listesinin uzunluğunun da bir gösterge olmadığını yazar — altı
tehditten biri envanterin on dokuzda birini taşır.
Son iki satır kapatmanın getirisini sıralar. On iki açık, üçlü sayısına göre sıralandığında
3 3 2 2 2 2 1 1 1 1 1 0 dizisi çıkar. En çok taşıyan beş açığı kapatmak 19 üçlünün 12’sini
kapatır; kalan yedi üçlü için yedi ayrı açık daha kapatmak gerekir ve on ikincisi hiçbir şey
eklemez. Kapatma sırası açık sayısına göre değil, taşınan üçlü sayısına göre kurulur.
Üç Listeden Hangisi Elde
Beşinci tablo üçüncü bir kaldıraç dener. Açık kapatmak bir listeyi kısaltır; tehdit listesi kısaltılamaz, çünkü kimin ne yapabileceği kurumun kararı değildir. Geriye erişim kalır: bir varlığın bölgesini bir kademe daraltmak, açıklarının hiçbirini kapatmadan onlara ulaşabilen tehdit kümesini değiştirir.
Sonuçlar dört ayrı davranış gösterir. sayac-urun-yazilimi sahadan ice çekildiğinde 3 üçlü
kapanır — bu, tek bir açığı kapatmanın en yüksek getirisine eşittir ve iki açık da yerinde durur.
is-emri-kuyrugu 2, saha-uygulamasi 1 üçlü kapatır. Zaten ic bölgede olan dört varlıkta
daraltacak bir kademe kalmamıştır ve kapanan üçlü sıfırdır.
Beşinci satır tablonun en öğretici kalemidir: fatura-kaydi disten sahaya çekildiğinde
kapanan üçlü sıfırdır. Kalem daha dar bir bölgeye taşınmıştır, ama üstündeki surum türü
açığı hem dış bölgeye ulaşan bir tehdit hem de saha bölgesine ulaşan bir başkası kullanabilir;
kapanan bir üçlünün yerine bir yenisi açılır. Daraltmanın getirisi kalemin ne kadar
gizlendiğine değil, hangi tehdit kümesinin dışarıda kaldığına bağlıdır.
Üç kaldıraç bu yüzden aynı şey değildir: açık kapatmak listeden bir satır siler, bölge daraltmak aynı satırı yerinde bırakıp ona ulaşan tehdit kümesini değiştirir, tehdit listesi ise elde değildir. Bu dersin sayabildiği son şey budur; ikinci kaldıracın gerçek ölçüsü, bölgeler arasında kaç adım olduğu bilinmeden verilemez.
Özet
- Varlık korunan şey, tehdit zarar verebilecek etken, açık ise varlıktaki zayıflıktır; üçü ayrı listedir ve ayrı sayılır.
- Sekiz varlık, altı tehdit ve on iki açığın çarpımı 576’dır; geçerli üçlü 19, yani çarpımın %3,3’üdür. Daralma iki koşuldan gelir: tehdit o bölgeye ulaşıyor mu, o açık türünü kullanıyor mu.
- On dokuz üçlü hâlâ bir yol sayısı değildir; her üçlü tehdidin varlığa doğrudan dokunduğunu varsayar ve bölgeler arası geçişleri adım olarak saymaz.
- İkişer açık taşıyan iki varlık 1 ve 4 üçlü üretir; bir açık sıfır üçlü taşır, bir başkası üç. Açık sayısı tek başına bir maruziyet ölçüsü değildir.
- Beş üçlü üreten iki tehditten biri dört, öteki beş varlığa dokunur; erişim genişliği ile yetenek genişliği aynı toplamda farklı yayılım verir.
- Bir varlığın bölgesini bir kademe daraltmak hiçbir açığı kapatmadan 3, 2, 1 ya da 0 üçlü kapatır; dar bölgeye başka tehditler ulaştığında getiri sıfır kalır.
Sonraki Adım
Bu ders on dokuz üçlüyü saydı ve hepsini eşit ağırlıkta yazdı. Oysa fiziksel-erisim-noktasi
üzerinden gelen tek üçlü ile sifresiz-aktarim üzerinden gelen üç üçlü ne aynı sıklıkta
gerçekleşir ne de gerçekleştiğinde aynı şeye mal olur. Kapatma sırası bu derste yalnız taşınan
üçlü sayısına göre kuruldu; oysa az taşıyan bir kalem çok daha ağır olabilir. Sonraki ders bu iki
boyutu — olasılık ve etki — bir kalem kümesi üzerinde birleştirir ve iki farklı puanlamanın
aynı listeyi nasıl farklı sıraladığını gösterir.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.