İçeriğe geç
academia.sh

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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat