Ders 07 / 22
Sosyal Mühendisliğin Temeli
Karar anını bir süre bütçesi olarak modellemek: yedi doğrulama kaleminin baskı altında kaçının kullanılabildiği, on iki talepte kaç sahte talebin geçtiği, altı adımlık zincirin kaç halkasında denetim bulunduğu ve geri arama yordamının durdurduğu talep ile kestiği meşru iş.
İçindekiler
Önceki konu saldırıyı adım dizisi olarak modelledi ve her adımın karşısına bir denetim koymayı denedi. O modelde zincirin ilk halkası hep teknikti: kayıtsız bir hesap, kapatılmamış bir uç, denetlenmeyen bir bağlantı. Bu konunun sorusu farklıdır. Zincirin ilk halkası bir kişinin verdiği karar olduğunda o kararın karşısına ne konabilir ve kaç tane konabilir?
Bir talebi doğrulamak zaman ister ve doğrulama kalemlerinin her birinin kendi süresi vardır. Süre baskısı bu yüzden bir üslup meselesi değil, ölçülebilir bir kısıttır: karar vericiye bırakılan saniye azaldıkça kullanabildiği doğrulama kalemi sayısı düşer. Güven de aynı biçimde ölçülür — doğrulanamayan bir iç ayrıntı, bir kalemin yerini alan bir kısayoldur. Bu ders o iki etkeni tek bir sayıya, kullanılabilen kalem sayısına indirger ve zincirin hangi halkasında kırıldığını sayar. Burada modellenen adımların yazılı yetki ve tanımlı kapsam dışında denenmesi hem yasadışı hem de meslek dışıdır.
- SM1. Talep kümesi, doğrulama kalemleri ve süreleri kurgusal bölgesel ölçüm ağının abone
hizmetleri masasına aittir. Gerçek bir talep işlenmiyor; ölçülen şey
nodeile kurulan modeldir. - SM2. Her doğrulama kaleminin sabit bir süresi var. Gerçekte süre kişiye ve o anki yüke göre değişir; sabit süre kalemlerin ucuzdan pahalıya sıralamasını korur, bu sıralama ölçünün temelidir.
- SM3. Karar verici kalemleri ucuzdan pahalıya uygular. Bu en iyimser varsayımdır; gerçek sıra sezgiyle belirlenir ve aynı bütçeye daha az kalem sığdırır.
- SM4. Talebin gerçek sınıfı modelde bilinir. Gerçekte sınıf ancak sonradan bilinir; bilindiği varsayılıyor ki geçen sahte talep ile kesilen meşru iş ayrı ayrı sayılabilsin.
- SM5. Bir kalem talebi ya eler ya elemez. Kısmi şüphe, ikinci bir soru sorma ve talebi askıya alma modellenmedi.
- SM6. Süre baskısı tek bir sayıya indirgendi: karar için kalan saniye. Otorite, karşılıklılık ve utanma gibi etkenler ayrı ayrı modellenmedi; hepsi bütçeyi kısaltan aynı sayı olarak taşınır.
Karar Anı Bir Süre Bütçesidir
Model üç parçadan oluşur. Doğrulama kalemleri süreleriyle birlikte listelenir; talepler sınıfları, türleri, kendilerine bırakılan süre bütçesi ve tutarlarıyla verilir; her talebin karşısında onu eleyebilecek kalemler yazılır. Eleyen kalem listesi bir tahmin değil, modelin tanımıdır: o kalem uygulanırsa talep durur, uygulanmazsa geçer.
Talep türü ayrı bir sütun olarak taşınır çünkü yordamların kapsamı türle çizilir. Erişim, ödeme ve kayıt olmak üzere üç tür var; bir yordamın hangi türe değdiği, hangi zincirin kırıldığını doğrudan belirler ve dersin sonunda kapsam dışı kalan tek türün bedeli sayılacaktır.
// karar.mjs — dogrulama kalemleri, talep kumesi ve karar zinciri; model export const KALEM = { // ad: kalemi uygulamanin saniye maliyeti 'tutari esikle karsilastirma': 20, 'gonderen adresini kayitla karsilastirma': 40, 'is emri numarasini sistemde arama': 60, 'yetki listesinde talep sahibini bulma': 90, 'gecmis talep kaydina bakma': 120, 'kayitli numaradan geri arama': 180, 'amir onayi isteme': 300, }; const [T, G, I, Y, K, A, O] = Object.keys(KALEM); export const ESIK = 2000; // kurgu odeme birimi // [talep, sinif, tur, baski butcesi (sn), tutar, talebi eleyen kalemler] export const TALEP = [ ['sifre sifirlama', 'sahte', 'erisim', 60, 0, [A, Y]], ['odeme hesabi degisikligi', 'sahte', 'odeme', 120, 4800, [A, K]], ['acil odeme onayi', 'sahte', 'odeme', 30, 9500, [T, O, A]], ['is emri disi saha erisimi', 'sahte', 'erisim', 90, 0, [I, A]], ['abone kaydi disa aktarimi', 'sahte', 'kayit', 180, 0, [Y, O]], ['planli bakim gecici erisimi', 'mesru', 'erisim', 300, 0, []], ['yeni saha calisani hesabi', 'mesru', 'erisim', 600, 0, []], ['donem sonu fatura onayi', 'mesru', 'odeme', 240, 12000, []], ['sayac degisimi odemesi', 'mesru', 'odeme', 120, 1500, []], ['sube ucunda yazici tanimi', 'mesru', 'kayit', 480, 0, []], ['abone itirazi kayit sorgusu', 'mesru', 'kayit', 90, 0, []], ['kesinti ekibine gecici yetki', 'mesru', 'erisim', 45, 0, []], ]; // zincirin adimlari: [adim, onkosul, adimi goren denetim, adim bitince dusen kalem] export const ZINCIR = [ ['gorev bilgisi toplama', 'disaridan gorulebilen gorev listesi', null, 0], ['bahane kurma', 'ic bir surecin adi', null, 0], ['temas kurma', 'ulasilabilir kanal', 'kanal kayitli mi', 1], ['guven isareti verme', 'dogrulanamayan ic ayrinti', 'ayrinti kayitla karsilastirilir mi', 1], ['aciliyet yaratma', 'karar vericinin sure butcesi', 'sure butcesi yordamla sabit mi', 2], ['eylem talebi', 'yetkili karar verici', 'geri arama zorunlu mu', 5], ]; export function kalemler(butce) { // butceye sigan dogrulama kalemleri, ucuzdan pahaliya let t = 0; const secili = []; for (const [ad, sn] of Object.entries(KALEM)) { if (t + sn > butce) break; t += sn; secili.push(ad); } return { secili, sure: t }; } export const yordamKapsami = (t) => t[2] === 'erisim' || (t[2] === 'odeme' && t[4] > ESIK);
Baskı Bütçesi Kalem Sayısını Nasıl Düşürüyor
// kosum1.mjs — sure baskisi altinda kullanilabilen dogrulama kalemi sayisi ve gecen sahte talep import { KALEM, TALEP, kalemler } from './karar.mjs'; console.log(`${Object.keys(KALEM).length} dogrulama kalemi, toplam ${Object.values(KALEM).reduce((a, b) => a + b, 0)} sn; ` + `${TALEP.length} talep, ${TALEP.filter((t) => t[1] === 'sahte').length} sahte\n`); console.log(`${'talep'.padEnd(28)} ${'sinif'.padStart(5)} ${'baski'.padStart(5)} ${'kalem'.padStart(5)} ${'sonuc'.padStart(6)}`); let gecen = 0, duran = 0; for (const t of TALEP) { const { secili } = kalemler(t[3]); const durdu = t[5].some((k) => secili.includes(k)); if (t[1] === 'sahte') { durdu ? duran++ : gecen++; } console.log(`${t[0].padEnd(28)} ${t[1].padStart(5)} ${String(t[3]).padStart(5)} ${String(secili.length).padStart(5)} ` + `${(t[1] === 'sahte' ? (durdu ? 'durdu' : 'gecti') : 'gecti').padStart(6)}`); } console.log(`\nbaski butcesine gore kullanilabilen kalem sayisi:`); for (const b of [30, 60, 120, 180, 300, 600]) { const { secili, sure } = kalemler(b); console.log(` ${String(b).padStart(3)} sn -> ${secili.length}/${Object.keys(KALEM).length} kalem (${sure} sn), ` + `disarida kalan: ${Object.keys(KALEM).filter((k) => !secili.includes(k)).length}`); } console.log(`\nyordamsiz karar: ${duran} sahte talep durdu, ${gecen} gecti`); console.log(`gecen sahte talepler: ${TALEP.filter((t) => t[1] === 'sahte' && !t[5].some((k) => kalemler(t[3]).secili.includes(k))).map((t) => `${t[0]} (${t[3]} sn)`).join('; ')}`);
7 dogrulama kalemi, toplam 810 sn; 12 talep, 5 sahte talep sinif baski kalem sonuc sifre sifirlama sahte 60 2 gecti odeme hesabi degisikligi sahte 120 3 gecti acil odeme onayi sahte 30 1 durdu is emri disi saha erisimi sahte 90 2 gecti abone kaydi disa aktarimi sahte 180 3 gecti planli bakim gecici erisimi mesru 300 4 gecti yeni saha calisani hesabi mesru 600 6 gecti donem sonu fatura onayi mesru 240 4 gecti sayac degisimi odemesi mesru 120 3 gecti sube ucunda yazici tanimi mesru 480 5 gecti abone itirazi kayit sorgusu mesru 90 2 gecti kesinti ekibine gecici yetki mesru 45 1 gecti baski butcesine gore kullanilabilen kalem sayisi: 30 sn -> 1/7 kalem (20 sn), disarida kalan: 6 60 sn -> 2/7 kalem (60 sn), disarida kalan: 5 120 sn -> 3/7 kalem (120 sn), disarida kalan: 4 180 sn -> 3/7 kalem (120 sn), disarida kalan: 4 300 sn -> 4/7 kalem (210 sn), disarida kalan: 3 600 sn -> 6/7 kalem (510 sn), disarida kalan: 1 yordamsiz karar: 1 sahte talep durdu, 4 gecti gecen sahte talepler: sifre sifirlama (60 sn); odeme hesabi degisikligi (120 sn); is emri disi saha erisimi (90 sn); abone kaydi disa aktarimi (180 sn)
Alt tablo dersin ilk sayısını veriyor. Masanın elinde yedi doğrulama kalemi var ve hepsini uygulamak 810 saniye sürüyor. Otuz saniyelik bir bütçede bunlardan biri kullanılabiliyor, altısı dışarıda kalıyor. Yüz seksen saniyede bile üç kalem kullanılabiliyor; en pahalı iki kalem — geri arama ve amir onayı — ancak altı yüz saniyelik bir bütçede sıraya girebiliyor. Kalem sayısı bütçeyle doğru orantılı değil, basamaklı düşüyor: yüz yirmi ile yüz seksen saniye arasında hiçbir yeni kalem eklenmiyor, çünkü sıradaki kalem doksan saniye ve toplam iki yüz onu buluyor.
Üst tabloda bunun sonucu görünüyor. Beş sahte talebin dördü geçiyor ve geçenlerin ortak yanı kalemlerin dışarıda bırakılması: sahte taleplerin her birini eleyecek kalem modelde var, ama bırakılan bütçeye sığmıyor. Duran tek talep en kısa bütçeyi bırakan taleptir — otuz saniye — ve onu duran şey en ucuz kalemdir. Tutarı eşikle karşılaştırmak yirmi saniye sürer ve dokuz bin beş yüz birimlik bir ödemeyi tek başına işaretler. Bu, ölçünün ters yönlü ilk bulgusudur: baskıyı artırmak zincire her zaman yaramaz, çünkü çok kısa bir bütçe en ucuz kalemi de tetikleyecek kadar göze çarpar.
Yordamsız karar bu yüzden dört sahte talebi geçiriyor. Karar vericinin dikkatsizliği değil, bütçesinin kısalığı ölçülüyor. Aynı kişi altı yüz saniyeyle altı kalem uygulayabiliyor.
Zincir, Halkalar ve Erken Kırma Kazancı
// kosum2.mjs — zincir adimlari, kirilabilen halka ve geri arama yordaminin uc sutunu import { TALEP, ZINCIR, KALEM, kalemler, yordamKapsami } from './karar.mjs'; const GERI = 'kayitli numaradan geri arama'; let kum = 0; const kumul = ZINCIR.map((a) => (kum += a[3])); console.log(`${'#'.padStart(2)} ${'adim'.padEnd(22)} ${'onkosul'.padEnd(34)} ${'denetim'.padStart(7)} ${'kumul. kalem'.padStart(12)}`); ZINCIR.forEach((a, i) => console.log(`${String(i + 1).padStart(2)} ${a[0].padEnd(22)} ${a[1].padEnd(34)} ` + `${(a[2] ? 'var' : 'yok').padStart(7)} ${String(kumul[i]).padStart(12)}`)); const kirilabilir = ZINCIR.map((a, i) => (a[2] ? i : -1)).filter((i) => i >= 0); const erken = kirilabilir[0], gec = kirilabilir[kirilabilir.length - 1]; console.log(`\nzincir ${ZINCIR.length} adim; denetimi olan ${kirilabilir.length}, hic denetimi olmayan ${ZINCIR.length - kirilabilir.length}`); console.log(`en erken kirilabilen halka ${erken + 1} -> o ana kadar dusen kalem ${erken ? kumul[erken - 1] : 0}`); console.log(`en gec kirilabilen halka ${gec + 1} -> o ana kadar dusen kalem ${kumul[gec - 1]}`); console.log(`hic kirilmazsa dusen kalem ${kumul[ZINCIR.length - 1]}; erken kirma kazanci ${kumul[gec - 1] - (erken ? kumul[erken - 1] : 0)} kalem`); console.log(`\ngeri arama yordami (${KALEM[GERI]} sn, tur 'erisim' ya da esik ustu 'odeme'):`); let durdu = 0, kacti = 0, kesilen = [], eksure = 0; for (const t of TALEP) { const kapsam = yordamKapsami(t); const uygulanan = kalemler(t[3]).secili.concat(kapsam ? [GERI] : []); if (kapsam) eksure += KALEM[GERI]; if (t[1] === 'sahte') { t[5].some((k) => uygulanan.includes(k)) ? durdu++ : kacti++; } else if (kapsam && t[3] < KALEM[GERI]) kesilen.push(`${t[0]} (${t[3]} sn)`); } console.log(` kapsama giren talep ${TALEP.filter(yordamKapsami).length}/${TALEP.length}, eklenen dogrulama suresi ${eksure} sn`); console.log(` duran sahte talep ${durdu}/5, kacan ${kacti}`); console.log(` kacan: ${TALEP.filter((t) => t[1] === 'sahte' && !yordamKapsami(t) && !t[5].some((k) => kalemler(t[3]).secili.includes(k))).map((t) => `${t[0]} (tur ${t[2]})`).join('; ')}`); console.log(` kesilen mesru is ${kesilen.length}: ${kesilen.join('; ')}`);
# adim onkosul denetim kumul. kalem 1 gorev bilgisi toplama disaridan gorulebilen gorev listesi yok 0 2 bahane kurma ic bir surecin adi yok 0 3 temas kurma ulasilabilir kanal var 1 4 guven isareti verme dogrulanamayan ic ayrinti var 2 5 aciliyet yaratma karar vericinin sure butcesi var 4 6 eylem talebi yetkili karar verici var 9 zincir 6 adim; denetimi olan 4, hic denetimi olmayan 2 en erken kirilabilen halka 3 -> o ana kadar dusen kalem 0 en gec kirilabilen halka 6 -> o ana kadar dusen kalem 4 hic kirilmazsa dusen kalem 9; erken kirma kazanci 4 kalem geri arama yordami (180 sn, tur 'erisim' ya da esik ustu 'odeme'): kapsama giren talep 8/12, eklenen dogrulama suresi 1440 sn duran sahte talep 4/5, kacan 1 kacan: abone kaydi disa aktarimi (tur kayit) kesilen mesru is 1: kesinti ekibine gecici yetki (45 sn)
Zincir altı adım ve ilk iki adımın karşısında hiçbir denetim yok. Bunun nedeni adımların zararsızlığı değil, savunmanın görüş alanının dışında kalmalarıdır: görev bilgisinin dışarıdan görülebilir olması ve bir iç sürecin adının bilinmesi, hiçbir kayda düşmeyen hazırlık adımlarıdır. Zincirin ilk iki halkası bu yüzden sayılamaz, yalnız daraltılabilir.
Kırılabilen dört halka üçüncü adımda başlıyor ve o noktada henüz hiçbir kalem düşmemiş. Altıncı adımda kırmak ise dört kalem düşmüşken gelir. İkisi arasındaki fark erken kırma kazancıdır: dört kalem. Zincir hiç kırılmazsa düşen kalem dokuza çıkar, yani son adımı geçirmenin kendi başına bedeli beş kalemdir. Bu üç sayı bir arada okunduğunda savunmanın nereye yatırım yapacağı bir görüş değil, bir sıralama olur.
Geri arama yordamı bunu üç sütunla gösteriyor. Yordam on iki talebin sekizini kapsıyor ve dört sahte talebi durduruyor; yordamsız karar yalnız birini durdurmuştu. Kaçan tek talep kapsam dışındadır: kayıt türündeki bir dışa aktarım isteği ne erişim ne de eşik üstü ödemedir, dolayısıyla yordam ona hiç değmez. Burada zincirin kırılamadığı durum ölçüye giriyor — yordam bu talep için bir halka değil, ölçü tespite kayıyor: talep geçer, ancak dışa aktarımın kaydı sonradan sayılabilir.
Bedel iki kalemde yazılır. Sekiz talepte yüz seksener saniye eklenerek toplam 1.440 saniyelik doğrulama süresi doğuyor. Kesilen meşru iş bir tanedir ve hangi iş olduğu önemlidir: kesinti ekibine geçici yetki verme talebi kırk beş saniyelik bir bütçeyle geliyor, geri arama yüz seksen saniye sürüyor ve iş yordamın içine sığmıyor. Yordamın durdurduğu tek meşru iş, en acil olanıdır. Bu bir kusur değil, yordam tasarımının kaçınılmaz sonucudur: süre baskısını denetime çeviren her yordam, gerçekten acil olan işi de aynı denetime sokar.
Özet
- 7 doğrulama kaleminin tamamı 810 saniye sürüyor. 30 saniyelik bütçede 1 kalem, 180 saniyede 3, 600 saniyede 6 kalem kullanılabiliyor; kalem sayısı bütçeyle basamaklı artıyor.
- Yordamsız kararda 5 sahte talebin 4’ü geçiyor. Her birini eleyecek kalem modelde var, ama bırakılan bütçeye sığmıyor; duran tek talep en kısa bütçeliydi ve onu en ucuz kalem durdurdu.
- Zincir 6 adım; 4 adımda denetim var, ilk 2 adım hiçbir kayda düşmüyor. Bu iki halka sayılamaz, yalnız dışarıdan görülen bilgi daraltılarak zorlaştırılabilir.
- En erken kırılabilen halka 3. adımdır ve orada düşen kalem 0’dır; 6. adımda kırmak 4 kalem düşmüş demektir. Erken kırma kazancı 4 kalem, zincirin hiç kırılmamasının bedeli 9 kalemdir.
- Geri arama yordamı 12 talebin 8’ini kapsıyor, 4 sahte talebi durduruyor; kapsam dışı kalan 1 talepte hiçbir halka kırılmıyor ve ölçü tespite kayıyor.
- Yordamın bedeli 1.440 saniye ek doğrulama ve 1 kesilen meşru iştir. Kesilen iş, bütçesi yordamın süresinden kısa olan en acil taleptir.
Sonraki Adım
Bu derste talep karar vericiye ulaşmış sayıldı ve ölçülen şey kararın kendisiydi. Zincirin üçüncü halkası — temas kurma — tek satırda geçildi, oysa temasın taşıdığı ileti ölçülebilir bir nesnedir. Bir ileti kümesinde meşru olanla sahte olanı ayıran şey üslup değil, sayılabilir göstergelerdir: gönderenin daha önce görülmemiş olması, yanıt adresinin gönderenden ayrışması, bağlantı hedefinin metinden farklı olması. Sonraki dersin sorusu budur: bir ileti kümesinde kaç ayırt edici gösterge sayılabiliyor, seçilen eşik kaç sahte iletiyi kaçırıyor ve kaç meşru iletiyi yanlış işaretliyor — ve hedef daraldıkça gösterge sayısı neden düşüyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.