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.