İçeriğe geç
academia.sh

Ders 21 / 21

Kimlik Bilgisi Hırsızlığı

Doğrulama kalemlerinin bellekte kalış süresi ve denetimlerin kapattığı yol: 8 kalem türünün 6'sının parola bilinmeden doğrudan sunulabilmesi, 22 yol ve 298.958 makine-saatlik maruziyet, altı denetimin 17 yolu kapatıp maruziyeti %1'e indirmesi ve kalan 5 yolun hiçbir denetimle kapanmaması.

İçindekiler

Önceki 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, doğrulanmasında kullanılan değeri eline geçirmeyi gerektirir; oturum açmış her kullanıcı için makinelerin belleğinde böyle bir değer durur.

Bu ders o değerleri savunma ekseninde ölçer: hangi kalem nerede ne kadar kalıyor, kaç kalem parola bilinmeden doğrudan sunulabiliyor ve hangi denetim kaç yolu kapatıyor. İşleyen bir adım dizisi, araç adı ya da komut bu derste yazılmaz; ölçülen şey kalemin nasıl alındığı değil, alındığı varsayıldığında ne açtığıdır. Böyle bir denemenin yazılı yetki ve tanımlı kapsam olmadan yapılması hem yasadışı hem meslek dışıdır.

Sunulan Şey Parola Değildir

KK23: doğrulama girdisi çoğu mekanizmada parolanın kendisi değil, ondan türetilen ya da onunla üretilmiş bir değerdir; doğrulayan taraf o değeri bekler. KK24: bu yüzden değeri eline geçirenin parolayı bilmesi gerekmez — sunulan şey zaten parola değildir. KK25: bir kalemin makinede kalış süresi ile kapsamı çarpılır; savunma kalemi kaldırmak, süresini kısaltmak ya da kapsamını daraltmak yollarından biriyle ölçülür.

KK24 bu dersin kavramsal çekirdeğidir ve karma aktarma (pass-the-hash) adı verilen sınıfın tamamını açıklar. Parola hiçbir yerde saklanmaz; saklanan ve ağdan geçen şey ondan türetilmiş bir değerdir. Doğrulayan taraf, kendisine sunulan değeri kendi kaydındaki değerle karşılaştırır ve eşleşiyorsa kabul eder. Bu, bir kusur değil tasarımdır — parolayı ağdan geçirmemek için yapılmıştır. Ama aynı tasarım şunu da söyler: türetilmiş değeri sunabilen, parolayı bilenle aynı sonucu alır. Parola değiştirmek bu yüzden kalemi yenilerken, kalemi çalınmış bir hesap için yapılacak tek işlem de odur.

Sekiz Kalem, Yirmi İki Yol

Aşağıdaki envanter bir modeldir: kurgu bölgesel ölçüm ağı kurumunda oturum açıldıktan sonra makinelerde duran doğrulama kalemleri. Gerçek bir kurum, gerçek bir makine ve işleyen hiçbir adım dizisi yoktur.

// hirsizlik/kalem.mjs — bir oturum acildiktan sonra makinede duran dogrulama kalemleri
// (model): gercek bir kurum, gercek bir makine, gercek bir kalem ve isleyen hicbir adim
// dizisi yok. Rastgelelik yok.

// KK23: dogrulama girdisi cogu mekanizmada parolanin kendisi degil, ondan turetilen ya da
// onunla uretilmis bir degerdir; dogrulayan taraf o degeri bekler. KK24: bu yuzden degeri
// eline gecirenin parolayi bilmesi gerekmez — sunulan sey zaten parola degildir.
// KK25: bir kalemin makinede kalis suresi ile kapsami carpilir; savunma kalemi kaldirmak,
// suresini kisaltmak ya da kapsamini daraltmak yollarindan biriyle olculur.
// Sutunlar: omur = kalemin makinede kalis suresi (saat), kapsam = kalemin acabildigi sistem
// sayisi, sunulabilir = parola bilinmeden dogrudan sunuldugunda kabul edilir mi.
export const KALEM = `
  parola-turevi-dogrulayici    720   13   evet
  bilet-veren-bilet             10   21   evet
  servis-bileti                 10    1   evet
  oturum-anahtari               10    1   hayir
  uygulama-oturum-cerezi        72    1   evet
  onbellekli-dogrulayici         8    1   hayir
  yenileme-bileti              168   21   evet
  hizmet-hesabi-sirri          720    1   evet`
  .trim().split("\n").map((r) => {
    const p = r.trim().split(/\s+/);
    return { ad: p[0], omur: +p[1], kapsam: +p[2], sunulabilir: p[3] === "evet" };
  });

export const SINIF = [
  { ad: "sube-is-istasyonu", adet: 96 },
  { ad: "sunucu", adet: 21 },
  { ad: "saha-dizustu", adet: 140 },
  { ad: "olcum-toplayici", adet: 44 },
];

// Hangi kalem hangi sinifta bulunuyor: her cift bir yoldur.
export const BULUNUR = {
  "parola-turevi-dogrulayici": ["sube-is-istasyonu", "sunucu", "saha-dizustu"],
  "bilet-veren-bilet": ["sube-is-istasyonu", "sunucu", "saha-dizustu"],
  "servis-bileti": ["sube-is-istasyonu", "sunucu", "saha-dizustu", "olcum-toplayici"],
  "oturum-anahtari": ["sube-is-istasyonu", "sunucu", "saha-dizustu", "olcum-toplayici"],
  "uygulama-oturum-cerezi": ["sube-is-istasyonu", "saha-dizustu"],
  "onbellekli-dogrulayici": ["sube-is-istasyonu", "saha-dizustu"],
  "yenileme-bileti": ["sube-is-istasyonu", "saha-dizustu"],
  "hizmet-hesabi-sirri": ["sunucu", "olcum-toplayici"],
};

// Her denetim, hangi (kalem, sinif) ciftini ortadan kaldirdigini kendi olcutuyle soyler.
export const DENETIM = {
  "ayricalikli-oturum-yalitimi": (k, s) => k.kapsam > 1 && s.ad !== "sunucu",
  "korumali-hesap-grubu": (k) => k.ad === "onbellekli-dogrulayici" ||
    k.ad === "parola-turevi-dogrulayici",
  "yerel-yonetici-kisiti": (k, s) => s.ad === "sube-is-istasyonu" || s.ad === "olcum-toplayici",
  "cikis-zorunlulugu": (k) => k.omur > 24,
  "hizmet-hesabi-yalitimi": (k) => k.ad === "hizmet-hesabi-sirri",
  "kaynaga-bagli-etmen": (k) => k.ad === "uygulama-oturum-cerezi" || k.ad === "yenileme-bileti",
};
// hirsizlik/sayim.mjs — hangi kalem nerede ne kadar kaliyor, kac kalem parola bilinmeden
// sunulabiliyor, her denetim kac yol kapatiyor ve kalan maruziyet ne.
import { KALEM, SINIF, BULUNUR, DENETIM } from "./kalem.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 sinif = (ad) => SINIF.find((s) => s.ad === ad);
const YOL = KALEM.flatMap((k) => BULUNUR[k.ad].map((s) => ({ k, s: sinif(s) })));
const maruz = (y) => y.reduce((a, x) => a + x.s.adet * x.k.omur, 0);
const acik = (kapali = []) =>
  YOL.filter((y) => !kapali.some((d) => DENETIM[d](y.k, y.s)));

console.log(`${KALEM.length} kalem turu, ${SINIF.length} makine sinifi, ` +
  `${YOL.length} yol, ${SINIF.reduce((a, s) => a + s.adet, 0)} makine`);
console.log(`parola bilinmeden dogrudan sunulabilen kalem ` +
  `${KALEM.filter((k) => k.sunulabilir).length}/${KALEM.length}; ` +
  `toplam maruziyet ${maruz(YOL)} makine-saat`);

const A = [-26, 7, 8, 8, 8, 12];
console.log("\n1. kalem basina: nerede, ne kadar, ne kadar genis");
yaz(A, "kalem", "omur", "kapsam", "sinif", "makine", "makine-saat");
for (const k of KALEM) {
  const y = YOL.filter((x) => x.k === k);
  yaz(A, k.ad, k.omur, k.kapsam, y.length, y.reduce((a, x) => a + x.s.adet, 0), maruz(y));
}

const B = [-28, 8, 10, 12, 10];
console.log("\n2. denetim basina kapanan yol ve maruziyet");
yaz(B, "denetim", "kapanan", "kalan yol", "kalan mar", "kalan %");
for (const d of Object.keys(DENETIM)) {
  const kalan = acik([d]);
  yaz(B, d, YOL.length - kalan.length, kalan.length, maruz(kalan),
    `%${(100 * maruz(kalan) / maruz(YOL)).toFixed(0)}`);
}

const C = [-28, 8, 9, 12, 10];
console.log("\n3. denetimler birikimli eklenirse");
yaz(C, "eklenen", "yol", "kapanan", "maruziyet", "kalan %");
const secili = [];
yaz(C, "hicbiri", YOL.length, 0, maruz(YOL), "%100");
for (const d of Object.keys(DENETIM)) {
  secili.push(d);
  const kalan = acik(secili);
  yaz(C, d, kalan.length, YOL.length - kalan.length, maruz(kalan),
    `%${(100 * maruz(kalan) / maruz(YOL)).toFixed(0)}`);
}

const D = [-26, -18, 8, 13];
console.log("\n4. butun denetimler acikken kalan yollar");
const kalan = acik(Object.keys(DENETIM));
yaz(D, "kalem", "sinif", "makine", "makine-saat");
for (const y of kalan) yaz(D, y.k.ad, y.s.ad, y.s.adet, y.s.adet * y.k.omur);
console.log(`kalan yol ${kalan.length}/${YOL.length}, ` +
  `kalan maruziyet ${maruz(kalan)}/${maruz(YOL)} makine-saat`);
8 kalem turu, 4 makine sinifi, 22 yol, 301 makine
parola bilinmeden dogrudan sunulabilen kalem 6/8; toplam maruziyet 298958 makine-saat

1. kalem basina: nerede, ne kadar, ne kadar genis
kalem                        omur  kapsam   sinif  makine makine-saat
parola-turevi-dogrulayici     720      13       3     257      185040
bilet-veren-bilet              10      21       3     257        2570
servis-bileti                  10       1       4     301        3010
oturum-anahtari                10       1       4     301        3010
uygulama-oturum-cerezi         72       1       2     236       16992
onbellekli-dogrulayici          8       1       2     236        1888
yenileme-bileti               168      21       2     236       39648
hizmet-hesabi-sirri           720       1       2      65       46800

2. denetim basina kapanan yol ve maruziyet
denetim                      kapanan kalan yol   kalan mar   kalan %
ayricalikli-oturum-yalitimi        6        16       87030       %29
korumali-hesap-grubu               5        17      112030       %37
yerel-yonetici-kisiti             10        12      170590       %57
cikis-zorunlulugu                  9        13       10478        %4
hizmet-hesabi-yalitimi             2        20      252158       %84
kaynaga-bagli-etmen                4        18      242318       %81

3. denetimler birikimli eklenirse
eklenen                          yol  kapanan   maruziyet   kalan %
hicbiri                           22        0      298958      %100
ayricalikli-oturum-yalitimi       16        6       87030       %29
korumali-hesap-grubu              13        9       70022       %23
yerel-yonetici-kisiti              7       15       28630       %10
cikis-zorunlulugu                  5       17        3430        %1
hizmet-hesabi-yalitimi             5       17        3430        %1
kaynaga-bagli-etmen                5       17        3430        %1

4. butun denetimler acikken kalan yollar
kalem                     sinif               makine  makine-saat
bilet-veren-bilet         sunucu                  21          210
servis-bileti             sunucu                  21          210
servis-bileti             saha-dizustu           140         1400
oturum-anahtari           sunucu                  21          210
oturum-anahtari           saha-dizustu           140         1400
kalan yol 5/22, kalan maruziyet 3430/298958 makine-saat

Sayılar ölçüm sınıfındadır; girdileri KK23–KK25 ile kalem envanteridir.

Ömür ile Kapsamın Çarpımı

Birinci tablo sekiz kalemi yan yana koyar. Parola türevi doğrulayıcı 720 saat kalır, 13 sistem açar ve üç sınıfta 257 makinede bulunur: tek başına 185.040 makine-saatlik maruziyet üretir, toplamın %62’si. Bilet veren bilet 21 sistem açar ama yalnız 10 saat kalır; maruziyeti 2.570’tir. Kapsam tek başına sıralama vermez, ömürle çarpılınca verir.

Yenileme bileti ikinci sıradadır: 168 saat, 21 sistem, 39.648 makine-saat. Dördüncü derste ölçülen 72 saatlik oturum penceresi ile burada görülen 168 saatlik yenileme bileti aynı ayarın iki görünümüdür — biri iptal gecikmesi olarak, öteki bellekte kalış süresi olarak yazılır. Aynı sayı iki ayrı sütunda maliyet üretir.

Hizmet hesabı sırrı yalnız 65 makinede bulunur ama 720 saat kalır ve 46.800 makine-saat verir. İkinci derste 21 servis hesabı anahtarının kırılmasının 214 aslı düşürdüğü ölçülmüştü; buradaki 46.800, o kalemin makinelerde ne kadar süre açıkta durduğunun karşılığıdır.

Altı Denetim, On Yedi Yol

İkinci tablo denetimleri tek tek koşturur. Yerel yönetici kısıtı en çok yolu kapatır — 22’nin 10’unu — ama kalan maruziyet %57’dir, çünkü kapattığı yollar kısa ömürlü kalemleri barındıran sınıflardadır. Çıkış zorunluluğu yalnız 9 yol kapatır ama maruziyeti %4’e indirir; kaldırdığı kalemler uzun ömürlü olanlardır.

Bu iki satır kursun bir kuralını tekrarlar: sayı, ölçü birimi seçilmeden okunamaz. Yol sayısına göre sıralandığında yerel yönetici kısıtı birincidir; maruziyete göre sıralandığında çıkış zorunluluğu birincidir. İki sıralama farklı savunma önceliği verir ve hangisinin doğru olduğu kurumun neyi ölçtüğüne bağlıdır.

Üçüncü tablo altısını birikimli ekler. Yol sayısı 22’den 5’e, maruziyet 298.958’den 3.430’a iner; kalan oran %1’dir. Son iki denetim — hizmet hesabı yalıtımı ve kaynağa bağlı etmen — hiçbir yeni yol kapatmaz, çünkü kapattıkları kalemler önceki denetimlerce zaten kaldırılmıştır. Yedinci derste görülen örüntünün aynısıdır: tek tek etkili olan bir denetim, birikimli listede sıfır katkı verebilir.

Kapanmayan Beş Yol

Dördüncü tablo altı denetim de açıkken kalanı listeler. Beş yol kalır ve beşi de sunucular ile saha dizüstülerindeki kısa ömürlü kalemlerdir: bilet veren bilet, servis bileti ve oturum anahtarı. Toplam maruziyet 3.430 makine-saattir.

Bu beşi kapanmaz, çünkü kaldırılmaları oturumun kendisini kaldırmak demektir. Bir kullanıcı bir sunucuda oturum açmışsa o oturumun anahtarı orada durmak zorundadır; bilet olmadan servise erişilemez. Kursun ölçtüğü kökün yetmediği durum burada en açık hâlindedir: kalan yolları kapatmanın yolu daha iyi bir denetim değil, oturumun süresini kısaltmaktır — ve o da meşru işi durdurur.

Özet

  • Doğrulama girdisi parolanın kendisi değil ondan türetilen değerdir; 8 kalem türünün 6’sı parola bilinmeden doğrudan sunulduğunda kabul edilir.
  • Maruziyet ömür ile kapsamın çarpımıdır: parola türevi doğrulayıcı 720 saat ve 257 makineyle tek başına toplam 298.958 makine-saatin %62’sini üretir.
  • Yol sayısına göre en etkili denetim ile maruziyete göre en etkili denetim aynı değildir: biri 10 yol kapatıp %57 bırakır, öteki 9 yol kapatıp %4 bırakır.
  • Altı denetim birlikte 17 yol kapatır ve maruziyeti %1’e indirir; son iki denetim birikimli listede sıfır katkı verir.
  • Kalan 5 yol hiçbir denetimle kapanmaz, çünkü kaldırılmaları oturumun kendisini kaldırmak demektir.

Kurs Kapanışı

Yirmi bir ders aynı üç sütunla ölçüldü. Aşağıdaki tablo her dersin güven kökünü, kökten kullanıma kadar aynı anda doğru olması gereken kalem sayısını ve kök kırıldığında düşen kalemi yan yana koyar.

Ders Güven kökü Kaç kalem tutmalı Kök kırılırsa düşen
Karma, Şifreleme ve Kodlama işlem–alan eşleşmesi 2 gizli kalem 24.800 kayıt
Karma Fonksiyonları arama maliyeti 25.246 kalem 12.502 kalem
Tuz ve Parola Saklama parolanın öngörülemezliği 2 çarpan 340 kayıt
Simetrik Şifreleme paylaşılan anahtar 4 kalem 12.401 uç
Asimetrik Şifreleme özel anahtarın gizliliği 12.401 gizli kalem 1 katılımcı
Anahtar Değişimi gizli üs 3 kalem 52.560 oturum
Dijital İmzalar imzalama anahtarı 6 kalem 2.190 imza
Sertifikalar denetlenen alanlar 8 kalem 13 deneme
Sertifika Otoriteleri kök sertifika 14 kalem 8.802 kalem
Sertifika İptali yayın tazeliği 29,5 saat pencere 271.877 bağlantı
TLS El Sıkışması sunucunun özel anahtarı 11 kalem 5 sunuş
Sertifika Yaşam Döngüsü yenileme otomasyonu 4.397 kalem 1.458 bağlantı
Uçtan Uca Şifreleme uçtaki anahtar 4 kalem 172.200 kayıt
Dizin Servisleri merkezî deponun bütünlüğü 119 kalem 646 kalem
Bilet Tabanlı Doğrulama bilet veren servisin anahtarı 471 anahtar kalemi 214 asıl
Ağ Erişimi Doğrulaması paylaşılan sır 480 kalem 80 aygıt
Çoklu Oturum Açma imzalama anahtarı 90 kalem 1.562 bağlantı
Çok Etmenli Doğrulama kayıt anındaki bağ 4 kalem 10 yol
Grup Politikaları politika deposu 12 ayar 295 makine
Yetki Yükseltme envanterin doğruluğu 20 kenar 37 yol
Kimlik Bilgisi Hırsızlığı bellekteki doğrulayıcı 8 kalem türü 22 yol

Tablonun ortak yanı ikinci sütundur. Hiçbir satırda kök tek başına durmaz: en küçüğü iki, en büyüğü on iki binden fazla kalem ister ve kalemlerin çoğu kriptografik değildir. Bir saat, bir kayıt, bir dağıtım turu, bir envanter satırı — kökün çevresindeki bu kalemler, kırılmanın gerçekte nereden geldiğini belirler.

Üç konu üç ayrı kök sınıfı gösterir. kriptografi-temelleri derslerinde kök bir sırdır ya da bir maliyet varsayımıdır: gizli üs, özel anahtar, parolanın öngörülemezliği. pki derslerinde kök bir karardır: hangi otoritenin tanınacağı, hangi alanın denetleneceği, iptalin ne sıklıkta yayımlanacağı. kurumsal-kimlik derslerinde ise kök bir işletim kalemidir: bir depo kaydı, bir dağıtım turu, bir envanter satırı, bir kayıt anı. Sıradan matematikten işletime doğru ilerledikçe kökün korunması zorlaşmaz; görülmesi zorlaşır.

Üçüncü sütunun büyüklüğü de bu sırayı izler. Bir gizli üssün düşmesi 52.560 oturum açar ve olay bellidir; bir dizin kaydının bozulması 646 kalem düşürür ve olayın olduğu bile bilinmez. Kursun üç dersinde kökün kendisinin yetmediği gösterildi: imza anahtarın kime ait olduğunu kanıtlamaz, sertifika iptalin öğrenilmesini sağlamaz, çok etmenli doğrulama kendi kayıt anını doğrulayamaz. Üçünde de eksik olan kalem mekanizmanın içinde değil, çevresindedir.

Kursun kuralı budur: kriptografi bir gizlilik aracı değil, güveni tek bir köke indirgeme yöntemidir; kökün nerede durduğunu bilmeyen onu koruyamaz. Üçüncü sütun bunun bedelini yazar — 646 kalem, 8.802 kalem, 214 asıl, 1.562 bağlantı. Bu sayılar mekanizmanın zayıflığından değil, indirgemenin başarısından doğar: güven tek bir yerde toplandığı için orada kırılır.

Bu kursta kök her defasında adlandırıldı ve zinciri sayıldı. Ama her kökün altında yazılmamış bir varsayım kaldı: kökün üzerinde durduğu makinenin bütünlüğü. Özel anahtar bir dosyada, bilet bir bellek bölgesinde, politika deposu bir disk üzerinde durur. O makine ele geçirilirse zincirin tamamı — doğru kurulmuş, doğru yenilenmiş, doğru denetlenmiş olsa bile — saldırganın elinde geçerli kalmaya devam eder. Uç Nokta ve Sistem Sertleştirme kursu bu soruyla başlar.

İ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