Bağımlılık Güvenliği ve Yazılım Bileşimi Analizi
Üçüncü taraf kütüphaneleri SCA araçlarıyla denetleyin, bağımlılık sürümlerini sabitleyin ve otomatik güvenlik açığı uyarılarını CI/CD işlem hattına entegre edin.
Bağımlılık Güvenliği ve Yazılım Bileşimi Analizi, CoddyKit'te ücretsiz bir Cloud & IT Cert Prep dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Cloud & IT Cert Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Cloud & IT Cert Prep kursu toplamda 4 dersten oluşur.
The Open Source Dependency Riski
Modern uygulamalar büyük ölçüde üçüncü taraf açık kaynak kitaplıkları ve çatıları üzerine kuruludur. Tipik bir Node.js uygulamasında 1.000'den fazla geçişli dependencies bulunabilir; bir Java projesi yüzlerce Maven yapıtını içeri alabilir. Her bağımlılık potansiyel bir saldırı yüzeyidir. Log4j kitaplığındaki Log4Shell güvenlik açığı (CVE-2021-44228), tek bir bağımlılığın açıklanmasından sonraki birkaç gün içinde dünya çapında milyonlarca uygulamayı hemen istismar edilebilir hâle getirebileceğini gösterdi.
Yazılım Bileşimi Analizi Nedir?
Software Composition Analysis (SCA) araçları, bir uygulamadaki tüm açık kaynak bileşenlerini ( transitive dependencies dahil) otomatik olarak envanterler ve bunları bilinen CVE'ler açısından sürekli olarak güvenlik açığı veritabanlarına karşı denetler. SCA, her bileşeni ve sürümünü listeleyen bir Software Bill of Materials (SBOM) oluşturur; yeni güvenlik açıkları açıklandığında etkilenen sistemlerin hızla belirlenmesini sağlar.
# SCA tool usage examples:
# npm audit (Node.js):
# npm audit
# -> Reports vulnerabilities in package.json dependencies
# -> Shows severity, CVE ID, affected package, fix version
# OWASP Dependency-Check (Java/Python/etc.):
# dependency-check --project 'MyApp' --scan ./lib/
# -> Generates HTML/XML report with CVE findings
# Snyk scan:
# snyk test
# -> Reports vulns + 'snyk fix' applies patches automaticallyTransitive Dependencies: Gizli Risk
Transitive dependencies, doğrudan bağımlılıklarınızın bağlı olduğu ve sizin açıkça seçmediğiniz kitaplıklardır. Package A'ya doğrudan bağımlı olabilirsiniz; Package A, Package B'ye (1.2 sürümü), Package B de Package C'ye (3.0 sürümü; güvenlik açığı bulunan sürüm) bağlı olabilir. Package C'nin farkında değilsinizdir, ancak uygulamanız onu çalıştırır. SCA araçları, geliştiricilerin doğrudan görünürlüğüne sahip olmadığı bu gizli güvenlik açıklarını ortaya çıkarmak için bağımlılık ağacının tamamını tarar.
# Dependency tree example:
# Your package.json:
# 'express': '^4.18.0' (direct dependency)
# 'lodash': '^4.17.21' (direct dependency)
# Transitive dependencies (you didn't choose these):
# express -> 'qs' 6.11.0 (URL parsing)
# express -> 'body-parser' 1.20 -> 'qs' 6.11.0
# lodash (self-contained in this case)
# If 'qs' 6.10.x had a prototype pollution CVE,
# you are vulnerable via express even though
# you never directly imported 'qs'.The Software Bill of Materials (SBOM)
Software Bill of Materials (SBOM), bir yazılım ürünündeki tüm bileşenlerin resmî ve makineler tarafından okunabilir envanteridir; gıda içerik listesine benzer. SBOM biçimleri arasında SPDX (Linux Foundation) ve CycloneDX (OWASP) bulunur. US Executive Order 14028 (2021), federal hükümete satılan yazılımlar için SBOM'ları zorunlu kıldı. Bir SBOM sayesinde güvenlik ekipleri hemen “ürünlerimizden hangisinde Log4j var?” sorusunu sorabilir ve günler süren manuel arama yerine dakikalar içinde yanıt alabilir.
# Generate SBOM with syft:
# syft packages . -o spdx-json > sbom.spdx.json
# SBOM content example (SPDX JSON):
# {
# 'packages': [
# { 'name': 'express', 'version': '4.18.2', 'license': 'MIT' },
# { 'name': 'lodash', 'version': '4.17.21','license': 'MIT' },
# { 'name': 'log4j-core','version': '2.14.0','license': 'Apache-2.0'}
# ]
# }
# When Log4Shell announced, query SBOM:
# grep -i 'log4j-core' sbom.spdx.json -> FOUND in 3 projectsBağımlılık Sürümlerini Sabitleme ve Kilit Dosyaları
Bağımlılık sürümlerini sabitleme, esnek aralıklar (^1.2.3 veya *) yerine bağımlılıkların tam sürümlerini belirtir. Kilit dosyaları (package-lock.json, yarn.lock, Pipfile.lock, Gemfile.lock), yükleme sırasında her bağımlılığın çözümlenen tam sürümünü kaydeder. Her ekip üyesinin ve CI/CD işlem hattının aynı bağımlılık sürümlerini kullanmasını sağlamak ve yüklemeler arasında paket sürümlerini zehirleyen tedarik zinciri saldırılarını önlemek için bunlar kaynak denetimine commit edilmelidir.
# Version range vs pinned versions:
# FLEXIBLE (can pull different versions each install):
# 'express': '^4.0.0' -> installs latest 4.x.x
# 'lodash': '*' -> installs any version!
# PINNED (always same version):
# 'express': '4.18.2' -> always exactly 4.18.2
# Lock file (package-lock.json):
# Records EXACT resolved version of every transitive dep.
# Commit this file! It ensures reproducible builds.
# Never .gitignore lock files (security anti-pattern).Tedarik Zinciri Saldırıları: Typosquatting ve Dependency Confusion
Tedarik zinciri saldırıları bağımlılık ekosistemini hedef alır. Typosquatting, geliştiricilerin adı yanlış yazmasını umarak popüler paketlere benzer adlara sahip kötü amaçlı paketler yayımlamayı içerir (örneğin lodash yerine lodahs). Dependency confusion attacks, paket yöneticilerinin kayıt defterlerinde arama yapma sırasından yararlanır: saldırgan, dahili özel bir paketle aynı ada ancak daha yüksek sürüm numarasına sahip kötü amaçlı bir paket yayımlar ve paket yöneticisinin bunun yerine kötü amaçlı herkese açık sürümü yüklemesine neden olur.
# Dependency Confusion Attack (Alex Birsan 2021):
# Company uses internal package 'company-utils' v1.0.0
# Hosted on: internal.registry.company.com
# Attacker publishes 'company-utils' v9.9.9 to npmjs.com
# (public registry with higher version number)
# npm install resolves: 'find highest version across ALL registries'
# -> Installs v9.9.9 from public npm (attacker's malicious package!)
# -> Instead of v1.0.0 from internal registry
# Defense: use namespace scoping (@company/utils)
# or configure npm to ONLY use internal registry for private packagesPiyasadaki SCA Araçları
Sektörde yaygın olarak kullanılan birçok SCA aracı vardır. Snyk, otomatik düzeltme PR'larıyla geliştirici dostu bağımlılık taraması sağlar. OWASP Dependency-Check, Java, .NET, Python ve Ruby için ücretsiz ve yaygın olarak benimsenen bir araçtır. GitHub Dependabot, GitHub depolarındaki güvenlik açığı bulunan bağımlılıkları güncellemek için otomatik olarak çekme istekleri açar. JFrog Xray ve Sonatype Nexus IQ, güvenlik açığı bulunan derlemelerin üretime ulaşmasını engellemek için SCA'yı yapıt depolarına entegre eder.
SCA'yı CI/CD İşlem Hatlarına Entegre Etme
SCA, CI/CD işlem hattında bir kalite kapısı olarak entegre edildiğinde en etkilidir. Her çekme isteğinde ve derlemede işlem hattı SCA aracını çalıştırır ve bağımlılıklarda kritik veya yüksek önem dereceli CVE'ler bulunursa derlemeyi başarısız kılar. Bu “sola kaydırma” yaklaşımı, güvenlik açığı bulunan bağımlılıkları üretime ulaşmadan önce yakalar; manuel bir güvenlik incelemesi sırasında veya bir ihlalden aylar sonra değil. Ekipler, dağıtımı engelleyen güvenlik açığı önem eşikleriyle yalnızca uyarı oluşturan eşikleri açıkça tanımlamalıdır.
# GitHub Actions SCA pipeline step:
# - name: Run Snyk SCA scan
# uses: snyk/actions/node@master
# env:
# SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
# with:
# args: --severity-threshold=high
# --fail-on=upgradable
# # Build fails if any HIGH or CRITICAL vuln found
# # that has an available fix (--fail-on=upgradable)
# # No fix available? Generates warning, doesn't block
# # (acknowledging risk explicitly is better than blocking forever)Açık Kaynak Paketlerinin Sağlığını Değerlendirme
Bir bağımlılık eklemeden önce güvenlik durumunu birden fazla gösterge kullanarak değerlendirin. Bakım etkinliği: proje etkin olarak bakımlı mı? Son commit ve sürüm ne zaman yayımlandı? Bilinen güvenlik açığı geçmişi: kaç CVE yaşadı ve bunlar ne kadar hızlı düzeltildi? İndirme hacmi: yaygın kullanılan paketler daha fazla güvenlik incelemesi çeker. Bağımlılık sayısı: daha az bağımlılığı olan paketler daha düşük geçişli risk oluşturur. OpenSSF Scorecard, açık kaynak projelerinin güvenlik uygulamalarına otomatik puanlama sağlar.
Güvenlik Açıklarını Giderme Stratejileri
SCA, güvenlik açığı bulunan bir bağımlılık belirlediğinde çeşitli giderme stratejileri uygulanabilir. Kullanılabilir olduğunda tercih edilen seçenek olan yamalı bir sürüme yükseltin. Yükseltme hazırlanırken bilinen istismar yollarını azaltmak için WAF kurallarıyla sanal yama uygulama kullanın. Artık gerekmiyorsa bağımlılığı kaldırın. Güvenlik açığı belirli kullanım bağlamında istismar edilemiyorsa (örneğin istemci tarafı bir kitaplıktaki sunucu tarafı güvenlik açığı) gerekçeyi belgeleyerek riski kabul edin. Belgelenmiş kabul olmadan kritik güvenlik açıklarını asla giderilmeden bırakmayın.
Bağımlılıklarda Lisans Uyumluluğu
SCA araçları iki amaca hizmet eder: güvenlik açıklarını belirlemenin yanı sıra açık kaynak dependencies içindeki lisans uyumluluğu sorunlarını da işaretler. Yaygın sorunlu lisanslar arasında GPL v2/v3 (copyleft; ürünü dağıtıyorsanız ürününüzün de açık kaynak olarak sunulmasını gerektirir), AGPL (GPL'yi ağ hizmetlerine genişletir) ve SSPL bulunur. Tescilli ticari yazılımda GPL lisanslı bir kitaplığı ticari lisans olmadan kullanmak ciddi hukuki sorumluluk oluşturabilir. FOSSA, Black Duck ve WhiteSource gibi SCA araçları, açık kaynak yükümlülüklerine uyumu sağlamak için güvenlik açığı algılamanın yanı sıra lisans taramasını da otomatikleştirir.
# License compliance risk levels:
# PERMISSIVE (low risk for commercial use):
# MIT, Apache 2.0, BSD 2/3-Clause
# -> Can use in proprietary code, just keep attribution
# WEAK COPYLEFT (medium risk - check usage):
# LGPL -> can link dynamically without open-sourcing your code
# MPL 2.0 -> modifications to MPL files must be open-sourced
# STRONG COPYLEFT (high risk for proprietary products):
# GPL v2, GPL v3 -> if you distribute code using GPL library,
# your entire product must also be GPL
# AGPL -> extends GPL to SaaS/network services
# SCA policy: block AGPL/GPL in commercial product
# -> Review any exception requests manuallyHızlı Kontrol
Bu dersteki CompTIA Security+ (SY0-701) kavramlarını anlayıp anlamadığınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: SCA araçları, transitive dependencies dahil olmak üzere bağımlılık ağacının tamamını bilinen CVE'ler açısından tarar; SBOM'lar, yeni güvenlik açıkları açıklandığında hızlı müdahaleyi mümkün kılan makineler tarafından okunabilir bir envanter sağlar; ayrıca SCA'nın CI/CD kalite kapısı olarak entegre edilmesi, güvenlik açığı bulunan bağımlılıkları üretime ulaşmadan önce yakalar. Sırada DevSecOps'u ve güvenlik denetimlerinin tam CI/CD işlem hattına sola nasıl kaydırılacağını inceleyeceğiz.
Sıkça Sorulan Sorular
“Bağımlılık Güvenliği ve Yazılım Bileşimi Analizi” dersi ücretsiz mi?
Evet — “Bağımlılık Güvenliği ve Yazılım Bileşimi Analizi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Cloud & IT Cert Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Cloud & IT Cert Prep kursu toplamda 4 dersten oluşur.
“Bağımlılık Güvenliği ve Yazılım Bileşimi Analizi” dersinde ne öğreneceğim?
Üçüncü taraf kütüphaneleri SCA araçlarıyla denetleyin, bağımlılık sürümlerini sabitleyin ve otomatik güvenlik açığı uyarılarını CI/CD işlem hattına entegre edin. Cloud & IT Cert Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Cloud & IT Cert Prep öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Cloud & IT Cert Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Bağımlılık Güvenliği ve Yazılım Bileşimi Analizi” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Cloud & IT Cert Prep dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Cloud & IT Cert Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Girdi Doğrulama ve Çıktı Kodlama
- Güvenli Gizli Bilgi Yönetimi ve Ortam Değişkenleri
- Bağımlılık Güvenliği ve Yazılım Bileşimi Analizi
- DevSecOps: Güvenliği İşlem Hatlarına Sola Kaydırma