1 puan yazan GN⁺ 2025-08-22 | 1 yorum | WhatsApp'ta paylaş
  • Görüntü ölçeklendirme zafiyetleri kullanılarak üretim ortamındaki AI sistemleri hedef alınabiliyor
  • Dışarıdan bakıldığında normal görünen bir görüntü, küçültüldüğünde prompt injection yüküne dönüşerek veri sızıntısına yol açabiliyor
  • Bu saldırı, Google Gemini CLI dahil çeşitli gerçek servislerde doğrulandı ve kullanıcı algısı ile model girdisi arasındaki uyumsuzluk durumunu suistimal ediyor
  • Saldırı tekniği ve etkisi, küçültme algoritmasına ve her bir uygulama biçimine göre değişiyor; açık kaynak araç Anamorpher ile görüntü saldırıları deneysel olarak üretilebiliyor
  • Savunma için girdi önizlemesi sağlanması, güvenli tasarım kalıplarının uygulanması ve kullanıcıdan açık onay alınması öneriliyor

Arka plan ve sorunun tanımı

  • LLM gibi AI sistemlerine sıradan görünen bir görüntü verildiğinde, küçültme sürecinde gizlenmiş çok kipli prompt injection tetiklenerek kullanıcı verilerinin dışarı sızdırıldığı bir saldırı senaryosu bulunuyor
  • Bu zafiyet, modele gerçekte iletilen görüntünün ölçeklendirme sürecinden geçmesinden kaynaklanıyor; bu süreçte saldırganın yerleştirdiği yük görünür hale geliyor

Üretim ortamındaki AI sistemlerini hedef alan görüntü ölçeklendirme saldırıları

  • Bu blog yazısında Gemini CLI, Vertex AI Studio, Gemini web ve API, Google Assistant, Genspark gibi çeşitli gerçek AI ürünlerinde görüntü ölçeklendirme zafiyetinin pratik saldırılarda kullanılabildiği gösteriliyor
  • Anamorpher adlı açık kaynak araç sayesinde bu tür özel görüntüler kolayca üretilebiliyor ve doğrulanabiliyor

Veri sızdırma saldırısı örneği (Gemini CLI)

  • Gemini CLI varsayılan ayarlarla kullanıldığında Zapier MCP sunucusu, kullanıcının onayı olmadan tüm MCP araç çağrılarını otomatik olarak onaylıyor (settings.json içinde trust=True ayarı)
  • Kullanıcı normal görünen bir görüntü yüklediğinde, küçültülmüş görüntüdeki prompt injection nedeniyle Google Calendar verileri saldırganın e-posta adresine sızdırılıyor
  • Gerçek önizleme sunulmadığı için kullanıcı, dönüştürülmüş sonucu ya da saldırının gerçekleşip gerçekleşmediğini anlayamıyor
  • Benzer prompt injection saldırıları daha önce Claude Code, OpenAI Codex gibi çeşitli ajan tabanlı kodlama araçlarında da doğrulandı
  • Bu araçlarda varsayılan olarak güvensiz ayarlar ve sistem kalıpları sık görüldüğünden, köklü önlemler gerekiyor

Ek saldırı örnekleri

  • Vertex AI, Gemini web arayüzü, Gemini API, Google Assistant, Genspark üzerinde de görüntü ölçeklendirme tabanlı prompt injection saldırıları başarıyla gerçekleştirildi
  • Özellikle Vertex AI Studio içinde kullanıcı yalnızca yüksek çözünürlüklü görüntüyü görebildiği için modelin aldığı küçültülmüş görüntüyü inceleyemiyor
  • Sonuç olarak kullanıcı algısı ile gerçek model girdisi arasındaki uyumsuzluk, saldırıyı kolaylaştırıyor
  • Saldırı vektörü çok sayıda sistem ve araca geniş biçimde yayılmış durumda

Görüntü ölçeklendirme saldırısının iç işleyişi

  • Bu saldırı, görüntü küçültme (resampling) algoritmalarının interpolasyon özelliklerini suistimal ediyor
  • Yaygın küçültme algoritmaları arasında Nearest Neighbor, Bilinear, Bicubic Interpolation yer alıyor ve her biri için özelliklerine uygun saldırı teknikleri gerekiyor
  • Kütüphaneler arasında da (Pillow, PyTorch, OpenCV, TensorFlow) anti-aliasing, hizalama, iç hatalar gibi uygulama farkları bulunuyor
  • Saldırganın, her sistemde hangi algoritma ve uygulamanın kullanıldığını parmak izi analizi ile belirlemesi, saldırıyı optimize etmek için gerekli
  • Dama tahtası desenleri, eşmerkezli daireler, band desenleri, Moiré, eğik kenarlar gibi çeşitli test görüntüleriyle algoritma özellikleri ve artefaktlar analiz ediliyor

Görüntü örnekleme prensibi ve Nyquist–Shannon teoremi

  • Bir şerit üzerinde karmaşık desenler varken belirli aralıklarla örnekleme yapıldığında, örnekleme hızı düşükse orijinal desen doğru biçimde yeniden oluşturulamıyor ve bozulma meydana geliyor
  • Bu, Nyquist–Shannon örnekleme teoremi ile açıklanan aliasing etkisi; saldırgan da pikselleri manipüle ederek küçültme sonrasında belirli bir desenin ortaya çıkmasını sağlayabiliyor

Anamorpher: saldırı görüntüsü üretim aracı

  • Anamorpher, yaygın küçültme algoritmalarına (Nearest Neighbor, Bilinear, Bicubic) göre saldırı görüntüleri üretip görselleştirebilen açık kaynak bir araç
  • Örneğin Bicubic Interpolation'da çıktı piksel değeri, 4x4'lük alandaki 16 piksel ve çevre piksellere verilen ağırlıklara göre belirleniyor
  • Saldırgan, yüksek kontrastlı bir görüntü seçerek (ör. koyu siyah arka plan), önemi yüksek piksellerin parlaklığını optimize ediyor (en küçük kareler yöntemi) ve böylece küçültme sonucunun net bir saldırı desenine dönüşmesini sağlıyor
  • Anamorpher, frontend arayüzü ve Python API sunuyor; modüler backend yapısı sayesinde kullanıcılar özel küçültme algoritmalarını da deneyebiliyor

Savunma ve karşı önlemler

  • En güvenli yöntem, görüntü küçültmeyi tamamen kullanmamak ve yüklenebilecek görüntü boyutunu sınırlamak
  • Dönüştürme ve küçültme kaçınılmazsa, CLI ve API dahil tüm giriş kanallarında modele gerçekten verilen görüntünün önizlemesi mutlaka sunulmalı
  • Özellikle görüntü içindeki metnin hassas araç çağrılarını tetikleyememesi için mutlaka açık kullanıcı onayı alınmalı; ayrıca sistem genelinde güvenli tasarım kalıpları ve sistematik önlemler uygulanmalı

Gelecek çalışmalar

  • Mobil ve edge cihazlarda sabit görüntü boyutu kısıtları ve verimsiz küçültme algoritmalarının daha yaygın kullanılması nedeniyle risk daha yüksek olabilir
  • Sesli AI ile birleşim, daha gelişmiş algoritmalar ve injection tespit yöntemleri, anlamsal prompt injection, upscaling artefaktlarının kullanımı gibi alanlarda ek araştırma ve savunma geliştirilmesi gerekiyor

Sonuç

  • Anamorpher şu anda beta aşamasında
  • Uygun geri bildirimler ve iyileştirmelerle birlikte, gelecekte çok kipli ve ajan tabanlı AI sistemlerinin güvenlik araştırmalarına katkı sağlaması bekleniyor

1 yorum

 
GN⁺ 2025-08-22
Hacker News görüşleri
  • İlk başta kafam karışmıştı; makalede prompt injection’ın gerçekte nasıl yapıldığını pek iyi açıklamıyordu… Görselin hex verisini değiştirip ASCII’ye dönüştürme gibi bir yan etki falan sandım
    Sonra fark ettim ki, kelimenin tam anlamıyla <i>görselin içine render edilmiş metni gizleme yöntemiymiş</i>
    Vay canına, gerçekten çok ilginç

    • Bu saldırı yöntemi epeydir tartışılıyor, şu makaleye bakabilirsiniz
      Ürpertici olan tarafı, bir görsel ölçeklendiğinde tamamen farklı bir görsel gibi görünmesini sağlayabilmeniz
      Örneğin bir grubu yasa dışı görseller bulunduruyor diye tutuklamak istiyorsanız, bu ölçekleme hilesiyle görseli bir meme’e, politik mesaja ya da hedef grubun indirmek isteyeceği bir şeye dönüştürebilirsiniz

    • VLM sistemleri geliştiren biri olarak bu gerçekten korkutucu
      Artık VLM’lere özel bir OWASP kılavuzuna ihtiyacımız var
      Neredeyse her ay yeni bir saldırı tekniği duyuyorum
      Bu arada OWASP kısa süre önce bununla ilgili şu kaynağı yayımladı: Multi-Agentic System Threat Modeling Guide

    • İlk başta görseldeki metni hiç fark etmemiştim
      Sorun yalnızca yeniden boyutlandırma değil; asıl mesele, görsele gömülü metnin prompt’un bir parçası gibi ele alınması ve ajanın hangi komutları izlediğine dair şeffaflığın olmaması

    • Asıl ilginç olan, küçültme sırasında görselin farklı görünmesini sağlayan adversarial image
      Downsampling (örnek sayısını azaltma) klasik bir yöntemdir ve burada AI devrede değildir

    • Benim merak ettiğim nokta buydu
      Render edilmiş metni makinenin okuyabilmesi için OCR gerektiğini düşünürdüm; AI neden özellikle bu kadar pahalı bir süreçten geçsin, anlamıyorum
      Eğer bu, multimodal bir sistemin parçasıysa, o metni prompt’tan ayıramıyor olabilir
      Eğer durum buysa, bu kusur gerçekten akıl almaz
      En azından OCR özelliği sonucu otomatik olarak prompt’a enjekte etmemeli; kullanıcıya bildirim gönderip onay alacak bir adım olmalı
      Böyle deterministik olmayan ve kırılgan sistemlerden hoşlanmıyorum
      Keşke gerçekten algoritmalara ve sağlam mühendisliğe geri dönsek

  • Bu sorun yalnızca izinler gevşek olduğunda ortaya çıkıyor
    Ama güncel eğilim daha agentic sistemlere doğru ve bu sistemler çoğu zaman daha gevşek yetkilere ihtiyaç duyuyor
    Örneğin kapınızın önündeki paketi alıp içeri getiren insansı bir robot düşünün
    Paketi alabilmesi için görsel algılama şart
    Biri paketin üzerine bir görsel yerleştirip prompt injection denerse, robotu evdeki değerli eşyaları pencereden dışarı atmaya yönlendirebilir
    Böyle sistemleri prompt injection’a karşı korumak acil bir ihtiyaç bence

    • Buradaki gerçek sorun, görselde prompt bulunması değil; robotun, komutun o eylem için yetkili olmayan bir kaynaktan geldiğini ayırt edememesi
      ML modellerindeki temel sorun şu: reasoning (akıl yürütme), modelin token akışı üzerinden gerçekleşiyor ve bu akış dış girdileri de içerdiğinden, modelin kendi düşünceleriyle dış girdileri etkili biçimde ayırmasını sağlayan bir mekanizma yok

    • Bunun sisteme doğrudan entegre edilmesi gerek
      Örneğin ajanın kolunu kullanarak yıkıcı eylemler yapması engellenmeli
      Eğer makinelerin özgür irade sayesinde insan ahlakı kazanacağını varsayıp sadece 'iyi prompt' ile 'kötü prompt'u ayırt etmeye çalışırsanız, bu sistemlerin ne kadar tehlikeli olduğuna şaşırmaya devam edersiniz
      Kısacası, doğrulanabilir yönetişim ve davranışsal determinizm bu tür sistemler için vazgeçilmez
      Muhtemelen prompt injection önlemlerinden bile daha önemli

    • Robota sahte prompt’ları görmezden gelmesini söyleyen bir prompt verirseniz sorun çözülür

  • Genel olarak, prompt injection problemini görev bazlı bir hiyerarşiyle büyük ölçüde çözmek mümkün olmaz mı diye düşünüyorum
    LLM’in işi daha küçük bileşenlere bölerek yapmasını sağlayabilirsiniz
    Üst seviye görevin LLM’i, alt seviyedeki ayrıntıları serbestçe bilmek zorunda kalmaz; yalnızca sonuçları filtreleyip arıtabilir
    Bu aynı zamanda üst görevdeki LLM örneğinin bağlamını da sınırlandırır ve daha odaklı olmasını sağlar
    Elbette alt görevler veriyi üst göreve geri iletebilir ama sistemi ille de böyle tasarlamak zorunda değilsiniz
    Güvenliğin kritik olduğu görevlerde, üst LLM’in serbest biçimli sonuçlar almaması aslında daha iyi olabilir

    • Sorun şu ki hangi LLM olursa olsun, prompt’u ilk alan LLM prompt injection saldırısına açık hale gelir
  • İyi bir görsel ölçekleme algoritması Nyquist sınırını mutlaka hesaba katmalı
    Mesela bicubic ile görseli orijinal boyutunun 1/3’üne indiriyorsanız, 4x4 yerine 12x12 grid kullanmalısınız
    Uygulanacak ağırlıkları hesaplayan formülü de biraz uyarlayabilirsiniz
    Görselde gamma düzeltmesini geri almak (de-gamma) da şart
    İyi ölçekleme gerçekten çok nadir, yazık

    • Bu sorunun büyük kısmının düşük kaliteli yeniden örnekleme algoritmalarından kaynaklandığını düşünüyorum
      Çünkü ciddi aliasing’in (bilgi bozulması) geçmesine izin veriyorlar
      Makalede de yazdığı gibi, kernel boyutunu yeterince büyütürseniz algoritma iyi olsa bile quantization nedeniyle bir miktar bilgi kalabilir, ama etkisi ciddi biçimde azalır
      Tanınmış kütüphanelerin hâlâ yalnızca mipmapping (önceden farklı boyutlar üretip kullanma yöntemi) kullanıyor olması şaşırtıcı
      İyi yeniden örnekleme filtreleri, 15 yıl önceki CPU’larla bile gerçek zamanlı video işleme için kullanılıyordu
      Gamma düzeltmesi bazen kernel boyutunu artırmaktan daha fazla hesaplama maliyeti yaratabiliyor
      Duruma göre gamma düzeltmesi yerine filtreli yeniden örneklemeyi atlamak gerçekten mantıklı olabilir
  • LLM’lerin güvenlik açısından geleceği gerçekten korkutucu
    Geçmişte çok fazla deneme yanılma sonucu öğrendiğimiz ‘In-band signaling’ ilkesini tamamen yok sayan sistemler kurduk
    Gözle görülebilir komut eklemekten bu tür obfuscation yöntemlerine, ASCII Smuggling’e kadar çok sayıda saldırı vektörü var
    Savunma diye yaptığımız şey ise, deterministik olmayan bir algoritmadan uygunsuz komutları izlememesini kibarca rica etmekten ibaret
    İlgili not: metni Unicode etiketleriyle gizlemek ve bulmak

    • Gittikçe daha fazla geliştirici LLM’lere doğru davranmaları için adeta yalvarıyor
      Bir yandan komik, bir yandan ürkütücü; tam bir Warhammer 40k havası var

    • Diğer seçenek, LLM ya da LLM içeren sistemleri hiç kullanmamak

    • Eskiden php ile kullanıcı girdisini doğrudan string birleştirerek sorgu oluşturup sonra tehlikeli kalıpları tek tek engellemeye çalıştığımız günleri hatırlatıyor
      Veriyle komutu ayıramadığımız için onlarca yıl sonra aynı hatayı tekrar ediyor olmamız üzücü

    • İşin tuhafı, modelde sudo token gibi bir şeyin hiç olmaması beni şaşırtıyor
      Keşke normal token’larla ifade edilemeyen bir sözdizimi olsaydı

    • Sanki eski seri terminal günlerine geri dönmüşüz gibi

  • Bir şeyleri görsellerin içine gizleyerek göndermeyi hiç düşünmemiş olmam gerçekten çok taze bir fikir gibi geldi
    LLM’ler gerçekten tarihteki en kırılgan yazılımlar olabilir
    Gemini’nin öncülünü test ettiğim zamanlarda, ilk mesajı aşırı uzun yazınca system prompt’u itip çıkarabiliyor ve modele her şeyi yaptırabiliyordunuz

  • “This image and its prompt-ergeist” kısmı bana çok çarpıcı geldi

  • Küçültmeden önce görsele biraz gürültü eklemek bu sorunu çözebilir mi diye merak ediyorum

    • Görsel küçültülürken, örnekleme hızına yakın yüksek frekansları kaldıran bir smoothing işlemi gerekir
      Böylece aliasing etkisi azaltılabilir
      ‘Nyquist-Shannon sampling theorem’ diye aratabilirsiniz
      Dijital sinyal işlemede oldukça bilinen bir teoridir

    • Bir dereceye kadar güvenlik önlemi olabilir ama metnin nasıl gizlendiğine ve ne tür gürültü kullandığınıza bağlı olarak etkisi değişir
      Fakat bu yaklaşım gerçekten gerekli olan içeriği de (meşru metin/detaylar vb.) silebilir; yani kesin çözüm değil

  • Bir şeyi kaçırıp kaçırmadığımı merak ediyorum
    Bu saldırı yöntemini, “obfuscation uygulanmış metni görsele enjekte etmek ve… <i>bir sistemin bunu prompt olarak yorumlamasını ummak</i>” şeklinde anlamak doğru mu?

    • Evet
      Bu saldırı, küçültme algoritmasını kötüye kullanarak metni insana görünmeyecek şekilde saklayan çok zekice bir yöntem
      Sistem mimarisine bağlı olarak, ‘insandan gizleme’ kısmı bazen gerekli bile olmayabilir
      LLM’lerde özünde veri ile komut arasında ayrım yok; bu yüzden veri akışına komut karıştığında modelin davranışını kontrol etmek her zaman mümkündür
      Biyografimde buna benzer bir örnek de yazmıştım

    • “Obfuscation uygulanmış metni görsele koyup, sistemin onu prompt olarak yorumlamasını ummak”
      Burada eksik olan nokta, “prompt”un ayrıcalıklı bir girdi olduğu varsayımı
      Gerçekte prompt, toplam girdinin sadece bir parçası ve model tüm girdilere aynı şekilde davranıyor
      Bu yüzden uzun zamandır dolaşımda olan “önceki tüm girdileri yok say ve…” türü saldırılar hâlâ işe yarıyor

  • Modelin neden görsel içindeki metinle metin prompt’unu izlemeyi ayırt edemediğini merak ediyorum

    • Hem görsel içindeki metinde hem de normal metin prompt’larında model saldırganın komutlarına kolayca teslim olabilir