İçeriğe geç
academia.sh

Ders 14 / 22

Web Uygulaması Riskleri

Yaygın risk listelerinin sıralama değil okuma biçimi olduğunun ölçülmesi: on kurgu kalemde genel sıralama ile kurum sıralaması arasında altı kalemin yer değiştirmesi, en büyük kaymanın dört sıra olması, dokuz zincirdeki otuz dokuz adımın yirmi ikisinin denetimsiz kalması, bir zincirin çalışma zamanında hiç kırılamaması ve savunmanın kırma sırasının kurum sırasıyla üç kalemde yalnız birinde örtüşmesi.

İçindekiler

Önceki konu insan katmanını ölçtü: bahaneden iletiye, iletiden alan adına kadar zincirin ilk halkaları bir kişinin verdiği karara dayanıyordu ve o karar kaç halkayı kırdığı sayılarak ölçüldü. Bir kez içeri girildikten sonra ise zincir başka bir yerden devam eder — yazılımın kendisinin açtığı halkalardan. Bu konu o halkaları sayar.

Sayıma başlamadan önce bir okuma sorunu var. Uygulama katmanındaki riskler için hazırlanmış yaygın listeler vardır ve bu listeler çoğu kurumda bir yapılacaklar sırası gibi okunur. Bu ders o okuma biçimini ölçer: liste neye göre sıralanıyor, sıralama bir kurumda neden değişiyor ve listenin hiçbir kaleminin taşımadığı üçüncü bir sıra neden gerekiyor. Bu dersteki ve bu konudaki hiçbir teknik, yazılı yetki ve tanımlı kapsam dışında bir sistem üzerinde denenemez; denenmesi hem yasadışı hem meslek dışıdır.

Listenin Yapısı

Yaygın risk listeleri kalemlerini dört ölçütle sıralar: kalemin sahada ne sıklıkta görüldüğü, bir saldırganın onu ne kadar kolay kullanabildiği, savunanın onu ne kadar kolay bulduğu ve başarılı olduğunda ortaya çıkan teknik etki. Dördü de kaleme aittir; hiçbiri kuruma ait değildir.

Dört ölçütten biri ters yönde çalışır. Savunanın kalemi kolay bulması riski düşürür, çünkü kolay bulunan kalem düzeltilme şansı yüksek olan kalemdir. Bu, listenin sırasına doğrudan giren ve en çok yanlış okunan ölçüttür: bir kalemin listede aşağıda olması onun seyrek görüldüğü anlamına gelmez, çoğu kurumda zaten bulunmuş olduğu anlamına gelir. Kendi envanterini çıkarmamış bir kurum için bu bilgi hiçbir şey ifade etmez.

Beşinci bir ölçüt kasten dışarıda bırakılır: iş etkisi. Bir kalemin bir kurumda ne kaybettirdiği, o kurumun neyi sakladığına, hangi işi durdurulamaz saydığına ve mimarisinde o kalemin karşılığının bulunup bulunmadığına bağlıdır. Liste bunu bilemez, bu yüzden hesaba katmaz. Listenin sırası bu nedenle bir öneri değil, bir başlangıç noktasıdır.

TS1: aşağıdaki kalem kümesi bir modeldir — gerçek bir risk listesi, gerçek bir kurum ve gerçek bir ölçüm değildir; ölçüt değerleri kurgudur. TS2: her kalem bir adım dizisidir; denetimli, üzerinde bir denetim noktası bulunan adımların indeksidir. TS3: genel sıralama dört ölçütün ortalamasıdır. TS4: kurum sıralaması aynı ölçütleri kullanır, teknik etkiyi kendi ağırlıklarıyla toplar ve mimarisinde karşılığı olmayan kalemi maruziyetle ölçekler. TS5: kırılabilen halka, üzerinde denetim noktası bulunan en küçük indeksli adımdır.

// risk/kalem.mjs — kurgu risk kalemi kumesi (model): gercek bir risk listesi, gercek bir
// kurum ya da gercek bir olcum yok. Dort olcut 0..10 arasinda kurgu degerlerdir.
// yay: yayginlik, ist: istismar edilebilirlik, tes: savunanin tespit kolayligi,
// etk: teknik etki bileseni {g: gizlilik, b: butunluk, e: erisilebilirlik}
export const KALEM = [
  { ad: "erisim-denetimi",  yay: 9, ist: 7, tes: 4, etk: { g: 9, b: 8, e: 3 }, maruz: 1.0 },
  { ad: "enjeksiyon",       yay: 6, ist: 8, tes: 6, etk: { g: 9, b: 9, e: 5 }, maruz: 0.8 },
  { ad: "kimlik-yonetimi",  yay: 7, ist: 6, tes: 5, etk: { g: 8, b: 6, e: 4 }, maruz: 1.0 },
  { ad: "yapilandirma",     yay: 8, ist: 5, tes: 8, etk: { g: 6, b: 5, e: 6 }, maruz: 1.0 },
  { ad: "bakimsiz-bilesen", yay: 8, ist: 4, tes: 9, etk: { g: 7, b: 7, e: 6 }, maruz: 1.0 },
  { ad: "sifreleme-karari", yay: 5, ist: 3, tes: 3, etk: { g: 9, b: 4, e: 1 }, maruz: 0.3 },
  { ad: "kayit-eksikligi",  yay: 7, ist: 2, tes: 2, etk: { g: 3, b: 3, e: 2 }, maruz: 1.0 },
  { ad: "sunucu-istegi",    yay: 3, ist: 5, tes: 5, etk: { g: 7, b: 4, e: 3 }, maruz: 0.2 },
  { ad: "tasarim-kusuru",   yay: 5, ist: 6, tes: 2, etk: { g: 6, b: 8, e: 5 }, maruz: 0.9 },
  { ad: "butunluk-dogrulama", yay: 4, ist: 4, tes: 4, etk: { g: 4, b: 9, e: 4 }, maruz: 1.0 },
];

// TS2: her kalem bir adim dizisidir. adim = zincirin adim sayisi;
// denetimli = uzerinde bir denetim noktasi bulunan adim indeksleri (1 tabanli);
// bedel = zincir son adimda kirilirsa etkilenen kurgu kalem sayisi.
export const ZINCIR = {
  "erisim-denetimi":   { adim: 4, denetimli: [2, 4],       bedel: 240 },
  "enjeksiyon":        { adim: 6, denetimli: [2, 3, 5],    bedel: 480 },
  "kimlik-yonetimi":   { adim: 5, denetimli: [1, 3, 4],    bedel: 180 },
  "yapilandirma":      { adim: 3, denetimli: [1, 2, 3],    bedel: 120 },
  "bakimsiz-bilesen":  { adim: 5, denetimli: [1, 2],       bedel: 300 },
  "sifreleme-karari":  { adim: 4, denetimli: [4],          bedel: 360 },
  "kayit-eksikligi":   { adim: 0, denetimli: [],           bedel: 0 },
  "sunucu-istegi":     { adim: 5, denetimli: [3, 4],       bedel: 90 },
  "tasarim-kusuru":    { adim: 4, denetimli: [],           bedel: 200 },
  "butunluk-dogrulama": { adim: 3, denetimli: [2],         bedel: 150 },
};

export const yaz = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join(""));
// risk/sirala.mjs — ayni kalem kumesi uc ayri sirada: genel liste, kurum siralamasi,
// savunmanin kirma sirasi. Rastgelelik yok; her sayi kurgu olcut degerlerinden turetilir.
import { KALEM, ZINCIR, yaz } from "./kalem.mjs";

const genel = (k) => (k.yay + k.ist + (10 - k.tes) + (k.etk.g + k.etk.b + k.etk.e) / 3) / 4;

// Kurgu olcum agi icin butunluk ve erisilebilirlik agir, gizlilik daha hafiftir.
const W = { g: 0.1, b: 0.5, e: 0.4 };
const kurum = (k) => k.maruz * (k.yay + k.ist +
  (10 - k.tes) + (k.etk.g * W.g + k.etk.b * W.b + k.etk.e * W.e)) / 4;

const sirala = (f) => [...KALEM].sort((a, b) => f(b) - f(a)).map((k) => k.ad);
const G = sirala(genel), K = sirala(kurum);
const A = [-20, 8, 6, 8, 6, 8];

console.log(`${KALEM.length} kurgu risk kalemi, ayni dort olcut, iki agirlik kumesi\n`);
yaz(A, "kalem", "genel", "sira", "kurum", "sira", "kayma");
for (const ad of G) {
  const k = KALEM.find((x) => x.ad === ad);
  const g = G.indexOf(ad) + 1, u = K.indexOf(ad) + 1;
  yaz(A, ad, genel(k).toFixed(2), g, kurum(k).toFixed(2), u,
    u === g ? "-" : (u < g ? "+" : "") + (g - u));
}
console.log(`\nsira degistiren kalem: ${G.filter((ad, i) => K.indexOf(ad) !== i).length}` +
  `/${KALEM.length}; en buyuk kayma: ` +
  `${Math.max(...G.map((ad, i) => Math.abs(K.indexOf(ad) - i)))} sira; ilk ucluden ortak: ` +
  `${G.slice(0, 3).filter((ad) => K.slice(0, 3).includes(ad)).length}/3`);

const B = [-20, 7, 11, 14, 11];
console.log(`\nzincir sutunlari (kurum sirasina gore)`);
yaz(B, "kalem", "adim", "denetimli", "ilk kirilan", "gec bedel");
const zincirli = K.filter((ad) => ZINCIR[ad].adim > 0);
for (const ad of K) {
  const z = ZINCIR[ad];
  if (z.adim === 0) { yaz(B, ad, "-", "-", "zincir degil", "-"); continue; }
  yaz(B, ad, z.adim, z.denetimli.length,
    z.denetimli.length ? `${z.denetimli[0]}. adim` : "kirilamiyor", z.bedel);
}
const topla = (f) => zincirli.reduce((s, ad) => s + f(ZINCIR[ad]), 0);
console.log(`\n${zincirli.length} zincirde toplam ${topla((z) => z.adim)} adim, ` +
  `${topla((z) => z.denetimli.length)} adimda denetim var, ` +
  `${topla((z) => z.adim - z.denetimli.length)} adim denetimsiz`);
const ilk = (ad) => ZINCIR[ad].denetimli[0] ?? 0;
console.log(`ilk adimda kirilan: ${zincirli.filter((a) => ilk(a) === 1).length}; ` +
  `ucuncu adim ve sonrasi: ${zincirli.filter((a) => ilk(a) >= 3).length}; ` +
  `hic kirilamayan: ${zincirli.filter((a) => ilk(a) === 0).length}`);

// Savunmanin sirasi: once erken kirilabilen, esitlikte bedeli buyuk olan.
const kirma = zincirli.filter((a) => ilk(a) > 0)
  .sort((a, b) => ilk(a) - ilk(b) || ZINCIR[b].bedel - ZINCIR[a].bedel);
console.log(`\nkurum sirasinin ilk ucu : ${K.slice(0, 3).join(", ")}`);
console.log(`kirma sirasinin ilk ucu : ${kirma.slice(0, 3).join(", ")}`);
console.log(`ortak kalem: ${K.slice(0, 3).filter((a) => kirma.slice(0, 3).includes(a)).length}/3`);
10 kurgu risk kalemi, ayni dort olcut, iki agirlik kumesi

kalem                  genel  sira   kurum  sira   kayma
erisim-denetimi         7.17     1    7.03     1       -
enjeksiyon              6.42     2    5.08     6      -4
tasarim-kusuru          6.33     3    5.76     3       -
kimlik-yonetimi         6.00     4    5.85     2      +2
yapilandirma            5.17     5    5.13     4      +1
bakimsiz-bilesen        4.92     6    4.90     7      -1
sifreleme-karari        4.92     7    1.37     9      -2
kayit-eksikligi         4.92     8    4.90     8       -
butunluk-dogrulama      4.92     9    5.13     5      +4
sunucu-istegi           4.42    10    0.84    10       -

sira degistiren kalem: 6/10; en buyuk kayma: 4 sira; ilk ucluden ortak: 2/3

zincir sutunlari (kurum sirasina gore)
kalem                  adim  denetimli   ilk kirilan  gec bedel
erisim-denetimi           4          2       2. adim        240
kimlik-yonetimi           5          3       1. adim        180
tasarim-kusuru            4          0   kirilamiyor        200
yapilandirma              3          3       1. adim        120
butunluk-dogrulama        3          1       2. adim        150
enjeksiyon                6          3       2. adim        480
bakimsiz-bilesen          5          2       1. adim        300
kayit-eksikligi           -          -  zincir degil          -
sifreleme-karari          4          1       4. adim        360
sunucu-istegi             5          2       3. adim         90

9 zincirde toplam 39 adim, 17 adimda denetim var, 22 adim denetimsiz
ilk adimda kirilan: 3; ucuncu adim ve sonrasi: 2; hic kirilamayan: 1

kurum sirasinin ilk ucu : erisim-denetimi, kimlik-yonetimi, tasarim-kusuru
kirma sirasinin ilk ucu : bakimsiz-bilesen, kimlik-yonetimi, yapilandirma
ortak kalem: 1/3

Sıralama Kuruma Göre Değişir

İlk tablo aynı on kalemi iki kez sıralar. Ölçüt değerleri iki sıralamada da aynıdır; değişen yalnız teknik etkinin nasıl toplandığı ve kalemin bu mimaride karşılığının olup olmadığıdır. Sonuç: on kalemden altısı yer değiştirdi ve en büyük kayma dört sıradır.

İki uç örnek farkın nereden geldiğini gösterir. enjeksiyon genel sırada ikinciyken kurum sırasında altıncıya düşer; kurgu ölçüm ağının uçlarının bir bölümünde bu kalemin karşılığı yoktur ve maruziyet 0,8 ile ölçeklenir. butunluk-dogrulama ise dokuzuncudan beşinciye çıkar: sayaç okumasının doğru olduğunun kanıtlanması bu ağın asıl işidir ve bütünlük ağırlığı 0,5’tir. Genel listede bu kalem orta sıralardadır çünkü ortalama bir kurumda bütünlük, gizlilik kadar ağır basmaz.

En büyük düşüş sifreleme-karari kalemindedir: 4,92’den 1,37’ye, yedinciden dokuzuncuya. Bunun nedeni ağırlık değil maruziyettir; bu kurgu ağda ilgili yüzey dar tanımlanmıştır ve skor 0,3 ile ölçeklenir. Maruziyet ağırlıktan daha sert bir çarpandır: ağırlık kalemi birkaç sıra oynatır, maruziyet listeden düşürür.

Kaymaların yönü de bilgi taşır. Yukarı çıkan iki kalem — kimlik-yonetimi ve butunluk-dogrulama — bu ağın kendi işine dokunan kalemlerdir; aşağı inen üç kalemin ikisinde neden maruziyet, birinde ağırlıktır. Bir kurum kendi sıralamasını çıkardığında ürettiği asıl çıktı sıranın kendisi değil, kaymanın nedenidir: bir kalem mimaride yoksa onu izlemeye ayrılan emek boşa gider, ağırlık yüzünden inmişse kalem hâlâ oradadır ve yalnız sırası değişmiştir.

İlk üçlüde iki kalem ortaktır. Bu, listenin işe yaramadığı anlamına gelmez; listenin hangi kalemlerin var olduğunu doğru söylediği, hangisinin önce geleceğini söylemediği anlamına gelir. Liste bir envanterdir; sıra kurumun kendi ölçümüdür.

Zincir Sütunları

İkinci tablo her kalemi bu kursun üç sütunuyla anar. Dokuz zincirde toplam 39 adım vardır; bunların 17’sinde bir denetim noktası bulunur, 22 adım denetimsizdir. Denetimsiz adım sayısı yüzeyin değil, savunmanın ölçüsüdür: her denetimsiz adım, zincirin o noktadan sorunsuz geçtiği bir yerdir.

Üç zincir ilk adımda kırılabiliyor. Bunlar en ucuz üç kalemdir: zincir başlamadan biter ve geç kırma bedeli hiç ödenmez. Buna karşılık sifreleme-karari ancak dördüncü adımda kırılabiliyor ve o noktaya kadar 360 kurgu kalem etkilenmiş oluyor. Aynı kalem kurum sırasında dokuzuncudur — yani düşük öncelikli sayılan bir kalem, en pahalı geç kırma bedelini taşıyor.

Tablonun iki satırı ölçünün sınırını gösterir. tasarim-kusuru dört adımlıktır ve hiçbir adımında denetim noktası yoktur: bu zincir çalışma zamanında kırılamaz, çünkü denetim noktası zincirin dışındadır — tasarım anındadır. Böyle bir kalemde ölçü kırmadan tespite kayar: zincir tamamlanacaktır, sorulacak tek soru ne kadar geç görüleceğidir.

kayit-eksikligi satırı ise bir zincir bile değildir. Bu kalem bir saldırı adım dizisi tanımlamaz; öteki zincirlerin görülmemesini tanımlar. Aynı listede iki farklı türden kalem yan yana durur ve tek bir sıralama ikisini de aynı ölçekte gösterir. Listeyi bir yapılacaklar sırası gibi okumanın en somut sorunu budur.

Savunmanın Üçüncü Sırası

Son üç satır dersin sonucudur. Kurum sıralaması riski büyükten küçüğe verir; savunmanın sırası ise en erken kırılabilen halkaya göredir. İki sıranın ilk üçlüsünde yalnız bir ortak kalem vardır.

bakimsiz-bilesen kurum sırasında yedincidir ama kırma sırasında birincidir: zinciri birinci adımda kırılıyor ve geç kırma bedeli 300 ile üçüncü en yüksek değer. Yani düşük öncelikli görünen bir kalem, en ucuz ve en getirili ilk hamledir. Tersine erisim-denetimi her iki sıralamada da birincidir ama zinciri ancak ikinci adımda kırılabiliyor; ilk hamle olmaya listedeki yeri değil, halkasının yeri karar verir.

Buradan çıkan kural bu konunun geri kalanını yönetir: bir risk kalemini önceliklendirmek üç ayrı sorunun cevabını gerektirir — kalem bu mimaride var mı, etkisi bu kurumda ne kadar ağır, ve zinciri kaçıncı adımda kırılabiliyor. Liste yalnız birincinin envanterini verir.

Üçüncü sorunun cevabı listeden okunamaz, çünkü liste kalemleri tanımlarken adımlarını yazmaz. Bu konunun geri kalan sekiz dersi tam da o eksik sütunu doldurur: her sınıfın adım dizisi önkoşullarıyla yazılır, savunma katmanları o adımlarla eşlenir ve kırılabilen halka bir indeks olarak çıkar.

Özet

  • Yaygın risk listeleri kalemleri yaygınlık, istismar edilebilirliği, tespit kolaylığı ve teknik etki ile sıralar; iş etkisini kasten dışarıda bırakır. Liste bir sıra önerisi değil, bir envanterdir.
  • Aynı on kalem kurum ağırlıkları ve maruziyetle yeniden sıralandığında 6 kalem yer değiştirdi, en büyük kayma 4 sıra oldu ve ilk üçlüden yalnız 2 kalem ortak kaldı.
  • Maruziyet ağırlıktan sert bir çarpandır: bir kalem 4,92’den 1,37’ye düşerek listenin altına indi; ağırlık değişimi kalemleri en çok dört sıra oynattı.
  • Dokuz zincirde 39 adımın 17’sinde denetim noktası var, 22 adım denetimsiz. Üç zincir birinci adımda kırılıyor; bir zincir çalışma zamanında hiç kırılamıyor ve orada ölçü tespite kayıyor.
  • Kurum sırasının ilk üçlüsü ile kırma sırasının ilk üçlüsü yalnız 1 kalemde örtüşüyor; yedinci sıradaki bir kalem birinci adımda kırıldığı için ilk hamle oluyor.

Sonraki Adım

Bu ders kalemleri saydı ama hiçbirinin içini açmadı. On kalemin en yüksek geç kırma bedelini taşıyan zinciri altı adımlıktı ve üç adımında denetim noktası vardı — hangi üçünde olduğu ve o denetimlerin hangi adımı kestiği yazılmadı. Sonraki ders o zinciri açar: enjeksiyon sınıfının altı adımı tek tek önkoşullarıyla yazılır, aynı girdi kümesi beş savunma katmanından geçirilir ve her katmanın kırdığı adım sayılır. Ölçülecek şey girdinin kendisi değil, girdinin hangi katmanda durduğu ve durmadığında zincirin kaçıncı adımına kadar ilerlediğidir.

İ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