Yapay zeka destekli uygulamalar, pasif araçlardan özerk sistemlere dönüşüyor. Bu sistemler, kod üretebiliyor, karar verebiliyor ve bağımsız eylemler gerçekleştirebiliyor. Ancak bu geçiş, kritik bir güvenlik sorununu da beraberinde getiriyor. Bir yapay zeka sistemi kod ürettiğinde, bu kodun nasıl ve nerede çalıştırılacağına dair katı kontroller uygulanmalıdır. Bu sınırlar olmadan, bir saldırgan yapay zekayı kötü niyetli kod üretmesi için kandırabilir, ve bu kod sistemde doğrudan çalıştırılabilir.
Genellikle, sanitizasyon birincil savunma mekanizması olarak uygulanır. Ancak, özerk iş akışlarında, sanitizasyon yetersiz kalıyor. Saldırganlar, filtreleri aşmanın yollarını bulabilmekte, güvenilir kütüphane fonksiyonlarını manipüle edebilmekte ve geleneksel kontrolleri aşan model davranışlarını istismar edebilmektedir.
NVIDIA AI kırmızı takımı bunu bir sistem riski olarak ele alıyor. LLM tarafından üretilen kod güvenilir çıktı olarak düşünülmemeli ve çalıştırılması için sandbox (kapsayıcı) ortamları oluşturulmalıdır. Bu blog yazısında, AI destekli bir analiz hattında tespit edilen bir uzaktan kod yürütme (RCE) güvenlik açığı üzerinden, sandboxing’in neden AI kod yürütme iş akışları için bir zorunlu güvenlik kontrolü olduğunu gösteren bir vaka çalışması sunulacaktır.
AI Üretilen Kodun Neden Sandbox’ta Çalıştırılması Gerekiyor?
Özerk AI sistemleri, kullanıcı taleplerini gerçek zamanlı olarak çalıştırılacak kodlara çevirme amacıyla tasarlanıyor. Bu tasarımın riski, AI tarafından üretilen kodun güvenilir olarak değerlendirilmesidir. Oysa LLM, güvenilir olmayan bir girdiden gelen talimatları takip etmekte ve üretilen kod da güvensiz olarak kabul edilmelidir.
Bu süreç, bir LLM’nin Python kodu üretmesi ve bunun uygulama tarafından doğrudan çalıştırılmasını içeriyor. Uygun izole edilmemişse, bu durum, uyarlanmış girdilerin uzaktan kod yürütmeye (RCE) neden olabilecek bir yol oluşturmasını sağlıyor.
İçindeki katmanlar şunlardır:
- Guardrail aşımı: Belirli konularda koruma önlemini aşmak.
 - Girdi ön işleme: İki çıkarım değişkeni (veri ve grafik) için özel çıktıyı zorlamak.
 - Kod üretimi: Kötü niyetli kod üretimini zorlamak.
 - Kod yükü: Python hangisinden kaçış yapacak bir kod yükü.
 - Son yük: Hedef makinede çalıştırılacak Base64 kodlu, keyfi bir terminal komutu.
 
Bu örnek, bir analiz iş akışında tespit edildi, ancak temel sorun belirli bir entegrasyon veya kütüphane ile sınırlı değildir. AI tarafından üretilen kodun çalıştırıldığı her sistemi etkileyen sistematik bir desen var. Sanitizasyon teknikleri, genellikle bu riski azaltmak için uygulanır. Ancak, sanitizasyon özünde sınırlıdır. Saldırganlar, güvendiği kütüphane fonksiyonlarını istismar eden girdiler oluşturabilir ve statik filtreleri aşarak, çalıştırma davranışlarını manipüle edebilir.
Vaka Çalışması: AI Destekli Analiz İş Akışlarında Kod Yürütme Risklerini Belirlemek
Bir rutin güvenlik değerlendirmesi sırasında, NVIDIA AI Kırmızı Takımı, doğal dil sorgularını Python koduna dönüştüren üçüncü taraf bir kütüphaneyi kullanan dahili bir analiz iş akışını inceledi. Tasarım deseni, tipik özerk AI iş akışlarını takip ediyor. Kullanıcının girişi bir LLM’ye gönderiliyor ve LLM, isteğe uygun kod üretiyor. Bu kod, uygulama tarafından çalıştırılıyor.
İlk incelemelerde, kütüphanenin tehlikeli işlemleri kısıtlamayı amaçlayan kod sanitizasyonu önlemleri uyguladığı doğrulandı. Ancak, derinlemesine analiz, bu kontrollerin güvenilir kütüphaneler tarafından ithal edilen güvenilir olmayan kütüphaneler aracılığıyla aşılabileceğini ortaya koydu. Sorun, dinamik olarak üretilen kodu statik sanitizasyon teknikleri ile kontrol etmenin zorluğundan kaynaklanıyordu.
Belirli prompt enjekte etme yükleri oluşturarak, takım, LLM tarafından üretilen kodun, mevcut sanitizasyon katmanlarına rağmen RCE’ye nasıl ilerleyebileceğini gösterdi. Bu, isim alanı sızıntıları, şifreleme aşmaları ve kod filtrelerini geçersiz kılacak bağlam manipülasyon tekniklerini istismar etmeyi içerdi.
class untrustedAI(LLM):
  def call(self, instruction:BasePrompt, context: PipelineContext = None):
  ...
    ret = '''np.allowed_attributes.append("_pytesttester")ngetattr(getattr(np,"_pytesttester"),bytes( c^1 for c in b"nr").decode()).system("calc")nresult={"type":"string","value":"worked"}'''
    return ret
llm = untrustedAI()
agent = Agent(sales_by_country, config={"llm": llm})
print(agent.chat('Which are the top 5 countries by sales?'))
Tespit edilen güvenlik açığı (CVE-2024-12366 olarak takip edilmektedir), daha geniş bir sorunun örneğini oluşturdu:
- AI tarafından üretilen kodu sanal kullanıcı sandbox’ları olmadan çalıştıran sistemler, kontrol düzlemi tehlikesine maruz kalmaktadır.
 - Sanitizasyon, savunma derinliği olarak başarılı olsa da, yürütme güvenliğini tek başına sağlayamaz.
 
AI kırmızı takımı, kütüphane geliştiricileriyle işbirliği yaparak bulguları sorumlu bir şekilde bildirdi ve azaltma stratejileri üzerinde anlaşmaya vardı. Bu süreç, belirli kaçış tekniklerini yamanın ötesinde, yapısal önlemler gibi sandboxing uygulamaya geçişin vurgusu oldu.
Sandboxing, AI Üretilen Kod Yürütme Risklerini Nasıl Kapatır?
Sanitizasyon, AI tarafından üretilen kodu çalışan sistemlerin güvenliğini sağlamak için genellikle ilk tepki olarak görülmektedir. Ancak vaka çalışmasında gösterildiği gibi, sanitizasyon tek başına yeterli değildir. Saldırganlar, sürekli olarak filtreleri aşan, çalışma zamanı davranışlarını istismar eden veya güvenilir fonksiyonları zincirleme yollar oluşturacak şekilde girdiler hazırlayabilirler.
Tek güvenilir sınır, kod yürütme ortamını sandbox ile izole etmektir. Her yürütme örneğini izole ederek, sandboxing, kötü niyetli veya istenmeyen kod yollarının içerik ve etkisini sınırlar ve etkisini tek bir oturum veya kullanıcı bağlamıyla sınırlı hale getirir.
Bildirimin ardından, kütüphane geliştiricileri, AI tarafından üretilen kodun güvenliğini doğrulama amacıyla LLM tabanlı kontroller ekleyen Gelişmiş Güvenlik Ajanı gibi ek bir düzenleme gerçekleştirdiler. Ancak bu iyileştirmeler, AI tarafından üretilen kodu sınırlama karmaşıklığı nedeniyle hala aşılamaya açıktır.
Geliştiriciler ayrıca, AI tarafından üretilen kodun kapsayıcılar içinde çalıştırılmasını sağlayan bir sandbox uzantısı sundular. Bu yapısal kontrol, kod yürütmeyi uygulamanın çekirdek ortamından ayırarak riski önemli ölçüde azaltmaktadır.
Önemli dersler:
- Olası her yerde sanitizasyon uygulanmalı, ama gerekli her yerde sandbox uygulanmalıdır.
 - AI tarafından üretilen kod varsayılan olarak güvenilir media beesçagħtğynmuş.
 - Yürütme sınırlarının yapısal olarak değil, heuristik olarak zorlanması gerekmektedir.
 
AI tabanlı iş akışlarını yürüten organizasyonlar için, sandboxing varsayılan bir tasarım ilkesi olmalıdır. Operasyonel ticaret dörtlüsü bulunsa da, güvensiz kodların sınırlarını kapatmanın güvenlik faydaları, belirsiz yürütme yollarının risklerinden çok daha fazladır.
AI Uygulama Geliştiricileri için Dersler
Vaka çalışmasında vurgulanan güvenlik riskleri, belirli bir kütüphane veya entegrasyonla sınırlı değildir. AI sistemleri daha fazla özerk karar verme ve kod üretim görevlerini üstlendikçe, benzer güvenlik açıkları ekosistemde ortaya çıkacaktır.
AI destekli uygulamalar geliştiren ekipler için birkaç önemli ders sunulmaktadır:
- AI tarafından üretilen kod güvenilmezdir. LLM tarafından üretilen kodu çalıştıran sistemler, bu kodu kullanıcı tarafından sağlanan girdiler kadar dikkatli değerlendirmelidir. Güven sınırları bu varsayıma dayanmaktadır. Bu nedenle NVIDIA’nın NeMo Agent Toolkit, kodu yerel veya uzaktan sandboxlarda çalıştırmak üzere tasarlanmıştır.
 - Sanitizasyon, savunma derinliği olmalıdır, birincil kontrol değil. Kodu bilinen kötü kalıplar için filtrelemek, fırsatçı saldırıları azaltabilir, ancak kararlı bir saldırganın bypass bulmasını engelleyemez. Yalnızca sanitizasyona güvenmek, sahte bir güven hissi yaratır. Potansiyel tehlikeli kodu filtrelemek için ek olarak NVIDIA’nın NeMo Guardrails çıktı kontrollerini ekleyin.
 - Yürütme izolasyonu, AI destekli kod yürütme için zorunludur. Her yürütme örneğini sandboxing yöntemiyle izole etmek, kötü niyetli veya istenmeyen kodun etkisini sınırlar. Bu, güvenliği reaktif yamalardan proaktif kapamaya kaydırır. AWS EC2 veya Brev gibi uzaktan yürütme ortamlarını değerlendirin.
 - Eko-sistem boyunca işbirliği kritik bir öneme sahiptir. Bu risklerin üstesinden gelinmesi, uygulama geliştiricileri, kütüphane geliştiricileri ve güvenlik topluluğu arasındaki koordineli çabaları gerektirmektedir. Açık ve yapılandırıcı bir açıklama süreci, çözümlerin tek yönlü yamanın ötesine ölçeklenmesini sağlar. Yetersiz sandboxing bulursanız, potansiyel zafiyeti sorumlu bir şekilde bildirin ve herhangi bir kamuoyu açıklamasından önce düzeltmeye yardımcı olun.
 
AI, kurumsal iş akışlarına derinlemesine entegre oldukça, endüstrinin güvenlik uygulamalarını evrim geçirmesi gerekmektedir. Kapsayıcı öncelikli mimarilerin oluşturulması, AI destekli yeniliğin güvenli bir şekilde ölçeklenebilmesini sağlar.
Teşekkürler
NVIDIA AI kırmızı takımı, PandasAI geliştiricilerine duyarlılıkları ve işbirlikleri için teşekkür eder. Açıklama sürecinde güvenliği artırmaya yönelik geliştirme ve serbest bırakma stratejileri üzerine paylaşılan taahhüt, AI ekosisteminde güvenliği güçlendirmek için ortak bir ilgi yansıtıyor.
Ayrıca, koordinasyon ve CVE ihracatı sürecini destekleyen CERT/CC’ye de teşekkür ederiz.
Açıklama zaman çizelgesi
- 2023-04-29: Bir dış araştırmacı (NVIDIA ile ilişkili olmayan) tarafından kamuya açık bir şekilde ilk sorun bildirildi.
 - 2024-06-27: NVIDIA, PandasAI geliştiricilerine ek sorunlar bildirdi.
 - 2024-07-16: Geliştiriciler, bildirilen kanıt taslağını (PoC) ele alan ilk azaltmalar gerçekleştirdi.
 - 2024-10-22: NVIDIA, koordineli bir zafiyet açıklama sürecini başlatmak üzere CERT/CC ile iletişim kurdu.
 - 2024-11-20: PandasAI, CERT/CC koordinasyonu yoluyla ilk PoC’yi ele alan azaltmaları onayladı.
 - 2024-11-25: NVIDIA, kalan bypass yollarını gösteren güncellenmiş bir PoC paylaştı.
 - 2025-02-11: CERT/CC tarafından PandasAI ile işbirliği içinde CVE-2024-12366 verildi.
 
