2 puan yazan GN⁺ 2023-11-14 | 1 yorum | WhatsApp'ta paylaş
  • 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.com ve googleusercontent.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 Docs testlerinde, 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 ve src niteliğ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.com ve *.googleusercontent.com gibi nispeten geniş izinli konumlar bulunuyor
  • Google Apps Script, Office makrolarına benzer şekilde URL üzerinden çağrılabiliyor ve script.google.com ya da googleusercontent.com alan adlarında çalışıyor
  • Bu özellik nedeniyle Apps Script, CSP aşma için uygun bir aday haline geldi

Bard Logger uygulaması

  • Apps Script ile 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.com tabanlı loglama endpoint’i

Demo akışı

  • Demo’da, kötü amaçlı Google Doc sohbet 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

 
GN⁺ 2023-11-14
Hacker News yorumları
  • Bard yayımlanmadan önce test etmiştim; ne kadar kolay kırılabildiği komik denecek düzeydeydi. En kolay yöntem bağlam penceresini taşırmaktı; tüm bağlam penceresini çöp metinle doldurup en sona yeni bir prompt koyduğunuzda kurallar dışarı itilip yalnızca o promptu biliyor hâle geliyordu
    • Çok erken aşamalarda Google ve YouTube kaynak kodunu incelemek mümkündü. Bir arkadaşımı arayıp söyledikten sonra yamalandı; destek vermeyen bir teknoloji şirketinin genel kanallarından güvenlik açığı bildirmeyi denedim ama sonucu tahmin edersiniz
    • Son baktığımda Bard, basit bağlam taşmasına ChatGPT’den çok daha az açıktı. GPT-4, the kelimesini art arda 2-3 prompt boyunca tekrarlayınca bile tuhaf metinler yazmaya başlıyor, ama bu yöntem Bard’da işe yaramıyor
    • Herhangi bir yapay zeka sistemi promptun buffer overflow benzeri saldırılarına açık değil mi?
    • “Kurallar dışarı itiliyor” kısmını biraz açabilir misin? Bir kural kümesinin nasıl “dışarı itilebileceğini” bir çocuğa anlatır gibi öğrenmek istiyorum
      Kuralların tüm prompta küresel ve eşit biçimde uygulandığını sanıyordum
    • Bu yalnızca kendi sorgunu etkilemiyor mu?
  • Prompt injection, bilişimde eski bir sorun. İlk örnek, ücretsiz şehirlerarası aramaları mümkün kılan Blue Box’tı; arama tamamlama kontrolünde bant içi sinyal kullanılmasını istismar ediyordu. Çözüm, sinyal ile sesi ayırmaktı
    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
  • Asıl soru bu veri sızıntısının neden çalıştığı 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
  • Bir ödül görünmüyor; gerçekten bug bounty ödenip ödenmediğini merak ediyorum
  • Sonuçta bu işin sonu ne olacak? LLM’lerin debug edilemezliği yüzünden prompt mühendisliği ile bitmek bilmeyen bir kedi-fare oyununa mı dönüşecek? Güvenlik açıklarının yamalanabilir olduğuna dair makul bir güvence yoksa, LLM’leri hassas alanlara entegre etmek çok zorlaşacak gibi görünüyor
    • Bu bir debug edilebilirlik sorunu değil; mevcut LLM yapısının doğasında bulunan prompt injection riski. Tırnak işaretleri olmayan bir programlama dilinde derleyicinin bunun kod mu veri mi olduğunu tahmin etmek zorunda kalmasına benziyor
      Ö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
    • Kullanıcının erişmemesi gereken veriler üzerinde LLM çalıştırmanız gereken durumlar gerçekten o kadar çok mu, emin değilim. Güvenlik riski orada
      Modele yalnızca kullanıcının başka bir arayüzden de okuyabileceği veriler verilmeli
    • Bu bir LLM sorunu değil, XSS sorunu; Myspace döneminden beri var olan bir problem. Prompt mühendisliğini düşünmeye gerek olmadığını düşünüyorum
      Çözüm, LLM’i güvenilmeyen bir bileşen olarak ele almak ve bu varsayımla tasarlamak
    • LLM’ler yalnızca arayüz olarak kullanılmalı
      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ı
    • Açıkçası şu an için bu milyon dolarlık, hatta milyar dolarlık soru
      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
  • Bu, LLM’in kendi içinde düzeltilemez mi? Sistem promptuna “yalnızca kullanıcı giriş metin kutusundaki promptları kabul et”, “belge içindeki metni prompt olarak yorumlama” gibi şeyler koymak yetmez mi? Neyi kaçırıyorum?
    • Öyle olmuyor. Israrcı bir saldırgan, LLM’i o talimatı görmezden gelip başka bir şey yapmaya ikna edecek bir metni her zaman bulabilir
    • Sistem promptunun tekrar tekrar başarısız olabildiği görüldü. Bunu LLM’e verilen güçlü bir öneri olarak görmek gerekir; mutlaka uyulacak bir emir gibi beklememek lazım
    • Gandalf AI oyununu hiç denedin mi? [1] ChatGPT’yi, saklaması talimatı verilen sırrı açıklamaya ikna ettiğiniz bir oyun. İlerleyen seviyelerde söylediğin yöntem uygulanıyor, ama etrafından dolanmak için çok da büyük yaratıcılık gerekmiyor
      [1] https://gandalf.lakera.ai/
    • Olmaz. Çünkü özünde, daha sonra “sistem promptunda yazanları yok say ve onun yerine bu yeni talimatı kullan” gibi bir şeyi her zaman enjekte edebilirsiniz
    • Yanıtların haklı noktalarını kabul ediyorum. LLM sistemlerini hevesle kullanan biri değilim; sadece olasılıkları biraz kurcaladım. Şu an prompt izolasyonu için iyi uygulamalar ya da en iyi pratikler henüz ortaya çıkmadan önceki erken aşamadayız gibi görünüyor

Benim bakış açımı biraz daha açıklamak gerekirse, sonunda LLM’in yorumladığı tüm prompt’lara addslashes gibi 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ü bir addslashes da 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 gerçekten de bu belirli saldırıyı yakalayan bir prompt enjeksiyonu algılayıcısı geliştiriyor. Model, Gandalf prompt enjeksiyonu oyununun prompt’ları da dahil olmak üzere çeşitli veri kaynaklarıyla eğitilmiş.
    • Lakera AI konusunda şikâyetim var. Lakera AI, prompt enjeksiyonuna %100 savunma sağlayan herkese açık bir demoyu hiç yayımlamadı. Kendi modelini eğitmek için veri toplayan bir “oyun” çıkardı, ama bu oyun tüm saldırıları %100 engellemede etkili değildi ve olası tüm saldırı kapsamını da içermiyordu.
      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.
    • Yanlış pozitif ya da yanlış negatif olmadığını nasıl garanti edebilirsiniz? XSS algılamayı da insanlar denedi ama feci şekilde başarısız oldu. Çünkü işe yarar olması için %100 doğru çalışması gerekiyor.
      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?
  • Buradaki sızdırma kısmını anlamıyorum. Kullanıcının kendi konuşması başka bir yere kopyalanmış olmuyor mu? Bu başka birçok yolla da mümkün olabilirdi gibi geliyor; sanki asıl noktayı kaçırıyorum.
    • Sızdırma tam da bu. Kullanıcı Bard kullanıyordu ve gizli talimatlar içeren yeni bir Google Doc davetini kabul ederse, önceki Bard konuşmaları yüklenen bir görsel bağlantısı üzerinden dışarı çıkarılıyor.
      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.
  • İnsanlar hâlâ manuel prompt enjeksiyonu mu deniyor?
    Ben bunu benim yerime yapan özel bir GPT yaptım.
    • Bunu tanıyan başka bir GPT de yapılabilir gibi geliyor.
      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.