---
title: 'Açık Kaynak İstihbaratı'
source: 'https://academia.sh/tr/kurslar/sizma-testi/acik-kaynak-istihbarati'
course: 'Güvenlik Araçları ve Sızma Testi'
language: tr
updated: '2026-08-17T18:08:41+00:00'
license: 'CC BY-SA 4.0'
---

# 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.

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 **olabilecek**tir. 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.

```js
// 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";
```

```js
// 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ış pozitif**tir. 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.
