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
Ş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).
Ş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.
Ş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.
Ş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ı
| # |
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.
Ş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
İ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.