2 puan yazan GN⁺ 2025-03-29 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Lupin ve Justin, Google’ın 2024 Las Vegas LLM bugSWAT etkinliğinde Gemini önizlemesinin Python sandbox’unu inceleyerek /usr/bin/entry/entry_point dosyasını ve iç dosya yapısını çıkardı; bu zafiyet sayesinde Most Valuable Hacker ödülünü kazandı
  • Sandbox, gVisor ve GRTE tabanlıydı ve dış ağ erişimi engellenmişti; ancak kullanıcı kodu os modülüyle dosya sisteminde gezinebildiği için iç ikili dosyalar konsol çıktı parçaları olarak dışarı aktarılabildi
  • 579 MB’lık entry_point dosyası doğrudan yazdırılınca zaman aşımına uğradığı için seek() ve base64 kodlamasıyla 10 MB’lık parçalar oluşturuldu, Caido Automate ile yinelenen istekler gönderilerek dosya yerelde yeniden birleştirildi
  • Binwalk analizinde google3 dizini ve Gemini sandbox’u ile ilgili Python kodları ortaya çıktı; herkese açık olması onaylanan kodlardan farklı olarak classification.proto ve çeşitli güvenlik proto tanımları istemeden dahil edilmiş gizli iç bilgilerdi
  • Sandbox’un Google Flights gibi araçlarla RPC üzerinden bağlı olduğu yapı ve daha yetkili agent sandbox’larına erişim olasılığı doğrulandı; ancak şüphelenilen iç dosya okuma işleyicisinin RPC ile kullanılamadığı, yalnızca dışarıdan çağrılabildiği görüldü

bugSWAT 2024 ve Gemini önizlemesine erişim

  • Lupin ve Justin, 2024’te Las Vegas’ta düzenlenen Google LLM bugSWAT etkinliğinde Gemini’nin bir sonraki güncelleme önizlemesine erken erişim aldı
  • Google ekibi, yeni özellikleri ve amaçlanan davranışı içeren belgeler sağladı; araştırmacıların hedefi ise özellikleri saldırgan bakış açısından keşfetmek ve test etmekti
  • Basit bir run hello world in python3 istemiyle başladıklarında Gemini kod üretti ve arayüzde Run in Sandbox düğmesini sundu
  • Bu zafiyet araştırmasının sonucunda ikili, söz konusu Las Vegas bugSWAT etkinliğinde Most Valuable Hacker unvanını aldı

Gemini Python sandbox’unun temel yapısı

  • O dönemde Gemini, yapay zekanın ürettiği Python kodunu veya kullanıcının doğrudan yazdığı betikleri Gemini ortamı içinde çalıştıran bir Python Sandbox Interpreter sunuyordu
  • Sandbox, Google’ın gVisor ve GRTE (Google Runtime Environment) altyapısı üzerine kuruluydu
    • gVisor, konteynerleştirilmiş uygulamalar ile ana işletim sistemi arasında sistem çağrılarını yakalayan bir kullanıcı alanı çekirdeğidir
    • Geleneksel işletim sistemi düzeyi izolasyona tamamen dayanmak yerine, çekirdek işlevlerinin küçültülmüş bir alt kümesini uygulayarak saldırı yüzeyini azaltır
  • Araştırmacılar gVisor sandbox kaçışını ayrı ve çok zor bir problem olarak gördü; sandbox’tan kaçış en fazla $100k bounty kapsamına girebiliyordu
  • Bu yaklaşım, sandbox’tan kaçmak yerine sandbox içinde dışarı sızmaması gereken veri olup olmadığını aramaya odaklandı
  • Temel kısıt, sandbox’un yalnızca özel derlenmiş bir Python ikilisini çalıştırabilmesiydi

Dosya sistemi haritalama ve entry_point keşfi

  • Frontend tarafında Python kodu tamamen yeniden yazılarak sandbox içinde keyfi sürümler çalıştırılabiliyordu
  • Shell açılamıyordu; ancak özel Python ikilisinde os modülü bulunduğu için dosya sistemi haritalanabiliyordu
  • Araştırmacılar, dosya ve dizinleri özyinelemeli biçimde listeleyen, boyut ve izinlerini yazdıran bir Python fonksiyonu yazdı
  • lslR("/usr") çağrısının sonucunda /usr/bin/entry/entry_point yolunda bir ikili dosya bulundu
  • Bu dosya 579 MB boyutundaydı ve sonraki analizin ana hedefi oldu

Ağ olmadan ikili dosyanın sızdırılma yöntemi

  • entry_point dosyasını doğrudan base64’e çevirip frontend’e yazdırmaya çalıştıklarında sandbox takıldı ve sonunda zaman aşımına uğradı
  • TCP, HTTP ve DNS üzerinden dışarı sızdırma denemelerinin tamamı başarısız oldu; sandbox dış ağa tamamen kapalı görünüyordu
  • Dış çağrıların engelli olduğu bu durumda araştırmacılar, ikili dosyayı konsol çıktısıyla parçalara bölüp sızdırmayı seçti
  • seek() ile ikili dosya içinde konum değiştirerek veri okudular, base64 ile kodladılar ve 10 MB’lık parçalar halinde çıktı verdiler
  • Caido bir proxy olarak kullanılarak sandbox çağrı istekleri ve sonuçları yakalandı, ardından Automate özelliğiyle istekler tekrar tekrar gönderildi
    • Automate, çok sayıda istek yollamaya ve belirli parametreleri hızlıca değiştirmeye yarayan bir özelliktir
    • Tüm base64 parçaları toplandıktan sonra dosyanın tamamı yerelde yeniden oluşturuldu

entry_point analizinin sonucu

  • file komutu, ilgili dosyayı ELF 64-bit LSB shared object, x86-64, version 1 (SYSV) biçiminde dinamik bağlı bir ikili olarak tanımladı
  • strings komutunun çıktısında Google’ın iç deposuna işaret eden google3 referansları birçok kez göründü
  • Bu referanslar, iç veri yolları ve kod parçalarının varlığına işaret ediyor, ikili içinde Google’a ait özel yazılım izleri bulunduğunu gösteriyordu
  • Binwalk belirleyici ipucunu sağladı
    • İkili dosya içinden tüm dosya yapısını çıkardı
    • Çıkarma sonucunda sandbox düzeni ve iç bileşenler görünür hale geldi

google3 dizini ve Gemini ile ilgili Python kodları

  • Binwalk ile çıkarılan dizin içinde google3 dizini vardı ve bunun altında assistant, base, devtools, file, google, net, pyglib, testing, third_party, util gibi alt dizinler bulunuyordu
  • assistant dizininde YouTube, Google Flights ve Google Maps gibi araç isteklerini işlemek için kullanılan RPC ile ilgili Gemini kodları bulundu
  • Özellikle google3/assistant/boq/lamda/execution_box/ altında sandbox çalıştırma, görsel işleme, araç kullanımı ve RPC arayüzleriyle ilgili Python dosyaları yer alıyordu
  • google3/assistant/boq/lamda/execution_box/images/py_interpreter.py dosyasında yetkisiz betik dökümünü algılamaya yönelik görünen bir dize içeren kod vardı
    • Dize "3AVp#dzcQj$U?uLOj+Gl]GlY<+Z8DnKh" şeklindeydi
  • Sonraki incelemede, bu Python kodunun iç Google3 içeriğiyle birlikte bulunmasının Google Security Team tarafından sürüm öncesi kamuya açık ifşa için onaylandığı netleşti
  • Kodda döküm önleme mekanizmasına benzer unsurlar olsa da, kamuya açık görünürlük durumu onaylıydı

Sandbox ve Google araçlarının RPC yapısı

  • Daha derin analiz, sandbox’un Google Flights gibi Google servislerinden veri almak için dış Google sunucularıyla iletişim kurduğunu doğruladı
  • Bu iletişim, google3.assistant.boq.lamda.execution_box.sandbox_interface içindeki Python sınıfı üzerinden uygulanıyordu
  • _set_reader_and_writer gibi fonksiyonlar RPC için reader ve writer handle’larını ayarlıyordu
    • Varsayılan davranışın /dev/fd/3 ve /dev/fd/4 kullanımı olduğu görüldü
  • run_tool(name, operation_id, parameters) fonksiyonu; araç adı, işlem kimliği ve parametreleri alıp bir RunToolRequest oluşturarak RPC isteği olarak iletiyordu
  • Fonksiyonlar, veriyi protobuf uyumlu biçime serileştirdikten sonra yerel dosya tanımlayıcısı 5e yazıyor, yanıtı ise dosya tanımlayıcısı 7den okuyordu
  • Büyük ikili içinde bulunan proto’ları kullanan araştırmacılar, RPC sunucusuyla alışveriş yapılan mesajları oluşturup Google araçlarını doğrudan çağırabildi

Agent sandbox’ları ve yetki farkları

  • Tüm sandbox’lar aynı Google servisleri kümesine erişemiyordu
  • Fark, sandbox’un frontend’de Python kaynak kodu çalıştırmak için mi yoksa bir Google Agent tarafından mı oluşturulduğuna bağlıydı
  • Google ekibi, Gemini’nin dayandığı araştırma olarak REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS çalışmasını gösterdi
  • ReAct yaklaşımı, dil modelinin akıl yürütme izleri üretmesi ve belirli eylemleri gerçekleştirmesi arasında dönüşümlü ilerleyen bir yapıdır
    • Model, problemi çözerken plan oluşturur ve gerekli veriyi almak için dış kaynaklarla etkileşime girer
    • Soru-cevap, olgu doğrulama, metin tabanlı oyunlar ve web gezintisi gibi görevlerde kullanılan bir çerçeve olarak tanıtılır
  • Kullanıcı Toronto ile New York arasındaki en erken uçuşu sorduğunda Gemini’nin yaklaşık olarak şu akışla çalışabileceği anlatıldı
    • Kullanıcının niyetini uçuş araması olarak yorumlar
    • Google Flights aracına bağlanacak Python kodunu planlar
    • YYZ’den JFK’ye bugün ile gelecek hafta arasındaki uçuşları arayıp tarihe göre sıralayan kod üretir
    • Gerekli yetkilere sahip bir sandbox oluşturur ve kodu çalıştırır
    • Çıktıyı işleyip kullanıcıya yanıt verir

İkincil prompt injection deneyi ve sınırları

  • Araştırmacılar, Gemini’nin planlama aşamasına ikincil prompt injection uygulayarak daha yetkili bir sandbox’a erişip erişemeyeceklerini test etti
  • Google Security Team’in yardımıyla yapılan testlerde, üretim tohumu ve temperature gibi olasılıksal etkenlere bağlı olarak zaman zaman daha yetkili bir sandbox gibi görünen bir ortama erişilebildi
  • Buradaki daha yetkili sandbox, genişletme işlevlerine erişebilen iki yeni dosya tanımlayıcısını kullanabilen bir ortam anlamına geliyordu
    • Dosya tanımlayıcılarının kendisi her zaman mevcuttu, ancak her zaman gerçekten dinleme durumunda değildi
    • Bir agent sandbox’u çağırdığında Google servis genişletme çağrılarını izleyip API’lerle etkileşime girebiliyordu
    • Python yorumlayıcısından erişildiğinde ise bu genişletme işlevlerine ulaşılamıyordu
  • Araştırmacılar, belirli bir mesaj işleyicisinin Google iç altyapısında dosya okumaya izin verebileceğini düşünerek bunun P0 olabileceğini umdu
  • Google Security Team incelemesi sonucunda, şüphelenilen işleyicinin RPC üzerinden kullanılamadığı ve yalnızca dışarıdan çağrılabildiği doğrulandı
  • Deney sınırlı olsa da, kod çalıştırma şu olasılıkların önünü açabiliyordu
    • Reliability: Kod çalıştırma, davranışları daha tutarlı biçimde tetikleyebilir
    • Chaining/Complexity: Birden çok aracı kontrol etme veya parametreleri ayarlama, metne göre daha karmaşık şekilde kurgulanabilir
    • Tool Output Poisoning: Araç çıktısını manipüle etme girişimleri daha etkili hale getirilebilir
    • Leaks: Ortamın gizli bölümleri görünür olursa ek avantajlar sağlayabilir

Gerçekte açığa çıkan proto dosyaları

  • Araştırmacılar, proto dosyalarının çeşitli yollarla sızdırılabildiğini doğruladı
  • Proto dosyaları, sistemin mesaj yapısını ve bilgi alışveriş biçimini tanımlayan Protocol Buffer dosyalarıdır
  • strings entry_point > stringsoutput.txt çalıştırıldıktan sonra Dogfood aranarak bazı iç proto parçaları bulundu
  • Çıkarılan içeriklerin bir bölümü son derece hassas proto meta verisi açıklamaları içeriyordu
    • Kullanıcı verisinin kendisi dahil değildi
    • Bunlar, Google’ın kullanıcı verisini sınıflandırmak için kullandığı iç kategorilerdi
  • Dogfood, Google’ın ürünlerini ve prototiplerini kamuya açık sürümden önce şirket içinde kullanarak test etme ve iyileştirme pratiğini ifade eder
  • Açığa çıkan dosyalardan biri privacy/data_governance/attributes/proto/classification.proto idi
    • Bu dosya, Google içinde verinin nasıl sınıflandırıldığını ele alıyordu
    • İlgili belge referansları da içeriyordu; ancak bu belgeler gizliydi ve kamu erişimine açık değildi

İç güvenlik proto tanımlarının açığa çıkması

  • Aynı strings çıktısında kamuya açık olmaması gereken birçok iç proto dosyası daha ortaya çıktı
  • cat stringsoutput.txt| grep '\.proto' | grep 'security' komutuyla şu hassas dosya yolları görüldü
    • security/thinmint/proto/core/thinmint_core.proto
    • security/thinmint/proto/thinmint.proto
    • security/credentials/proto/authenticator.proto
    • security/data_access/proto/standard_dat_scope.proto
    • security/loas/l2/proto/credstype.proto
    • security/credentials/proto/end_user_credentials.proto
    • security/loas/l2/proto/usertype.proto
    • security/credentials/proto/iam_request_attributes.proto
    • security/util/proto/permission.proto
    • security/loas/l2/proto/common.proto
    • ops/security/sst/signalserver/proto/ss_data.proto
    • security/credentials/proto/data_access_token_scope.proto
    • security/loas/l2/proto/identity_types.proto
    • security/credentials/proto/principal.proto
    • security/loas/l2/proto/instance.proto
    • security/credentials/proto/justification.proto
  • İkili içindeki dizelerde security/credentials/proto/authenticator.proto aranarak bu verinin gerçekten sızdığı doğrulanabildi

Proto’lar neden ikilinin içindeydi?

  • Google Security Team, sandbox içeriğini gözden geçirmiş ve kamuya açık disclosure için onay vermişti
  • Ancak sandbox ikilisini derleyen build pipeline içinde, iç kuralların uygulanması için gerekli olabileceği düşünüldüğünde security proto dosyalarını ikiliye ekleyen otomatik bir adım vardı
  • Bu vakada o adım gerekli değildi; buna rağmen çok gizli iç proto’lar istemeden dahil edildi
  • Araştırmacılar, Google’ın bu tür proto’ları açığa çıkmaması gereken son derece gizli bilgiler olarak gördüğünü bildikleri için bunu bir hata olarak raporladı
  • Hedef organizasyonun iş kurallarını ve güvenlik önceliklerini derinlemesine anlamak, bu tür ince sızıntıları tespit edip raporlamak için kritik önem taşır

Sonuç ve pratik çıkarımlar

  • Sürüm öncesi gelişmiş yapay zeka sistemleri, yalnızca özellik davranışı açısından değil iç çıktı ve artefaktlar açısından da titizlikle test edilmelidir
  • Basit görünen bir sandbox bile birden fazla genişletme işlevine bağlandığında beklenmedik maruz kalma yolları oluşturabilir
  • Birden çok bileşen birlikte çalıştığında küçük bir eksiklik yeni sorun yolları yaratabilir
  • Bu vakada, kamuya açık olması onaylanan iç kod ile istemeden dahil edilen gizli proto’lar birbirinden ayrıldı ve gerçek güvenlik raporunun odağını ikincisi oluşturdu
  • Yapay zeka agent’ları, sandbox yürütme, araç çağrıları ve iç RPC’nin birleştiği ortamlarda yalnızca yürütme izolasyonu değil, sandbox içindeki varlıklar ve build çıktıları da incelenmelidir

Henüz yorum yok.

Henüz yorum yok.