NPM Bağımlılık Ağında
Topolojik Risk Analizi

Yazılım Tedarik Zinciri Güvenliği İçin Karmaşık Ağ Yaklaşımı

NPM Bağımlılık Ağı Karmaşık Ağlar Topolojik Analiz
Kurum: Karabük Üniversitesi
Program: Yazılım Mühendisliği Yüksek Lisans
Ders: Seminer
Danışman: Ömer Faruk Acar
Sunan: Yusuf Talha Arabacı

Yüksek Lisans Seminer Çalışması • Mayıs 2026

Sunum QR Kod
Şekil 1. Sunum Bağlantısı (Üretim: qrcode library)
Altyapı: Vanilla HTML5/CSS3/JS (Bespoke Slide Engine) • Görselleştirme: D3.js, Mermaid.js
Ana Mesaj: Konuya hakimiyet ve özgüven sergilemek.
Sahne Notu: Seminer başlığını ve adını söyleyerek enerjik bir giriş yap. "Bugün sizlerle sadece bir ağ analizi değil, yazılım dünyasının en büyük kör noktalarından birine, NPM ekosistemine topolojik bir mercekle nasıl bakabileceğimizi konuşacağız" diyerek merak uyandır.
Strateji: QR kodu işaret ederek sunumun interaktif olduğunu ve izleyicilerin takip edebileceğini belirt.

GİRİŞ | Problem ve Motivasyon

  • Scanning Gap: NPM ekosistemi (3.8M paket) manuel denetim kapasitesini aşmıştır.
  • Transitive Depth: Ortalama bir uygulama 1000+ geçişli bağımlılığa sahiptir.
  • Targeted Attacks: Saldırganlar artık "merkezi köprüleri" hedeflemektedir.

Kritik Soru: Hangi paketin tüm ekosistemi felç edebileceğini nasıl deterministik olarak buluruz?

RQ1

Topolojik DNA sistemik bir kırılganlığa mı işaret ediyor?

RQ2

Katz, PageRank'ten daha iyi bir risk tahminleyicisi midir?

RQ3

Topolojik analiz denetim eforunu optimize edebilir mi?

Ana Mesaj: Klasik güvenlik taramaları (vulnerability scanning) artık bu devasa ölçekte yetersiz kalıyor.
Sahne Notu: Ekrana dönmeden jüriye bakarak, 3.8 milyon paketlik bir evrende manuel denetimin veya basit zafiyet tarayıcılarının neden çöktüğünü anlat. "Amacımız, devasa bir ağda ekosistemi felç edebilecek o 'tekil pimi' matematiksel olarak bulmak" diyerek araştırma sorularına (RQ) kısa bir geçiş yap.
Detay: Scanning Gap, Transitive Depth ve Targeted Attacks kavramlarını gerçek dünya örnekleriyle (örneğin SolarWinds saldırısı gibi) ilişkilendirerek problemin ciddiyetini vurgula.

GİRİŞ | Bağımlılık Anatomisi ve Domino Etkisi

  • Implicit Trust: En alt seviyedeki bir pakete duyulan güven, tüm üst katmanlara kalıtsal olarak aktarılır.
  • Cascading Failure: Tek bir düğümdeki zafiyet, ağın topolojik karakteristiği nedeniyle "domino etkisi" yaratır.
  • Deterministik Akış: Bir paket yüklendiğinde, tüm alt bağımlılıkların yüklenmesi zorunludur.

Kritik Tespit: Ortalama yol uzunluğu 5.72 olduğundan, risk küçük bir çekirdekten hızlı geniş çevreye yayılır.

Dinamik Görselleştirme: Bağımlılık Zincirinde Enfeksiyon Yayılımı (Kütüphane: D3.js)
Ana Mesaj: Güvenlik zafiyetleri NPM'de kalıtsaldır (inherent).
Sahne Notu: Buradaki "Ortalama yol uzunluğu 5.72" verisi çok kritik. "Siz sadece bir paket kurduğunuzu sanırken, aslında ortalama 5-6 derinlikte devasa bir zincire bağlanıyorsunuz. İşte bu domino etkisidir" diyerek görselleştirmeyi işaret et.
Detay: 'Implicit Trust' kavramını açıkla; en alttaki küçük bir pakete güvenmek zorunda olduğunuzda, o güvenin tüm üst katmanlara nasıl kontrolsüzce aktığını belirt.

GİRİŞ | Karşılaştırma ve Boşluk Analizi

Çalışma Odak Noktası Metrik Yaklaşımı Eksiklik / Boşluk
Kikas vd. (2017) Ekosistem Evrimi Bağımlılık ağının zamansal değişimi Statik ağ özellikleri incelenmiş; dinamik risk yayılımı ve triage (önceliklendirme) eksik.
Lertwittayatrai (2017) Topoloji Haritalama Görselleştirme ve TDA (Topological Data Analysis) Betimsel bir haritalama çalışması; güvenlik riskleri için eylemsel bir metrik sunulmamış.
Zimmermann vd. (2019) Güvenlik Tehditleri Sürdürücü (Maintainer) ve paket riski Risk analizi topolojik derinlikten ziyade kişi ve metadata odaklı (Small-world vurgusu).
Oldnall (2019) Kompleks Ağlar Small-world & Betweenness Merkeziyeti Ağ bilimsel perspektif sunulmuş; ancak sistemik riskleri önceliklendiren bir model önerilmemiş.
Decan vd. (2019) Ağ Kırılganlığı Transitif bağımlılık ve sürdürülebilirlik Genel ekosistem sağlığı ölçülmüş; kritik paketlerin eylemsel triage süreci tanımlanmamış.
Hafner vd. (2021) Ağ Dayanıklılığı PageRank & Hedefli Silme Simülasyonu Dayanıklılık ölçülmüş; ancak günlük operasyonel risk skorlaması (triage) yapılmamış.
Zahan vd. (2022) Risk Sinyalleri Zayıf halkaların (Weak Links) tespiti Metadata bazlı sinyaller kullanılmış; ağ topolojisinin domino etkisi model dışı bırakılmış.
Seto-Rey vd. (2023) SCC Kırılganlığı Dev Bileşen (SCC) bazlı zayıflık analizi Makro-topolojik analiz yapılmış; bireysel paketler için mikro-triage (risk skorlama) eksik.
Bu Çalışma (2026) Sistemik Risk Triage Katz Merkeziyeti & K-Core Analizi Tüm ağ derinliğini ve transitif etkileri skorlayan, eylemsel bir Risk Triage modeli.
Ana Mesaj: Literatürde eyleme dökülebilir (actionable) bir risk modeli eksikliği var.
Sahne Notu: Tablodaki isimleri okuma. "Geçmiş çalışmalar ekosistemin haritasını çok iyi çıkardı, ancak operasyonel bir kriz anında 'İlk nereye müdahale etmeliyim?' sorusunu yanıtsız bıraktılar. Bizim modelimiz tam da bu 'Triage' boşluğunu dolduruyor" diyerek mavi satırı vurgula.
Kritik Fark: Bu çalışmanın 2026 güncelliğinde olduğunu ve 'Katz' ile 'K-Core' kombinasyonunu ilk kez bu derinlikte kullandığını belirt.

METODOLOJİ | Hipotez: Deterministik Risk

  • Web vs. Bağımlılık: Web'de linkler olasılıksaldır (PageRank). NPM'de bir bağımlılık fiziksel bir zorunluluktur (Deterministic Closure).
  • Katz Centrality: Tüm transitif yolları azalan bir faktörle $\alpha$ toplar.
Argüman: Bağımlılık installation işlemi 'Random Walk' olmadığı için, Katz, PageRank'ten daha iyi bir risk tahminleyicidir.
              graph LR
                subgraph "Olasılıksal (Web / PageRank)"
                  direction LR
                  P1["Node A"] -.->|P=0.85| P2["Node B"]
                  P1 -.->|P=0.15| P3["Random Jump"]
                end
                subgraph "Deterministik (NPM / Katz)"
                  direction LR
                  D1["Lib A"] ===>|"Zorunlu"| D2["Lib B"]
                  D2 ===>|"Zorunlu"| D3["App"]
                end
                style D1 fill:#dcfce7,stroke:#16a34a,stroke-width:3px
                style D2 fill:#dcfce7,stroke:#16a34a,stroke-width:3px
                style D3 fill:#dcfce7,stroke:#16a34a,stroke-width:3px
            
Şekil 2. Olasılıksal vs Deterministik Akış Karşılaştırması (Yöntem: Mermaid.js)
Ana Mesaj: Yazılım kurulumu bir tercih değil, topolojik bir zorunluluktur.
Sahne Notu: Katz algoritmasını neden seçtiğini savunduğun yer burası. "Web'de linke tıklamak kullanıcının keyfine bağlıdır (olasılıksal), ancak NPM'de bağımlılık fiziksel bir zorunluluktur. Bu yüzden PageRank yerine Katz kullanıyoruz" argümanını net bir dille ifade et.
Teorik Altyapı: 'Deterministic Closure' kavramının güvenlik taramalarında neden daha güvenilir bir temel oluşturduğunu açıkla.

METODOLOJİ | Veri Seti & Pipeline

  • Ham Veri: 3,804,448 Paket | 42,262,420 Bağımlılık.
  • İşlenmiş Veri: 2,760,982 Düğüm | 20,270,939 Kenar.
Donanım Altyapısı: Dual Xeon E5-2620 v3 (24 vCPU), 64GB DDR4 RAM, Samsung 970 EVO Plus NVMe.
            flowchart LR
                subgraph S1 ["1. Veri Edinimi
"] direction TB A["NPM Registry
CouchDB"] -->|"Changes API"| C["Nodes & Edges
(CSV)"] end subgraph S2 ["2. Ağ Analizi
"] direction TB D{"Graph
Construction"} -->|"graph-tool"| E["8-Metric Comparative
Analysis"] end subgraph S3 ["3. Simülasyon & Çıktı"] direction TB G["Complex Networks
Analysis"] --> I("network_stats.txt") I -.- H["Metric Comparison
Analysis"] --> J("npm_metrics.csv") end S1 --> S2 S2 --> S3 style A fill:#f8fafc,stroke:#334155 style E fill:#dcfce7,stroke:#16a34a
Şekil 3. Analiz Boru Hattı (Pipeline) Mimarisi (Yöntem: Mermaid.js)
Ana Mesaj: Analizin ölçeği ve metodolojik ciddiyeti.
Sahne Notu: "20 milyonun üzerinde kenarı (bağımlılığı) işlediğimiz bu analizde..." diyerek veri setinin büyüklüğünü hızlıca belirt ve metodolojinin güvenilirliğini hissettirip hemen bir sonraki slayta geç.
Teknik Not: Graph-tool kütüphanesinin C++ tabanlı hızını ve Dual Xeon altyapısının bu devasa grafı (2.7M düğüm) işleyebilmek için neden gerekli olduğunu kısaca ekleyebilirsin.

METODOLOJİ | Analiz Edilen Metrik Aileleri

Metrik Referans Güvenlik Açısından Açıklama
Katz Merkeziliği Katz (1953) Tüm transitif yolları hesaplar; ekosistem genelindeki tam derinlikli risk etkisini ölçer.
Eigenvector Bonacich (1987) Bir paketin önemini, bağlı olduğu diğer kritik paketlerin ağırlığına göre hesaplar.
Non-Backtracking Krzakala vd. (2013) Komşuluk tabanlı merkeziyet; yerel yapısal yoğunluğu ve bağımlılık odağını belirler.
CI (Collective Influence) Morone & Makse (2015) Ağı en verimli şekilde parçalamak (optimal dismantling) için gereken kilit düğümleri bulur.
Harmonic Centrality Marchiori & Latora (2001) Düğümler arası erişilebilirliği harmonik ortalama ile ölçer; uzak riskleri hassas modeller.
HITS (Hubs & Auth) Kleinberg (1999) Paketleri "sağlayıcı" (Authority) ve "tüketici" (Hub) rolleriyle çapraz analiz eder.
Betweenness Freeman (1977) Paketlerin ağdaki bilgi akışı üzerindeki köprüleme (chokepoint) gücünü ölçer.
PageRank Brin & Page (1998) Rastgele gezgin modeline göre popülarite ve olasılıksal risk yayılımını ölçer.
In-Degree Freeman (1979) Doğrudan bağımlı olan paket sayısı; anlık yerel etki gücünü gösterir.
Out-Degree Freeman (1979) Paketin dış bağımlılık sayısı; paketin dışa bağımlılık riskini ölçer.
Ana Mesaj: Çok yönlü ve karşılaştırmalı bir analiz yapıldı.
Sahne Notu: Tüm algoritmaları okumak dinleyiciyi sıkar. Sadece 1-2 tanesinden (örneğin Betweenness'ın köprüleri, In-Degree'nin yerel gücü ölçtüğünden) bahsedip, "10 farklı metriği güvenlik perspektifiyle çapraz teste tabi tuttuk" diyerek toparla.
Detay: CI (Collective Influence) metriğinin ağın dayanıklılığını ölçmedeki önemine değinerek, sadece popülerliğe değil, yapısal etkiye baktığını belirt.

METODOLOJİ | Katz Merkeziliği ve Karşılaştırma

Katz, ekosistemi 4 matematiksel aileden 10+ metrik ile çapraz analiz eder:

$$ C_{Katz}(i) = \sum_{k=1}^{\infty} \sum_{j=1}^{N} \alpha^k (A^k)_{ij} $$
  • Spektral Güç: Katz, yapısal derinliği PageRank'ten daha hassas modeller.
Metriklerin Hassasiyet ve Kapsayıcılık Karşılaştırması (Kütüphane: D3.js)
Ana Mesaj: Katz algoritmasının matematiksel üstünlüğü ve kapsayıcılığı.
Sahne Notu: Formülü matematiksel olarak uzun uzun okuma. α (alfa) parametresinin, derinlerden gelen tehlikeyi modele nasıl dahil ettiğini açıkla. Radar grafiğini işaret ederek Katz'ın spektral gücünün altını çiz.
Kritik Nokta: Katz'ın 'damping factor' yerine 'attenuation factor' kullanmasının NPM'deki zorunlu kurulum yapısına nasıl daha iyi uyduğunu vurgula.

BULGULAR | Makro Topoloji ve Sistemik Risk

  • Power-Law: $\alpha = 1.6442$ üsteliyle "Scale-Free" yapı (Barabasi & Albert, 1999).
  • Aşırı Yoğunlaşma: Gini Katsayısı = 0.984.
  • SPOF (Tekil Hata Noktası): 117,045 Articulation Point tespit edildi. Her 24 paketten 1'i mutlak SPOF'tur (Tarjan, 1972).
Derece Dağılımı
Şekil 4. Log-log Ölçeğinde Derece Dağılımı (Yöntem: Matplotlib & graph-tool)
Ana Mesaj: Ağın 'Scale-Free' doğası ve sistemik kırılganlığı.
Sahne Notu: Çarpıcı bir ses tonuyla 117.045 sayısına odaklan. "Ekosistemdeki her 24 paketten biri 'Single Point of Failure' yani tekil hata noktası. Bu, ağın ne kadar merkeziyetçi ve kırılgan olduğunun en net kanıtıdır" de.
Veri Yorumu: Gini katsayısının 0.984 olması, dijital dünyada gördüğümüz en adaletsiz dağılımlardan biridir. Bu, saldırganlar için hedef daraltmayı kolaylaştırıyor.

BULGULAR | Ekosistemin Bow-Tie Yapısı

  • SCC (Strongly Connected): Sadece 683 paket (%0.02).
  • IN / OUT Bileşenleri: %0.01 (IN) ve %0.10 (OUT).
  • Tendrils/Isolated: Ağın %99.87'si izole veya uç yapıdadır.
Analiz: NPM ekosistemi, "Bow-Tie" teorisindeki devasa bir çevresel sarmal (Tendrils) ve mikro bir çekirdek (Core) sergilemektedir.
Şekil 5. NPM Ekosistemi Bow-Tie Topolojisi (Kütüphane: D3.js)
Ana Mesaj: Dev ekosistemi ayakta tutan mikro bir çekirdek (SCC) var.
Sahne Notu: Bu slayt görsel olarak çok güçlü. %99.87'lik çevresel sarmala karşılık, tüm yükü çeken sadece 683 paketlik çekirdeği (Core) karşılaştır. "Saldırganlar artık kenarlarla uğraşmıyor, doğrudan bu 683 paketi hedef alıyor" diyerek tehdit vektörünü göster.
Strateji: Bow-tie yapısının 'IN' ve 'OUT' bileşenlerinin küçüklüğüne dikkat çekerek, her şeyin o merkez çekirdek üzerinden aktığını belirt.

BULGULAR | K-Core Analizi ve Risk Profili

  • Derinlikli Risk: Düğüm K-Core kabuğu arttıkça, Katz merkeziliği katlanarak artar.
  • Maksimum Çekirdek ($k=552$): Ağ ortalamasından 10 kat daha yüksek risk skoru.
Bulgu: K-Core katmanı arttıkça risk yoğunlaşması doğrusal olmayan şekilde artmaktadır.
K-Core
Şekil 6. K-Core Kabukları ve Risk Yoğunlaşması (Yöntem: Matplotlib & graph-tool)
Ana Mesaj: Ağın merkezine yaklaştıkça risk eksponansiyel olarak artar.
Sahne Notu: K-Core'u bir soğanın cücüğüne inmek gibi tasvir et. En içteki kabuğa ulaşıldığında Katz risk skorunun nasıl 10 katına fırladığını anlatarak yapısal analizin gücünü göster.
Analiz: Yüksek k-shell değerine sahip paketlerin sadece popüler değil, aynı zamanda yapısal olarak "vazgeçilemez" olduğunu vurgula.

BULGULAR | Ağ Çökertme Performansı

  • Dismantling: Ağın yapısal bütünlüğünü bozmak için gereken efor.
  • Sonuç: Katz stratejisi, rastgele silmeye göre ağ bütünlüğünü %85 daha hızlı bozar.
Ağ Çökertme
Şekil 7. Ağ Çökertme Simülasyonu (Yöntem: Matplotlib & graph-tool)
Ana Mesaj: Katz, saldırganlar için en verimli yıkım yol haritasıdır.
Sahne Notu: "Bir saldırgan ekosistemi en hızlı nasıl çökertebilir?" sorusunu sor. Rastgele silme ile Katz'a göre silme arasındaki devasa farkı (%85 daha hızlı çökme) grafikteki eğriler üzerinden göster.
Savunma Vizyonu: "Biz bu saldırgan yol haritasını, savunma ekiplerine 'nereyi korumalıyız' demek için kullanıyoruz" diyerek proaktif yaklaşımı belirt.

BULGULAR | Algoritma Bazlı "Top 10" Karşılaştırması

# Katz PageRank HITS CI Eigenvector Harmonic Betweenness NBC
1 react react react react react react react react
2 react-dom react-dom react-dom react-dom react-dom lodash lodash react-dom
3 lodash tslib lodash lodash lodash express express lodash
4 axios vue axios axios axios axios axios axios
5 chalk axios chalk chalk chalk chalk chalk chalk
6 tslib lodash tslib tslib vue commander commander tslib
7 vue inquirer vue vue express inquirer inquirer vue
8 commander chalk commander commander inquirer vue vue commander
9 inquirer typescript inquirer inquirer commander debug debug inquirer
10 express commander express express fs-extra glob glob express
Ana Mesaj: Zirve aynı kalsa da, derinlik analizi alt sıralardaki risk algısını değiştirir.
Sahne Notu: Sadece React'in her algoritmada zirvede olduğunu, ancak alt sıralara inildikçe algoritmaların paketin riskini farklı yorumladığını kısaca belirt.
Kıyas: PageRank'in bazen 'tslib' gibi paketleri daha önemli gördüğünü, oysa Katz'ın tüm zinciri hesaba katarak daha dengeli bir risk profili sunduğunu söyleyebilirsin.

BULGULAR | Enfeksiyon Yayılımı

  • SIR Modeli: Zafiyet yayılım hızı.
  • Vaka Doğrulama: left-pad (2016) olayı topolojik riski doğrular.
Zafiyet Yayılımı
Şekil 8. SIR Modeli ile Zafiyet Yayılımı (Yöntem: Matplotlib & graph-tool)
Ana Mesaj: Teorik risk, pratikte dakikalar içinde geniş kitlelere yayılır.
Sahne Notu: Sunumu gerçek dünyayla bağla. Meşhur left-pad olayını (2016'da 11 satırlık bir kodun silinmesinin internetin yarısını çökertmesi) hatırlatarak SIR modelinin sahadaki geçerliliğini ispatla.
Simülasyon: SIR modelindeki 'Infected' eğrisinin dikliğini, hub paketlerin zafiyet yayılımındaki katalizör etkisine bağla.

UYGULAMA | Pratik Triage Formülü

$$ Risk = Katz_{norm} \times CVSS $$
  • CVSS (0-10) × Katz Percentile (0-1)
  • Örnek: axios (Katz %95) + CVSS 8.0 = Risk 7.6

Triage Dashboard

2.50
STANDART
İnteraktif Triage Gösterge Paneli (Yöntem: Vanilla JavaScript & HTML)
Ana Mesaj: Akademik bulgular sahada eyleme (Triage) dönüşüyor.
Sahne Notu: Burası senin mavi takım uzmanlığının parlayacağı yer. Dashboard'u göstererek, "Sadece CVSS skoruna bakmak körlüktür. 8.0 CVSS'e sahip iki paketten hangisine önce yama yapmalıyız? İşte Katz Percentile ile bunu çarptığımızda, güvenlik ekiplerine gerçek bir operasyonel yön tayin ediyoruz" diyerek modelin katma değerini anlat.
Uygulama: Örnek ver: "Aynı zafiyete sahip iki paket düşünün; biri kenarda, diğeri omurgada. Bizim formülümüz omurgadakini 10 kat daha öncelikli hale getiriyor."

Sonuç | Sınırlar ve Gelecek Çalışmalar

Sınırlar

  • Temporal: Tek snapshot (2026).
  • Scope: devDependencies hariç.

Gelecek

  • GNN: Graf Sinir Ağları ile risk tahmini.
  • Real-time: Anlık Katz watchlist engine.
Ana Mesaj: Bilimsel dürüstlük ve gelecek vizyonu.
Sahne Notu: Modelin devDependencies kısmını dışarıda bıraktığını dürüstçe söyle. Gelecekte bunu gerçek zamanlı bir Graf Sinir Ağına (GNN) dönüştürme hedefini paylaşarak jüriye "bu işin arkası gelecek" mesajını ver.
Vizyon: "Bu statik bir tablo değil, yaşayan bir risk takip sisteminin ilk adımıdır" diyerek sunumu bir gelecek perspektifine oturt.

Sonuç ve Özet

STRATEJİK RİSK

117K+

Ekosistem genelinde tespit edilen kritik SPOF noktası.

ALGORİTMİK GÜÇ

Katz

Deterministik yapılarda PageRank'ten daha yüksek hassasiyet.

OPERASYONEL VERİM

O(k)

Ölçeklenebilir topolojik denetim ve gerçek zamanlı triage.

Teşekkür Ederim

Sorularınızı Bekliyorum

Yusuf Talha Arabacı • 2026

Ana Mesaj: Akılda kalıcı, güçlü bir kapanış.
Sahne Notu: Ekranda beliren 3 büyük veriyi (117K, Katz, O(k)) tane tane oku. "Bağımlılık yönetimi sadece 'npm update' yazmak değildir; bu bir topoloji ve risk yönetimi sanatıdır" diyerek güçlü bir cümleyle bitir ve teşekkür ederek soruları bekle.
Kapanış: Jürinin gözlerine bakarak sunumu sonlandır; konuya olan tutkunu ve teknik hakimiyetini hissettir.