Buradasın
PyTorch'ta Güvenlik Açıklıkları ve Java ile Arka Kapı Saldırısı Eğitimi
youtube.com/watch?v=IPrRccHlgLMYapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, 15 yıllık deneyime sahip bir siber güvenlik uzmanı tarafından sunulan teknik bir eğitim içeriğidir. Mehmet adlı eğitmen, PyTorch'ta güvenlik açıklıkları ve Java programlama dilini kullanarak arka kapı saldırısı gerçekleştirme tekniklerini anlatmaktadır.
- Video, PyTorch'ta model yükleme mekanizmasındaki güvenlik açıklarını, model dosyalarının yapısını ve serileştirme süreçlerini ele almaktadır. Eğitmen, SnakeY kütüphanesi kullanarak Java reflection ve remote class loader tekniklerini uygulayarak sunucuya erişim sağlama sürecini adım adım göstermektedir.
- Videoda ayrıca MAR dosyalarının içeriği, manifest.json ve config.yaml dosyalarının önemi, Java'da reflection ve remote class loader gibi tekniklerin nasıl kullanılacağı ve SnakeY'nin 2.1 versiyonunda yapılan güvenlik iyileştirmeleri hakkında bilgiler de paylaşılmaktadır.
- 00:01PyTorch'ta Güvenlik Açıklıkları
- PyTorch kullanan mimarlerde production ortamlarda farklı AI modellerinin deployment ve benzeri konularda oluşabilecek güvenlik açıklıkları incelenecek.
- PyTorch, kullanıcıların herhangi bir adresten AI modeli indirip kullanabilme özelliğine sahipti, ancak bu özellik güvenlik riski taşıyordu.
- Amazon'un bu konuda yayınladığı güvenlik duyurusu ve PyTorch'un arka taraftaki mimarisini detaylı bir şekilde inceleyecekler.
- 02:19PyTorch'un Güvenlik Zafiyeti
- PyTorch'un son 2-3 ay önceki versiyonuna kadar kullanıcılar herhangi bir adresten AI modeli indirebiliyordu.
- Saldırganlar, PyTorch servisine istediği URL'yi vererek herhangi bir adrese talep göndermesini sağlayabiliyordu.
- PyTorch, bu zafiyeti gidermek için izin verilen bir yerel tanımlayıp, bu yörenin haricinde bir adresten model indirmeyi yasaklayan bir güncelleme getirdi.
- 04:55PyTorch'un Model Yönetimi
- PyTorch'un dökümantasyonunda "register model" adlı bir endpoint bulunuyor ve bu endpoint üzerinden AI modelleri yüklenebiliyor.
- Model yükleme işlemi için bir zip dosyası gerekiyor ve bu zip dosyasının içerisinde belirli dosyaların olması gerekiyor.
- PyTorch'un arka tarafta bir front-end servisi var ve bu servis URL'leri indirip, modelleri açıp, PyTorch komutlarını render ediyor.
- 07:20Register Model Mekanizması
- Register model, HTTP request'ten modelin URL'sini ve body'den gelen bilgileri alıyor.
- Register model, model manager'dan bir instance alıp model register'ı çağırıyor ve bazı işlemler gerçekleştiriyor.
- Model register, model dosyasını arşivliyor ve create moduna gidiyor, ardından download model işlemi gerçekleştiriliyor.
- 09:34Model Dosyasının İşlenmesi
- Model dosyası "location" olarak kaydedilen bir yere indiriliyor ve "load" metodu ile işleniyor.
- Model dosyası bir zip dosyası olarak açılıyor ve içindeki veriler işleniyor.
- Bir model dosyasının içerisinde "maraf" adında bir klasör ve içinde "manifest.json" dosyası olması gerekiyor.
- 10:52Manifest Dosyasının İçeriği
- Manifest.json dosyasında modele dair bilgiler (model ismi, serili file name) bulunuyor.
- Manifest dosyasında modelin hangi hamur tarafından alınacağına dair seçenekler var.
- Manifest dosyası okunduktan sonra yeni bir modlar kaybı oluşturuluyor.
- 12:19Model Oluşturma Süreci
- Manifest dosyasından model bilgileri alınarak "create model" metodu ile model oluşturuluyor.
- Oluşturulan modelden geçici bir model üretiliyor.
- Model konfigürasyonu okunuyor ve bu konfigürasyon "config file" içerisinde belirtiliyor.
- 14:01YAML Dosyası ve Serileştirme
- YAML dosyası, bir takım bilgileri tutan ve projeleri konfig dosyasıymışçasına yazabilen bir format.
- Serileştirme (serialization) konusu, bir objeyi YAML formatına dönüştürme işlemidir.
- YAML dosyasında objenin hangi sınıftan olduğunu belirtmek gerekiyor, aksi takdirde objeye erişim sağlanamaz.
- 16:29Saldırı Olasılıkları
- Aynı YAML dosyası tekrar yüklendiğinde, arka tarafta hangi sınıfın oluşturulacağını bildiği için sorun yaşanmıyor.
- Saldırgan, sunucudan istediği YAML dosyasını yükleyebilir.
- Reflection ve remote class loaderlar kullanılarak farklı adreslerdeki sınıfları yükleyebilir.
- 18:09Java Class Loader ve Reflektif Çağrı
- Bir adrese verilen jar dosyasındaki bir sınıfı class loader sınıfına vererek reflektif bir çağrı yapılabilir.
- Uzaktaki bir adresteki jar dosyasını indirip içerisindeki bir sınıfı class load ettirebilir ve bu sınıfın instance'ına erişip metodlarını çağırabilirsiniz.
- Java'nın script engine manager özelliği, farklı programlama dillerine ve klaslara erişim sağlar.
- 19:29Script Engine Manager ve Class Loader Kullanımı
- Script engine manager'a class loader parametresi verilerek, belirli bir adresdeki class dosyasını yükleyebilirsiniz.
- Bu özellik sayesinde remote bir class create ettirebilir ve saldırı kodu yazabilirsiniz.
- Factory implement ederek bir exploit class adında sınıf oluşturabilirsiniz.
- 20:54Java Versiyonu ve Saldırı Senaryosu
- Class'ı compile ederken kullanılan Java versiyonu ile load edecek yerdeki Java versiyonu aynı olmak zorundadır.
- Python ile bir HTTP tipi servis çalıştırılarak saldırı senaryosu oluşturulabilir.
- Java, meta anf service, JavaScript engine ve script engine factory bilgilerini alarak class load etmeye çalışır.
- 23:14Saldırı Senaryosunun Detayları
- Saldırgan, Python servisine bir dosya gönderir ve bu dosya anzip işlemine tabi tutulur.
- Anzip işleminden sonra çıkan manifest.json dosyasında config file dosyası bulunur.
- Script engine manager'a class loader parametresi verilerek, belirlenen class load edilir ve çalıştırılır.
- 24:56Saldırı Senaryosunun Uygulanması
- Python ile bir HTTP tipi servis ayağa kaldırılır ve belirli bir portta çalıştırılır.
- Zip dosyası oluşturulur ve içinde exploit class ve manifest.json dosyası bulunur.
- Manifest.json dosyasında dosyanın ne olduğunu belirten bilgiler yer alır.
- 29:21Arka Kapı Saldırı Kodu
- İnternette en popüler palo all things listesinde zararlı yapılabilecek tüm aktivitelerin kodları bulunmaktadır.
- Konuşmacı, meslek hayatında onbeş yıldır aynı durumda olan bir arka kapı saldırı kodunu çalıştırıyor.
- Kod, belirli bir adresin portuna bağlantı kurup, 1501 proses olarak başlatıp, 1500 portuna soket bağlantısı açarak standart hata girişini alıyor.
- 30:06Saldırının Gerçekleştirilmesi
- Saldırı başarıyla çalışırsa, belirli bir IP adresine bağlantı talebi gelmesi bekleniyor.
- Kod derlendikten sonra, saldırgan hedefe bağlantı talebi gönderiyor ve "ay" komutu sorulduğunda ters bağlantılı bir bağlantı kuruluyor.
- Saldırgan artık sunucunun içerisinde bulunuyor ve arka tarafta modunu yüklemeye çalışan Pythch servisini görebiliyor.
- 31:07Saldırının Teknik Detayları
- Kullanılan kütüphanelerin versiyonları ve özellikleri, saldırganların planlarını etkiliyor.
- Sisteme özel bir YAML dosyası ile Sinek ya kütüphanesi ile load edildiği için, kütüphaneye istenilen klas inşa edilebilmesi ve initialize edilebilmesi sağlanabiliyor.
- Java reflection yaklaşımı kullanılarak, remote adresteki Java klasını sisteme load ettirebilmek mümkün.
- 32:11Sinek Ya Kütüphanesinin Güncellemesi
- Sinek ya kütüphanesi yakın zamanda 2.1.0 versiyonuna güncellendi.
- 2.1.0 versiyonunda, Sinek ya kütüphanesine hangi metotların ve sınıfların initialize edilebileceğine dair bir gadget listesi verilmesi gerekiyor.
- 2023'ün 20. versiyonunda, Sinek ya kütüphanesinin constructor metodu kafasına göre her metodu ve sınıfı load edemiyor, bu daha güvenli bir konsistans sağlıyor.