Giriş
PyPI (Python Package Index), Python geliştiricilerinin projelerinde kullanmak üzere binlerce açık kaynaklı paketi barındıran merkezi bir depodur. Son dönemde, PyPI'de yer alan 19 bilim odaklı paketin hacklenmesiyle gerçekleşen Shai-Hulud adlı yeni bir tedarik zinciri saldırısı tespit edilmiştir. Bu saldırıda, geliştirici gizli bilgilerini (örneğin API anahtarları, şifreler, SSH anahtarları) çalmak amacıyla tasarlanmış bir malware dağıtılmıştır. Saldırıya uğrayan paketler, toplamda yüz binlerce kez indirilmiş olup, bu durumun ciddiyetini artırmaktadır.
Saldırı Mekanizması ve Etkileri
Saldırının Detayları
Shai-Hulud saldırısında, saldırganlar PyPI'deki paketleri trojanize etmiştir. Bu, paketlerin orijinal koduna zararlı komutlar enjekte edilmesi anlamına gelir. Saldırganlar, paketlerin indirilme sayısını artırmak için bilimsel araştırma ve veri analizi gibi popüler konulara odaklanmışlardır. Paketler, geliştiricilerin projelerinde kullanmaya başladıkları anda arka planda çalışan malware, geliştiricilerin yerel sistemlerindeki gizli bilgileri çalmaya başlamaktadır.
Etkilenen Paketler ve Dağıtım
Saldırıya uğrayan 19 paketin isimleri ve versiyonları aşağıda listelenmiştir:
cryptostats, fastai, pydub, sympy, pyautogui, pyfiglet, pytube, pywhatkit, python-nmap, pythonping, requests, rich, seaborn, sympy, thefuck, tldextract, tqdm, yfinance, zipp
Bu paketler, PyPI'ye yüklenerek ve ardından geliştiriciler tarafından indirilerek dağıtılmıştır. Saldırganlar, paketlerin orijinal geliştiricilerinin adlarını ve profillerini taklit ederek güvenilirliğini artırmıştır.
Tehdit Aktörü ve Motivasyon
Shai-Hulud adı, Frank Herbert'in Dune serisindeki devasa kurtçuklara atıfta bulunmaktadır. Bu isimlendirme, saldırının gizlilik ve yıkıcılık boyutunu vurgulamaktadır. Saldırganların motivasyonu büyük olasılıkla finansal kazanç ve gizli bilgilerin çalınması olarak değerlendirilmektedir. Elde edilen bilgiler, saldırganlar tarafından kara borsada satılabilir veya gelecekteki saldırılarda kullanılabilir.
Saldırıdan Korunma ve Müdahale Adımları
1. Paketlerin Kontrolü ve Doğrulanması
-
Paketlerin kaynağını doğrulayın: PyPI'deki bir paketi indirmeden önce, geliştiricinin resmi hesaplarını ve paketin SHA-256 hash değerini kontrol edin. Resmi PyPI sayfasında yer alan bilgilerle karşılaştırın.
pip install == --dry-runNot:
--dry-runkomutu, paketin indirilmesini gerçekleştirmeden sadece kurulumunu simüle eder. -
Paket içeriğini inceleyin: Paketlerin kaynak kodunu yerel olarak inceleyin ve şüpheli komutlar (örneğin,
os.system,subprocess,requestskullanımları) olup olmadığını kontrol edin. Özelliklesetup.pyve__init__.pydosyalarına dikkat edin.# Paketi indirin ve içeriğini inceleyin pip download == --no-deps unzip -.zip cd - ls -la -
Bağımlılıkları kontrol edin: Paketin bağımlılıklarını inceleyin ve bilinmeyen veya güvenilmeyen paketlerin olup olmadığını kontrol edin. Bu, saldırının yayılmasını önlemek için önemlidir.
pip show
2. Geliştirme Ortamının Güvenliği
-
Sanal ortam kullanın: Geliştirme projeleriniz için sanal ortamlar kullanın. Bu, paketlerin sistem genelinde etkileşime girmesini engeller.
# Sanal ortam oluşturun ve aktifleştirin python -m venv myenv source myenv/bin/activate # Linux/macOS myenv\Scripts\activate # Windows -
Gizli bilgileri koruyun: API anahtarları, şifreler ve SSH anahtarları gibi gizli bilgileri ortam değişkenlerinde saklayın ve kodunuza doğrudan eklemeyin. Ortam değişkenlerini kullanmak, bu bilgilerin sızdırılmasını önler.
# .env dosyası oluşturun ve gizli bilgileri ekleyin echo "API_KEY=12345" > .env # .env dosyasını .gitignore'a ekleyin echo ".env" >> .gitignoreUyarı:
.envdosyasını asla GitHub gibi platformlara yüklemeyin. -
İzinsiz değişiklikleri izleyin: Geliştirme ortamınızda dosya bütünlüğü araçları kullanın. Örneğin,
pip-auditaracıyla paketlerin güvenlik açıklarını taramak mümkündür.pip install pip-audit pip-audit
3. Saldırı Tespiti ve Müdahale
-
Sistem aktivitesini izleyin: Anormal aktiviteleri tespit etmek için güvenlik araçları kullanın. Örneğin,
sysdigveyafalcogibi araçlarla sistem çağrılarını izleyin.# sysdig kurulumu ve kullanımı sudo apt-get install sysdig sysdig -c topfiles_bytes -
Gizli bilgilerin sızdırılmasını engelleyin: Geliştiricilerin yerel sistemlerinde bulunan gizli bilgilerin çalınmasını önlemek için güvenlik duvarları ve erişim kontrolleri uygulayın.
# UFW (Uncomplicated Firewall) kullanımı sudo ufw enable sudo ufw allow from to any port 22 sudo ufw deny all -
Paketleri PyPI'den kaldırın: PyPI yöneticileri, saldırıya uğrayan paketleri ivedilikle kaldırmıştır. Ancak, geliştiricilerin de yerel sistemlerinde bulunan bu paketleri tamamen kaldırmaları gerekmektedir.
# Paketi sistemden kaldırın pip uninstall
İpuçları ve En İyi Uygulamalar
Paket seçiminde dikkatli olun: PyPI'deki paketleri indirmeden önce, geliştiricinin geçmişini ve güvenilirliğini araştırın. Paketin son güncelleme tarihini ve indirme sayısını kontrol edin.
Çok faktörlü kimlik doğrulama kullanın: PyPI ve diğer geliştirme platformlarında çok faktörlü kimlik doğrulama (MFA) kullanın. Bu, hesapların yetkisiz erişimlere karşı korunmasına yardımcı olur.
Güvenlik açıklarını takip edin: Python paketlerinde bulunan güvenlik açıklarını CVE veritabanı ve PyPI güvenlik uyarıları aracılığıyla takip edin. Güvenlik açıkları tespit edildiğinde, ilgili paketleri ivedilikle güncelleyin.
Sonuç
Shai-Hulud saldırısı, PyPI'deki paketlerin güvenilirliğinin ne kadar önemli olduğunu bir kez daha gözler önüne sermiştir. Geliştiriciler, paketleri indirmeden önce kaynaklarını doğrulamalı, geliştirme ortamlarını güvenli hale getirmeli ve gizli bilgilerini korumalıdır. Bu saldırıdan ders çıkararak, gelecekte benzer saldırıların önüne geçmek mümkündür. PyPI ve diğer açık kaynaklı platformlar, güvenliklerini artırmak için sürekli olarak çalışmaktadır, ancak geliştiricilerin de sorumluluk alması gerekmektedir.



