Ders 19 / 20
Kimlik Doğrulama Düşürme Saldırıları
On iki çerçeve türünün tabanda yalnız biri bütünlük kanıtı taşıyor; korumalı yönetim çerçeveleri bu sayıyı dörde çıkarıyor ve sekiz yönetim çerçevesinden üçünü kanıta bağlıyor, beşi bağlantı öncesi olduğu için korumasız kalıyor. Bağlantıyı koparan sekiz mekanizmadan üçü kapanıyor; savunmanın gördüğü kayıt bağlantı kesme sayacından reddedilen çerçeve sayacına taşınıyor ve yakalama üç bölü altıdan altı bölü altıya çıkıyor.
İçindekiler
Bir önceki ders istemcinin bir ağı seçerken kanıtsız işaretlere baktığını saydı ve karşılıklı doğrulamanın kaç profili kapattığını ölçtü. Bütün ölçüm bir varsayıma dayanıyordu: istemcinin bağlantısını kendi isteğiyle kurduğu. Zaten bağlı bir istemci sahte bir adayı hiç görmez.
Bir istemcinin bağlı kalması ise ayrı bir doğrulama sorusudur. Veri çerçeveleri şifrelidir ve bütünlük kanıtı taşır; bağlantıyı kuran, sürdüren ve sonlandıran çerçeveler ayrı bir sınıftandır. Kimlik doğrulama düşürme bu ayrımın adıdır: bağlantıyı sonlandıran bir yönetim çerçevesi, taşıdığı iddianın hiçbir kanıtı olmadan kabul edilir. Bu ders o tekniğin nasıl uygulandığını değil, hangi çerçevenin korunduğunu, korumanın kaç yolu kapattığını ve savunmanın hangi sayaçta ne gördüğünü ölçer.
- KG18. Çerçeve türleri üç sınıfa ayrılır: veri, denetim, yönetim. Sınıflandırma ve her türün bütünlük kanıtı taşıyıp taşımadığı model kararıdır.
- KG19. Bağlantı öncesi çerçeve, taraflar arasında henüz ortak bir anahtar yokken alışverilen çerçevedir. Ortak anahtar olmadığı için bütünlük kanıtı üretilemez.
- KG20. Yol, bir istemcinin bağlantısının kopmasına yol açan bir mekanizmadır. Yolun kapanması, o mekanizmanın taşıdığı iddianın doğrulanabilir hale gelmesi demektir.
- KG21. Günlük verisi kurgudur ve kendi yazılan bir üreteçle üretilir; tohum görünürdür ve koşum yinelenebilir. Saat başına normal bağlantı kesme beklentisi model değeridir.
- KG22. Eşik, aynı erişim noktası ve aynı saat için geçmiş günlerden çıkarılan ortalama ile standart sapmanın katıdır. Olay günü taban hesabının dışında tutulur.
- KG23. Saldırı adımı, araç ve çerçeve üretimi bu dersin dışındadır; ölçülen şey korumanın kapsamı ve savunmanın gördüğü kayıttır.
Hangi Çerçeve Korunuyor
Bir kablosuz bağlantı yalnız veri taşımaz. Aynı ortamda üç sınıf çerçeve dolaşır ve bunların şifreleme kapsamı aynı değildir.
// cerceve.mjs — kablosuz cerceve turleri ve korumali yonetim cerceveleri (model). // Saldiri adimi yazilmaz; olculen sey hangi cercevenin butunluk kaniti tasidigidir. // [cerceve turu, sinif, baglanti oncesi mi, taban korumada kanit, koruma acikken kanit] export const CERCEVE = [ ['veri cercevesi', 'veri', false, true, true], ['onay', 'denetim', false, false, false], ['gonderime hazir / hazir', 'denetim', false, false, false], ['guc tasarrufu yoklamasi', 'denetim', false, false, false], ['isaret cercevesi', 'yonetim', true, false, false], ['yoklama istegi', 'yonetim', true, false, false], ['yoklama yaniti', 'yonetim', true, false, false], ['kimlik dogrulama cercevesi', 'yonetim', true, false, false], ['baglanti istegi / yaniti', 'yonetim', true, false, false], ['baglanti kesme', 'yonetim', false, false, true], ['kimlik dogrulama dusurme', 'yonetim', false, false, true], ['eylem cercevesi (kanal, olcum)', 'yonetim', false, false, true], ]; // Baglantinin kopmasina yol acan mekanizmalar (model). 'kapatan' alani hangi savunmanin // yolu kapattigini soyler; 'yok' = hicbiri. export const YOL = [ ['sahte baglanti kesme cercevesi', 'yonetim cercevesi', 'korumali yonetim cerceveleri'], ['sahte kimlik dogrulama dusurme cercevesi', 'yonetim cercevesi', 'korumali yonetim cerceveleri'], ['sahte eylem cercevesi (kanal degisimi)', 'yonetim cercevesi', 'korumali yonetim cerceveleri'], ['baglanti oncesi yoklama yanitinin taklidi', 'yonetim cercevesi', 'yok'], ['denetim cercevesi ile ortamin dolu gosterilmesi', 'denetim cercevesi', 'yok'], ['fiziksel katmanda sikisma', 'fiziksel', 'yok'], ['kimlik dogrulama sunucusuna ulasilamamasi', 'altyapi', 'yerel dogrulama onbellegi'], ['korumayi desteklemeyen istemcinin baglanmasi', 'istemci', 'koruma zorunlu tutulur'], ];
// kosum1.mjs — hangi cerceve korunuyor, koruma acikken kac yol kapaniyor import { CERCEVE, YOL } from './cerceve.mjs'; const E = [34, 12, 18, 12, 12]; const yaz = (h) => h.map((d, i) => String(d)[i ? 'padStart' : 'padEnd'](E[i])).join(''); const im = (b) => b ? 'var' : 'yok'; console.log(yaz(['cerceve turu', 'sinif', 'baglanti oncesi', 'taban', 'koruma acik'])); for (const [ad, s, o, a, b] of CERCEVE) console.log(yaz([ad, s, o ? 'evet' : 'hayir', im(a), im(b)])); const say = (i) => CERCEVE.filter((c) => c[i]).length; console.log(`\ncerceve turu ${CERCEVE.length}; butunluk kaniti tasiyan: taban ${say(3)}, ` + `koruma acik ${say(4)}`); const yonetim = CERCEVE.filter((c) => c[1] === 'yonetim'); console.log(`yonetim cercevesi ${yonetim.length}; korunan ${yonetim.filter((c) => c[4]).length}, ` + `korunmayan ${yonetim.filter((c) => !c[4]).length} (hepsi baglanti oncesi)`); const A = [46, 22, 32]; const yaz2 = (h) => h.map((d, i) => String(d)[i ? 'padStart' : 'padEnd'](A[i])).join(''); console.log('\n' + yaz2(['baglantinin kopmasina yol acan mekanizma', 'sinif', 'kapatan savunma'])); for (const [ad, s, k] of YOL) console.log(yaz2([ad, s, k])); const korumaKapatir = YOL.filter((y) => y[2] === 'korumali yonetim cerceveleri').length; console.log(`\nyol ${YOL.length}; korumali yonetim cerceveleri ${korumaKapatir} kapatir, ` + `${YOL.length - korumaKapatir} acik kalir`); console.log(`acik kalanlarin ${YOL.filter((y) => y[2] === 'yok').length} tanesini hicbir ` + `dogrulama kapatmaz (iddia sorunu degil)`);
cerceve turu sinif baglanti oncesi taban koruma acik veri cercevesi veri hayir var var onay denetim hayir yok yok gonderime hazir / hazir denetim hayir yok yok guc tasarrufu yoklamasi denetim hayir yok yok isaret cercevesi yonetim evet yok yok yoklama istegi yonetim evet yok yok yoklama yaniti yonetim evet yok yok kimlik dogrulama cercevesi yonetim evet yok yok baglanti istegi / yaniti yonetim evet yok yok baglanti kesme yonetim hayir yok var kimlik dogrulama dusurme yonetim hayir yok var eylem cercevesi (kanal, olcum) yonetim hayir yok var cerceve turu 12; butunluk kaniti tasiyan: taban 1, koruma acik 4 yonetim cercevesi 8; korunan 3, korunmayan 5 (hepsi baglanti oncesi) baglantinin kopmasina yol acan mekanizma sinif kapatan savunma sahte baglanti kesme cercevesi yonetim cercevesi korumali yonetim cerceveleri sahte kimlik dogrulama dusurme cercevesi yonetim cercevesi korumali yonetim cerceveleri sahte eylem cercevesi (kanal degisimi) yonetim cercevesi korumali yonetim cerceveleri baglanti oncesi yoklama yanitinin taklidi yonetim cercevesi yok denetim cercevesi ile ortamin dolu gosterilmesi denetim cercevesi yok fiziksel katmanda sikisma fiziksel yok kimlik dogrulama sunucusuna ulasilamamasi altyapi yerel dogrulama onbellegi korumayi desteklemeyen istemcinin baglanmasi istemci koruma zorunlu tutulur yol 8; korumali yonetim cerceveleri 3 kapatir, 5 acik kalir acik kalanlarin 3 tanesini hicbir dogrulama kapatmaz (iddia sorunu degil)
Tabanda on iki çerçeve türünden biri bütünlük kanıtı taşıyor. Şifrelemenin kapsamı veri çerçevesidir; geri kalan on bir tür açık dolaşır. Kimlik doğrulama düşürmenin bütün dayanağı bu satırdır — bağlantıyı sonlandıran çerçeve, taşıdığı “bu bağlantı bitiyor” iddiasının hiçbir kanıtını taşımaz ve istemci onu kabul eder.
Koruma açıldığında sayı bire karşı dörde çıkıyor. Kazanılan üç tür, bağlantı kurulduktan sonra gönderilen yönetim çerçeveleridir: bağlantı kesme, kimlik doğrulama düşürme ve eylem çerçevesi. Üçünün ortak yanı, o anda taraflar arasında ortak bir anahtarın var olmasıdır; kanıt üretilebilmesinin koşulu budur.
Korunamayan beş yönetim çerçevesinin de ortak yanı aynı sütunda okunuyor: hepsi bağlantı öncesi. İşaret çerçevesi, yoklama isteği ve yanıtı, kimlik doğrulama ve bağlantı isteği, ortak anahtar yokken alışverilir. Bir önceki dersin ikiz erişim noktası yolu tam olarak bu beş satırda yaşar; korumalı yönetim çerçeveleri o yolu kapatmaz ve kapatamaz.
Denetim çerçeveleri üçüncü bir küme. Onay ve gönderime hazır çerçeveleri hiçbir durumda kanıt taşımaz, çünkü ortam paylaşımının zamanlaması bu çerçevelerin küçük ve hızlı olmasına bağlıdır. Bunlarda korunacak bir içerik de yoktur; taşıdıkları tek iddia “şu kadar süre ortamı ben kullanacağım” ya da “aldım” bilgisidir. Kanıt eklemek bu çerçeveleri büyütür ve ortam paylaşımının kendisini yavaşlatır — korumanın kapsamı dışında kalmalarının nedeni bir eksiklik değil, ölçülmüş bir takastır.
İkinci tablo bunu yol sayısına çeviriyor. Sekiz mekanizmadan üçü kapanıyor, beşi açık kalıyor. Açık kalan beşin üçünü hiçbir doğrulama kapatmaz ve bunun nedeni önemlidir: fiziksel katmanda sıkışma bir iddia sorunu değildir. Orada doğrulanmadan kabul edilen bir iddia yoktur; ortam kullanılamaz durumdadır ve doğrulama ortamın kendisini geri getirmez. Bu kursun ölçüsü burada sınırına varıyor.
Kalan iki yol savunmanın başka kalemlerine düşüyor. Kimlik doğrulama sunucusuna ulaşılamaması bir yerel doğrulama önbelleğiyle karşılanır; korumayı desteklemeyen istemci sorunu ise korumanın zorunlu tutulmasıyla kapanır ve bedeli, önceki derslerin envanter tablosundaki dışarıda kalan aygıtlardır. Koruma isteğe bağlı bırakıldığında bir istemci korumasız bağlanmayı seçebilir ve o istemci için üç yol yeniden açılır.
Savunmanın Gördüğü Sayaç
Koruma açık değilse bağlantı kesme çerçevesi geçerli sayılır ve tek izi, istemcilerin yeniden bağlanmasıdır. Aşağıdaki koşum otuz günlük kurgu kayıttan eşik seçiminin ne kazandırdığını çıkarıyor.
// kosum2.mjs — savunmanin gordugu kayit: baglanti kesme sayacindaki sapma ve esik secimi. // Uretec kendi yazilmistir, tohum gorunurdur; koşum yinelenebilir. const TOHUM = 20240917; let s = TOHUM; const rast = () => (s = (s * 1103515245 + 12345) % 2147483648) / 2147483648; const poisson = (l) => { let k = 0, p = 1, L = Math.exp(-l); do { k++; p *= rast(); } while (p > L); return k - 1; }; const GUN = 30, SAAT = 24, AP = 6, OLAY_GUN = 17, OLAY_AP = 3; const OLAY_SAAT = [7, 10, 13, 16, 19, 22]; // Saat basina normal baglanti kesme beklentisi (model): is saatlerinde gecis, gece dusuk. const TABAN = Array.from({ length: SAAT }, (_, h) => (h >= 8 && h < 18) ? 6 : 1.2); const kesme = [], reddedilen = []; for (let g = 0; g < GUN; g++) { kesme.push([]); reddedilen.push([]); for (let a = 0; a < AP; a++) { kesme[g].push([]); reddedilen[g].push([]); for (let h = 0; h < SAAT; h++) { const olay = g === OLAY_GUN && a === OLAY_AP && OLAY_SAAT.includes(h); kesme[g][a].push(poisson(TABAN[h]) + (olay ? poisson(7) : 0)); // Koruma acikken ayni cerceveler butunluk denetiminde reddedilir ve ayri sayilir. reddedilen[g][a].push(olay ? poisson(7) : 0); } } } // Taban, olay gunu disindaki gunlerden saat ve erisim noktasi basina cikarilir. const gunler = [...Array(GUN).keys()].filter((g) => g !== OLAY_GUN); const ort = (v) => v.reduce((a, b) => a + b, 0) / v.length; const sapma = (v) => Math.sqrt(ort(v.map((x) => (x - ort(v)) ** 2))); const E = [10, 14, 16, 18, 16]; const yaz = (h) => h.map((d, i) => String(d)[i ? 'padStart' : 'padEnd'](E[i])).join(''); console.log(`gun ${GUN}, erisim noktasi ${AP}, saat ${GUN * AP * SAAT}, olay saati ${OLAY_SAAT.length}`); console.log(yaz(['esik', 'yakalanan', 'kacirilan', 'yanlis uyari', 'yanlis/gun'])); for (const k of [2, 3, 4, 5, 6]) { let yakalanan = 0, yanlis = 0; for (let g = 0; g < GUN; g++) for (let a = 0; a < AP; a++) for (let h = 0; h < SAAT; h++) { const gecmis = gunler.map((x) => kesme[x][a][h]); const esik = ort(gecmis) + k * sapma(gecmis); if (kesme[g][a][h] <= esik) continue; if (g === OLAY_GUN && a === OLAY_AP && OLAY_SAAT.includes(h)) yakalanan++; else yanlis++; } console.log(yaz([k, `${yakalanan}/${OLAY_SAAT.length}`, OLAY_SAAT.length - yakalanan, yanlis, (yanlis / GUN).toFixed(2)])); } // Koruma acikken: ayni cerceveler baglanti kesmez, reddedilen cerceve sayacinda birikir. const toplamRed = reddedilen.flat(2).reduce((a, b) => a + b, 0); const redSaat = reddedilen.flat(2).filter((x) => x > 0).length; console.log(`\nkoruma acik: reddedilen yonetim cercevesi ${toplamRed}, sapan saat ${redSaat}`); console.log(`bu sayacin tabani 0 oldugu icin esik 1'dir: yakalanan ${redSaat}/${OLAY_SAAT.length}, yanlis uyari 0`); const olayKesme = OLAY_SAAT.reduce((t, h) => t + kesme[OLAY_GUN][OLAY_AP][h], 0); const normalKesme = OLAY_SAAT.reduce((t, h) => t + ort(gunler.map((x) => kesme[x][OLAY_AP][h])), 0); console.log(`olay saatlerinde kesme ${olayKesme}, ayni saatlerin normali ${normalKesme.toFixed(1)}, ` + `kat ${(olayKesme / normalKesme).toFixed(1)}`);
gun 30, erisim noktasi 6, saat 4320, olay saati 6 esik yakalanan kacirilan yanlis uyari yanlis/gun 2 4/6 2 167 5.57 3 4/6 2 20 0.67 4 3/6 3 2 0.07 5 1/6 5 0 0.00 6 0/6 6 0 0.00 koruma acik: reddedilen yonetim cercevesi 42, sapan saat 6 bu sayacin tabani 0 oldugu icin esik 1'dir: yakalanan 6/6, yanlis uyari 0 olay saatlerinde kesme 58, ayni saatlerin normali 23.8, kat 2.4
Bağlantı kesme sayacı zayıf bir belirtidir ve tablo bunun nedenini gösteriyor. Olay saatlerinde sayaç normalin iki virgül dört katına çıkıyor; bu, dört bin üç yüz yirmi saatlik bir kayıtta ayırt edilmesi zor bir sapmadır. Eşik iki seçildiğinde altı olay saatinin dördü yakalanıyor ama otuz günde yüz altmış yedi yanlış uyarı üretiliyor: günde beş buçuk uyarı, hiçbiri gerçek değil. Eşik dörde çıkarıldığında yanlış uyarı ikiye iniyor, yakalama üçe düşüyor. Eşik altıda yanlış uyarı sıfır, yakalama da sıfır.
Beş satırın hiçbiri iyi bir seçenek değildir. Sayacın tabanı sıfır değil, günün saatine göre değişen bir gürültüdür ve olayın kendisi de o gürültünün içine yayılmıştır. Bir sayacın belirti üretebilmesi için sapmanın büyük olması yetmez; tabanının küçük olması gerekir.
Son üç satır korumanın ikinci kazancını veriyor ve bu, yol tablosunda görünmeyen bir kazançtır. Koruma açıkken aynı çerçeveler bağlantıyı kesmez; bütünlük denetiminden geçemez ve reddedilir. Reddedilen yönetim çerçevesi ayrı bir sayaçtır ve bu sayacın normal değeri sıfırdır. Kırk iki çerçeve altı saatte birikiyor, eşik bir olarak alınıyor ve altı olay saatinin altısı da sıfır yanlış uyarıyla yakalanıyor.
Korumanın kapattığı üç yol, bu yüzden ölçümün tamamı değildir. Koruma yalnız çerçeveyi doğrulanabilir kılmıyor; savunmaya tabanı sıfır olan bir sayaç kazandırıyor. Doğrulanabilir hale gelen her iddianın yan ürünü, doğrulamanın başarısız olduğu durumun sayılabilir olmasıdır.
Özet
- On iki çerçeve türünden tabanda yalnız biri bütünlük kanıtı taşıyor: veri çerçevesi. Korumalı yönetim çerçeveleri bu sayıyı dörde çıkarıyor.
- Sekiz yönetim çerçevesinin üçü korunuyor, beşi korunmuyor ve korunmayan beşinin hepsi bağlantı öncesi çerçevedir: ortak anahtar yokken kanıt üretilemez. İkiz erişim noktası yolu bu beş satırda yaşar ve koruma onu kapatmaz.
- Bağlantının kopmasına yol açan sekiz mekanizmadan üçü kapanıyor, beşi açık kalıyor. Açık kalan üçünü hiçbir doğrulama kapatamaz; fiziksel katmanda sıkışma bir iddia sorunu değildir.
- Bağlantı kesme sayacında olay normalin 2,4 katı. Eşik 2’de 4/6 yakalanıyor ama günde 5,57 yanlış uyarı çıkıyor; eşik 4’te yakalama 3/6, eşik 6’da 0/6. Hiçbir eşik iyi bir seçenek değil.
- Koruma açıkken aynı çerçeveler reddedilen yönetim çerçevesi sayacına düşüyor; o sayacın tabanı sıfır olduğu için eşik 1 ile 6/6 yakalama ve 0 yanlış uyarı elde ediliyor. Korumanın ikinci kazancı, tabanı sıfır olan bir sayaçtır.
Sonraki Adım
Bu ders korumanın kapatamadığı üç yolu ayırdı ve üçünün de ortak bir yanı vardı: hiçbiri bir iddianın doğrulanmasıyla ilgili değil. Fiziksel katmanda sıkışma, ortamın dolu gösterilmesi ve bağlantı öncesi çerçevelerin taklidi, sinyalin ulaştığı her yerde yapılabilir. O yüzden kablosuz savunmanın son sorusu bir protokol sorusu değil, bir coğrafya sorusudur: sinyal nereye kadar gidiyor. Sonraki ders kapsama haritasını gerçekten hesaplar — sinyalin bina sınırının dışına taştığı alan kaç metrekaredir, yetkisiz cihaz taraması bu alanda hangi kalemi bulur, hangisini bulamaz. Aynı ders kursun yirmi dersini tek tabloda toplar.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.