Sorun: Tedarik Zinciri Saldırıları ve Bağımlılık Yönetimi
Tedarik zinciri saldırıları, yazılım geliştiricilerin kullandıkları üçüncü parti kütüphane ve bağımlılıkların manipüle edilmesiyle gerçekleşen sofistike saldırı türleridir. Bu saldırılar, geliştiricilerin güvenini kazanarak kodlarına kötü amaçlı içerikler eklemelerini sağlar. PyPI (Python Package Index) ve GitHub gibi platformlarda barındırılan paketler, bu saldırıların hedefi olmaktadır. Örneğin, 2022 yılında PyPI'deki bir paketin kötü amaçlı kod içermesi nedeniyle yüz binlerce geliştirici etkilenmiştir.
Bağımlılık yönetimi araçları, bu saldırılara karşı savunmasız kalabilmektedir. Örneğin, Dependabot gibi popüler araçlar, otomatik olarak güncellemeleri kontrol ederken saldırganların paketlere kötü amaçlı kod enjekte etmesine olanak tanıyabilir. Bu durum, geliştiricilerin farkında olmadan saldırıya uğramasına yol açmaktadır.
Çözüm: Zaman Tabanlı Savunmalar ve Dependabot Entegrasyonu
GitHub ve PyPI, tedarik zinciri saldırılarını önlemek ve etkilerini sınırlamak için zaman tabanlı savunmalar adı verilen yeni bir mekanizma geliştirdi. Bu mekanizma, bağımlılıkların yayınlanma zamanına dayalı olarak güvenlik kontrolleri uygular. Temel olarak, aşağıdaki adımlar izlenerek saldırılar engellenmeye çalışılır:
1. Zaman Tabanlı Kontrollerin Aktif Edilmesi
Dependabot'un yeni versiyonunda, geliştiriciler aşağıdaki adımları izleyerek zaman tabanlı savunmaları aktif hale getirebilir:
-
Dependabot yapılandırma dosyasının güncellenmesi: Projenizin kök dizininde bulunan
dependabot.ymldosyasına aşağıdaki satırları ekleyin:version: 2 updates: - package-ecosystem: "pip" directory: "/" schedule: interval: "daily" time-based-controls: enabled: true delay: 7delay parametresi, bağımlılık güncellemelerinin yayınlanması ile Dependabot tarafından uygulanması arasındaki gecikme süresini (gün cinsinden) belirtir. Bu süre, saldırganların kötü amaçlı kodlarını tespit etme ve müdahale etme şansını artırır.
-
PyPI'de zaman tabanlı yayınlama: PyPI, paket yayınlama işlemlerine zaman tabanlı kontroller eklemiştir. Paket yayınlayan geliştiriciler, aşağıdaki komutla yayınlama işlemini geciktirebilir:
twine upload --delay 7 dist/*Bu komut, paketin PyPI'ye yayınlanmasını 7 gün geciktirir ve bağımlılık yönetim araçlarının güncellemeleri kontrol etmesine olanak tanır.
-
Güvenlik açıklarının otomatik taranması: GitHub, Dependabot'un yeni versiyonunda otomatik güvenlik taramalarını etkinleştirmiştir. Bu taramalar, yayınlanan paketlerdeki güvenlik açıklarını otomatik olarak tespit eder ve geliştiricileri uyarır. Aşağıdaki komutla bu özelliği etkinleştirebilirsiniz:
gh security code-scanning enable --repo OWNER/REPO
2. Zaman Tabanlı Savunmaların Avantajları
Zaman tabanlı savunmaların sağladığı başlıca avantajlar şunlardır:
- Saldırganlara karşı savunma süresi: Gecikme süresi, saldırganların kötü amaçlı kodlarını tespit etme ve müdahale etme şansını artırır. Örneğin, 7 günlük bir gecikme, güvenlik ekiplerinin saldırıyı tespit etmesine ve paketi incelemesine olanak tanır.
- Otomatik güvenlik kontrolleri: Dependabot, yayınlanan bağımlılıkları otomatik olarak tarar ve güvenlik açıklarını tespit eder. Bu, geliştiricilerin manuel olarak kontroller yapma yükünü azaltır.
- Topluluk ve geliştirici güvenliğinin artırılması: Zaman tabanlı savunmalar, PyPI ve GitHub gibi platformlardaki tüm geliştiricilerin güvenliğini artırır. Saldırganların hedefi olabilecek paketlerin yayınlanma süresi geciktirilerek, topluluk güvenliği güçlendirilir.
3. Uygulama Örnekleri ve En İyi Uygulamalar
Aşağıda, zaman tabanlı savunmaların uygulama örnekleri ve en iyi uygulamaları yer almaktadır:
Örnek 1: PyPI Paketi Yayınlama ve Geciktirme
Uyarı: PyPI'ye paket yayınlarken, zaman tabanlı gecikmeyi uygulamak için
twinearacını kullanın. Bu, paketinizin kötü amaçlı kod içermesi durumunda, bağımlılık yönetim araçlarının saldırıyı tespit etmesine olanak tanır.
# 1. Paketi oluşturun ve dağıtım dosyalarını oluşturun
python setup.py sdist bdist_wheel
# 2. Paketi PyPI'ye yayınlayın ve 7 gün geciktirin
twine upload --delay 7 dist/*
# 3. Yayınlama işlemini doğrulayın
twine check dist/*
Örnek 2: GitHub Depo Güvenlik Ayarlarının Yapılandırılması
İpucu: GitHub depolarında, Dependabot'un zaman tabanlı savunmalarını etkinleştirmek için
dependabot.ymldosyasını kullanın. Ayrıca, güvenlik taramalarını otomatik olarak çalıştırmak içingh security code-scanningkomutunu kullanabilirsiniz.
# 1. dependabot.yml dosyasını proje kök dizinine ekleyin
version: 2
updates:
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "daily"
time-based-controls:
enabled: true
delay: 7
# 2. GitHub CLI kullanarak güvenlik taramalarını etkinleştirin
gh security code-scanning enable --repo OWNER/REPO
# 3. Güvenlik taramalarını manuel olarak çalıştırın
gh security code-scanning run --repo OWNER/REPO
Sonuç: Tedarik Zinciri Saldırılarından Korunma Stratejisi
GitHub ve PyPI tarafından sunulan zaman tabanlı savunmalar, tedarik zinciri saldırılarını önlemek ve etkilerini sınırlamak için etkili bir strateji sunmaktadır. Bu savunmalar, geliştiricilerin ve toplulukların güvenliğini artırırken, saldırganların hedefi olabilecek paketlerin tespit edilmesine olanak tanır. Zaman tabanlı gecikmeler ve otomatik güvenlik kontrolleri, bağımlılık yönetimi araçlarının saldırılara karşı daha dirençli hale gelmesini sağlar.
Geliştiricilerin, bu savunmaları aktif hale getirmesi ve bağımlılık yönetimi süreçlerinde zaman tabanlı kontrolleri uygulaması, tedarik zinciri saldırılarına karşı daha güvenli bir yazılım geliştirme ortamı oluşturacaktır.
Sıkça Sorulan Sorular (SSS)
Zaman tabanlı savunmalar ne kadar güvenlidir?
Zaman tabanlı savunmalar, saldırganların kötü amaçlı kodlarını tespit etme ve müdahale etme şansını artırır. Ancak, bu savunmaların %100 güvenli olmadığını unutmamak gerekir. Geliştiricilerin, bağımlılıklarını düzenli olarak kontrol etmeleri ve güvenlik açıklarını takip etmeleri önemlidir.
Zaman tabanlı gecikme süresi ne kadar olmalıdır?
Gecikme süresi, projenizin gereksinimlerine bağlı olarak değişebilir. Genel olarak, 3 ila 14 gün arasında bir gecikme süresi önerilir. Daha kısa süreler, saldırganların hedefi olma riskini artırabilirken, daha uzun süreler geliştiricilerin bağımlılıklarını güncelleme sürecini yavaşlatabilir.
Zaman tabanlı savunmalar hangi bağımlılık yönetim araçlarıyla uyumludur?
Zaman tabanlı savunmalar, şu anda Dependabot ve PyPI ile uyumludur. Diğer bağımlılık yönetim araçları için benzer kontrollerin uygulanması mümkündür, ancak bu araçların destekleyip desteklemediğini kontrol etmek gerekir.



