HG PHP GüvenliğiEl Kitabı
Bölümler 30 / 38

İçindekiler/Altyapı Sertleştirme

Bölüm 30

Composer / Dependency & Supply Chain Security

15 dk okuma3.060 kelimePHP 8.1+
Ön koşul

Bölüm 1 (güven/en az yetki), Bölüm 11 (bağımlılıktan gelen gadget zincirleri), Bölüm 23 (JWT kütüphane CVE'leri), Bölüm 25 (Codecov sır hırsızlığı), Bölüm 29 (imaj tedarik zinciri). İleri referans: Bölüm 34 (backdoor).

Bu bölümün kazanımı

Modern bir PHP uygulamasının yüzlerce geçişli bağımlılığı sizin yetkinizle çalıştırdığını; tedarik zinciri saldırı türlerini (ele geçirilmiş upstream, typosquatting, bağımlılık karışıklığı, terk edilmiş paket); ve savunmaları (kilit dosyası + bütünlük, SCA, minimal bağımlılık, commit imzalama, izole CI) öğreneceksiniz. Bu, Kısım VI'yı (Altyapı ve Dağıtım Güvenliği) kapatan bölümdür.

1. Giriş

Hiçbir modern PHP uygulaması sıfırdan yazılmaz. Composer ile bir framework (Laravel/Symfony), bir HTTP istemcisi, bir JWT kütüphanesi (Bölüm 23), bir loglama aracı (Bölüm 31) ve onlarca başka paket eklersiniz — ve onların da bağımlılıkları vardır. Sonuçta uygulamanız, çoğunu hiç incelemediğiniz yüzlerce geçişli (transitive) bağımlılığın kodunu, sizin uygulamanızın yetkisiyle çalıştırır. Bu bağımlılıkların her biri, saldırganın uygulamanıza girmek için kullanabileceği bir yoldur.

Tedarik zinciri saldırısı tam bu gerçeği hedefler: saldırgan sizi doğrudan hacklemek yerine, güvendiğiniz bir upstream bileşeni (bir paket, onun bakımcısı, deposu veya derleme sistemi) ele geçirir; kötü kod oradan tüm downstream kullanıcılara — yani size — akar. Tek bir çekirdek bileşeni ele geçirmek, ona bağımlı binlerce sistemi etkiler.

Bunun en çarpıcı örneği, PHP'nin kendisinin başına geldi: Mart 2021'de saldırganlar, PHP'nin kendi git sunucusunu (git.php.net) ele geçirip php-src kaynak koduna bir backdoor eklediler (Bölüm 11). PHP web'in ~%80'ini çalıştırdığından, bu backdoor yayınlansaydı milyonlarca sitede kimlik-doğrulamasız RCE mümkün olacaktı. Kod, rutin bir commit incelemesiyle ~2 saat içinde yakalanıp geri alındı. Bu vaka, tedarik zincirinin en üst kaynağının bile hedef olduğunu ve savunmanın (inceleme, imzalama, izole altyapı) neden kritik olduğunu gösterir.

Bu bölüm, Composer bağımlılıklarınızı ve tedarik zincirinizi güvence altına almayı ele alır ve Kısım VI'yı kapatır.


2. Temel Teori

Bağımlılık gerçeği. composer install çalıştırdığınızda, doğrudan eklediğiniz paketlerin yanında onların geçişli bağımlılıkları da gelir — genelde yüzlerce paket. Bu kodun tamamı, uygulamanızın süreç yetkisiyle (DB erişimi, dosya sistemi, ağ, sırlar) çalışır. Bir bağımlılıktaki kötü kod = uygulamanızda kötü kod. Güven sınırı (Bölüm 1) buraya kadar genişler.

Tedarik zinciri saldırı türleri:

Tür Nasıl çalışır
Ele geçirilmiş upstream Paket/depo/bakımcı/derleme ele geçirilir (PHP git 2021, XZ 2024, event-stream)
Typosquatting Popüler pakete benzer isimli kötü paket (gu**zle** → gu**zzle**)
Bağımlılık karışıklığı (dependency confusion) İç paket adı, public'te kötü bir paketle çözülür
Terk edilmiş paket Bakımı bırakılmış, bilinen açıklı paket
Bakımcı/hesap devri Bakımcının hesabı ele geçirilip kötü sürüm yayınlanır

Composer'a özgü kavramlar: - composer.lock: Tüm bağımlılıkların tam sürümlerini ve bütünlük hash'lerini sabitler. Commit edilmeli; composer install bu kilit dosyasından tekrarlanabilir ve doğrulanmış kurulum yapar. composer update ise sürümleri yükseltir (dikkatle). - Sürüm kısıtları (composer.json): ^1.2 gibi esnek kısıtlar kolaylık sağlar ama beklenmedik sürüm sıçramalarına açar; kritik bağımlılıklarda daha sıkı kısıtlar/inceleme. - composer audit: Bağımlılıkları Packagist güvenlik danışmalarına (bilinen açıklar) karşı kontrol eder. - Packagist: Composer'ın merkezî paket deposu.

Savunmalar (özet): 1. Bağımlılığı minimize et — her paket bir saldırı yüzeyidir (PHP git dersi: az sayıda güvenilir bileşen). 2. Kilit dosyası + bütünlükcomposer.lock commit'li; tekrarlanabilir, doğrulanmış kurulum. 3. SCA (Software Composition Analysis)composer audit, Dependabot, Snyk; bilinen-açıklı bağımlılıkları yakala. 4. Güncellemeleri incele — büyük bağımlılıkları körü körüne güncelleme; changelog/diff incele. 5. Sürümleri/digest'leri sabitle — beklenmedik sıçramaları önle. 6. Kaynağı doğrula — güvenilir registry, HTTPS, imza. 7. Commit imzalama — yazarlık sahteciliğine karşı (PHP git dersi). 8. İzole CI — derleme ortamı sızıntısını önle (Codecov dersi, Bölüm 25). 9. SBOM (Software Bill of Materials) — neyin kullanıldığını envanterle.


3. Mimarisel Bakış

 TEDARİK ZİNCİRİ SALDIRISI (PHP git kalıbı):
   Saldırgan → upstream'i ele geçir (git sunucusu / bakımcı / derleme)
        ↓  kötü kod eklenir (backdoor / magic-string RCE)
   Paket/kaynak yayınlanır → composer install / güncelleme
        ↓  kötü kod TÜM downstream'e akar (sizin yetkinizle çalışır)
   → uygulamanızda backdoor (Bölüm 34)

 SAVUNMA:
   [ Minimize et ] → az bağımlılık = az yüzey
   [ composer.lock commit ] → tekrarlanabilir + bütünlük hash'i
   [ composer audit / SCA ] → bilinen açıkları yakala
   [ güncellemeyi incele ] → changelog/diff (magic constant = kırmızı bayrak)
   [ commit imzalama ] → yazarlık sahteciliğini engelle (PHP git dersi)
   [ izole CI ] → derleme sırrı sızıntısını engelle (Codecov)
   [ SBOM ] → envanter + izleme

 GÜVEN SINIRI:
   Uygulamanız ── genişler ──> tüm geçişli bağımlılıklar (yüzlerce)
        her biri sizin yetkinizle çalışır (Bölüm 1)

Kritik gözlem: bağımlılıklar güven sınırınızı yüzlerce üçüncü tarafa genişletir; savunma bu yüzeyi küçültmek, doğrulamak ve izlemektir.


4. Güvensiz Kod

Gerçekçi (güvensiz) bağımlılık yönetimi:

// ⚠️ GÜVENSİZ composer.json / iş akışı
{
  "require": {
    "some/http-client": "*",           // her sürüm (kontrolsüz sıçrama)
    "random/unmaintained-lib": "^1.0", // terk edilmiş, bilinen açıklı
    "gu zzle/guzzle": "^7.0"           // typosquat riski (yanlış isim)
  }
}
# ⚠️ GÜVENSİZ dağıtım
# composer.lock commit EDİLMEMİŞ → herkes farklı/en son sürüm çeker
composer update      # üretimde körü körüne en son sürüme yükselt
# composer audit hiç çalıştırılmıyor
# SCA / Dependabot yok; güncellemeler incelenmiyor
# CI, üretim sırlarına tam erişimli (Codecov riski, Bölüm 25)

5. Açığın Analizi

"*" / esnek ^ kısıtlar*, herhangi bir sürümü kabul eder; ^ majör içinde her şeye izin verir. Bakımcı hesabı ele geçirilip kötü bir yeni sürüm yayınlanırsa, composer update onu otomatik çeker. Kritik bağımlılıklarda sürümler sabitlenmeli/incelenmeli.

Terk edilmiş / typosquat paket — Bakımı bırakılmış bir paket, bilinen açıklar taşır ve yamalanmaz. Yanlış yazılmış bir paket adı (gu zzle), saldırganın kaydettiği kötü bir typosquat pakete işaret edebilir. Kaynak ve isim doğrulanmalı.

composer.lock commit edilmemiş — Kilit dosyası olmadan, her ortam (geliştirici, CI, üretim) farklı sürümler çekebilir; kurulum tekrarlanabilir ve doğrulanabilir değildir. Bütünlük hash'leri devrede olmaz. Kilit dosyası commit edilmeli.

composer update (üretimde körü körüne) — Üretimde update, tüm bağımlılıkları en son sürüme yükseltir — incelenmemiş, potansiyel olarak kötü/kırık kod dahil. Üretimde composer install (kilit dosyasından) kullanılmalı; update incelenerek yapılmalı.

SCA/audit yok — Bilinen-açıklı bağımlılıklar (Bölüm 11 gadget zincirleri, Bölüm 23 JWT CVE'leri) tespit edilmez. composer audit + Dependabot/Snyk gerekir.

CI üretim sırlarına tam erişimli — Codecov (Bölüm 25) dersi: ele geçirilmiş bir derleme aracı/CI, ortam değişkenlerindeki sırları sızdırır. CI izole ve en az yetkili olmalı.

Kök sorun: bağımlılıklar sabitlenmemiş/doğrulanmamış/incelenmemiş, tarama yok ve CI aşırı yetkili. Çözüm: minimize + kilitle + tara + incele + izole et.


6. Hacker Bakış Açısı

Saldırgan tedarik zincirini nasıl hedefler?

Yüksek-etkili upstream seçer. Çok sayıda downstream'e sahip bir paketi/kaynağı hedefler — çünkü tek bir ele geçirme, ona bağlı binlerce sistemi etkiler (PHP git: web'in %80'i). "Blast radius" maksimize edilir.

Ele geçirme yolu arar. Bakımcının hesabını (zayıf parola/kimlik avı), paket deposunu, veya derleme/CI sistemini hedefler. XZ Utils (2024) vakasında saldırgan, aylarca güven inşa edip bakımcı konumu elde ederek backdoor'u ekledi — sosyal mühendisliğin en sofistike örneği.

Kötü kodu gizler. Backdoor'u masum görünen bir commit'e ("Fix Typo") gizler (PHP git); magic-string tetikleyiciler (zerodium gibi) kullanır ki normal kullanımda görünmesin. Yazarlık sahteciliği (Git'te commit'i başkası adına imzalama) ile meşru görünür.

Typosquatting/confusion dener. Popüler bir paket adına benzer kötü bir paket yayınlar; ya da bir kuruluşun iç paket adını public'te kaydedip bağımlılık karışıklığı (dependency confusion) ile çekilmesini sağlar.

Terk edilmiş paketleri devralır. Bakımı bırakılmış ama hâlâ yaygın kullanılan bir paketi devralıp (bakımcıdan izinle veya hesap devriyle) kötü sürüm yayınlar (event-stream kalıbı).

Derleme sırlarını çalar. Ele geçirdiği bir CI aracıyla (Codecov, Bölüm 25) ortam değişkenlerindeki sırları sızdırır.

Savunmacı dersi: Saldırgan için tedarik zinciri, "tek ele geçirme, çok kurban" veren en verimli yoldur. Savunma yüzeyi küçültmeli (az bağımlılık), doğrulamalı (kilit/imza), taramalı (SCA) ve incelemeli (güncellemeler) — çünkü kod incelemesi PHP git backdoor'unu 2 saatte yakaladı.


7. Exploit Mantığı

Bu bölüm çalıştırılabilir saldırı içermez. Tedarik zinciri saldırılarının neden bu kadar yıkıcı olduğu kavramsaldır:

  • Tek ele geçirme, çok kurban. Bir upstream bileşeni ele geçirmek, ona bağlı tüm sistemleri etkiler. PHP git backdoor'u yayınlansaydı, web'in %80'inde RCE mümkün olacaktı — asimetrik, devasa etki.
  • Güven kötüye kullanımı. Bağımlılıklar güvenle çalıştırılır (kimse yüzlerce paketi denetlemez). Saldırgan bu güveni istismar eder; kötü kod, meşru bir güncelleme gibi görünerek uygulamanızın kalbine yerleşir.
  • Gizlenebilirlik. Magic-string tetikleyiciler (zerodium), masum commit mesajları ("Fix Typo") ve yazarlık sahteciliği, backdoor'u normal incelemeden gizler. Yine de dikkatli kod incelemesi yakalayabilir (PHP git: 2 saat).
  • Aşağı akış zincirlemesi. Bir bağımlılık açığı, sonraki bölümlerin açıklarını taşır: deserialization gadget'ları (Bölüm 11), JWT kütüphane CVE'leri (Bölüm 23), ve doğrudan backdoor (Bölüm 34).

Araştırmacının çerçevesi: (a) kaç bağımlılık ve hangileri güvenilir, (b) sabitlenmiş/doğrulanmış mı (kilit/imza), (c) bilinen açık taranıyor mu (SCA), (d) güncellemeler inceleniyor mu, (e) CI izole/en-az-yetkili mi. Savunma yüzeyi küçültür, doğrular, tarar, inceler, izole eder.


8. Güvenli Kod

Güvenli bağımlılık yönetimi ve iş akışı:

// ✅ GÜVENLİ composer.json
{
  "require": {
    "guzzlehttp/guzzle": "^7.8.1",     // doğru isim, makul kısıt
    "firebase/php-jwt": "^6.10"        // güncel, bakımlı (Bölüm 23)
  },
  "config": {
    "audit": { "abandoned": "report" } // terk edilmiş paketleri raporla
  }
}
# ✅ GÜVENLİ iş akışı
# 1) composer.lock COMMIT edilir → tekrarlanabilir + bütünlük hash'i
git add composer.json composer.lock

# 2) Üretimde install (update DEĞİL) → kilit dosyasından, doğrulanmış
composer install --no-dev --optimize-autoloader

# 3) Bilinen açık taraması (CI'da)
composer audit                         # Packagist güvenlik danışmaları

# 4) Güncellemeler İNCELENEREK yapılır
composer update guzzlehttp/guzzle      # tek paket; changelog/diff incele
# (körü körüne 'composer update' değil)

# 5) SCA otomasyonu: Dependabot/Snyk → yeni açık/sürümde PR + uyarı
# 6) İzole, en-az-yetkili CI (üretim sırlarına gereksiz erişim yok — Bölüm 25)
# 7) Commit imzalama (yazarlık sahteciliğine karşı — PHP git dersi)
git config commit.gpgsign true

Öne çıkan modern pratikler: - Bağımlılığı minimize et: Her paket bir yüzeydir; gereksizleri kaldır (PHP git dersi — az güvenilir bileşen). - composer.lock commit + install (üretimde update değil): Tekrarlanabilir, bütünlük-doğrulanmış kurulum. - composer audit + SCA (Dependabot/Snyk): Bilinen-açıklı ve terk edilmiş bağımlılıkları yakala (Bölüm 11, 23). - Güncellemeleri incele: Büyük bağımlılıkları körü körüne güncelleme; changelog/diff bak (magic constant/eval/gizli tetikleyici = kırmızı bayrak). - Doğru isim + kaynak + sürüm sabitleme: Typosquat/confusion'a karşı; güvenilir registry, HTTPS. - Commit imzalama (GPG/Sigstore): Yazarlık sahteciliğini engelle (PHP git dersi). - İzole, en-az-yetkili CI (Bölüm 25): Derleme sırrı sızıntısını (Codecov) önle. - SBOM: Neyin kullanıldığını envanterle; açık çıktığında hızlı yanıt. - İmaj tedarik zinciriyle birlikte (Bölüm 29): Taban imajı + bağımlılıkları birlikte tara.


9. Patch Analizi

Neden işe yarar? Bağımlılığı minimize etmek saldırı yüzeyini küçültür. composer.lock + install, tekrarlanabilir ve bütünlük-doğrulanmış kurulum sağlar (beklenmedik/kötü sürüm sıçramasını önler). composer audit + SCA, bilinen açıkları (Bölüm 11 gadget'ları, Bölüm 23 JWT CVE'leri) yakalar. Güncelleme incelemesi, gizli backdoor'ları (PHP git'i 2 saatte yakalayan aynı disiplin) tespit eder. Commit imzalama yazarlık sahteciliğini, izole CI ise derleme sırrı sızıntısını (Codecov) kapatır. Bunlar birlikte, güven sınırının yüzlerce üçüncü tarafa genişlemesinin (Bölüm 1) riskini yönetir.

Savunma haritası:

Saldırı türü Onu azaltan savunma
Ele geçirilmiş upstream İnceleme + commit imzalama + minimize
Bilinen-açıklı bağımlılık composer audit + SCA
Kontrolsüz sürüm sıçraması composer.lock + install + sabit kısıt
Typosquatting/confusion İsim/kaynak doğrulama + private registry
Terk edilmiş paket audit abandoned + bakımlı alternatif
Derleme sırrı hırsızlığı İzole, en-az-yetkili CI (Bölüm 25)

Neden inceleme kritik: PHP git backdoor'u, otomatik araçlar değil insan kod incelemesi yakaladı (2 saat). Magic constant'lar (zerodium), eval/zend_eval_string, ve gizli tetikleyiciler, incelemede kırmızı bayraklardır. SCA otomasyonu bilinen açıkları yakalar; inceleme yeni/gizli kötü kodu yakalar — ikisi birlikte gerekir.

Performans: composer.lock'tan install daha hızlıdır (çözümleme yok). audit/SCA CI'da çalışır; çalışma-zamanı etkisi yoktur. Güvenlik kazancı çok büyüktür.


10. Gerçek Hayat Senaryosu

Kurgu — orta ölçekli bir SaaS. Ekip, composer.lock'ı commit etmiyor ve dağıtımda composer update kullanıyor; SCA yok. Yaygın kullandıkları küçük bir yardımcı paketin bakımcı hesabı ele geçiriliyor ve kötü bir yeni sürüm (ortam değişkenlerindeki sırları dışarı sızdıran kod) yayınlanıyor. Bir sonraki dağıtımda composer update bu sürümü otomatik çekiyor; uygulama, saldırganın koduyla birlikte üretime çıkıyor ve DB/API sırları (Bölüm 25) sızıyor. Doğru iş akışıyla: composer.lock commit'li + install (yeni sürüm otomatik gelmez) + composer audit/SCA (kötü/açıklı sürümü işaretler) + güncelleme incelemesi → saldırı yakalanır. Dersler: (1) kilit dosyası + install, kontrolsüz sürüm sıçramasını önler; (2) SCA bilinen kötü sürümleri yakalar; (3) güncellemeler incelenmeli — bağımlılıklar sizin yetkinizle çalışır.


11. Gerçek Vaka Analizi — PHP Git Sunucusu Ele Geçirilmesi (2021)

Nikita Popov'un resmî duyurusu, BleepingComputer/The Register/ESET ve PHP 8.1.0-dev backdoor analizleriyle doğrulanmıştır. Silahlaştırılmış payload verilmez.

Özet. 28 Mart 2021'de saldırganlar, PHP'nin kendi barındırdığı git sunucusuna (git.php.net) iki kötü niyetli commit göndererek php-src kaynak koduna bir backdoor eklediler. Commit'ler, PHP'nin yaratıcısı Rasmus Lerdorf ve bakımcı Nikita Popov adına sahte olarak imzalanmış ve masum görünmesi için "Fix Typo" (yazım düzeltmesi) olarak etiketlenmişti. Backdoor, ilk commit'ten ~2 saat sonra rutin commit-sonrası kod incelemesinde (Markus Staab, Michael Voříšek, Jake Birchall) fark edilip geri alındı. PHP, olayın git.php.net sunucusunun ele geçirilmesinden (bireysel hesap değil) kaynaklandığı sonucuna vardı ve git altyapısını kapatıp kanonik depoyu GitHub'a taşıdı.

Teknik neden — backdoor ve yazarlık sahteciliği. Eklenen kod, zend_eval_string kullanarak bir magic-string tetikleyicili backdoor kuruyordu: bir HTTP isteğinin User-Agentt başlığı zerodium ile başlıyorsa, başlıktaki PHP kodu çalıştırılıyordu — yani kimlik-doğrulamasız RCE / gizli bir web shell (Bölüm 34). Kodda "REMOVETHIS: sold to zerodium, mid 2017" yorumu vardı (zafiyet alıcısı Zerodium'un olayla bağlantısına dair bir kanıt yoktur). İki mekanizma bu vakayı öğretici kılar: 1. Yazarlık sahteciliği. Git, bir commit'i yerel olarak herhangi birinin adına imzalamaya (sign-off) ve uzak sunucuya öyle yüklemeye izin verir. Bu yüzden Lerdorf/Popov adına görünen commit'ler, onların hesaplarının ele geçirildiği anlamına gelmiyordu — commit imzalama (kriptografik) olmadan yazarlık güvenilmezdir. 2. Magic constant / gizli tetikleyici. zerodium gibi hardcoded bir sabit, backdoor'u normal kullanımda gizler; bu tür sabitler kod incelemesinde yüksek-risk işaretidir.

Etki (potansiyel). PHP web'in ~%80'ini (tüm WordPress dahil) çalıştırdığından, backdoor yayınlanmış olsaydı milyonlarca sitede uzaktan devralma mümkün olacaktı. Asıl kurtarıcı, insan kod incelemesiydi — otomatik bir araç değil, dikkatli gözler backdoor'u 2 saatte yakaladı.

Modern akrabalar (bağlam). Aynı sınıf başka vakalarda görüldü: XZ Utils (2024, CVE-2024-3094) — bir saldırganın aylarca güven inşa edip bakımcı olarak bir sıkıştırma kütüphanesine sofistike bir SSH backdoor'u yerleştirmesi; event-stream (2018) — popüler bir npm paketine kötü bağımlılık eklenmesi; Codecov (2021) — ele geçirilmiş bir CI aracının ortam değişkenlerindeki sırları sızdırması (Bölüm 25). Hepsi "upstream'i ele geçir, downstream'e ulaş" kalıbıdır.

Çıkarılacak dersler: 1. Kod incelemesi tedarik zinciri savunmasının kalbidir. PHP git backdoor'unu insan incelemesi yakaladı; magic constant/eval/gizli tetikleyiciler kırmızı bayraktır. 2. Commit imzalama şart. Git yazarlığı sahtelenebilir; kriptografik imzalama gerçek kaynağı doğrular. 3. Güvenilir, sertleştirilmiş altyapı. PHP, "kendi git altyapısını yönetmenin gereksiz bir güvenlik riski olduğunu" söyleyip GitHub'a taşındı. 4. Bağımlılıkları minimize et ve izle. Az sayıda güvenilir bileşen + SCA + SBOM, blast radius'ü küçültür.


12. Detection

Bağımlılık incelemede:

composer audit                          # bilinen açıklar (Packagist danışmaları)
composer show --latest                  # eski/terk edilmiş paketler
composer show --tree                    # geçişli bağımlılık ağacı (yüzey)
git ls-files | grep composer.lock       # kilit dosyası commit'li mi?
grep -rn 'composer update' .github/ deploy/  # üretimde update mi?

Kontroller: composer.lock commit'li mi? audit çalışıyor mu? SCA/Dependabot var mı? Terk edilmiş/açıklı paket var mı? Üretimde installupdate mi?

SCA (Software Composition Analysis): composer audit, GitHub Dependabot, Snyk, OWASP Dependency-Check — bilinen-açıklı ve terk edilmiş bağımlılıkları sürekli izler; yeni açıkta uyarır/PR açar.

Kod incelemesi (kritik): Yeni/güncellenen bağımlılıklarda magic constant, eval/zend_eval_string, gizli tetikleyici (User-Agentt/başlık tabanlı), beklenmedik ağ çağrısı, obfuscation. PHP git'i yakalayan disiplin budur.

SBOM + izleme: Kullanılan tüm bileşenlerin envanteri; yeni bir CVE çıktığında etkilenip etkilenmediğinizi hızla belirleme.

Runtime/SIEM: Bir bağımlılık backdoor'u aktifse — beklenmedik giden bağlantılar, magic-string tetikleyicili istekler (zerodium gibi), web sürecinden anormal davranış (Bölüm 34). Backdoor'lar genelde bir tetikleyici + gizli kanal içerir.


13. Prevention

  • Minimize et: Az sayıda, güvenilir, bakımlı bağımlılık (PHP git dersi).
  • composer.lock commit + üretimde install: Tekrarlanabilir, bütünlük-doğrulanmış.
  • composer audit + SCA (Dependabot/Snyk): Bilinen-açıklı/terk edilmiş bağımlılıkları yakala (Bölüm 11, 23).
  • Güncellemeleri incele: Changelog/diff; magic constant/eval/gizli tetikleyici = kırmızı bayrak.
  • İsim/kaynak/sürüm doğrula: Typosquat/confusion'a karşı; güvenilir registry, sabit kısıtlar.
  • Commit imzalama (GPG/Sigstore): Yazarlık sahteciliğine karşı.
  • İzole, en-az-yetkili CI (Bölüm 25): Derleme sırrı sızıntısını (Codecov) önle.
  • SBOM + sürekli izleme: Envanter + hızlı yanıt.

14. Mitigation

  • Acil (kötü bağımlılık tespitinde): Etkilenen paketi kaldır/geri al; composer.lock'ı temiz sürüme sabitle; sızmış olabilecek sırları döndür (Bölüm 25); backdoor aktif olduysa web shell/kalıcılık tara (Bölüm 34).
  • Geçici: SCA ile tüm projeleri aynı bağımlılık için tara; SBOM'dan etki kapsamını belirle; giden bağlantıları/anomalileri incele.
  • Kalıcı: composer.lock+install+audit+SCA'yı CI'a zorunlu kıl; güncelleme inceleme sürecini kur; commit imzalama + izole CI; SBOM üret ve izle; bağımlılıkları düzenli minimize et.

15. Checklist

  • [ ] composer.lock commit edilmiş ve üretimde composer install (update değil) mi kullanılıyor?
  • [ ] composer audit + SCA (Dependabot/Snyk) CI'da çalışıyor mu?
  • [ ] Terk edilmiş/bilinen-açıklı bağımlılık var mı (Bölüm 11, 23)?
  • [ ] Bağımlılık sayısı minimize edilmiş mi (gereksizler kaldırıldı mı)?
  • [ ] Sürüm kısıtları makul ve isimler doğru mu (typosquat/confusion yok)?
  • [ ] Bağımlılık güncellemeleri inceleniyor mu (changelog/diff, magic constant kontrolü)?
  • [ ] Commit imzalama etkin mi (yazarlık sahteciliğine karşı)?
  • [ ] CI izole ve en-az-yetkili mi (derleme sırrı sızıntısı yok — Bölüm 25)?
  • [ ] SBOM üretiliyor ve açıklar için izleniyor mu?

16. Laboratuvar

Lab 30.1 — composer audit. İzole bir projede bilinen-açıklı bir paket sürümü kur; composer audit ile yakala. Güvenli sürüme güncelleyip temizle.

Lab 30.2 — Kilit dosyası. composer.lock ile install ve composer update farkını gözlemle; kilit dosyasının nasıl tekrarlanabilir kurulum sağladığını gör.

Lab 30.3 — Backdoor tespiti (kod incelemesi). Bir "bağımlılık güncellemesi" diff'ine gizli bir magic-string tetikleyici (eval + başlık) yerleştir; kod incelemesinde bunu bir kırmızı bayrak olarak tanı (PHP git dersi).

Lab 30.4 — SBOM. Bir projenin bağımlılık ağacını (composer show --tree) çıkar; bir SBOM üret ve varsayımsal bir CVE için etkilenip etkilenmediğini belirle.


17. Quiz

  1. "Bağımlılık gerçeği" nedir? Geçişli bağımlılıklar hangi yetkiyle çalışır?
  2. Tedarik zinciri saldırısı neden "tek ele geçirme, çok kurban" verir?
  3. Beş tedarik zinciri saldırı türünü sayın.
  4. composer.lock ne sağlar ve neden commit edilmelidir?
  5. Üretimde neden composer install (update değil) kullanılır?
  6. composer audit ve SCA (Dependabot) ne yapar?
  7. Güncellemeleri incelemek neden kritiktir? PHP git backdoor'unu ne yakaladı?
  8. Git'te yazarlık neden sahtelenebilir? Commit imzalama bunu nasıl çözer?
  9. PHP git backdoor'unun tetikleyicisi (User-Agentt: zerodium) nasıl çalışıyordu (Bölüm 34)?
  10. XZ Utils (2024) ve event-stream (2018) hangi ortak kalıbı paylaşır?
  11. Codecov (2021) tedarik zinciri saldırısı sırları nasıl sızdırdı (Bölüm 25)?
  12. Neden hem SCA (otomatik) hem kod incelemesi (insan) gerekir?

18. Kaynakça

  • OWASP, Top 10:2021 A06 Vulnerable and Outdated Components; Dependency Check; CycloneDX (SBOM); Software Component Verification Standard.
  • MITRE, CWE-1104 (Unmaintained Third Party Components); CWE-506 (Embedded Malicious Code).
  • Nikita Popov, Changes to Git commit workflow (PHP git incident duyurusu); BleepingComputer/The Register/ESET, PHP git 2021 analizleri; PHP 8.1.0-dev backdoor incelemeleri.
  • MITRE / NVD, CVE-2024-3094 (XZ Utils); event-stream (2018) ve Codecov (2021) tedarik zinciri raporları.
  • Composer dokümantasyonu (composer.lock, composer audit, install vs update); Packagist güvenlik danışmaları; Sigstore/GPG commit imzalama.