Ders 12 / 16
Uzak Erişim Sertleştirme
Parola tabanlı erişimin deneme yüzeyi bir dönem boyunca sayılır, anahtar tabanlıya geçince kapanan ve açılan yüzey ayrı ayrı ölçülür, sıçrama sunucusu eklenince doğrudan erişilebilir makine sayısıyla doğan tek hedef karşılaştırılır.
İçindekiler
Önceki ders güvenlik duvarını varsayılan reddede bıraktı: yönetim kabuğu artık yalnız iç ağdan, yönetim düğümü ayrıca ofis ağından erişilebilir. Kapı daraldı. Kapıdan geçmenin neye bağlı olduğu ise değişmedi — bağlanan taraf hâlâ bir parola yazıyor ve parola, izin verilen bölgelerdeki her kaynaktan denenebiliyor. Bu dersin ölçüsü kapının genişliği değil, kapının arkasındaki kilittir.
- ST7. Altı makine, üç kabuk hesabı ve beş özne kurgusal bölgesel ölçüm ağına aittir. Gerçek
bir erişim kurulmuyor; ölçülen şey
nodeile yazılan modeldir. - ST8. Deneme kaydı, tohumu görünür bir üreteçle üretildi; her koşum aynı diziyi verir. Gerçek dağılım bölgeye ve döneme göre değişir, sayıların büyüklük sırası değişmez.
- ST9. Anahtar dizeleri ve parmak izleri kurgusaldır; gerçek anahtar yazılmadı. Parmak izi yalnız aynı anahtarın iki yerde durduğunu göstermek için var.
- ST10. Bir makinede yetkili anahtar dosyasını güncellemek dört dakika sayıldı. Gerçekte bu süre otomasyona göre değişir; iptalin toplamı yarıçapla orantılı kalır.
- ST11. Anahtarın ömrü yok, iptal edilene kadar geçerlidir. Süreli kimlik bilgisi bu dersin dışındadır.
- ST12. Sıçrama sunucusu tek makine olarak modellendi. İkincisi kullanılabilirlik kalemini düşürür, tek hedef kalemini ikiye çıkarır.
Parola Düzeninin Deneme Yüzeyi
Model üç şey tutuyor: güvenlik duvarının hangi kaynakların ulaşmasına izin verdiği, otuz günlük dönemde gözlenen parola denemeleri ve anahtar tabanlıya geçildiğinde ortaya çıkacak kopya kümesi. Deneme kaydı elle yazılmak yerine kendi yazdığımız üreteçle kuruluyor; tohum kodda görünüyor.
// erisim.mjs — uzak erisim ozneleri, anahtar kopyalari ve deneme ureteci; model, gercek erisim degil export const MAKINE = ['toplayici-1', 'toplayici-2', 'dogrulayici', 'faturalama', 'veri-deposu', 'yonetim']; export const HESAP = ['isletim', 'dagitim', 'bakim']; // her makinede acik olan kabuk hesaplari export const ULASAN = { ic: 90, ofis: 40 }; // guvenlik duvarinin izin verdigi kaynak sayisi export const PAYLASIM = { isletim: 6, dagitim: 6, bakim: 1 }; // ayni parolayi tasiyan makine sayisi const TOHUM = 20260401; // uretec tohumu; her kosum ayni diziyi verir function* uretec(t = TOHUM) { // kendi yazdigimiz dogrusal esleme let x = t; for (;;) { x = (x * 1103515245 + 12345) % 2147483648; yield x / 2147483648; } } export function denemeler(n = 400) { // otuz gunluk parola denemesi kaydi const g = uretec(); const kayit = []; const s = (k) => Math.floor(g.next().value * k); for (let i = 0; i < n; i += 1) { const bolge = g.next().value < 0.7 ? 'ic' : 'ofis'; const yogun = g.next().value < 0.04; // kaynaklarin bir bolumu yogun deniyor kayit.push({ kaynak: `${bolge}-${s(ULASAN[bolge]) + 1}`, makine: MAKINE[s(6)], hesap: HESAP[s(3)], deneme: yogun ? 400 + s(900) : 1 + s(6) }); } return kayit; } // Anahtar kopyalari; ozne, kopyanin durdugu yer ve kurgu parmak izi. export const KOPYA = [ ['op-a', 'dizustu', 'kz7f-11ac'], ['op-a', 'yedek-arsiv', 'kz7f-11ac'], ['op-b', 'dizustu', 'kz7f-2be0'], ['op-c', 'dizustu', 'kz7f-3d41'], ['dagitim', 'yapilandirma-araci', 'kz7f-5f92'], ['dagitim', 'tumlesim-kosucusu', 'kz7f-5f92'], ['bakim-dis', 'dis-makine', 'kz7f-6a08'], ].map(([ozne, yer, parmak]) => ({ ozne, yer, parmak, ad: `${ozne}/${yer}` })); // Hangi ozne hangi makinede yetkili (yetkili anahtar dosyalari). export const YETKI = { 'op-a': MAKINE, 'op-b': MAKINE, 'op-c': ['yonetim', 'faturalama'], 'dagitim': MAKINE, 'bakim-dis': ['veri-deposu', 'yonetim'], }; export const DOKUNUS_DK = 4; // bir makinede yetkili anahtar dosyasini guncelleme suresi export const yaricap = (k, y = YETKI) => y[k.ozne].length; export const kalem = (y = YETKI) => KOPYA.reduce((a, k) => a + yaricap(k, y), 0);
// kosum1.mjs — parola tabanli erisimin deneme yuzeyi otuz gunluk kayittan sayilir import { MAKINE, HESAP, ULASAN, PAYLASIM, denemeler } from './erisim.mjs'; const kayit = denemeler(); const top = (l) => l.reduce((a, x) => a + x.deneme, 0); const yogun = kayit.filter((x) => x.deneme >= 100); const ulasan = ULASAN.ic + ULASAN.ofis; for (const [ad, v, not = ''] of [ ['parola denemesi', top(kayit)], ['deneyen ayri kaynak', new Set(kayit.map((x) => x.kaynak)).size, `${ulasan} kaynak ulasabiliyor`], ['hedef (makine x hesap)', MAKINE.length * HESAP.length], ['denenebilir uclu', ulasan * MAKINE.length * HESAP.length, 'ulasan kaynak x hedef'], ['yogun kaynak (>=100 deneme)', new Set(yogun.map((x) => x.kaynak)).size, `${top(yogun)} deneme uretiyor`], ['denenmemis hedef', MAKINE.length * HESAP.length - new Set(kayit.map((x) => `${x.makine}|${x.hesap}`)).size], ]) console.log(`${ad.padEnd(29)}${String(v).padStart(6)} ${not}`.trimEnd()); console.log('\ntek parola sizarsa dusen makine:'); for (const h of HESAP) console.log(` ${h.padEnd(10)} ${PAYLASIM[h]}`);
parola denemesi 16505 deneyen ayri kaynak 124 130 kaynak ulasabiliyor hedef (makine x hesap) 18 denenebilir uclu 2340 ulasan kaynak x hedef yogun kaynak (>=100 deneme) 17 15159 deneme uretiyor denenmemis hedef 0 tek parola sizarsa dusen makine: isletim 6 dagitim 6 bakim 1
Güvenlik duvarı dış bölgeyi kapattı, deneme yüzeyi buna rağmen sıfır değil: iç ağdan doksan, ofis ağından kırk kaynak yönetim kabuğuna ulaşabiliyor. Dönemde bu kaynakların yüz yirmi dördü gerçekten denedi ve on altı bin beş yüz beş deneme üretti. On yedi yoğun kaynak bunun on beş bin yüz elli dokuzunu tek başına üretiyor; o on yedisi engellense geri kalan yüz yedi kaynak yerinde durur. Ölçülmesi gereken sayı denemeyi yapanların sayısı değil, denemeyi yapabileceklerin sayısıdır: yüz otuz kaynak çarpı on sekiz hedef, yani 2340 üçlü. On sekiz hedefin hepsi dönem içinde en az bir kez denenmiş.
Alt blok yüzeyin ikinci boyutunu veriyor. İşletim ve dağıtım hesapları altı makinede aynı parolayı taşıyor, çünkü makineler aynı kurulum adımıyla kuruldu. Tek bir parolanın sızması altı makine demektir; bakım hesabı makineye özgü olduğu için orada sayı bir. Aynı düzende iki farklı yarıçap yan yana duruyor ve aradaki fark bir güvenlik kararından değil, kurulum kolaylığından geliyor.
Anahtar Tabanlı Erişim
// kosum2.mjs — anahtar tabanli erisime gecilir; kapanan yuzey ve acilan yeni yuzey ayri sayilir import { MAKINE, HESAP, ULASAN, KOPYA, DOKUNUS_DK, denemeler, yaricap, kalem } from './erisim.mjs'; const kayit = denemeler(); console.log(`kapanan ${kayit.reduce((a, x) => a + x.deneme, 0)} parola denemesi, ` + `${new Set(kayit.map((x) => x.kaynak)).size} kaynak -> 0`); console.log(`acilan ${KOPYA.length} kopya, ${new Set(KOPYA.map((k) => k.ozne)).size} ozne, ` + `${new Set(KOPYA.map((k) => k.parmak)).size} ayri anahtar, omur yok\n`); console.log('kopya yer yetkili iptal dk ayni anahtari tasiyan yer'); for (const k of KOPYA) { const es = KOPYA.filter((x) => x.parmak === k.parmak && x.ad !== k.ad).map((x) => x.yer); console.log(`${k.ad.padEnd(30)} ${k.yer.padEnd(20)} ${String(yaricap(k)).padEnd(8)} ` + `${String(yaricap(k) * DOKUNUS_DK).padEnd(9)} ${es.join(', ') || '-'}`); } const uclu = (ULASAN.ic + ULASAN.ofis) * MAKINE.length * HESAP.length; const toplam = kayit.reduce((a, x) => a + x.deneme, 0); console.log('\nduzen kapanan deneme denenebilir uclu anahtar kalemi'); for (const [ad, kapanan, kalan, ak] of [['yalniz parola', 0, uclu, 0], ['parola + anahtar', 0, uclu, kalem()], ['yalniz anahtar', toplam, 0, kalem()]]) console.log(`${ad.padEnd(21)} ${String(kapanan).padEnd(15)} ${String(kalan).padEnd(17)} ${ak}`); const yer = [...new Set(KOPYA.map((k) => k.yer))]; console.log(`\n(kopya, makine) kalemi ${kalem()}`); console.log(`kopyanin durdugu ayri yer ${yer.length} ${yer.join(', ')}`); console.log(`en genis kopyanin yaricapi ${Math.max(...KOPYA.map((k) => yaricap(k)))}`); console.log(`butun kopyalari iptal etmek ${kalem() * DOKUNUS_DK} dk`);
kapanan 16505 parola denemesi, 124 kaynak -> 0 acilan 7 kopya, 5 ozne, 5 ayri anahtar, omur yok kopya yer yetkili iptal dk ayni anahtari tasiyan yer op-a/dizustu dizustu 6 24 yedek-arsiv op-a/yedek-arsiv yedek-arsiv 6 24 dizustu op-b/dizustu dizustu 6 24 - op-c/dizustu dizustu 2 8 - dagitim/yapilandirma-araci yapilandirma-araci 6 24 tumlesim-kosucusu dagitim/tumlesim-kosucusu tumlesim-kosucusu 6 24 yapilandirma-araci bakim-dis/dis-makine dis-makine 2 8 - duzen kapanan deneme denenebilir uclu anahtar kalemi yalniz parola 0 2340 0 parola + anahtar 0 2340 34 yalniz anahtar 16505 0 34 (kopya, makine) kalemi 34 kopyanin durdugu ayri yer 5 dizustu, yedek-arsiv, yapilandirma-araci, tumlesim-kosucusu, dis-makine en genis kopyanin yaricapi 6 butun kopyalari iptal etmek 136 dk
İlk satır kapanan yüzeydir: on altı bin beş yüz beş deneme sıfıra iner ve yüz yirmi dört kaynağın hiçbiri artık deneyemez. Kapanan şey parola değil, tahmin edilebilirliktir — denenecek bir şey kalmaz. İkinci satır aynı anda açılanı sayıyor: yedi kopya, beş özne, beş ayrı anahtar. Kopya sayısı özne sayısından fazla, çünkü aynı anahtar iki ayrı yerde duruyor.
Tablo bu kopyaların nerede durduğunu ve ne kadar taşıdığını gösteriyor. Anahtar bir dizüstünde, bir
yedek arşivinde, bir yapılandırma aracında, bir tümleşim koşucusunda ve bir dış makinede duruyor —
beş ayrı yer, beşi de ayrı korunuyor. Yetkili sütunu her kopyanın yarıçapıdır: dört kopya altı
makinede birden geçerli. Toplam otuz dört (kopya, makine) kalemi var ve bunların her biri, o kopya
sızarsa açılan bir kapıdır. Parola düzeninde sayılan yüzey ortadan kalkmadı, biçim değiştirdi:
tahmin edilebilir yüz otuz kaynak yerine korunması gereken beş yer.
Ortadaki üç satırlık blok geçişin kendisini ölçüyor ve bu dersin en kolay atlanan sayısını veriyor. Anahtar tabanlı erişimi açmak tek başına hiçbir şey kapatmıyor: parola girişi de açık kaldığı sürece kapanan deneme sıfır, denenebilir üçlü 2340’ta duruyor. Buna karşılık otuz dört kalemlik yeni yüzey açıldığı anda oradadır. Ara durum iki düzenin de yüzeyini birden taşır ve kurulumların çoğu bu ara durumda haftalarca kalır, çünkü anahtar dağıtımı bitmeden parola girişini kapatmak kimseyi dışarıda bırakma riski taşır. Kapatan adım anahtarın eklenmesi değil, parolanın kaldırılmasıdır; ikisi ayrı sayılmadıkça birincisi ikincisinin yerine geçer.
İptal sütunu kararın maliyetini veriyor. Bir kopya sızarsa, o öznenin yetkili olduğu her makinede yetkili anahtar dosyasına dokunmak gerekir: en geniş kopyada altı makine, yirmi dört dakika; bütün kopyalar için yüz otuz altı dakika. Son sütun ise iptalin yan etkisidir. Yedek arşivindeki kopya operatörün dizüstündeki kopyayla aynı anahtardır; birini iptal etmek ötekini de iptal eder. Sızıntının hangi kopyadan geldiği bilinmeden yapılan bir iptal, operatörün kendi erişimini de kapatır.
İkinci satırın sonundaki “ömür yok” ise bu dersin kapatılamayan kalemidir. Parola denemesi görünen bir şeydi: sayılıyordu, kaynağı biliniyordu, yoğunlaşması fark ediliyordu. Sızmış bir anahtarla yapılan giriş meşru bir girişten ayırt edilemez ve anahtar iptal edilene kadar geçerlidir. Sızıntı penceresini kapatan şey sürenin dolması değil, birinin fark etmesidir.
Sıçrama Sunucusu
// kosum3.mjs — sicrama sunucusu eklenir; dogrudan erisim duser, tek bir hedef dogar import { MAKINE, KOPYA, YETKI, DOKUNUS_DK, yaricap, kalem } from './erisim.mjs'; const SICRAMA = Object.fromEntries(Object.keys(YETKI).map((o) => [o, ['sicrama']])); const IC_ANAHTAR = 1; // sicrama sunucusunda duran, makinelere yetkili anahtar const olc = (y) => [kalem(y), Math.max(...KOPYA.map((k) => yaricap(k, y))), kalem(y) * DOKUNUS_DK]; const [aK, aY, aD] = olc(YETKI), [bK, bY, bD] = olc(SICRAMA); console.log('olcu dogrudan sicrama sunuculu'); for (const [ad, x, y] of [ ['dogrudan erisilebilir makine', MAKINE.length, 1], ['(kopya, makine) kalemi', aK, bK], ['bir kopya sizinca dusen makine', aY, bY], ['butun kopyalari iptal etmek (dk)', aD, bD], ['tek noktada duran ic anahtar', 0, IC_ANAHTAR], ['ic anahtarin yetkili oldugu makine', 0, MAKINE.length], ['toplam erisim kalemi', aK, bK + IC_ANAHTAR * MAKINE.length], ]) console.log(`${ad.padEnd(35)} ${String(x).padEnd(9)} ${y}`); console.log('\nsicrama sunucusunun kendi yuzeyi (kalem kalem):'); for (const [ad, n] of [['dinlenen kapi', 3], ['yetkili ozne', Object.keys(SICRAMA).length], ['uzerinde duran ic anahtar', IC_ANAHTAR], ['oturum kaydi tutan tek nokta', 1], ['acil kacis yolu (dogrudan erisim)', 1], ['duserse erisilemeyen makine', MAKINE.length], ['ele gecirilirse ulasilan makine', MAKINE.length]]) console.log(` ${ad.padEnd(35)}${n}`);
olcu dogrudan sicrama sunuculu dogrudan erisilebilir makine 6 1 (kopya, makine) kalemi 34 7 bir kopya sizinca dusen makine 6 1 butun kopyalari iptal etmek (dk) 136 28 tek noktada duran ic anahtar 0 1 ic anahtarin yetkili oldugu makine 0 6 toplam erisim kalemi 34 13 sicrama sunucusunun kendi yuzeyi (kalem kalem): dinlenen kapi 3 yetkili ozne 5 uzerinde duran ic anahtar 1 oturum kaydi tutan tek nokta 1 acil kacis yolu (dogrudan erisim) 1 duserse erisilemeyen makine 6 ele gecirilirse ulasilan makine 6
İlk dört satır adımı savunuyor: doğrudan erişilebilir makine altıdan bire, (kopya, makine) kalemi
otuz dörtten yediye, bir kopya sızınca düşen makine altıdan bire, bütün kopyaları iptal etme süresi
yüz otuz altı dakikadan yirmi sekize iniyor. Dört sütun da aynı yöne gidiyor. Anahtar kopyaları
artık yalnız tek bir makinede yetkili, dolayısıyla bir dizüstünün çalınması altı makine değil bir
makine demek.
Sonraki üç satır bedeli veriyor. Sıçrama sunucusunda, altı makinenin hepsinde yetkili bir iç anahtar duruyor; onsuz sıçrama sunucusu bir işe yaramaz. Toplam erişim kalemi otuz dörtten on üçe iniyor — sıfıra değil. Asıl değişen dağılımdır: otuz dört kalem beş ayrı yere dağılmıştı, on üç kalemin altısı tek bir makinede toplandı. Yüzey küçüldü ve aynı anda yoğunlaştı; bu iki cümle birbirinin karşılığı değil, ikisi birden doğrudur.
Alt blok sıçrama sunucusunun kendi yüzeyini kalem kalem sayıyor: üç dinlenen kapı, beş yetkili özne, üzerinde duran bir iç anahtar, oturum kaydını tutan tek nokta. Son iki satır aynı makineyi iki yönden okuyor. Sıçrama sunucusu düşerse altı makinenin hiçbirine yönetim erişimi kalmaz; bu yüzden bir acil kaçış yolu bırakılır ve o kaçış yolu tam olarak kapatılmak istenen doğrudan erişimdir. Ele geçirilirse yine altı makineye ulaşılır. Sıçrama sunucusu bir savunma değil, bir yoğunlaşma noktasıdır: değeri, altı makinenin gözlenmesi yerine bir makinenin gözlenmesini yeterli kılmasından gelir — o bir makine gerçekten gözlendiği sürece.
Özet
- Güvenlik duvarı dış bölgeyi kapattıktan sonra bile 130 kaynak yönetim kabuğuna ulaşabiliyor; dönemde 124’ü deneyip 16.505 deneme üretti, 17 yoğun kaynak bunun 15.159’unu tek başına üretiyor. Ölçülen yüzey denemeyi yapanlar değil, 130 × 18 = 2340 denenebilir üçlüdür.
- Aynı parolanın altı makinede paylaşılması ikinci bir yarıçap kalemidir: işletim ve dağıtım hesaplarında tek bir sızıntı 6 makine, makineye özgü bakım hesabında 1 makine demektir.
- Anahtar tabanlıya geçmek 16.505 denemeyi ve 124 kaynağı tümüyle kapatıyor; karşılığında 7 kopya,
5 ayrı yer ve 34
(kopya, makine)kalemi açıyor. Yüzey kaybolmuyor, biçim değiştiriyor. - İptal maliyeti yarıçapla orantılıdır: en geniş kopya 6 makine ve 24 dakika, bütün kopyalar 136 dakika. Aynı anahtarın iki yerde durması iptali yan etkili yapar — bir kopyayı iptal etmek ötekini de kapatır.
- Anahtarın ömrü yok: sızmış bir anahtarla yapılan giriş meşru girişten ayırt edilemez ve pencere ancak biri fark edince kapanır. Parola denemesi sayılabiliyordu, bu sayılamıyor.
- Sıçrama sunucusu doğrudan erişilebilir makineyi 6’dan 1’e, kalemi 34’ten 7’ye, iptal süresini 136 dakikadan 28’e indiriyor; karşılığında 6 makinede yetkili bir iç anahtar tek bir makinede toplanıyor, toplam kalem 13’te kalıyor ve düşerse 6 makineye erişim, ele geçirilirse yine 6 makine söz konusu olur.
Sonraki Adım
Bu dersin anahtarı iptal edilene kadar geçerli. Aynı şey uygulamaların taşıdığı kimlik bilgileri için de doğrudur: veri deposu parolası, kuyruk anahtarı ve posta geçidi belirteci bir kez yazılır ve kimse ne zaman değişeceğini söylemez. Sonraki dersin ekseni bu yüzden ömürdür. Ömrü olmayan bir sırda sızıntı penceresi sonsuzdur; ömrü belli bir kimlik bilgisinde pencere ömür kadardır. Ömür taranacak: kısa ömür pencereyi düşürür ama yenileme yükünü ve merkezî depoya bağımlılığı artırır, depo düştüğünde kaç servisin kaç dakika sonra çalışamaz hâle geldiği sayılır. Merkezî deponun kendisi de bir yüzeydir ve kaç öznenin kaç sırra erişebildiğiyle ölçülür.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.