İçeriğe geç
edumintsBlog
Yapay Zekâ4 dk okuma

Hugging Face'te Model Güvenliği: Model Yüklediğinizde Ne Çalışır?

Kaynak: dev.to

Paylaş
İçindekiler 3 başlık

Yerel yapay zeka modelleri, modelinizin nerede çalışacağı konusunda size tam kontrol sağlar. Ancak model güvenliği, yükleyicinizin (loader) bu süreçte arka planda neleri çalıştırdığına da doğrudan bağlıdır. Araştırmacılar, ters kabuk (reverse-shell) zararlı yükleri içeren Hugging Face model paketlerini belgelemiştir; güvensiz bir yükleme yolu, bu zararlı koda Python sürecinizle aynı erişim yetkilerini verebilir. Yazılım geliştiriciler için bu durum, bir modeli projeye dahil etmenin sadece veri okumak değil, potansiyel olarak üçüncü taraf bir kodu sistemde çalıştırmak anlamına geldiğini gösterir.

Özet (TL;DR)#

  • Model ağırlıkları ve ek dosyalar: Model ağırlıkları öğrenilmiş sayısal verilerdir, ancak bir model deposu yapılandırma dosyaları, çalıştırılabilir serileştirme (serialization) verileri ve Python dosyaları da taşıyabilir.
  • Zararlı yük örnekleri: JFrog'un "Goober Two" örneği ve ReversingLabs'in "nullifAI" örnekleri ters kabuk (reverse-shell) yükleri içeriyordu; ancak seçilen raporlar gerçek kurbanlardan kimlik bilgisi çalındığını doğrulamamaktadır.
  • Yol çözümleme ve uzaktan kod çalıştırma: Ayrı bir Checkmarx araştırma demosu, eksik bir yerel model yolunun genel bir depoya nasıl yönelebileceğini ve uzaktan koda güvenmenin (remote-code trust) kodun çalışması için ne kadar kritik bir ön koşul olduğunu göstermiştir.
  • Savunma katmanları: Safetensors, güncel yamalı yükleyiciler, incelenmiş revizyonlar (commit/versiyon sabitleme) ve ortam izolasyonu, yükleme yolunun farklı güvenlik açıklarını kapatır.
  • Hasar kontrolü: Yükleyici içinde çalışan bir kodun ne kadar zarar verebileceğini, erişilebilir durumdaki gizli anahtarlar (secrets) ve mevcut ağ erişimi belirler.

Model Güvenliği İlk Yanıttan Önce Başlar#

Hugging Face; makine öğrenimi modellerini, veri kümelerini ve uygulamaları paylaşmak için kullanılan temel bir platformdur. Bir model deposu kullanışlı bir dağıtım birimidir: ağırlıkları, bunları yorumlamak için gereken yapılandırmayı ve özel mimariler için uygulama kodunu içerebilir. Ancak bu içeriklerin yüklenme davranışları farklı olduğu için geliştiricilerin her birini ayrı bir güvenlik gözüyle değerlendirmesi gerekir:

  • Ağırlıklar (Weights): Öğrenilmiş sayılardır; bir tensör veri okuyucusu yalnızca bunların şekillerini ve değerlerini yorumlar.
  • Python nesne serileştirmesi: Nesnelerin nasıl yeniden oluşturulacağını, fonksiyon çağrıları da dahil olmak üzere tanımlayabilir.
  • Depo Python kodu: Uygulamanız izin verdiğinde (örneğin trust_remote_code=True kullanımıyla) yeni bir yürütme yolu açar.

Tüm bu dosyaları tek bir "model" başlığı altında toplamak kurulumu kolaylaştırsa da güven sınırını (trust boundary) gözden kaçırmayı kolaylaştırır. Hugging Face'in Pickle Tarama belgeleri temel uyarıyı açıkça belirtir: "Bir pickle dosyasını yüklediğinizde gerçekleştirilebilecek tehlikeli rastgele kod yürütme (arbitrary code execution) saldırıları vardır." Buradaki kritik eylem yüklemektir (load). Baytları diske kaydetmek ile bu baytları güvensiz bir seri çözme (deserialization) aracına teslim etmek tamamen farklı işlemlerdir.

Tartışılan olaylarda, dosyadaki talimatlar yalnızca bir yükleme yolu onları takip ettiğinde tehlikeli hale gelir ve bu durum henüz model çıkarımı (inference) bile başlamadan gerçekleşebilir. Kötü amaçlı bir paketin, çevredeki yazılım zaten kendi kodunun çalışmasına izin veriyorsa, modeli yanıtlarında bir şey ifşa etmeye ikna etmesine gerek yoktur. Geliştirme sürecinde pratik bir kural olarak, modeli test etmeye başlamadan önce yükleme aşamasındaki kod yürütme risklerini ortadan kaldırmak şarttır.

MODÜL: AI Tedarik Zinciri Güvenliği

Pickle Güvenliği: Paketi Açmak#

Pickle, Python nesnelerini yeniden oluşturulmaları için gereken talimatlarla birlikte depolar. Seri çözme (deserialization) işlemi bu talimatları sırayla okur. Güvensiz bir yükleyici, yeniden oluşturma sırasında fonksiyonları çözümleyip çağırabilir; bu da güvenilmeyen bir dosyanın ana bilgisayar süreci (host process) üzerinde doğrudan etki sahibi olmasına yol açar.

Paketi bir kargo kolisi, yükleyiciyi ise o koliyi açan kişi olarak düşünün. Modeli indirmek koliyi rafa koyar; yüklemek ise içindeki montaj talimatlarını harfiyen uygular. Eğer bu talimatlar rastgele fonksiyonları çağırabiliyorsa, yapılan işlem veri okumaktan çıkıp yayıncının tercihlerini sisteminizde çalıştırmaya dönüşür.

Bu noktada kullanılan tam yükleme API'si, kütüphane sürümü ve ayarlar büyük önem taşır. Güvensiz bir yükleme yolu hakkındaki güvenlik tespiti her model yükleyicisine genellenemez. Modern kısıtlı yükleme modları, nesne yeniden yapılandırmasının neler yapabileceğini bilinçli olarak sınırlandırır. Yazılım geliştirme pratiğinde, her zaman Safetensors formatını tercih etmek, kütüphaneleri güncel tutmak ve yükleme işlemlerini izole konteynerlerde, minimum ağ ve ortam değişkeni yetkisiyle çalıştırmak en sağlam savunma stratejisidir.

MODÜL: Güvenli Model Registry ve Container Güvenliği


Bu konuyu derinlemesine öğrenmek isterseniz: Model Tarama ve Doğrulama modülüne göz atın.

Kaynak ve atıf

Bu yazı, dev.to üzerinde yayımlanan içerikten yararlanılarak Edumints tarafından yapay zekâ desteğiyle Türkçe hazırlandı. Ayrıntılar ve yazarların kendi anlatımı için orijinaline bakabilirsin:

  • dev.to/axrisi/model-security-on-hugging-face-what-executes-when-you-load-2eec