Ders 01 / 18
Açık Kaynak İstihbaratı
Halka açık kalemden saldırı yüzeyi adayına: 29 kalemden 26 anma ve 20 benzersiz aday çıkması, bunların 9'unun kanıt ve 6'sının yanlış pozitif olması (%30), en isabetli kaynağın %83 ve en verimsizinin %0 kanıt üretmesi, 45 doğrulama adımının 12'sinin sıfır kanıt getirmesi, dört kaynaktan sonra kanıt sayısının sabitlenip isabetin %69'dan %45'e düşmesi ve 13 kalemlik envanterin yalnız 9'unun dışarıdan görünmesi.
İçindekiler
Bir önceki kurs, hangi halkanın kırılabildiğini kâğıt üzerinde saydı ve şu soruyla kapandı: bir savunmanın gerçekten tuttuğunu ancak yetkili biri deneyerek gösterebilir. Bu kurs o denemenin kendisidir. İlk adımı, deneyecek kişinin neye bakacağını bilmesidir — ve o listeyi kurumun kendisi vermez; dışarıda zaten duran kalemlerden çıkarılır.
Açık kaynak istihbaratı (open-source intelligence), halka açık kalemlerden hedefe ait olabilecek varlıkların çıkarılmasıdır. Buradaki kritik sözcük olabilecektir. Bu kursun ölçü birimi bulgu sayısı değil, kanıtlanmış bulgu sayısıdır ve ayrım daha ilk adımda başlar: bir ad listede geçiyor olması, o adın kuruma ait olduğunu göstermez.
Aday, Kanıt ve Yanlış Pozitif
Bu değerlendirme yetkilendirilmiştir: kapsam sahibi yazılı yetki vermiş ve hangi varlıkların test edilebileceğini tanımlamıştır. Aynı adımların yazılı yetki ve tanımlı kapsam dışında yapılması hem yasadışı hem meslek dışıdır.
KS1: her kaynak türü dört sayı taşır — kaç kalem alındığı, hedef tarafta kaç kayıt bıraktığı, kaç uyarı tetiklediği ve aday başına kaç doğrulama adımı gerektirdiği. KS2: bir adayın bir kaynakta geçmesine anma denir; aynı aday birden çok kaynakta geçebilir, bu yüzden anma sayısı aday sayısından büyüktür. KS3: kapsam sahibinin onayladığı envanter bu ölçümün hakemidir; envanterde olan aday kanıt, envanterde olmayıp kuruma hizmet ettiği görülen ipucu, envanterle hiç örtüşmeyen yanlış pozitif sayılır.
// kesif/kaynak.mjs — kurgu bir olcum aginin halka acik kalem kumesi (model): gercek bir alan // adi, gercek bir genel adres, gercek bir kurum yok. Rastgelelik yok. // KS1: kaynak turu su dort sayiyi tasir — alinan kalem, hedefte biraktigi kayit, tetikledigi // uyari ve aday basina gereken dogrulama adimi. Ucuncu tarafta duran kaynak hedefte kayit // uretmez; kurumun kendi ucundan alinan kalem her alista bir erisim kaydi birakir. export const KAYNAK = ` sertifika-kaydi 4 0 0 1 belge-meta 3 0 0 2 is-ilani 2 0 0 2 genel-kod-deposu 3 0 0 2 arsiv-kopyasi 5 0 0 3 kurum-sitesi 12 12 0 1` .trim().split("\n").map((r) => { const [tur, kalem, kayit, uyari, adim] = r.trim().split(/\s+/); return { tur, kalem: +kalem, kayit: +kayit, uyari: +uyari, adim: +adim }; }); // KS2: her satir bir adayin bir kaynakta gecmesidir; ayni aday birden cok kaynakta gecebilir. export const ANMA = ` sertifika-kaydi abone-portali sertifika-kaydi saha-uygulamasi sertifika-kaydi test-portali sertifika-kaydi ortak-arayuzu sertifika-kaydi sayac-guncelleme-ucu sertifika-kaydi eski-rapor-ucu belge-meta rapor-ucu belge-meta ortak-arayuzu belge-meta sube-vpn-ucu belge-meta eski-rapor-ucu is-ilani is-emri-ucu is-ilani sube-vpn-ucu is-ilani egitim-ortami genel-kod-deposu toplayici-ag-gecidi genel-kod-deposu bulut-depolama-kovasi genel-kod-deposu test-portali genel-kod-deposu yedek-alan-adi arsiv-kopyasi eski-abone-portali arsiv-kopyasi eski-saha-uygulamasi arsiv-kopyasi destek-portali arsiv-kopyasi bayi-portali kurum-sitesi abone-portali kurum-sitesi rapor-ucu kurum-sitesi pazarlama-sayfasi kurum-sitesi kimlik-saglayici-ucu kurum-sitesi odeme-saglayici-ucu` .trim().split("\n").map((r) => { const [kaynak, aday] = r.trim().split(/\s+/); return { kaynak, aday }; }); // KS3: kurgu envanter, bu degerlendirmede kapsam sahibinin onayladigi gercek varlik listesidir // ve olcumun hakemidir. Envanterde olmayan aday yanlis pozitiftir. export const ENVANTER = [ "abone-portali", "saha-uygulamasi", "sube-vpn-ucu", "toplayici-ag-gecidi", "rapor-ucu", "test-portali", "ortak-arayuzu", "is-emri-ucu", "sayac-guncelleme-ucu", "ic-ag-yonetim-ucu", "yedekleme-ucu", "olcum-deposu", "kimlik-deposu", ]; // Sahiplik disaridan kanitlanamayan, ucuncu tarafta duran ama kuruma hizmet eden kalemler. export const IPUCU = ["eski-abone-portali", "pazarlama-sayfasi", "bulut-depolama-kovasi", "kimlik-saglayici-ucu", "egitim-ortami"]; export const ADAY = [...new Set(ANMA.map((a) => a.aday))]; export const sinif = (a) => ENVANTER.includes(a) ? "kanit" : IPUCU.includes(a) ? "ipucu" : "yanlis-pozitif";
// kesif/aday.mjs — halka acik kalemden saldiri yuzeyi adayi: kac aday cikiyor, kaci kanit. import { KAYNAK, ANMA, ADAY, ENVANTER, sinif } from "./kaynak.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 say = (l, s) => l.filter((a) => sinif(a) === s).length; const KALEM = KAYNAK.reduce((t, k) => t + k.kalem, 0); console.log(`${KAYNAK.length} kaynak turu, ${KALEM} halka acik kalem, ${ANMA.length} anma, ` + `${ADAY.length} benzersiz aday; envanter ${ENVANTER.length} kalem`); const A = [-19, 7, 6, 7, 7, 8, 9]; console.log("\n1. kaynak turu basina aday ve isabet"); yaz(A, "kaynak turu", "kalem", "anma", "kanit", "ipucu", "yanlisP", "kanit %"); for (const k of KAYNAK) { const l = ANMA.filter((a) => a.kaynak === k.tur).map((a) => a.aday); yaz(A, k.tur, k.kalem, l.length, say(l, "kanit"), say(l, "ipucu"), say(l, "yanlis-pozitif"), ((say(l, "kanit") / l.length) * 100).toFixed(0)); } yaz(A, "TOPLAM (benzersiz)", KALEM, ADAY.length, say(ADAY, "kanit"), say(ADAY, "ipucu"), say(ADAY, "yanlis-pozitif"), ((say(ADAY, "kanit") / ADAY.length) * 100).toFixed(0)); const B = [-19, 9, 7, 8, 12, 12]; console.log("\n2. dogrulamanin bedeli ve savunmada biraktigi iz"); yaz(B, "kaynak turu", "hedefte", "uyari", "adim", "adim/kanit", "kayit/kanit"); let adimTop = 0; for (const k of KAYNAK) { const l = ANMA.filter((a) => a.kaynak === k.tur).map((a) => a.aday); const kn = say(l, "kanit"), ad = l.length * k.adim; adimTop += ad; yaz(B, k.tur, k.kayit, k.uyari, ad, kn ? (ad / kn).toFixed(2) : "-", kn ? (k.kayit / kn).toFixed(2) : "-"); } const IZ = KAYNAK.reduce((t, k) => t + k.kayit, 0); yaz(B, "TOPLAM", IZ, KAYNAK.reduce((t, k) => t + k.uyari, 0), adimTop, (adimTop / say(ADAY, "kanit")).toFixed(2), (IZ / say(ADAY, "kanit")).toFixed(2)); const C = [-19, 10, 12, 13]; console.log("\n3. bir kaynak turu birakilirsa"); yaz(C, "birakilan kaynak", "kalan kanit", "kacirilan", "kacirilan %"); const KANIT = ADAY.filter((a) => sinif(a) === "kanit"); for (const k of KAYNAK) { const kalan = [...new Set(ANMA.filter((a) => a.kaynak !== k.tur).map((a) => a.aday))] .filter((a) => sinif(a) === "kanit"); yaz(C, k.tur, kalan.length, KANIT.length - kalan.length, (((KANIT.length - kalan.length) / KANIT.length) * 100).toFixed(1)); } const D = [-19, 7, 7, 9, 9, 9]; console.log("\n4. kaynak eklendikce (isabeti yuksekten dusuge)"); yaz(D, "eklenen kaynak", "aday", "kanit", "yanlisP", "kanit %", "iz"); const sirali = [...KAYNAK].sort((x, y) => { const o = (k) => { const l = ANMA.filter((a) => a.kaynak === k.tur).map((a) => a.aday); return say(l, "kanit") / l.length; }; return o(y) - o(x); }); const biriken = []; let izTop = 0; for (const k of sirali) { biriken.push(k.tur); izTop += k.kayit; const l = [...new Set(ANMA.filter((a) => biriken.includes(a.kaynak)).map((a) => a.aday))]; yaz(D, k.tur, l.length, say(l, "kanit"), say(l, "yanlis-pozitif"), ((say(l, "kanit") / l.length) * 100).toFixed(0), izTop); } const gorunur = ENVANTER.filter((e) => ANMA.some((a) => a.aday === e)).length; console.log(`\ndisaridan gorunmeyen envanter kalemi: ` + ENVANTER.filter((e) => !ANMA.some((a) => a.aday === e)).join(", ")); console.log(`envanterin ${gorunur}/${ENVANTER.length} kalemi gorunur ` + `(%${((gorunur / ENVANTER.length) * 100).toFixed(1)}); ` + `${ADAY.length} adayin ${say(ADAY, "yanlis-pozitif")}'si yanlis pozitif ` + `(%${((say(ADAY, "yanlis-pozitif") / ADAY.length) * 100).toFixed(1)})`);
6 kaynak turu, 29 halka acik kalem, 26 anma, 20 benzersiz aday; envanter 13 kalem 1. kaynak turu basina aday ve isabet kaynak turu kalem anma kanit ipucu yanlisP kanit % sertifika-kaydi 4 6 5 0 1 83 belge-meta 3 4 3 0 1 75 is-ilani 2 3 2 1 0 67 genel-kod-deposu 3 4 2 1 1 50 arsiv-kopyasi 5 4 0 1 3 0 kurum-sitesi 12 5 2 2 1 40 TOPLAM (benzersiz) 29 20 9 5 6 45 2. dogrulamanin bedeli ve savunmada biraktigi iz kaynak turu hedefte uyari adim adim/kanit kayit/kanit sertifika-kaydi 0 0 6 1.20 0.00 belge-meta 0 0 8 2.67 0.00 is-ilani 0 0 6 3.00 0.00 genel-kod-deposu 0 0 8 4.00 0.00 arsiv-kopyasi 0 0 12 - - kurum-sitesi 12 0 5 2.50 6.00 TOPLAM 12 0 45 5.00 1.33 3. bir kaynak turu birakilirsa birakilan kaynak kalan kanit kacirilan kacirilan % sertifika-kaydi 7 2 22.2 belge-meta 9 0 0.0 is-ilani 8 1 11.1 genel-kod-deposu 8 1 11.1 arsiv-kopyasi 9 0 0.0 kurum-sitesi 9 0 0.0 4. kaynak eklendikce (isabeti yuksekten dusuge) eklenen kaynak aday kanit yanlisP kanit % iz sertifika-kaydi 6 5 1 83 0 belge-meta 8 7 1 88 0 is-ilani 10 8 1 80 0 genel-kod-deposu 13 9 2 69 0 kurum-sitesi 16 9 3 56 12 arsiv-kopyasi 20 9 6 45 12 disaridan gorunmeyen envanter kalemi: ic-ag-yonetim-ucu, yedekleme-ucu, olcum-deposu, kimlik-deposu envanterin 9/13 kalemi gorunur (%69.2); 20 adayin 6'si yanlis pozitif (%30.0)
Sayılar ölçüm sınıfındadır; girdileri KS1–KS3’tür.
Yirmi Aday, Dokuz Kanıt
Yirmi dokuz halka açık kalem yirmi altı anma üretti; anmalar tekilleştirildiğinde 20 aday kaldı. Bu yirmi adayın 9’u kanıt, 5’i ipucu, 6’sı yanlış pozitiftir. Ham listenin %30’u kuruma ait değildir ve doğrulama yapılmadan rapora girse düzeltme isteyen tarafı olmayan altı kalem üretirdi.
Birinci tablonun asıl bilgisi kaynak türleri arasındaki isabet farkıdır. Sertifika kaydı altı anmanın beşinde kanıt üretir — %83. Arşiv kopyası dört anma üretir ve hiçbiri kanıt değildir; üçü doğrudan yanlış pozitiftir. İkisi de “halka açık kaynak” başlığı altındadır ve ikisi de aday listesine aynı biçimde girer, ama biri neredeyse doğrudan kanıt, öteki neredeyse tamamen gürültüdür.
Fark kaynağın doğasından gelir. Sertifika kaydı bir ada karşılık sertifika verilmiş olmasını
gösterir ve o adı denetleyebilen taraf sınırlıdır; arşiv kopyası ise geçmişte bir sayfada geçmiş
olmayı gösterir ve geçmişte doğru olan bir şey bugün doğru olmak zorunda değildir. Arşivden çıkan
eski-saha-uygulamasi kalemi vaktiyle kuruma aitti, devredildi ve artık başka bir tarafın
sorumluluğundadır. Aynı listede duran destek-portali ve bayi-portali ise yalnız ad
benzerliği yüzünden listeye girmiştir.
İz Bırakan Adım ve Bırakmayan Adım
İkinci tablo bu kurs boyunca taşınacak sütunu açar: bir adım savunmada kaç kayıt üretiyor. Altı kaynak türünden beşi hedefte sıfır kayıt bırakır, çünkü kalem üçüncü tarafın elindedir; hedefin günlüğünde bu adımların hiçbir izi yoktur. Yalnız kurumun kendi ucundan alınan on iki kalem on iki erişim kaydı üretir.
Bu on iki kaydın 0 uyarı üretmesi tablonun ikinci sonucudur. Bir portalın on iki sayfasını sırayla almak, normal bir ziyaretçinin yaptığından ayırt edilemez; savunma tarafında bu satırlar gürültünün içinde durur. Mavi takım açısından çıkarım şudur: keşif aşamasının büyük bölümü savunmanın göremeyeceği yerde geçer, görülebilen bölümü de eşik altında kalır. Bu aşamanın tespiti bir uyarı meselesi değil, geriye dönük ilişkilendirme meselesidir.
Aynı tablonun adim sütunu bedeli verir. Kırk beş doğrulama adımı harcanmış, dokuz kanıt
çıkmıştır: kanıt başına 5,00 adım. Dağılım eşit değildir. Sertifika kaydı kanıt başına 1,20
adım harcar; genel kod deposu 4,00 adım harcar; arşiv kopyası 12 adım harcar ve hiçbir kanıt
üretmez. Kaynakları isabete göre değil alışkanlığa göre sıralayan bir keşif, bütçesinin dörtte
birini sıfır getirili bir kaynağa yatırır.
Kaynak Eklemenin İki Yüzü
Üçüncü tablo her kaynağın vazgeçilmezliğini ölçer. Altı kaynaktan üçü bırakıldığında hiçbir kanıt kaybolmaz: belge meta verisi, arşiv kopyası ve kurumun kendi sitesi verdikleri kanıtları başka kaynaklarla paylaşır. Sertifika kaydı bırakılırsa 2 kanıt kaybolur (%22,2), iş ilanı ve genel kod deposu birer kanıt götürür. Yani dokuz kanıtın hepsine ulaşmak için altı kaynak gerekmez; üçü yeter.
Dördüncü tablo bunu birikimli olarak gösterir ve dersin en keskin sonucudur. Kaynaklar isabete göre sıralanıp tek tek eklendiğinde kanıt sayısı 5 → 7 → 8 → 9 diye ilerler ve dördüncü kaynaktan sonra hiç artmaz. Buna karşılık aday sayısı 13’ten 16’ya, oradan 20’ye çıkar ve yanlış pozitif 2’den 6’ya yükselir. İsabet aynı iki adımda %69’dan %45’e düşer.
Son iki kaynak şunu yapar: yedi yeni aday ekler, sıfır yeni kanıt getirir, dört yeni yanlış pozitif üretir ve savunma tarafında 12 kayıt bırakır. Keşif aşamasında “daha çok kaynak daha iyi kapsama” varsayımı bu tabloda kırılır. Kaynak eklemek kapsamayı bir noktadan sonra artırmaz; artırdığı şey eleme yüküdür.
İpucu Sınıfı Kapsam Sınırında Durur
Yirmi adayın beşi ne kanıt ne yanlış pozitiftir. Eski abone portalı, pazarlama sayfası, bulut depolama kovası, kimlik sağlayıcı ucu ve eğitim ortamı kuruma hizmet eder ama kurumun envanterinde durmaz; hepsi üçüncü tarafın altyapısında çalışır. Bu beş kalem aday listesinin dörtte biridir ve ikili bir eleme kuralıyla — “envanterdeyse kanıt, değilse gürültü” — yanlış tarafa düşer.
Bu sınıfın ayrı tutulmasının nedeni ölçüm değil yetkidir. Bir kalem kuruma hizmet ediyor olabilir, ama üzerinde işlem yapmak o kalemin sahibi olan üçüncü tarafın altyapısına dokunmak demektir; verilen yazılı yetki o tarafı kapsamaz. Beş ipucu kaleminin her biri kapsam sınırına değen bir kalemdir ve hiçbiri kapsam sahibinin onayı alınmadan test edilemez. Yanlış pozitifle aralarındaki fark da buradadır: yanlış pozitif listeden düşer, ipucu listede kalır ve karar bekler.
Sayısal karşılığı şudur: dokuz kanıt doğrudan işlenebilir, altı yanlış pozitif elenir, beş kalem kapsam görüşmesine taşınır. Keşif aşamasının çıktısı tek bir liste değil, üç ayrı listedir; üçünü tek listeye indiren bir rapor ya çalışılamayacak kalemi çalışır ya da çalışılması gereken kalemi atar.
Dışarıdan Görünmeyen Dört Kalem
Son satır ölçümün üst sınırını verir. Envanterde on üç kalem vardır, açık kaynak istihbaratı bunların dokuzunu görür — %69,2. İç ağ yönetim ucu, yedekleme ucu, ölçüm deposu ve kimlik deposu hiçbir halka açık kalemde geçmez.
Bu dört kalem yokluklarıyla iki şey söyler. Birincisi, açık kaynak istihbaratının kapsaması kurumun dışa dönük yüzüyle sınırlıdır; içeride duran ve dışarıya hiçbir imza bırakmayan varlıklar bu aşamada listeye girmez. İkincisi, bu aşamada üretilen liste bir envanter değil, envanterin dışarıdan görünen bir izdüşümüdür. Kapsam sahibinin verdiği envanterle karşılaştırılamayan bir değerlendirmede bu %69,2 hiç bilinmez; bilinen tek şey yirmi adaydır ve o yirminin dokuzunun kanıt olduğu ancak hakem varken söylenebilir.
Özet
- Bu kursun ölçü birimi aday değil kanıttır: 29 halka açık kalem 26 anma ve 20 benzersiz aday üretti; 9’u kanıt, 5’i ipucu, 6’sı yanlış pozitiftir (%30,0).
- Kaynak türleri arasındaki isabet farkı büyüktür: sertifika kaydı %83 kanıt üretirken arşiv kopyası %0 üretir ve dört anmasının üçü yanlış pozitiftir.
- Altı kaynak türünden beşi hedefte sıfır kayıt bırakır; kurumun kendi ucundan alınan 12 kalem 12 erişim kaydı ve 0 uyarı üretir — bu aşama eşik altında kalır.
- Doğrulama bedeli kanıt başına 5,00 adımdır ve eşit dağılmaz: sertifika kaydı 1,20 adım, arşiv kopyası 12 adım harcayıp hiçbir kanıt üretmez.
- Dört kaynaktan sonra kanıt sayısı 9’da sabitlenir; son iki kaynak 7 aday, 0 kanıt, 4 yanlış pozitif ve 12 kayıt ekler, isabeti %69’dan %45’e düşürür.
- Envanterin 13 kaleminden yalnız 9’u dışarıdan görünür (%69,2); dört kalem hiçbir halka açık kaynakta geçmez.
Sonraki Adım
Yirmi adayın dokuzunu kanıt, altısını yanlış pozitif diye ayıran şey bu derste dışarıdan gelen bir hakemdi: kapsam sahibinin onayladığı envanter. Gerçek bir değerlendirmede o envanter değerlendirmenin çıktısıdır, girdisi değil. O halde soru şu: hakem olmadan bir adayın kuruma ait olduğu nasıl gösterilir?
Bir kısmı için gösterilebilir. Alan adı ve kayıt sistemleri, bir adı kimin denetlediğine dair doğrulanabilir izler taşır; bazı kayıtları yalnız adın sahibi yazabilir, bazıları ise adı barındıran üçüncü tarafa işaret eder ve sahiplik hakkında hiçbir şey kanıtlamaz. Sonraki ders kayıtları envanter kanıtı olarak ele alır: aynı yirmi aday kayıt sorgulamasından geçirilir, kaçının sahipliği kanıtlanabildiği, kaçının yalnız ipucu düzeyinde kaldığı ve bu sorgulamanın hedef tarafta kaç kayıt bıraktığı sayılır.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.