12 puan yazan darjeeling 2026-03-13 | Henüz yorum yok. | WhatsApp'ta paylaş

Temel özet
Python paket ekosistemini hedef alan tedarik zinciri saldırılarına karşı, tek bir kontrole dayanmayan çok katmanlı bir savunma stratejisi gerekir. Metin; Ruff'un S (Bandit) kurallarını kullanarak statik zafiyetleri engellemeyi, uv ile kriptografik hash tabanlı bağımlılık sabitlemeyi ve CI ortamında pip-audit ile SBOM (CycloneDX) üretimini öneriyor. Paket dağıtımı sırasında uzun ömürlü API token'ları yerine OIDC tabanlı Trusted Publishing'in benimsenmesi, ayrıca yeni paketlerin sisteme alınmasını kasıtlı olarak geciktirerek (Delayed Ingestion) kötü amaçlı paketler için topluluğun doğrulama yapmasına zaman tanıyan pratik bir pipeline sunuluyor.

Derinlemesine analiz

  • Tedarik zinciri saldırı vektörleri ve transitif bağımlılıklar (Transitive Dependency): Bugün PyPI'de 740 binden fazla paket bulunuyor ve ctx alan adı ele geçirilmesi, Ultralytics (YOLO) CI script injection, GhostAction token hırsızlığı gibi büyük güvenlik olayları sürmeye devam ediyor. Tek bir paketin (ör. Flask) kurulması bile çok sayıda transitif bağımlılığı (ör. MarkupSafe vb.) beraberinde getirir; bu yüzden geliştiricinin açıkça tanımlamadığı paketler bile devasa bir saldırı yüzeyinin (Attack Surface) parçası haline gelir.
  • Kendi kodunuzdaki zafiyetleri önceden engelleme: Harici paketlerden önce, iç koddaki kusurların önlenmesi gerekir. Hardcoded secret'lar, zayıf hash algoritmaları (MD5, SHA1), timeout tanımlanmamış ağ istekleri (DoS'a yol açabilir), güvensiz serileştirme (pickle) gibi sorunlar kod incelemesinde kolayca gözden kaçabilir. Bunu önlemek için Ruff'un Bandit güvenlik kurallarını CI/CD pipeline'ına ve IDE'ye bağlayarak otomatik tespit ve engelleme sağlamak kritik önemdedir.
  • Bağımlılık sabitleme ve gecikmeli alım (Delayed Ingestion): Bağımlılık kurulurken yalnızca sürümü belirtmek yetmez; çalışma zamanında değiştirilme veya kurcalamayı önlemek için paketin kriptografik hash'i de sabitlenmelidir. Ayrıca yeni yayımlanmış kötü amaçlı paketler engellenene kadar oluşan riski azaltmak için uv içindeki --exclude-newer bayrağını kullanmak veya kurum içi mirror deposunda "7 günlük ingestion queue" tutarak yalnızca topluluk tarafından ilk doğrulamadan geçen paketlerin iç ağa alınmasını sağlamak etkili bir stratejidir.
  • Güvenli paket dağıtımı: Açık kaynak maintainer'ları ve paket yayımlayıcıları, ele geçirilme riski sürekli bulunan statik API token'larını bırakıp Sigstore kullanan OIDC (OpenID Connect) tabanlı Trusted Publishing'e geçmelidir. Böylece kaynak repo ile bağlantıyı kriptografik olarak kanıtlayan attestation otomatik olarak üretilir.

Başlıca kod ve veriler

1. Transitif bağımlılıkları kontrol etme

# Tek bir paket (Flask) kurulurken gelen görünmeyen bağımlılık ağacını kontrol et  
uv pip install flask  
uv pip tree  
  
# Output:  
flask v3.1.0  
├── blinker v1.9.0  
├── click v8.1.8  
├── itsdangerous v2.2.0  
├── jinja2 v3.1.5  
│   └── markupsafe v3.0.2  
└── werkzeug v3.1.3  
    └── markupsafe v3.0.2  
  
2. Ruff ile güvenlik kural seti (Bandit) uygulama  
# `pyproject.toml` yapılandırma örneği  
[tool.ruff]  
line-length = 120  
# E(Error), F(Pyflakes) ile birlikte S(Bandit güvenlik kuralları) etkinleştirilir  
lint.select = ["E", "F", "S"]  
  
# Ruff 'S' kural setinin otomatik olarak işaretlediği tipik zafiyet örnekleri  
# FLAGGED: S301 - `pickle.loads()` rastgele kod çalıştırma riski taşır (`json.loads()` önerilir)  
import pickle  
data = pickle.loads(untrusted_input)  
  
# FLAGGED: S608 - string formatting üzerinden SQL injection zafiyeti  
cursor.execute(f"SELECT * FROM users WHERE name = '{user_input}'")  
  
# FLAGGED: S113 - timeout tanımlanmamış harici istek (sonsuz bekleme ve DoS saldırılarına açıklık)  
import requests  
response = requests.get("[https://api.example.com/data](https://api.example.com/data)")  
  
3. Gecikmeli alım (Delayed Ingestion) ile yeni paketleri kontrol etme  
# Yalnızca belirli bir tarihten önce (ör. 7 gün önce) yayımlanmış paketleri bağımlılık olarak derleyerek ilk dönem kötü amaçlı yazılım/hata riskini azaltma  
uv pip compile --exclude-newer 2026-03-02 requirements.in -o requirements.txt  
  
4. Kurum içi ingestion control pipeline'ı  
| İşlem aşaması | Sistem bileşeni | Güvenlik amacı ve açıklama |  
|---|---|---|  
| Giriş | PyPI ➜ Ingestion Queue | PyPI'ye eklenen yeni paketler kurum içi sisteme hemen dağıtılmak yerine kuyruğa alınır |  
| Bekleme | Wait (örn. 7 gün) | Topluluğun ve güvenlik araştırmacılarının paketin kötü amaçlı olup olmadığını ve zafiyetlerini analiz etmesi için mutlak zaman tanınır |  
| Doğrulama | Security Scan ➜ Approved | Bekleme süresi bittikten sonra yalnızca bilinen zafiyet (CVE) ve malware taramasını geçen paketler onaylanır |  
| Dağıtım | Internal Mirror ➜ Developers | Yalnızca doğrulaması tamamlanan paketler iç mirror deposunda cache'lenir ve geliştirme ekiplerinin güvenle kullanmasına izin verilir |

Henüz yorum yok.

Henüz yorum yok.