---
title: 'Yetki Yükseltme'
source: 'https://academia.sh/tr/kurslar/kimlik-ve-kriptografi/yetki-yukseltme'
course: 'Kimlik, Erişim ve Kriptografi'
language: tr
updated: '2026-08-17T18:08:37+00:00'
license: 'CC BY-SA 4.0'
---

# Yetki Yükseltme

Yatay ve dikey yükselmenin yol sayımı olarak ölçülmesi: 9 düğüm ve 20 kenar üzerinde sınırlı kullanıcıdan alan yöneticisine 37 ayrı yolun bulunması, 32 yolun en az bir yatay kenardan geçmesi, tek bir denetimin en çok 24 yol kapatması, üç denetimin 37'sini birden kapatması ve bir denetimin hiçbir yolu kapatmaması.

Önceki ders bir ayarın 67 makinede yerel olarak düşürülebildiğini saydı. Düşürebilmek için o
makinede yerel yönetici olmak gerekir ve asıl soru, sıradan bir hesabın o yetkiyi nasıl elde
ettiğidir. Bu geçişe **yetki yükseltme (privilege escalation)** denir ve kurumsal bir ağda tek
bir olay değil, bir yollar kümesidir.

İki tür ayrılır. **Yatay yükselme**, aynı düzeydeki başka bir öznenin verisine ya da hesabına
geçmektir; **dikey yükselme**, üst düzeye çıkmaktır. Bu ders ikisini de yol sayımı olarak ele
alır: kaç ayrı yol var, hangi denetim kaçını kapatıyor ve hepsini kapatmak için kaç denetim
gerekiyor. **Bilgi Teknolojileri ve Sistem Temelleri** kursunda yükseltme, yapıldığı varsayılınca
açılan istek sayısı olarak ölçülmüştü; burada ölçülen, yükseltmenin **kaç ayrı yoldan** mümkün
olduğudur. Adım dizisi, komut ve araç bu derste yazılmaz; böyle bir denemenin yazılı yetki ve
tanımlı kapsam olmadan yapılması hem yasadışı hem meslek dışıdır.

## Kenar, Yol ve Denetim

**KK20:** yetki yükseltme tek bir olay değil, bir **kenar kümesidir**; her kenar bir yapılandırma
kaleminden doğar ve o kalem kaldırıldığında kenar da kalkar. **KK21:** yatay ve dikey yükselme
ayrı sayılır, çünkü ayrı denetimlerle kapanır. **KK22:** bir denetim kenar kapatır, yol kapatmaz;
kaç yol kapandığı o kenarın kaç yolda geçtiğine bağlıdır.

KK20 bu dersin ölçme biçimini belirler. Yükseltme bir yetenek değil, envanterin bir özelliğidir:
grafikteki her kenarın arkasında yazılmış bir üyelik, verilmiş bir izin ya da unutulmuş bir hesap
vardır. Bu yüzden ölçülen şey saldırganın becerisi değil, kurumun kendi yapılandırma kalemleridir. Kenar listesi değişmedikçe sayı değişmez; liste her
değiştiğinde sayı yeniden hesaplanır ve bu hesap bir denetim işi değil, bir envanter işidir; envanter tutulmadığında yol sayısı bilinmez ve çoğu kurumda sıfır sanılır.

## Dokuz Düğüm, Yirmi Kenar

Aşağıdaki graf bir **modeldir**: kurgu bölgesel ölçüm ağı kurumunda hesap düzeyleri ve aralarında
geçişi mümkün kılan yapılandırma kalemleri. Gerçek bir kurum, gerçek bir hesap ve işleyen hiçbir
adım dizisi yoktur.

```js
// yukselme/graf.mjs — yetki yukseltme yollarinin grafi (model): dugumler hesap duzeyleri,
// kenarlar bir duzeyden digerine gecisi mumkun kilan yapilandirma kalemleridir. Gercek bir
// kurum, gercek bir hesap ve isleyen hicbir adim dizisi yok. Rastgelelik yok.

// KK20: yetki yukseltme tek bir olay degil, bir kenar kumesidir; her kenar bir yapilandirma
// kaleminden dogar ve o kalem kaldirildiginda kenar da kalkar. KK21: yatay yukselme ayni
// duzeydeki baska bir ozneye, dikey yukselme ust duzeye gecistir; ikisi ayri sayilir cunku
// ayri denetimlerle kapanir. KK22: bir denetim kenar kapatir, yol kapatmaz; kac yol kapandigi
// o kenarin kac yolda gectigine baglidir.
// Sutunlar: kaynak, hedef, tur, kenari acan kalem, kenari kapatan denetim.
export const KENAR = `
  sinirli-kullanici    baska-kullanici      yatay  paylasilan-yerel-parola  makine-basi-parola
  sinirli-kullanici    baska-kullanici      yatay  ortak-dizin-izni         dosya-izni-daraltma
  sinirli-kullanici    yerel-yonetici       dikey  yerel-yonetici-uyeligi   grup-uyeligi-dayatma
  sinirli-kullanici    yerel-yonetici       dikey  imzasiz-betik            imzasiz-betik-engeli
  sinirli-kullanici    yedekleme-operator   dikey  eski-grup-uyeligi        grup-uyeligi-denetimi
  baska-kullanici      yerel-yonetici       dikey  ikinci-hesap-uyeligi     grup-uyeligi-dayatma
  baska-kullanici      yardim-masasi        yatay  yardim-masasi-uyeligi    grup-uyeligi-denetimi
  yerel-yonetici       hizmet-hesabi        yatay  makinede-calisan-hizmet  hizmet-hesabi-kisiti
  yerel-yonetici       yardim-masasi        yatay  ayricalikli-oturum-izi   oturum-yalitimi
  yerel-yonetici       sunucu-yoneticisi    dikey  ortak-yerel-parola       makine-basi-parola
  yerel-yonetici       yedekleme-operator   yatay  yedek-ajani-hesabi       yedek-erisim-ayrimi
  hizmet-hesabi        sunucu-yoneticisi    dikey  asiri-yetkili-hizmet     en-az-yetki
  hizmet-hesabi        politika-yoneticisi  dikey  hizmet-politika-yetkisi  politika-yazma-ayrimi
  yardim-masasi        baska-kullanici      yatay  parola-sifirlama         sifirlama-onayi
  yardim-masasi        alan-yoneticisi      dikey  devredilebilir-yonetim   devir-kisitlama
  yardim-masasi        yedekleme-operator   yatay  grup-yonetim-yetkisi     devir-kisitlama
  yedekleme-operator   alan-yoneticisi      dikey  yedek-geri-yukleme       yedek-erisim-ayrimi
  sunucu-yoneticisi    politika-yoneticisi  dikey  politika-duzenleme       politika-yazma-ayrimi
  sunucu-yoneticisi    alan-yoneticisi      dikey  sunucuda-yonetici-izi    oturum-yalitimi
  politika-yoneticisi  alan-yoneticisi      dikey  politika-dayatma         politika-imzasi`
  .trim().split("\n").map((r) => {
    const p = r.trim().split(/\s{2,}/);
    return { kaynak: p[0], hedef: p[1], tur: p[2], kalem: p[3], denetim: p[4] };
  });

export const BASLANGIC = "sinirli-kullanici";
export const HEDEF = "alan-yoneticisi";

// Yol sayimi: dongusuz, her dugum bir yolda en fazla bir kez gecilir.
export const yollar = (kapali = []) => {
  const acik = KENAR.filter((k) => !kapali.includes(k.denetim));
  const sonuc = [];
  const gez = (dugum, gecilen, yol) => {
    if (dugum === HEDEF) { sonuc.push(yol); return; }
    for (const k of acik.filter((x) => x.kaynak === dugum && !gecilen.includes(x.hedef)))
      gez(k.hedef, [...gecilen, k.hedef], [...yol, k]);
  };
  gez(BASLANGIC, [BASLANGIC], []);
  return sonuc;
};
```

```js
// yukselme/sayim.mjs — kac ayri yukselme yolu var, yollarin kaci yatay kenar gecirir, hangi
// denetim kacini kapatiyor ve butun yollari kapatmak icin kac denetim gerekiyor.
import { KENAR, BASLANGIC, HEDEF, yollar } 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 denetimler = [...new Set(KENAR.map((k) => k.denetim))];
const dugum = [...new Set(KENAR.flatMap((k) => [k.kaynak, k.hedef]))];
const hepsi = yollar();

console.log(`${dugum.length} dugum, ${KENAR.length} kenar (` +
  `${KENAR.filter((k) => k.tur === "dikey").length} dikey, ` +
  `${KENAR.filter((k) => k.tur === "yatay").length} yatay), ` +
  `${denetimler.length} denetim`);
console.log(`${BASLANGIC} dugumunden ${HEDEF} dugumune ${hepsi.length} ayri yol var`);

const A = [-10, 8, 12, 12, 11];
console.log("\n1. yol uzunluguna gore dagilim");
yaz(A, "uzunluk", "yol", "yalniz dik", "yatay var", "ort kenar");
for (const u of [2, 3, 4, 5]) {
  const s = hepsi.filter((y) => y.length === u);
  if (s.length === 0) continue;
  yaz(A, u, s.length, s.filter((y) => y.every((k) => k.tur === "dikey")).length,
    s.filter((y) => y.some((k) => k.tur === "yatay")).length, u);
}
const yatayli = hepsi.filter((y) => y.some((k) => k.tur === "yatay")).length;
console.log(`en az bir yatay kenar geciren yol ${yatayli}/${hepsi.length}, ` +
  `yalniz dikey kenarla giden yol ${hepsi.length - yatayli}`);

const B = [-22, 8, 10, 10, 11];
console.log("\n2. denetim basina: kac kenar, kac yol kapaniyor");
yaz(B, "denetim", "kenar", "kapanan", "kalan", "kapanan %");
const sirali = denetimler.map((d) => ({ d, kalan: yollar([d]).length }))
  .sort((a, b) => a.kalan - b.kalan);
for (const { d, kalan } of sirali) {
  yaz(B, d, KENAR.filter((k) => k.denetim === d).length, hepsi.length - kalan, kalan,
    `%${(100 * (hepsi.length - kalan) / hepsi.length).toFixed(0)}`);
}

const C = [-22, 9, 9, 11];
console.log("\n3. denetimler en etkiliden eklenirse (birikimli)");
yaz(C, "eklenen", "denetim", "kalan", "kapanan");
const secili = [];
yaz(C, "hicbiri", 0, hepsi.length, 0);
let kalanY = hepsi.length;
while (kalanY > 0) {
  let enIyi = null, enAz = kalanY;
  for (const d of denetimler.filter((x) => !secili.includes(x))) {
    const k = yollar([...secili, d]).length;
    if (k < enAz) { enAz = k; enIyi = d; }
  }
  if (enIyi === null) break;
  secili.push(enIyi); kalanY = enAz;
  yaz(C, enIyi, secili.length, kalanY, hepsi.length - kalanY);
}

const D = [-22, 8, 10, 12, 12];
console.log("\n4. dugum basina: kac yol o dugumden geciyor");
yaz(D, "dugum", "yolda", "yuzde", "giren kenar", "cikan kenar");
const gecen = (d) => hepsi.filter((y) =>
  y.some((k) => k.kaynak === d || k.hedef === d)).length;
for (const d of dugum.sort((a, b) => gecen(b) - gecen(a))) {
  yaz(D, d, gecen(d), `%${(100 * gecen(d) / hepsi.length).toFixed(0)}`,
    KENAR.filter((k) => k.hedef === d).length,
    KENAR.filter((k) => k.kaynak === d).length);
}
```

```
9 dugum, 20 kenar (12 dikey, 8 yatay), 13 denetim
sinirli-kullanici dugumunden alan-yoneticisi dugumune 37 ayri yol var

1. yol uzunluguna gore dagilim
uzunluk        yol  yalniz dik   yatay var  ort kenar
2                1           1           0          2
3                8           2           6          3
4               16           2          14          4
5               10           0          10          5
en az bir yatay kenar geciren yol 32/37, yalniz dikey kenarla giden yol 5

2. denetim basina: kac kenar, kac yol kapaniyor
denetim                  kenar   kapanan     kalan  kapanan %
grup-uyeligi-dayatma         2        24        13        %65
makine-basi-parola           2        16        21        %43
oturum-yalitimi              2        16        21        %43
hizmet-hesabi-kisiti         1        12        25        %32
politika-yazma-ayrimi        2        12        25        %32
devir-kisitlama              2        12        25        %32
politika-imzasi              1        12        25        %32
yedek-erisim-ayrimi          2        11        26        %30
dosya-izni-daraltma          1        10        27        %27
imzasiz-betik-engeli         1         8        29        %22
en-az-yetki                  1         8        29        %22
grup-uyeligi-denetimi        2         5        32        %14
sifirlama-onayi              1         0        37         %0

3. denetimler en etkiliden eklenirse (birikimli)
eklenen                 denetim    kalan    kapanan
hicbiri                       0       37          0
grup-uyeligi-dayatma          1       13         24
imzasiz-betik-engeli          2        5         32
grup-uyeligi-denetimi         3        0         37

4. dugum basina: kac yol o dugumden geciyor
dugum                    yolda     yuzde giren kenar cikan kenar
sinirli-kullanici           37      %100           0           5
alan-yoneticisi             37      %100           4           0
yerel-yonetici              32       %86           3           4
baska-kullanici             20       %54           3           2
sunucu-yoneticisi           16       %43           2           2
yardim-masasi               12       %32           2           3
hizmet-hesabi               12       %32           1           2
politika-yoneticisi         12       %32           2           1
yedekleme-operator          11       %30           3           1
```

Sayılar **ölçüm** sınıfındadır; girdileri KK20–KK22 ile kenar listesidir.

## Yirmi Kenar, Otuz Yedi Yol

Başlık satırı bu dersin ilk sonucunu verir: yirmi kenarlı bir grafta sınırlı bir kullanıcıdan
alan yöneticisine **37 ayrı yol** vardır. Yirmi kalem yazılmıştır, otuz yedi sonuç doğmuştur.
Yolların kenar sayısına göre değil, kenarların **birleşim biçimine** göre çoğalması bu ölçümün
temel özelliğidir; yeni bir kenar eklemek yol sayısını bir artırmaz, çarpar.

Birinci tablo dağılımı verir. En kısa yol iki kenardır ve tek örneği vardır. Üç kenarlı yol
sekiz, dört kenarlı yol on altı, beş kenarlı yol on tanedir. Yolların çoğunluğu ortada
toplanır; en kısa ve en uzun uçlar seyrektir. Bu, bir envanterin "kaç adımda ele geçirilir"
sorusuna verilebilecek tek anlamlı yanıtın **dağılım** olduğunu gösterir — tek bir sayı yoktur.

Yatay kenarların payı belirleyicidir. Otuz yedi yolun **32'si** en az bir yatay kenardan geçer;
yalnız beş yol baştan sona dikey kenarlarla ilerler. Yatay kenarlar sekiz tanedir, yani kenarların
%40'ı; ama yolların %86'sında geçerler. Yatay geçişler yükseltmenin kendisi değildir — düzey
değiştirmezler — ama dikey kenarlara **erişim** sağlarlar ve bu yüzden yolların çoğunda bulunurlar.
Yalnız dikey yükselmeyi ölçen bir değerlendirme, otuz yedi yolun otuz ikisini görmez.

## Bir Denetim Kaç Yol Kapatıyor

İkinci tablo KK22'yi sayar. Grup üyeliği dayatması iki kenarı kapatır ve 24 yol düşürür — toplamın
%65'i. Makine başına benzersiz parola ile ayrıcalıklı oturum yalıtımı da ikişer kenar kapatır ama
16'şar yol düşürür. Aynı sayıda kenar, farklı sayıda yol: bir kenarın değeri kendi sayısında
değil, kaç yolda geçtiğindedir.

Tablonun son satırı bunun uç örneğidir. Parola sıfırlama onayı bir kenar kapatır ve **sıfır yol**
düşürür. Kapattığı kenar — yardım masasından başka bir kullanıcıya geçiş — hiçbir yolun üzerinde
değildir, çünkü o kenardan sonra gidilebilecek her yere zaten daha kısa yollardan gidilmektedir.
Denetim gereksiz değildir; başka bir şeye karşı işe yarayabilir. Ama **bu grafta yol kapatma
ölçüsüne göre değeri sıfırdır** ve bir güvenlik bütçesi bu satırı görmeden dağıtılmamalıdır.

Dördüncü tablo aynı bilgiyi düğüm tarafından verir. Yerel yönetici düğümü yolların %86'sında
geçer; üç giren, dört çıkan kenarı vardır. Ondan sonraki en yüklü düğüm başka kullanıcıdır ve
yolların %54'ünde bulunur. Bir düğümün yük taşıması, giren kenar sayısıyla çıkan kenar sayısının
çarpımına yakın davranır: yerel yöneticide üç ile dördün çarpımı, tabloda en yüksek satırı verir.

## Grafın Kendisi Nerede Duruyor

Yirmi kenarın hangi kalemden doğduğu listede yazılıdır ve bu kalemlerin çoğu bir yerde tutulur:
merkezî dizinde. Grup üyelikleri, devredilmiş yönetim yetkileri ve hizmet hesaplarının kapsamı
ilk derste ölçülen deponun kayıtlarıdır. **Bu dersin güven kökü, o kayıtların gerçeği yansıtması
varsayımıdır**; deponun bütünlüğü kırıldığında graf, hiç kimsenin görmediği yeni kenarlar kazanır
ve sayım eskimiş olur.

İki kenar bunu doğrudan gösterir. Yerel yönetici üyeliğinden doğan kenar, önceki derste merkezî
politikayla dayatılan on iki ayardan birinin karşılığıdır; o ayarın ulaşmadığı 30 makinede kenar
açık kalır. Aynı biçimde yerel geçersiz kılmaya açık 67 makinede, imzasız betik engelinin
kapattığı kenar makine başına yeniden doğar. Yayılma tablosundaki eksik kapsama, bu grafta
doğrudan kenar sayısına yazılır.

Bu, iki dersin sayılarını birbirine bağlar. Üçüncü tablo üç denetimin otuz yedi yolu kapattığını
söyler; altıncı ders o denetimlerin makinelerin %90,8'ine ulaştığını ve %9,2'sine hiç
ulaşmadığını söyler. **Kapatılan yol sayısı ile kapatmanın ulaştığı makine oranı ayrı iki
ölçüdür** ve gerçek kapsama ikisinin çarpımıdır. Grafta sıfıra inen yol sayısı, envanterin
tamamında sıfır değildir; ulaşılamayan her makine, kapatıldığı sanılan kenarları kendi üzerinde
açık tutar ve bu kenarlar merkezî raporda kapalı görünür.

## Üç Denetim Otuz Yedi Yolu Kapatıyor

Üçüncü tablo en etkili denetimi tekrar tekrar seçerek birikimli sonucu çıkarır. Grup üyeliği
dayatması 37 yolu 13'e indirir; imzasız betik engeli 13'ü 5'e; grup üyeliği denetimi 5'i sıfıra.
**Üç denetim otuz yedi yolun tamamını kapatır.**

Sonucun biçimi şaşırtıcıdır ve nedeni grafın yapısındadır. Üç denetimin üçü de sınırlı kullanıcı
düğümünden **çıkan** kenarları kapatır; beş çıkan kenarın hepsi bu üç denetimin kapsamındadır.
Başlangıç düğümünden çıkış kesildiğinde grafın geri kalanı ne kadar zengin olursa olsun ulaşılamaz
hâle gelir. İkinci tablodaki tek tek sıralama ile üçüncü tablodaki birikimli seçim bu yüzden
farklı denetimleri öne çıkarır: politika imzası tek başına 12 yol kapatır ama seçilmez, çünkü
kapattığı yollar başkalarınca zaten kapatılmıştır.

Bu, **yol sayımının en pratik sonucudur**: savunma bütçesi tek tek etkiye göre değil, birikimli
etkiye göre dağıtılır. On üç denetimin on üçünü de uygulamak gerekmiyor olabilir; ama hangi üçünün
yeteceğini söyleyen şey ne deneyim ne de sezgidir — kenar listesi üzerinde yapılan sayımdır.

Modelin sınırı da burada yazılır. Üç denetim bu **kenar listesindeki** yolları kapatır; listede
olmayan bir kenar — kaydedilmemiş bir grup üyeliği, unutulmuş bir hizmet hesabı — sayıma girmez
ve kapanmaz. Yol sayımı envanterin doğruluğu kadar doğrudur ve envanterin eksikliği, sayının
küçüklüğü olarak görünür.

## Özet

- Yetki yükseltme bir kenar kümesidir: 9 düğüm ve 20 kenarlı bir grafta sınırlı kullanıcıdan
  alan yöneticisine 37 ayrı yol vardır.
- Yolların uzunluğu 2 ile 5 kenar arasında dağılır; çoğunluk 4 kenarlı yollardadır ve tek bir
  "kaç adım" sayısı yoktur.
- Yatay kenarlar kenarların %40'ıdır ama yolların 32'sinde geçer; yalnız dikey yükselmeyi ölçen
  bir değerlendirme 37 yolun 32'sini görmez.
- Aynı sayıda kenar kapatan iki denetim farklı sayıda yol kapatır; bir denetim 1 kenar kapatıp
  0 yol düşürür.
- Üç denetim 37 yolun tamamını kapatır, çünkü üçü de başlangıç düğümünden çıkan 5 kenarı
  kapsar; birikimli etki tek tek etkiden farklı bir sıralama üretir.

## Sonraki Adım

Bu ders yükselmeyi yapılandırma kalemleri üzerinden saydı: bir üyelik, bir izin, bir hesap. Kenar
listesinin arkasında sessiz kalan bir kalem daha vardır. Bir hesaptan diğerine geçmek çoğu zaman
o hesabın parolasını bilmeyi değil, o hesabın **doğrulanmasında kullanılan değeri** ele geçirmeyi
gerektirir; makinelerin belleğinde, oturum açmış her kullanıcı için böyle bir değer durur.
Sonraki ders bunu savunma ekseninde ölçer: hangi kalem bellekte ne kadar kalıyor, karma aktarmanın
neden parola bilmeden çalıştığı ve hangi denetimin kaç yolu kapattığı. O ders aynı zamanda kursu
kapatır.
