Büyük Dil Modelleri (LLM'ler) basit sohbet botlarından karmaşık görevleri yürütebilen otonom ajanlara evrildikçe, araç çağırma (veya fonksiyon çağırma) mekanizması çıkarım ile eylem arasındaki kritik köprü haline gelmiştir. Ancak bu güç, önemli bir saldırı yüzeyi sunar. Eğer bir LLM ele geçirilirse, saldırgan keyfi araçları çağırabilir; bu da veri sızdırma, sistem değişikliği veya tam sistem devralma ile sonuçlanabilir. Bu yazıda, temel prompt mühendisliğinin ötesine geçen sağlam mimari kontrollerle araç çağırma hatlarını güvence altına alma konusunda en iyi uygulamalar ele alınmaktadır.
Tehdit Modeli: Neden Araç Çağırma Kırılgandır?
Sabit kodun aksine, LLM'ler olasılıksaldır. Bir LLM kullanıcı girdisini aldığında, bir arka uç aracına yönelik olarak bir JSON nesnesi oluşturur. Kırılganlık, güven sınırında yatar: genellikle LLM çıktısına şüphe duymadan güveniyoruz. Dolaylı prompt enjeksiyonu kullanan bir saldırgan, modeli hatalı veya kötü amaçlı araç parametreleri üretmeye zorlayabilir. Örneğin, kötü amaçlı bir e-posta, LLM'in saldırgan tarafından kontrol edilen bir hedef adresle send_email aracını çağırmasına neden olacak metin içerebilir.
İlk İlke: Sıkı Şema Doğrulaması
Savunmanın ilk hattı, LLM çıktısına doğrudan güvenmemektir. Argümanları herhangi bir arka uç işlevine geçirmeden önce sıkı şemaları (örneğin, JSON Schema, Pydantic) uygulamalısınız. Bu, girdilerin doğru türde, uzunlukta ve biçimde olmasını sağlayarak temel enjeksiyon girişimlerini ve tür karıştırma hatalarını önler.
Doğrulama için Pydantic kullanan aşağıdaki Python örneğini düşünün:
import json
from pydantic import BaseModel, field_validator
class TransferMoneySchema(BaseModel):
recipient: str
amount: float
currency: str
@field_validator('recipient')
def validate_recipient(cls, v):
# Alıcının kötü amaçlı bir dosya yolu veya komut olmadığından emin olun
if ".." in v or "/" in v:
raise ValueError("Geçersiz alıcı formatı")
return v
def execute_tool_call(raw_json: str):
try:
# Adım 1: JSON'u güvenli şekilde ayrıştır
data = json.loads(raw_json)
# Adım 2: Şemaya göre doğrula
# Veri kötü amaçlı veya hatalıysa ValidationError yükseltir
validated_data = TransferMoneySchema(**data)
# Adım 3: Yalnızca doğrulama başarılıysa yürüt
process_transfer(validated_data.recipient, validated_data.amount)
except (json.JSONDecodeError, ValidationError) as e:
log_security_event(f"Geçersiz araç çağrısı reddedildi: {e}")
İkinci İlke: En Az Ayrıcalık ve İzinler
Geleneksel yazılım güvenliğinde olduğu gibi, AI ajanları da en az ayrıcalık ilkesiyle çalışmalıdır. Bir ajanın kullanıcı e-postalarını okuması ancak silmemesi gerekiyorsa, alttaki API jetonu veya işlev kapsamı silme izinlerini vermemelidir. Ayrıca, yüksek riskli işlemler (örneğin, finansal işlemler, geri alınamaz silmeler) için kullanıcı onay kapıları uygulamayı düşünün.
Üçüncü İlke: Girdi ve Çıktı Temizleme
Şema doğrulamasının ötesinde, girdileri uygulama katmanında temizleyin. Veritabanları veya dosya sistemleriyle etkileşim kuran araçlar için parametreli sorgular kullanın ve işletim sistemi komutu enjeksiyonunu önleyin. Çıktı tarafında ise, araçlar tarafından alınan verilerin LLM'e yanlışlıkla hassas bilgileri sızdırmamasını ve bu bilgilerin ardından kullanıcıya açığa çıkmamasını sağlayın.
Sonuç
Güvenli araç çağırma tek seferlik bir yapılandırma değil, katmanlı savunmalar gerektiren sürekli bir süreçtir. Sıkı şema doğrulaması, en az ayrıcalıklı erişim kontrolleri ve titiz temizleme yöntemlerini birleştirerek geliştiriciler, altyapılarını gereğinden fazla risklere maruz bırakmadan LLM ajanlarının gücünden faydalanabilir. AI güvenlik ortamı gelişmeye devam ettikçe, yeni enjeksiyon tekniklerine karşı uyanık kalmak ve buna göre doğrulama mantığınızı güncellemek, otonom AI sistemlerine olan güveni sürdürmek için hayati önem taşıyacaktır.