Semantik Önbellek Güvenliği: Zehirlenme, Sızıntı ve Güvenli Tasarım
Semantik önbellek güvenliği: yanlış eşleşme, önbellek zehirlenmesi, kullanıcılar arası sızıntı ve zamanlama riskine karşı anahtar, eşik ve süre tasarımı.
Semantik önbellek güvenliği, maliyet kazancının hangi bedelle geldiği sorusudur. Semantik önbellek, anlamca benzer sorulara daha önce üretilmiş yanıtı yeniden döndürür ve model çağrısını azaltır. Yanlış eşleşme yanlış yanıt, yetkisiz eşleşme veri sızıntısı, saldırganın yerleştirdiği kayıt ise binlerce kullanıcıya dağıtılan zararlı yanıt demektir. Güvenli tasarım önbellek anahtarına kiracı ve yetki bağlamayı, yazma işlemini denetlemeyi, kişiye özel yanıtları dışarıda tutmayı ve kayıtlara geçerlilik süresiyle geçersiz kılma yolu koymayı gerektirir.
Semantik önbellek nasıl çalışır ve neden saldırı yüzeyidir?
Gelen sorunun gömme vektörü hesaplanır ve önceden kaydedilmiş sorularla karşılaştırılır. Benzerlik eşiğin üstündeyse kayıtlı yanıt modele gitmeden döner. Eşleşme yoksa model çağrılır ve yeni yanıt önbelleğe yazılır. Bu akışta iki karar noktası güvenlik açısından kritiktir: eşleşmenin hangi kapsamda aranacağı ve yeni yanıtın hangi koşulda yazılacağı.
Ocak 2026'da yayımlanan ve ICML 2026'ya kabul edilen "From Similarity to Vulnerability" çalışması sorunu kavramsal olarak net koyar: semantik önbellek anahtarı bulanık bir özet fonksiyonu gibi davranır. Yüksek isabet oranı için gereken yakınlık özelliği, güvenlik için gereken çakışma direnciyle çelişir. Yazarların CacheAttack adlı kara kutu yöntemi, LLM yanıtını ele geçirmede yüzde 86 isabet oranına ulaştı, farklı gömme modelleri arasında aktarılabildi ve bir finans ajanı örneğinde ajanı zararlı davranışa yönlendirdi.
Önbellek çoğu zaman performans ekibinin eklediği bir ara katman olarak "güvenlik kapsamı dışı" sayılır. Oysa kullanıcıya giden her yanıtın yolunda durur ve birçok LLM gateway ürününde hazır bir özellik olarak sunulur. Gateway katmanındaki diğer kontroller için LLM gateway nedir yazısına bakabilirsiniz.
Semantik önbellek güvenliğinde dört temel risk nedir?
| Risk | Nasıl oluşur | Etki | Ana önlem |
|---|---|---|---|
| Yanlış eşleşme | Gevşek eşik, olumsuzluk ya da sayı farkını kaçıran benzerlik | Başka sorunun yanıtı döner | Eşiği etiketli örneklerle ayarlama |
| Zehirlenme | Saldırgan hedef soruya yakın sorguyla kayıt yerleştirir | Zararlı yanıt herkese dağıtılır | Yazma denetimi, doğrulama katmanı |
| Kullanıcılar ve kiracılar arası sızıntı | Anahtar yalnız anlama dayanır | Başkasının verisi döner | Kiracı ve rol filtresi |
| Zamanlama yan kanalı | Önbellekten dönen yanıt belirgin biçimde hızlıdır | Başkasının sorgusu tahmin edilir | Paylaşımsız önbellek, kapsam ayrımı |
Dördüncü risk yalnız semantik önbelleğe özgü değildir. Stanford araştırmacılarının ICML 2025'te yayımlanan "Auditing Prompt Caching in Language Model APIs" çalışması, aralarında OpenAI'ın da bulunduğu yedi API sağlayıcısında istem önbelleğinin kullanıcılar arasında küresel olarak paylaşıldığını istatistiksel denetimle tespit etti. Önbellekten dönen istemler daha hızlı işlendiği için bu hız farkı, başka kullanıcıların istemleri hakkında bilgi sızdırabilecek bir yan kanaldır. Kendi önbelleğinizi kurarken aynı ilkeyi uygulayın: kapsamı paylaşmayın.
Önbellek zehirlenmesi nasıl gerçekleşir?
Zehirlenme, önbelleğe yanlış ya da zararlı bir yanıtın kaydedilip sonraki kullanıcılara sunulmasıdır. NDSS 2026'da yayımlanan "Cache Me, Catch You" çalışması, LLM sunum çatılarındaki önbellek risklerini sistematik olarak inceledi ve altı saldırı vektörü tanımladı. Semantik önbellek için öne çıkan bulgular şunlardır:
- Bulanık semantik zehirleme: Saldırgan, hedef soruya anlamca yakın kötü niyetli sorgular gönderir ve oluşan yanıtı önbelleğe yerleştirir. GPTCache üzerinde 0,8 benzerlik eşiğinde yüzde 75 zehirli isabet oranı ölçüldü.
- RAG üzerinden zehirleme: RAG hattı, saldırganın bulanık sorgu üretmesini kolaylaştırarak saldırı yüzeyini genişletir.
- Düşük maliyet: Yazarlar başarılı her saldırı örneğinin maliyetini 1 doların çok altında hesapladı.
- Sorumlu bildirim: Bulgular vLLM, SGLang, GPTCache ve diğer projelere bildirildi. GPTCache, vLLM ve AIBrix önerilen düzeltmeleri uyguladı.
Kasıtlı saldırı olmadan da zehirlenme olur. Zehirli bir belgeden etkilenen tek bir yanıt önbelleğe girerse model hiç çağrılmadan aynı hata tekrar tekrar sunulur. Belge zehirlenmesinin eşiği için RAG zehirleme yazısına bakabilirsiniz. Ortak ilke şudur: kalıcı hale getirilen her model çıktısı, kalıcı bir veri yazması gibi denetlenmelidir.
Kullanıcılar ve kiracılar arası sızıntı nasıl önlenir?
RedisVL belgelerindeki örnek riski açıkça gösterir: "hesabıma bağlı telefon numarası nedir" sorusu iki farklı kullanıcı tarafından neredeyse aynı cümleyle sorulur ve yanıtlar farklıdır. Önbellek kullanıcı filtresi olmadan çalışırsa ikinci kullanıcı birincinin numarasını alır. Temel çözüm, kiracı ve yetki bilgisini eşleşmenin zorunlu filtresi yapmaktır. Filtreyi tutmayan kayıt, ne kadar benzer olursa olsun döndürülmez.
from redisvl.extensions.cache.llm import SemanticCache
from redisvl.query.filter import Tag
cache = SemanticCache(
name="destek_asistani",
distance_threshold=0.1, # kosinüs mesafesi, düşük değer daha sıkı
ttl=3600, # saniye
filterable_fields=[
{"name": "kiraci", "type": "tag"},
{"name": "rol", "type": "tag"},
{"name": "politika_surumu", "type": "tag"},
],
)
filtre = ((Tag("kiraci") == oturum.kiraci)
& (Tag("rol") == oturum.rol)
& (Tag("politika_surumu") == AKTIF_POLITIKA))
eslesme = cache.check(prompt=soru, filter_expression=filtre)
Filtre değerleri istemciden değil, doğrulanmış oturumdan gelmelidir. Önbellek anahtarına ya da filtresine bağlanması gerekenler:
- Kiracı kimliği
- Kullanıcı rolü ya da yetki grubu
- Erişilen veri kaynaklarının sürümü
- Sistem istemi ve politika sürümü
- Model sürümü
Bu bileşenlerden biri değiştiğinde ilgili kayıtlar geçersiz sayılmalıdır. Aynı sorunun vektör veritabanı tarafındaki karşılığı için RAG tenant izolasyonu ve multi-tenant RAG sızıntısı yazılarına bakın.
Hangi yanıtlar önbelleğe hiç yazılmamalı?
Her yanıt önbelleğe uygun değildir. Karar soru türüne göre ve kodla verilmelidir.
| Yanıt türü | Önbellek kararı | Gerekçe |
|---|---|---|
| Genel bilgi, sabit tanım, ürün belgeleri | Yazılabilir | Kişiye özel değil, yavaş değişir |
| Politika, fiyat, kampanya bilgisi | Kısa süreyle, kaynak değişiminde silinir | Hızla eskir |
| Kişisel veri içeren yanıt | Yazılmaz | Sızıntı riski |
| Yetkiye göre değişen yanıt | Yazılmaz ya da rol filtresiyle yazılır | Yetki aşımı |
| Araç çağrısının canlı sonucu | Yazılmaz | Anlık durumu yansıtır |
| Güvenlik filtresinden geçmemiş ya da reddedilmiş yanıt | Yazılmaz | Zehirlenme kapısı |
Bu ayrım önbellek katmanının girişinde bir sınıflandırma adımı gerektirir. Hangi soru türünün önbelleğe girebileceği modelin kararına bırakılmamalıdır.
Eşik, süre ve geçersiz kılma nasıl ayarlanır?
Benzerlik anlam yakınlığını ölçer, aynılığı değil. "İade yapabilir miyim" ile "iade yapamaz mıyım" sorusu yakın vektörler üretebilir ama yanıtları terstir. Eşiği tahminle değil, kendi trafiğinizden çıkarılmış ve "aynı yanıtı hak eder" ya da "etmez" diye etiketlenmiş soru çiftleriyle ayarlayın. Türkçe olumsuzluk ve çekim ekleri bu ayarı ayrıca hassas kılar.
Geçerlilik süresi hatalı yanıtın ömrünü sınırlar. Dikkat edilmesi gereken bir ayrıntı vardır: RedisVL belgelerine göre check() çağrısı eşleşen kayıtların süresini kayan pencere mantığıyla yeniler. Bu, sık eşleşen bir kaydın kendiliğinden hiç sona ermeyebileceği anlamına gelir. Zehirli bir kayıt en çok eşleşen kayıtlardan biriyse yalnız süreye güvenmek yetmez.
Süre dışında olay temelli geçersiz kılma gerekir. Kaynak belge güncellendiğinde, politika değiştiğinde ya da bir yanıtın yanlış olduğu anlaşıldığında ilgili kayıtlar dakikalar içinde silinebilmelidir. Yönetim aracında kayıt arama, inceleme ve toplu silme bulunmalıdır. Aksi halde tek bir yanlış yanıtı düzeltmenin yolu bütün önbelleği temizlemek olur.
Zehirlenme nasıl tespit edilir ve müdahale edilir?
Önleme, yazma anında başlar. Yanıtı önbelleğe yazmadan önce güvenlik filtresinden geçirin, kaydın kaynağını, yazan kullanıcıyı ve zamanı saklayın. NDSS 2026 çalışmasında, eşleşen önbellek kaydının yeni soruyla anlam bütünlüğünü küçük bir dil modeliyle doğrulayan ek katman, bulanık çakışma saldırısının ortalama isabet oranını yüzde 66'dan yüzde 27'ye indirdi. Katman ilk token süresine gecikme ekler, ama yüksek riskli alanlarda makul bir bedeldir.
İzlenecek ölçütler:
| Ölçüt | Ne gösterir | Uyarı işareti |
|---|---|---|
| İsabet oranı | Maliyet tasarrufu | Ani artış |
| Yanlış isabet oranı | Örnek kümede taze yanıtla karşılaştırma | Eşik değişikliğinden sonra yükseliş |
| Kayıt başına farklı sorgu sayısı | Bir kaydın ne kadar geniş eşleştiği | Tek kaydın çok sayıda farklı sorguyla eşleşmesi |
| Kiracı dışı eşleşme | Filtre hatası | Sıfırdan farklı herhangi bir değer |
Zehirli kayıt bulunduğunda izlenecek adımlar:
- Kaydı ve benzer kayıtları silin, gerekirse önbelleği geçici olarak kapatın.
- Kaydı yazan isteği, kullanıcıyı ve zamanı kayıtlardan bulun.
- Aynı kullanıcı ya da kaynaktan yazılmış diğer kayıtları tarayın.
- Zehirli bir belge söz konusuysa onu bilgi tabanından çıkarın.
- Yazma denetimini sıkılaştırın ve olayı kayda geçirin.
Sık Sorulan Sorular
Semantik önbellek normal önbellekten nasıl ayrılır?
Normal önbellek yalnız birebir aynı isteği eşleştirir. Semantik önbellek soruyu gömme vektörüne çevirir ve yeterince benzer bir önceki soru bulursa onun yanıtını döndürür. Maliyeti ve gecikmeyi azaltır, ama benzerlik eşiği gevşekse farklı sorulara aynı yanıtı verir. Aynı özellik, saldırganın hedef soruya benzeyen bir sorguyla önbelleğe kayıt yerleştirmesini de mümkün kılar.
Önbellek kullanıcılar arasında nasıl veri sızdırır?
Önbellek anahtarı yalnız sorunun anlamına dayanıyorsa bir kullanıcının sorusuna üretilen yanıt, benzer soru soran başka bir kullanıcıya dönebilir. Yanıt ilk kullanıcının hesap bilgisini içeriyorsa bu doğrudan sızıntıdır. Çözüm, kiracı ve rol bilgisini eşleşmenin zorunlu filtresi yapmak, kişiye özel yanıtları hiç önbelleğe yazmamak ve yetki değiştiğinde ilgili kayıtları silmektir.
Önbellek zehirlenmesi nasıl gerçekleşir?
Saldırgan, kurbanların soracağı soruya anlamca yakın bir sorgu gönderir ve modelin bu sorguya verdiği yanıtın önbelleğe yazılmasını sağlar. Sonraki kullanıcılar benzer soruyu sorduğunda model çağrılmadan bu yanıt döner. NDSS 2026'da yayımlanan bir çalışma, GPTCache üzerinde 0,8 benzerlik eşiğinde yüzde 75 zehirli isabet oranı ölçtü. Etki kalıcıdır, çünkü yanıt her eşleşmede yeniden dağıtılır.
Semantik önbellekte hangi yanıtlar saklanmamalı?
Kişisel veri içeren, kullanıcının yetkisine göre değişen, bir araç çağrısının canlı sonucuna dayanan, fiyat ve stok gibi hızla değişen ve güvenlik filtresinden geçmemiş yanıtlar saklanmamalıdır. Bu ayrımı modele bırakmayın. Önbellek katmanının girişinde soru türünü ve yanıtın kaynağını sınıflandıran kod tabanlı bir kural, hangi yanıtın yazılabileceğine karar vermelidir.
Kaynaklar
- arXiv: From Similarity to Vulnerability, Key Collision Attack on LLM Semantic Caching (2601.23088)
- NDSS 2026: Cache Me, Catch You, Cache Related Security Threats in LLM Serving Frameworks
- arXiv: Auditing Prompt Caching in Language Model APIs (2502.07776)
- RedisVL Docs: Semantic Caching for LLMs
- OWASP GenAI: LLM08:2025 Vector and Embedding Weaknesses
İlgili Yazılar
- RAG Sistemlerinde Tenant İzolasyonu ve Vektör Veritabanı Güvenliği
- Multi-Tenant RAG İzolasyonu: Hangi Vektör DB, Filtre Atlanırsa Ne Sızar? Pinecone / Qdrant / Weaviate / Milvus / pgvector için karar tablosu + 23 maddelik doğrulama listesi
- RAG Zehirleme Saldırısı: Bir Cevabı Ele Geçirmek İçin Kaç Zehirli Doküman Yeterli? Retrieval zehirlemesinin eşiği: ölçümlü bir bakış
- LLM Gateway Nedir? LLM Firewall ve Runtime Protection ile Farkı
Bu yazı, Türkiye odaklı Yapay Zekâ Güvenliği Rehberi'nin destek makalelerinden biridir.