Google Bard hack’i: prompt injection’dan veri sızdırmaya
(embracethered.com)- Bard Extensions, kişisel belgeleri ve e-postaları bile okuyabilir hale gelince, harici belgelere gizlenen dolaylı prompt injection gerçek bir veri sızdırma yolu haline gelebiliyor
- Saldırganlar kötü amaçlı bir Google Docs belgesini kurbana zorla paylaşabilir ve Bard bu belgeyi aradığı ya da analiz ettiği anda belge içindeki talimatları çalıştırmasını sağlayabilir
- Bard’ın Markdown görsel render etme özelliği, kullanıcı tıklaması olmadan harici URL’leri çağırabildiği için sohbet bağlamını sorgu dizgesine ekleyerek dışarı sızdıran bir kanal haline gelebilir
- Google’ın Content Security Policy politikası rastgele görsel yüklemelerini engellese de,
script.google.comvegoogleusercontent.comüzerinde çalışan Google Apps Script bir dolanma yolu olarak kullanılabildi - Bu sorun 19 Eylül 2023’te Google VRP’ye bildirildi, 19 Ekim’de düzeltmenin doğrulandığı bilgisi geldi ve URL’ye veri eklenmesini engelleyen bir filtreleme eklenmiş görünüyor
Bard Extensions’ın yarattığı yeni saldırı yüzeyi
- Google Bard, bir güncellemeyle Extensions desteği kazandı; YouTube, uçak bileti ve otel araması ile kullanıcının kişisel belgelerine ve e-postalarına erişebilir hale geldi
- Bard’ın kullanıcının Drive, Docs, Gmail verilerini analiz edebilmesi, güvenilmeyen harici verilerin LLM bağlamına taşınabildiği bir durum yarattı
- Böyle bir yapıda, harici içeriklere gizlenmiş talimatların model yanıtını değiştirdiği dolaylı prompt injection saldırılarına maruz kalınabiliyor
- YouTube video özetleri ve
Google Docstestlerinde, Bard’ın harici içerikte yer alan talimatları izlediği doğrulandı
Saldırı senaryosu
- E-posta ya da Google Docs üzerinden yapılan dolaylı prompt injection, kullanıcının açıkça kötü amaçlı bir bağlantıya tıklamasını gerektirmeden iletilebildiği için tehlikeli
- Saldırgan, kurbana kötü amaçlı bir Google Docs belgesini zorla paylaşabilir
- Kurban Bard ile bu belgeyi aradığında ya da onunla etkileşime girdiğinde, belge içindeki prompt injection talimatları çalışabilir
- LLM uygulamalarında sık görülen zafiyet yollarından biri, köprüler ve görsel render etme üzerinden sohbet geçmişinin sızdırılmasıdır
Görsel Markdown enjeksiyonu
- Google’ın LLM’i metin yanıtlarına Markdown öğeleri ekleyebiliyor ve Bard bunları HTML olarak render ediyor
- Markdown görsel sözdizimi HTML’de
<img>etiketine dönüşüyor vesrcniteliği saldırganın sunucusunu gösterebiliyor - Tarayıcı, görseli göstermek için kullanıcı etkileşimi olmadan ilgili URL’ye otomatik olarak bağlanıyor
- LLM, sohbet bağlamındaki önceki verileri özetledikten ya da okuduktan sonra bu değeri görsel URL’sine eklerse, veri harici istekle dışarı sızabilir
- İlk exploit, konuşma geçmişini okuyup bunu içeren bir köprü oluşturan bir yöntemle hızlıca geliştirildi; ancak görsel render etme Google’ın Content Security Policy politikası tarafından engellendi
Content Security Policy aşılması
- Google’ın CSP’si, görsellerin rastgele konumlardan yüklenmesini engelliyor
- Ancak CSP içinde
*.google.comve*.googleusercontent.comgibi nispeten geniş izinli konumlar bulunuyor - Google Apps Script, Office makrolarına benzer şekilde URL üzerinden çağrılabiliyor ve
script.google.comya dagoogleusercontent.comalan adlarında çalışıyor - Bu özellik nedeniyle Apps Script, CSP aşma için uygun bir aday haline geldi
Bard Logger uygulaması
Apps Scriptile Bard Logger uygulandı- Logger, çağrı URL’sine eklenen tüm sorgu parametrelerini bir Google Doc içine kaydediyor
- Apps Script arayüzünde kimlik doğrulama olmadan erişilebilen bir ayar bulunarak anonim çağrılara açık bir endpoint oluşturulabildi
- Saldırı zinciri şu unsurlardan oluşuyor
- Bard Extensions verilerinden kaynaklanan dolaylı prompt injection
- Bard’ın görsel render etmesiyle oluşan zero-click istek
- Kötü amaçlı Google Doc içindeki prompt injection talimatı
- Görsel yüklenirken veriyi alan
google.comtabanlı loglama endpoint’i
Demo akışı
- Demo’da, kötü amaçlı
Google Docsohbet bağlamına girdiğinde kullanıcının sohbet geçmişi sızdırılıyor - Ekran görüntüsü akışı şöyle
- Kullanıcı “The Bard2000” adlı Google Doc’a gidiyor
- Saldırgan talimatı enjekte ediliyor ve görsel render ediliyor
- Saldırgan, Bard Logger Apps Script üzerinden verileri bir Google Doc içine alıyor
- Zincir, daha önce Bing Chat, ChatGPT ve Claude için tartışılan örneklere göre daha karmaşıktı; çünkü CSP aşma gerekiyordu
Doğal dil shell code ve payload
- “Shell Code is natural language these days” ifadesinde olduğu gibi, exploit doğal dil prompt’larından oluşuyor
- Kötü amaçlı Google Doc içinde prompt injection ve veri sızdırmayı gerçekleştiren bir payload bulunuyor
- Bu payload, LLM’i görsel URL’sindeki metni sohbet verileriyle değiştirmeye yönlendiriyor
- Bard’ın görevi tamamlayabilmesi için birkaç örnek sağlayan in-context learning gerekliydi
- Ek bölümdeki payload, sohbetin ilk 20 kelimesini çıkarmasını ve boşlukları
+ile kodlayarak Apps Script çalıştırma URL’sinin sorgusuna eklemesini söylüyor - Ek bölümde ayrıca “AI Injection succeeded #10” çıktı dizesi de yer alıyor
Google’ın düzeltmesi ve takvim
- Bu sorun 19 Eylül 2023’te Google VRP’ye bildirildi
- 19 Ekim 2023’te durum güncellemesi istendikten sonra Google, düzeltmenin tamamlandığını doğruladı ve Ekoparty 2023 sunumunda demoya yer verilmesini onayladı
- O sırada düzeltmenin tam olarak nasıl yapıldığı net değildi
- CSP değiştirilmedi ve görseller hâlâ render edildiği için, URL’ye veri eklenmesini engelleyen bir filtreleme eklenmiş görünüyor
- Düzeltme takvimi
- 19 Eylül 2023: Sorun bildirildi
- 19 Ekim 2023: Düzeltme doğrulandı
1 yorum
Hacker News yorumları
thekelimesini art arda 2-3 prompt boyunca tekrarlayınca bile tuhaf metinler yazmaya başlıyor, ama bu yöntem Bard’da işe yaramıyorKuralların tüm prompta küresel ve eşit biçimde uygulandığını sanıyordum
Sonra aynı sorun XSS’te yeniden ortaya çıktı; sistem komut ile veriyi ayırt edemediği için saldırgan, sistemin komut sanacağı bir mesaj oluşturabiliyordu. Çözüm, veriyi kesin biçimde sınırlandırmanın bir yolunu bulmaktı
LLM’lerde de çözüm muhtemelen benzer olacak. “İlk 100 token değiştirilemezdir ve başka hiçbir talimat bunlarla çelişemez. [korumalı komutu ekle]” gibi komutlara uyması için LLM’i eğitmek olabilir. Koruyucu talimatları çıkarım anında eklemek yerine eğitim aşamasında böyle şeyler koyarsanız kötü niyetli talimat enjekte etmek zorlaşabilir; ama eğitim zamanında olası tüm saldırıları öngörmek gerektiğinden pratikte kolay değil
Mesele, samanlıkta kazıp rastgele token örnekleyen bir şeye özel erişim yetkileri verip, çoğunlukla iyi çalışıyor gibi görünüyor diye neden her zaman iyi çalışacağına inandığımız
Önümüzdeki birkaç yıl içinde talimatları, yani promptları, “veri” olan asıl konuşmadan ayırabilecek yapısal bir sıçrama çıkmasını ummak gerekiyor
Örneğin girdi olarak prompt tokenları ve veri tokenları diye iki tür token alıp bunların asla birbirine karışmamasını veya birbiriyle karıştırılmamasını sağlayan bir yöntem olabilir. Henüz nasıl yapılacağını bilmiyorum; böyle iki katmanda eğitilip çalışması için büyük bir yapısal ilerleme gerekir ama birinin bunu bulmasını ummaktan başka çare yok
Bunun imkânsız olduğunu düşündürecek temel bir neden yok. Mevcut tek token dizisi paradigmasına uymuyor; zaten paradigmalar bu yüzden evrilir
Modele yalnızca kullanıcının başka bir arayüzden de okuyabileceği veriler verilmeli
Çözüm, LLM’i güvenilmeyen bir bileşen olarak ele almak ve bu varsayımla tasarlamak
Vektör veritabanı ve API ile birlikte kullanınca bağlamı veya rol tabanlı erişim kontrolü bilgisini kolayca aktarabildiğiniz için iyi çalışıyor
Bilgi veritabanı biçimindeki LLM’lerden pek etkilenmedim, ama arayüz olarak çok daha etkileyiciler
Birkaç gün önce burada işletim sistemi ifadesi geçmişti; o ifade de hoşuma gitti
Bir saat önce de ChatGPT kullandım; ilginç biçimde sorgumu Bing aramasına dönüştürdükten sonra doğru bilgilerle tutarlı şekilde yanıtladı. Açık kaynak bir proje hakkında ayrıntılı bir şey sordum; önceden yalnızca API spesifikasyonunu ve belgeleri biliyordu, bu kez çok iyi çalıştı
LLM’ler özünde güvenli değil; bunun başlıca nedeni de özünde kolay kandırılabilir olmaları. Faydalı olmaları için bir ölçüde kandırılabilir olmaları gerekiyor, ama bu yüzden güvenilmeyen kaynaklardan metin gösteren her uygulama, örneğin web sayfası özetleme gibi özellikler, kötü niyetli saldırganlar tarafından ele geçirilebilir
Prompt injection’dan 14 aydır söz ediyoruz, ama güvenilir bir çözüme yakın görünen hâlâ hiçbir şey yok
Birinin bu sorunu yakında çözmesini gerçekten umuyorum; aksi hâlde LLM’lerle yapmak istediğimiz pek çok şeyi güvenli biçimde inşa etmek zor olacak
[1] https://gandalf.lakera.ai/
Benim bakış açımı biraz daha açıklamak gerekirse, sonunda LLM’in yorumladığı tüm prompt’lara
addslashesgibi bir şey uygulama yönüne gidileceğini düşünüyorum. Bu yüzden bunu “LLM bu sorunu çözebilir” diye basitleştirdim.addslashesın ne yaptığına bakarsak, ardından gelen kod çalıştırmayı etkileyen özel karakterleri kaldıran veya etkisini azaltan kod uygulamaktır. Aynı şekilde LLM’in de girdiyi kendi içinde temizleyip kaçış yapılamaz hale getirebileceğini düşünüyorum.Eklenen slash’leri kaldırabilecek bir giriş karakteri olmadığına katılıyorsak, prompt enjeksiyonunu hafifleten sarmalayıcı bir
addslashesı hiçbir talimatla aşılamaz hale getiren prompt sürümü biraddslashesda olmalı.Bunun sistem kullanılabilirliğini nasıl etkileyeceğini sonuna kadar düşünmedim ama amaçlanan kullanım kapsamı içinde kalırken yine de çoğu işi yapabilmesi gerekir.
Lakera AI’ın buna karşı bir savunması varsa bunu kanıtlayabilmesi gerekir. Enjeksiyonları %100 etkili biçimde engellemenin bir yolu varsa oyunun içinde imkânsız bir aşama olmalıydı. Ama böyle bir yöntem olmadığı için oyunda da böyle bir aşama yok.
Lakera AI olasılıksal savunma yapıyor, ancak pazarlamasında bundan daha güvenilir bir şey varmış gibi gösteriyor. Tamamen güvenilir bir algılayıcıyı kimse sergilemedi ve tüm prompt enjeksiyonlarını kesin olarak engellemenin de bir yolu yok. Lakera AI’ın pazarlamasında bu gerçeği sık sık dışarıda bırakmasını gerçekten yanıltıcı buluyorum.
Yukarıdaki yazı yanlış. Bir enjeksiyon algılayıcısıyla bu belirli saldırıyı %100 güvenilir biçimde yakalamanın bir yolu yok. Lakera AI’da bu saldırıyı bazen yakalayan bir enjeksiyon algılayıcısı olduğu söylenmeli. Ama Lakera pazarlamasını böyle ifade etmiyor. Var olmayan ve araştırmacıların yapabileceğini bile kanıtlayamadığı bir ürünü üstü kapalı satmaya çalışıyor.
Başka bir deyişle, prompt enjeksiyonu savunmasına ihtiyaç duyan ve bunun için para ödeyecek müşteriler arasında belli bir hata payını kabul edebilecek olan kim?
Kullanıcı, önceki konuşmalarının saldırgan tarafından görülmesini amaçlamıyordu. Güvenlik açığı bu.
O konuşma tamamen zararsız da olabilirdi, ama kişisel konular hakkında tavsiyeler de olabilirdi; örneğin tıbbi, finansal veya ilişki danışmanlığı gibi.
Ben bunu benim yerime yapan özel bir GPT yaptım.
Bunu yapma sürecini bir blogda yazdın mı ya da herkese açık paylaştın mı? Oldukça havalı görünüyor.