- Lupin ve Justin, Google’ın 2024 Las Vegas LLM bugSWAT etkinliğinde Gemini önizlemesinin Python sandbox’unu inceleyerek
/usr/bin/entry/entry_pointdosyası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
osmodü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_pointdosyası doğrudan yazdırılınca zaman aşımına uğradığı içinseek()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
google3dizini ve Gemini sandbox’u ile ilgili Python kodları ortaya çıktı; herkese açık olması onaylanan kodlardan farklı olarakclassification.protove ç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 python3istemiyle 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
osmodü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_pointyolunda 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_pointdosyası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
filekomutu, ilgili dosyayıELF 64-bit LSB shared object, x86-64, version 1 (SYSV)biçiminde dinamik bağlı bir ikili olarak tanımladıstringskomutunun çı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
google3dizini vardı ve bunun altındaassistant,base,devtools,file,google,net,pyglib,testing,third_party,utilgibi alt dizinler bulunuyordu assistantdizininde 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.pydosyası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
- Dize
- 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_interfaceiçindeki Python sınıfı üzerinden uygulanıyordu _set_reader_and_writergibi fonksiyonlar RPC için reader ve writer handle’larını ayarlıyordu- Varsayılan davranışın
/dev/fd/3ve/dev/fd/4kullanımı olduğu görüldü
- Varsayılan davranışın
run_tool(name, operation_id, parameters)fonksiyonu; araç adı, işlem kimliği ve parametreleri alıp birRunToolRequestoluş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 sonraDogfoodaranarak 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.protoidi- 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.protosecurity/thinmint/proto/thinmint.protosecurity/credentials/proto/authenticator.protosecurity/data_access/proto/standard_dat_scope.protosecurity/loas/l2/proto/credstype.protosecurity/credentials/proto/end_user_credentials.protosecurity/loas/l2/proto/usertype.protosecurity/credentials/proto/iam_request_attributes.protosecurity/util/proto/permission.protosecurity/loas/l2/proto/common.protoops/security/sst/signalserver/proto/ss_data.protosecurity/credentials/proto/data_access_token_scope.protosecurity/loas/l2/proto/identity_types.protosecurity/credentials/proto/principal.protosecurity/loas/l2/proto/instance.protosecurity/credentials/proto/justification.proto
- İkili içindeki dizelerde
security/credentials/proto/authenticator.protoaranarak 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.