---
title: 'Saldırı Yüzeyi'
source: 'https://academia.sh/tr/kurslar/siber-guvenlige-giris/saldiri-yuzeyi'
course: 'Siber Güvenliğe Giriş'
language: tr
updated: '2026-08-17T18:08:38+00:00'
license: 'CC BY-SA 4.0'
---

# Saldırı Yüzeyi

Yüzeyin sayılabilir birime çevrilmesi: 13 düğüm ve 21 kenarlık erişim grafında dört giriş ucundan iki hedefe 35 ayrı yol çıkması, toplam meşru işin %1,4'ünü taşıyan giriş ucunun yolların %37,1'ini açması, tek bir kenarın 14 yol kapatabilmesi, bir kenarın 4 meşru işi durdurup hiçbir yol kapatmaması, oran sıralamasına göre açgözlü daraltmanın 31 meşru iş bedeliyle yolu sıfırlaması ve aynı sonucun bütün giriş uçlarını kapatmakla 27 bedele mal olması.

Önceki dersin bütün ölçümleri tek bir varsayımın üstünde durdu: `erisim` bir adımdır. On iki
zincirin on ikisi de o adımdan başladı ve o adım hiç açılmadı. Oysa bir varlığa erişmek tek bir
kapıdan geçmek değildir. Bu ders o adımı açar ve müfredatın geri kalanının üzerinde duracağı ölçü
birimini kurar.

**Saldırı yüzeyi (attack surface)**, bir varlığa ulaşmak için kullanılabilecek giriş noktalarının
ve aralarındaki geçişlerin bütünüdür. "Yüzey geniştir" bir karar taşımaz. Yüzeyin sayılabilir
karşılığı **saldırı yolu (attack path)** sayısıdır: kaynaktan hedefe giden kaç ayrı dizi var. Bu
dersten sonra her savunma aynı soruyla ölçülecektir — **kaç yol kapatıyor, kaç yol kalıyor, kaç
meşru iş duruyor**.

## Yüzey Bir Yol Sayısıdır

Aşağıdaki graf bir **modeldir**: gerçek bir ağ, gerçek bir ana makine adı ya da gerçek bir hizmet
ucu yoktur. Böyle bir sayımın gerçek bir ağ üzerinde yapılması **yazılı yetki ve tanımlı kapsam
olmadan hem yasadışı hem meslek dışıdır**.

**GK21:** her kenar bir erişim geçişidir ve üstünde günde geçen kurgu **meşru iş** kalemi sayısını
taşır. **GK22:** yol, kaynaktan bir hedefe giden ve hiçbir düğümü iki kez ziyaret etmeyen dizidir;
yol sayımı aşağıdaki derine yürüyüşle gerçekten koşturulur. **GK23:** bir kenar kaldırıldığında o
kenardan geçen bütün yollar kapanır ve o kenarın taşıdığı meşru iş durur.

```js
// guvenlik/graf.mjs — kurgu olcum aginin erisim grafi (model): gercek bir ag, gercek bir ana
// makine adi ya da gercek bir hizmet ucu yok. Graf yonlu ve cevrimsizdir. Rastgelelik yok.

// GK21: kenar "kaynak hedef mesru-is" biciminde yazilir; mesru is, o kenardan gunde gecen
// kurgu is kalemi sayisidir.
export const KENAR = `
  dis-ag           sube-ucu          12
  dis-ag           saha-uygulamasi    9
  dis-ag           ortak-arayuzu      4
  dis-ag           yonetim-ucu        2
  sube-ucu         ag-gecidi         12
  saha-uygulamasi  ag-gecidi          9
  ortak-arayuzu    faturalama         4
  yonetim-ucu      ag-gecidi          2
  yonetim-ucu      dogrulayici        1
  ag-gecidi        toplayici         15
  ag-gecidi        faturalama         6
  ag-gecidi        is-emri            5
  ag-gecidi        rapor-ucu          4
  toplayici        dogrulayici       15
  toplayici        olcum-deposu      14
  dogrulayici      olcum-deposu      13
  dogrulayici      faturalama         7
  faturalama       olcum-deposu       5
  faturalama       kimlik-deposu      3
  is-emri          dogrulayici        2
  is-emri          kimlik-deposu      4`
  .trim().split("\n").map((r) => {
    const [a, b, is] = r.trim().split(/\s+/);
    return { a, b, is: +is, ad: `${a}->${b}` };
  });

export const KAYNAK = "dis-ag";
export const HEDEF = ["olcum-deposu", "kimlik-deposu"];
export const DUGUM = [...new Set(KENAR.flatMap((k) => [k.a, k.b]))];

// GK22: yol, kaynaktan bir hedefe giden ve hicbir dugumu iki kez ziyaret etmeyen dizidir.
// Yol sayimi asagidaki derine yuruyusle gercekten kosturulur.
export function yollar(kenarlar = KENAR) {
  const komsu = {};
  for (const k of kenarlar) (komsu[k.a] ||= []).push(k.b);
  const bulunan = [], iz = [KAYNAK], gorulen = new Set([KAYNAK]);
  (function yuru(d) {
    if (HEDEF.includes(d)) return bulunan.push([...iz]);
    for (const s of komsu[d] || []) {
      if (gorulen.has(s)) continue;
      gorulen.add(s); iz.push(s);
      yuru(s);
      iz.pop(); gorulen.delete(s);
    }
  })(KAYNAK);
  return bulunan;
}

export const YOL = yollar();
export const kalanYol = (kaldirilan) =>
  yollar(KENAR.filter((k) => !kaldirilan.includes(k.ad))).length;
export const duranIs = (kaldirilan) =>
  KENAR.filter((k) => kaldirilan.includes(k.ad)).reduce((s, k) => s + k.is, 0);
export const TOPLAM_IS = KENAR.reduce((s, k) => s + k.is, 0);
```

```js
// guvenlik/yuzey.mjs — yuzey bir yol sayisidir: kac yol var, ne kapatiyor, kac mesru is duruyor.
import { KENAR, DUGUM, HEDEF, YOL, KAYNAK, TOPLAM_IS, kalanYol, duranIs } from "./graf.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 uz = YOL.map((y) => y.length - 1);
const giris = [...new Set(KENAR.filter((k) => k.a === KAYNAK).map((k) => k.b))];

console.log(`${DUGUM.length} dugum, ${KENAR.length} kenar, ${giris.length} giris ucu, ` +
  `${HEDEF.length} hedef; yol sayisi ${YOL.length}, yol uzunlugu ` +
  `${Math.min(...uz)}..${Math.max(...uz)}, toplam mesru is ${TOPLAM_IS}`);

const A = [-18, 9, 9, 11];
console.log("\n1. yollar nereden giriyor, nereye cikiyor");
yaz(A, "uc", "yol", "en kisa", "en uzun");
for (const g of giris) {
  const y = YOL.filter((p) => p[1] === g);
  yaz(A, g, y.length, Math.min(...y.map((p) => p.length - 1)),
    Math.max(...y.map((p) => p.length - 1)));
}
for (const h of HEDEF) {
  const y = YOL.filter((p) => p.at(-1) === h);
  yaz(A, h, y.length, Math.min(...y.map((p) => p.length - 1)),
    Math.max(...y.map((p) => p.length - 1)));
}

const B = [-32, 8, 9, 8, 9];
console.log("\n2. bir kenar kaldirilirsa (yol/is orani buyukten kucuge)");
yaz(B, "kenar", "mesru is", "kapanan", "kalan", "yol/is");
const olc = KENAR.map((k) => ({ ...k, kap: YOL.length - kalanYol([k.ad]) }));
for (const k of [...olc].sort((x, y) => y.kap / y.is - x.kap / x.is))
  yaz(B, k.ad, k.is, k.kap, YOL.length - k.kap, (k.kap / k.is).toFixed(2));

const C = [-32, 10, 11, 12, 13];
console.log("\n3. acgozlu daraltma: her turda yol/is orani en yuksek kenar kaldirilir");
yaz(C, "kaldirilan kenar", "mesru is", "kalan yol", "biriken is", "kalan is %");
const kaldir = [];
while (kalanYol(kaldir) > 0) {
  const aday = KENAR.filter((k) => !kaldir.includes(k.ad))
    .map((k) => ({ k, kap: kalanYol(kaldir) - kalanYol([...kaldir, k.ad]) }))
    .sort((x, y) => y.kap / y.k.is - x.kap / x.k.is)[0];
  kaldir.push(aday.k.ad);
  yaz(C, aday.k.ad, aday.k.is, kalanYol(kaldir), duranIs(kaldir),
    (((TOPLAM_IS - duranIs(kaldir)) / TOPLAM_IS) * 100).toFixed(1));
}

const D = [-30, 11, 11, 13];
console.log("\n4. uc yuzey azaltma bicimi");
yaz(D, "bicim", "kalan yol", "duran is", "kalan is %");
const girisKenar = KENAR.filter((k) => k.a === KAYNAK).map((k) => k.ad);
const bedava = olc.filter((k) => k.kap === 0).map((k) => k.ad);
for (const [ad, kume] of [["hicbir sey", []], ["kapatani sifir olan kenarlar", bedava],
  ["butun giris uclari", girisKenar], ["acgozlu secim", kaldir]])
  yaz(D, ad, kalanYol(kume), duranIs(kume),
    (((TOPLAM_IS - duranIs(kume)) / TOPLAM_IS) * 100).toFixed(1));
console.log(`kapattigi yol sifir olan kenar: ${bedava.join(", ") || "yok"}`);

const E = [-18, 11, 13, 12, 12];
console.log("\n5. yuzey olcusu olarak ne sayilir (giris ucu kaldirilirsa)");
yaz(E, "giris ucu", "uc payi %", "kapanan yol", "yol payi %", "is payi %");
for (const g of giris) {
  const k = KENAR.find((x) => x.a === KAYNAK && x.b === g);
  const kap = YOL.length - kalanYol([k.ad]);
  yaz(E, g, (100 / giris.length).toFixed(1), kap, ((kap / YOL.length) * 100).toFixed(1),
    ((k.is / TOPLAM_IS) * 100).toFixed(1));
}
```

```
13 dugum, 21 kenar, 4 giris ucu, 2 hedef; yol sayisi 35, yol uzunlugu 3..6, toplam mesru is 148

1. yollar nereden giriyor, nereye cikiyor
uc                      yol  en kisa    en uzun
sube-ucu                 10        4          6
saha-uygulamasi          10        4          6
ortak-arayuzu             2        3          3
yonetim-ucu              13        3          6
olcum-deposu             21        3          6
kimlik-deposu            14        3          6

2. bir kenar kaldirilirsa (yol/is orani buyukten kucuge)
kenar                           mesru is  kapanan   kalan   yol/is
dis-ag->yonetim-ucu                    2       13      22     6.50
yonetim-ucu->ag-gecidi                 2       10      25     5.00
is-emri->dogrulayici                   2        9      26     4.50
faturalama->kimlik-deposu              3       11      24     3.67
yonetim-ucu->dogrulayici               1        3      32     3.00
ag-gecidi->is-emri                     5       12      23     2.40
faturalama->olcum-deposu               5       11      24     2.20
dogrulayici->faturalama                7       14      21     2.00
dis-ag->saha-uygulamasi                9       10      25     1.11
saha-uygulamasi->ag-gecidi             9       10      25     1.11
ag-gecidi->faturalama                  6        6      29     1.00
dis-ag->sube-ucu                      12       10      25     0.83
sube-ucu->ag-gecidi                   12       10      25     0.83
ag-gecidi->toplayici                  15       12      23     0.80
is-emri->kimlik-deposu                 4        3      32     0.75
toplayici->dogrulayici                15        9      26     0.60
dogrulayici->olcum-deposu             13        7      28     0.54
dis-ag->ortak-arayuzu                  4        2      33     0.50
ortak-arayuzu->faturalama              4        2      33     0.50
toplayici->olcum-deposu               14        3      32     0.21
ag-gecidi->rapor-ucu                   4        0      35     0.00

3. acgozlu daraltma: her turda yol/is orani en yuksek kenar kaldirilir
kaldirilan kenar                  mesru is  kalan yol  biriken is   kalan is %
dis-ag->yonetim-ucu                      2         22           2         98.6
is-emri->dogrulayici                     2         16           4         97.3
faturalama->kimlik-deposu                3         11           7         95.3
faturalama->olcum-deposu                 5          6          12         91.9
is-emri->kimlik-deposu                   4          4          16         89.2
ag-gecidi->toplayici                    15          0          31         79.1

4. uc yuzey azaltma bicimi
bicim                           kalan yol   duran is   kalan is %
hicbir sey                             35          0        100.0
kapatani sifir olan kenarlar           35          4         97.3
butun giris uclari                      0         27         81.8
acgozlu secim                           0         31         79.1
kapattigi yol sifir olan kenar: ag-gecidi->rapor-ucu

5. yuzey olcusu olarak ne sayilir (giris ucu kaldirilirsa)
giris ucu           uc payi %  kapanan yol  yol payi %   is payi %
sube-ucu                 25.0           10        28.6         8.1
saha-uygulamasi          25.0           10        28.6         6.1
ortak-arayuzu            25.0            2         5.7         2.7
yonetim-ucu              25.0           13        37.1         1.4
```

Sayılar **ölçüm** sınıfındadır; girdileri GK21–GK23'tür.

## Otuz Beş Yol

On üç düğüm ve yirmi bir kenar **35 yol** üretir. Bu, yüzeyin bu derste ve müfredatın geri
kalanında kullanılacak sayısıdır. Ne düğüm sayısı ne kenar sayısı onun yerine geçer: kenarlar
%5 artsa yol sayısı iki katına çıkabilir, çünkü yol sayısı kenarların **birleşim biçimine**
bağlıdır.

Birinci tablo yolların nereden girip nereye çıktığını ayırır. Ölçüm deposuna 21, kimlik deposuna 14
yol gider. Giriş uçlarında ise beklenmedik bir dağılım vardır: `sube-ucu` ve `saha-uygulamasi`
onar yol taşır, `ortak-arayuzu` yalnız iki, `yonetim-ucu` ise **on üç** — dördünün en yükseği.
Yönetim ucu ağın en küçük kapısıdır ve en çok yolu açar, çünkü grafın ortasındaki iki düğüme
birden bağlanır.

En kısa yol üç adımdır ve `ortak-arayuzu` üzerinden gider; en uzun yol altı adımdır. Uzunluk
dağılımı savunmanın nereye konacağını değiştirir: üç adımlık bir yolda ara denetim koyacak iki
nokta vardır, altı adımlıkta beş.

## Bir Kenarın İki Sayısı

İkinci tablo bu dersin ana ölçümüdür ve her kenarı iki sayıyla anar: kaç yol kapatıyor, kaç meşru
iş durduruyor. Sıralama ikisinin oranına göredir.

En üstteki satır `dis-ag->yonetim-ucu` kenarıdır: **13 yol kapatır ve yalnız 2 meşru iş durdurur**
— oran 6,50. En çok yol kapatan kenar bu değildir; o `dogrulayici->faturalama` kenarıdır ve 14 yol
kapatır, ama 7 meşru iş durdurur (oran 2,00). Tek başına "en çok kapatan" ölçütü seçilirse ikincisi
kazanır; bedel de sayıldığında birincisi üç kat verimlidir.

Tablonun alt ucu ters yönü gösterir. `toplayici->olcum-deposu` yalnız 3 yol kapatır ve 14 meşru iş
durdurur — oran 0,21. Bu kenar ağın asıl işidir: okumalar oradan deposuna yazılır. Onu kaldırmak
yüzeyi neredeyse hiç daraltmaz ve işin onda birini durdurur.

Son satır her yüzey azaltma listesinde aranması gereken kalemdir. `ag-gecidi->rapor-ucu`
**hiçbir yol kapatmaz** — 35 yol 35 kalır — ve 4 meşru iş durdurur. Rapor ucu hiçbir hedefe
bağlanmaz, bu yüzden hiçbir yolun üstünde değildir. Yüzey sayılmadan yapılan bir sadeleştirmede bu
kenar "açık uç" diye kaldırılabilir; ölçüldüğünde görülen şey, bedeli olan ve karşılığı sıfır olan
bir karardır.

## Yüzey Ölçüsü Olarak Ne Sayılır

Beşinci tablo, yol sayısının neden başka bir ölçünün yerine geçmediğini gösterir. Dört giriş
ucundan her biri uç sayısının **%25'idir**; kapattıkları yol payı ise sırasıyla %28,6, %28,6, %5,7
ve %37,1'dir. Aynı büyüklükteki dört kapı, yüzeyin altı buçuk kat farklı paylarını taşır.

Uçları sayarak yapılan bir yüzey değerlendirmesi bu dört kalemi eşit yazar ve "dört açık ucumuz
var" cümlesini üretir. Kenarları sayan bir değerlendirme de aynı hataya düşer: `ortak-arayuzu`
üzerinden gelen yollar iki kenar kullanır, `yonetim-ucu` üzerinden gelenler de öyle başlar, ama
biri iki yol açar öteki on üç. Sayılabilir tek şey **birleşim**dir, ve birleşimin sayısı yoldur.

Son sütun aynı tabloyu ters yönden okur. `yonetim-ucu` toplam meşru işin yalnız **%1,4'ünü**
taşır ve yolların %37,1'ini açar; `sube-ucu` işin %8,1'ini taşır ve yolların %28,6'sını. İki
oranın birlikte okunması, yüzey azaltmanın sırasını doğrudan verir: en az iş taşıyıp en çok yol
açan uç ilk sıradadır. Bu ders boyunca elde edilen üç sütun — kapanan yol, kalan yol, meşru işe
bedel — bu tabloda ilk kez bir **sıralama kuralına** dönüşür.

## Sıfıra İndirmenin Bedeli

Üçüncü tablo yolu sıfıra indirmeyi dener: her turda oranı en yüksek kenar kaldırılır ve yol yeniden
sayılır. Altı kenar sonunda kalan yol sıfırdır ve duran meşru iş 31'dir; ağın işinin **%79,1'i**
ayakta kalır.

Sıra kendi içinde öğreticidir. İlk kaldırma 35 yolu 22'ye indirir, ikincisi 16'ya, üçüncüsü 11'e.
İlk üç kenar toplam 7 meşru iş bedeliyle yolların **%68,6'sını** kapatır. Kalan dört yol için
ödenen bedel ise 24 meşru iştir. **Yüzey azaltmanın getirisi ilk adımlarda toplanır; son yolları
kapatmak katlanarak pahalılaşır.** Son satır bunun en açık biçimidir: `ag-gecidi->toplayici` tek
başına 15 meşru iş durdurur ve geriye kalan dört yolu kapatır.

Dördüncü tablo açgözlü seçimi iki alternatifle karşılaştırır. Kapattığı yol sıfır olan kenarları
kaldırmak 4 meşru iş harcar ve **35 yolun hiçbirini kapatmaz**. Bütün giriş uçlarını dış ağdan
kesmek yolu sıfırlar ve 27 meşru iş durdurur. Oran sıralamasına göre açgözlü seçim de yolu
sıfırlar ama **31 meşru iş** durdurur.

Bu son karşılaştırma bu dersin en dikkat çekici sonucudur: her adımda en verimli görünen kenarı
seçmek, **toplamda daha pahalı** bir sonuç verir. Açgözlü seçim ilk turlarda ucuz kenarları
harcar, sonunda pahalı bir kenarı kaldırmak zorunda kalır. En ucuz tam kesim bir kenar sıralaması
değil, bir **kesit** seçimidir — hangi kenar kümesinin birlikte kaynağı hedeflerden ayırdığı. Bir
savunma listesi kalem kalem verimlilikle sıralandığında, seçilen kalemlerin **birlikte** ne yaptığı
sayılmadıkça toplam bedel dört birim fazla çıkar.

## Özet

- Saldırı yüzeyinin sayılabilir karşılığı yol sayısıdır: 13 düğüm ve 21 kenarlık grafta dört giriş
  ucundan iki hedefe **35 yol** gider, uzunlukları 3 ile 6 adım arasındadır.
- Dört giriş ucunun her biri uç sayısının %25'idir ama yolların %28,6, %28,6, %5,7 ve %37,1'ini
  açar; en az meşru iş taşıyan uç (%1,4) en çok yolu taşır. Uç ya da kenar saymak yüzeyi ölçmez.
- Her kenar iki sayıyla anılır: en çok yol kapatan kenar 14 yol / 7 iş (oran 2,00), en verimli
  kenar 13 yol / 2 iş (oran 6,50), en verimsizi 3 yol / 14 iş (oran 0,21).
- Bir kenar 4 meşru iş durdurur ve hiçbir yol kapatmaz; hiçbir hedefe bağlanmadığı için hiçbir
  yolun üstünde değildir.
- İlk üç kaldırma 7 meşru iş bedeliyle yolların %68,6'sını kapatır; kalan dört yol için ödenen
  bedel 24 meşru iştir.
- Yolu sıfırlamak açgözlü seçimle 31, bütün giriş uçlarını kesmekle 27 meşru işe mal olur;
  kalem kalem en verimli seçim toplamda en ucuz seçim değildir.

## Sonraki Adım

Bu konu güvenliğin ölçü birimlerini kurdu. Üç eksen aynı varlığın üstünde çakıştırıldı, varlık,
tehdit ve açık ayrı listelere bölündü, risk olasılık ile etkinin bileşimi olarak sıralandı, açıktan
etkiye giden zincir adımlandı ve bu ders yüzeyi tek bir sayıya indirdi: **35 yol**. Artık her
sorunun bir birimi var.

Yine de bütün bu ölçümlerde bir şey hiç yapılmadı. Yollar sayıldı, kenarların kaldırılması
denendi ve bedeli yazıldı — ama kaldırmak bir savunma değildir; işi durdurmaktır. Gerçek bir
savunma kenarı yerinde bırakır ve üstüne bir denetim koyar: katman ekler, yetkiyi daraltır,
bölmelere ayırır, konum temelli güveni kaldırır, kimlik doğrulamayı yetkilendirmeden ayırır,
varsayılanı kapatır. Bu ilkelerin her biri **aynı 35 yol** üzerinde koşturulabilir ve her biri
için aynı üç sayı yazılabilir: kaç yol kapandı, kaç yol kaldı, kaç meşru iş durdu. Sonraki konu —
**Savunma İlkeleri** — altı ilkeyi tek tek bu üç sütunla ölçer.
