Konuyu Okuyanlar: 1 Ziyaretçi

Yapay Zeka Model Dosyası Güvenliği: pickle Tehlikesi, safetensors ve Güvenli Yükleme

Yapay Zeka Model Dosyası Güvenliği: pickle Tehlikesi, safetensors ve Güvenli Yükleme
[Resim: attachment.php?aid=253]

Merhaba arkadaşlar,

Hugging Face gibi hub'lardan bir model indirip torch.load ile yüklediğinizde aslında ne çalıştırdığınızı biliyor musunuz? Yapay zeka tedarik zincirinin en gözden kaçan riski, model dosyalarının kendisidir. Python'ın pickle formatı, bir dosya yüklenirken rastgele kod çalıştırabilir; yani güvenilmeyen bir model dosyası, basit bir "yükleme" sırasında bilgisayarınızı ele geçirebilir. Bu rehberde model dosyası güvenliğini resmi PyTorch ve Hugging Face belgelerine dayanarak ele alıyor; pickle tehlikesini, safetensors çözümünü ve güvenli yükleme pratiklerini anlatıyorum. Bu, OWASP LLM03 (Tedarik Zinciri) ve LLM04 (Veri/Model Zehirleme) risklerinin somut tarafıdır.

Konuda Anlatılacaklar
  1. Model dosyası neden bir güvenlik riski?
  2. pickle nasıl kod çalıştırır?
  3. PyTorch 2.6 ve weights_only varsayılanı
  4. safetensors: güvenli format
  5. Hugging Face tarafında güvenlik
  6. Güvenli yükleme kontrol listesi
  7. Tedarik zinciri sertleştirme

Model Dosyası Neden Bir Güvenlik Riski?

Bir model dosyası sadece sayılardan (ağırlıklardan) ibaret sanılır. Oysa yaygın formatların çoğu (.pt, .bin, .ckpt, .pkl) Python'ın pickle serileştirmesini kullanır. pickle, veriyi geri yüklerken nesneleri yeniden oluşturmak için kod çalıştırabilir. Kötü niyetli biri, modelin içine yüklendiği anda tetiklenen bir yük yerleştirebilir. Sonuç: "zararsız" görünen bir model dosyası, indirip yüklediğinizde arka kapı kurabilir, veri çalabilir veya komut çalıştırabilir.

[Resim: attachment.php?aid=254]

pickle Nasıl Kod Çalıştırır?

pickle, bir nesnenin nasıl yeniden oluşturulacağını tarif eden talimatlar içerir ve __reduce__ gibi mekanizmalarla yükleme sırasında fonksiyon çağırabilir. Kavramı göstermek için zararsız bir örnek (yalnızca kendi makinenizde, eğitim amaçlı):

Kod:
import pickle, os class Zararsiz: def __reduce__(self): # gercek saldiride burada tehlikeli bir komut olurdu return (os.system, ("echo 'model yuklenirken calisti'",)) veri = pickle.dumps(Zararsiz()) pickle.loads(veri) # yukleme aninda echo calisir

Buradaki ders: pickle.loads (ve onu kullanan torch.load) güvenilmeyen veride asla körlemesine çağrılmamalıdır. Python'ın resmi pickle belgesi de en başında bu uyarıyı yapar: pickle güvenli değildir, yalnızca güvendiğiniz veriyi açın.

PyTorch 2.6 ve weights_only Varsayılanı

İyi haber: PyTorch bu riske karşı önemli bir değişiklik yaptı. PyTorch 2.6 sürüm notlarına ve resmi belgeye göre torch.load artık varsayılan olarak weights_only=True ile çalışır. Bu mod, açmayı yalnızca tensörler, temel tipler, sözlükler ve açıkça izin verilen (allowlist) güvenli global'lerle sınırlar; keyfi kod çalıştırmayı engeller.

Kod:
import torch # Guvenli (varsayilan): yalnizca agirliklar ve guvenli tipler state = torch.load("model.pt") # weights_only=True (varsayilan)

Güvenilmeyen bir dosyada asla weights_only=False kullanmayın. Güvendiğiniz eski bir dosyada özel bir sınıf gerekiyorsa, onu açıkça izin listesine ekleyin:

Kod:
torch.serialization.add_safe_globals([MyConfigClass]) state = torch.load("eski-model.pt", weights_only=True)

[Resim: attachment.php?aid=255]

safetensors: Güvenli Format

En sağlam çözüm, pickle kullanmayan bir formattır. Hugging Face'in safetensors formatı tam da bunun için tasarlandı: yalnızca tensör verisini saklar, kod çalıştırma mekanizması içermez; ayrıca daha hızlı yüklenir. safetensors dosyaları .safetensors uzantılıdır ve kendi yükleyicisiyle açılır:

Kod:
from safetensors.torch import load_file state = load_file("model.safetensors") # pickle yok, kod calismaz

Mümkün olan her yerde .bin/.pt yerine .safetensors tercih edin. Bir modelin hem .bin hem .safetensors sürümü varsa, safetensors olanı seçin.

Hugging Face Tarafında Güvenlik

Hugging Face Transformers belgelerine göre, kütüphane mümkün olduğunda otomatik olarak safetensors'ı tercih eder; eski .bin yüklemesinde ise torch.load'u weights_only=True ile çağırır. Ek olarak Hugging Face Hub, yüklenen model dosyalarını pickle içeriğine karşı tarar ve tehlikeli içe aktarmalar bulunursa uyarı gösterir. Yine de bu taramalar mutlak güvence değildir; sorumluluk indiren taraftadır. Güvenilir yayıncılardan, sürümü sabitlenmiş (pinned revision) modeller indirin:

Kod:
from transformers import AutoModel model = AutoModel.from_pretrained( "kurulus/model-adi", revision="<commit-hash>", # surumu sabitle )

Güvenli Yükleme Kontrol Listesi
  • Format: safetensors varsa onu kullan.
  • weights_only: torch.load'da varsayılanı (True) koru; güvenilmeyen dosyada False kullanma.
  • Kaynak: Yalnızca güvenilir yayıncı ve sabitlenmiş sürüm.
  • İzolasyon: Yeni/şüpheli modelleri önce internet erişimi olmayan bir sanal makinede veya konteynerde dene.
  • Tarama: İndirdiğin dosyaları pickle tarayıcılarıyla (ör. Hub'ın uyarıları, picklescan gibi araçlar) kontrol et.

[Resim: attachment.php?aid=256]

İleri Seviye: Tedarik Zinciri Sertleştirme

Model dosyası, YZ tedarik zincirinin tek halkası değil. OWASP LLM03 kapsamında bütünsel bir yaklaşım:
  • Bağımlılıklar: transformers, torch gibi kütüphaneleri güncel tutun ve bilinen zafiyetlere karşı tarayın (pip-audit).
  • Bütünlük doğrulama: İndirdiğiniz model dosyalarının karma (hash) değerini yayıncının beyanıyla karşılaştırın.
  • Veri zehirleme (LLM04): İnce ayar (fine-tuning) verinizin kaynağını doğrulayın; zehirlenmiş eğitim verisi arka kapı davranışı yerleştirebilir.
  • SBOM: Kullandığınız model ve veri setlerinin bir envanterini (yazılım malzeme listesi mantığıyla) tutun.

Basit bir bütünlük kontrolü:

Kod:
sha256sum model.safetensors # yayincinin belirttigi hash ile karsilastirin

Sonuç

Bir model dosyası yüklemek, güvenilmeyen kaynaktan geliyorsa kod çalıştırmak kadar risklidir. Korunmak basit: safetensors kullanın, torch.load'un weights_only=True varsayılanını bozmayın, güvenilir ve sürümü sabitlenmiş kaynaklardan indirin ve şüpheli modelleri izole ortamda deneyin. Böylece YZ tedarik zincirinizin en zayıf halkasını kapatmış olursunuz. Siz model indirirken hangi kontrolleri yapıyorsunuz? Yorumlarda paylaşın.

Kaynakça
Yasal Uyarı

Bu rehberdeki örnek kodlar yalnızca kendi bilgisayarınızda, eğitim ve savunma amacıyla çalıştırılmalıdır. Zararlı pickle yüklerini başkalarına ait sistemlerde denemek veya dağıtmak 5237 sayılı Türk Ceza Kanunu'nun 243, 244 ve 245. maddeleri kapsamında suçtur. TurkTeam yalnızca savunma ve eğitim amaçlı paylaşımları destekler.

Görsel: TurkTeam özgün kapak ve diyagramları

Yasal uyarı: Bu içerik eğitim amaçlıdır. Yalnızca kendi sistemlerinizde veya yazılı izin aldığınız hedeflerde uygulayın (TCK 243-245).


Ek DosyalarEkran Görüntüleri
               
Cevapla



Hızlı Menü: