---
title: 'Tehdit Sınıflandırma Yöntemleri'
source: 'https://academia.sh/tr/kurslar/guvenli-yasam-dongusu/tehdit-siniflandirma-yontemleri'
course: 'Güvenli Geliştirme Yaşam Döngüsü'
language: tr
updated: '2026-08-17T18:06:43+00:00'
license: 'CC BY-SA 4.0'
---

# 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ı.

Ö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.

```js
// 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;
```

```js
// 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.
