- Lupin dan Justin meneliti sandbox Python di pratinjau Gemini pada Google LLM bugSWAT 2024 di Las Vegas, mengekstrak
/usr/bin/entry/entry_pointserta struktur file internal, dan memenangkan penghargaan Most Valuable Hacker berkat kerentanan ini - Sandbox tersebut berbasis gVisor dan GRTE, dengan jaringan eksternal diblokir, tetapi kode pengguna dapat menelusuri filesystem melalui modul
os, sehingga binary internal bisa dikeluarkan sebagai potongan output konsol entry_pointberukuran 579MB mengalami timeout jika dicetak langsung, jadi mereka membuat chunk 10MB denganseek()dan encoding base64, lalu mengirim permintaan berulang menggunakan Caido Automate dan merakit ulangnya secara lokal- Analisis Binwalk mengungkap direktori
google3dan kode Python terkait sandbox Gemini; berbeda dari kode yang disetujui untuk dipublikasikan,classification.protoserta beberapa definisi proto keamanan merupakan informasi internal rahasia yang tidak sengaja ikut disertakan - Terungkap bahwa sandbox terhubung lewat RPC ke alat seperti Google Flights dan ada kemungkinan akses ke sandbox agen dengan hak lebih tinggi, tetapi handler pembacaan file internal yang dicurigai tidak dapat digunakan melalui RPC dan hanya bisa dipanggil dari luar
bugSWAT 2024 dan akses pratinjau Gemini
- Lupin dan Justin mendapat akses awal ke pratinjau pembaruan Gemini berikutnya pada acara Google LLM bugSWAT 2024 di Las Vegas
- Tim Google menyediakan dokumen berisi fitur baru dan perilaku yang dimaksudkan, dan tujuan para peneliti adalah menjelajahi serta menguji fitur dari sudut pandang penyerang
- Saat memulai dengan prompt sederhana
run hello world in python3, Gemini membuat kode dan menyediakan tombol Run in Sandbox pada antarmuka - Berkat hasil riset kerentanan ini, keduanya memperoleh gelar Most Valuable Hacker di bugSWAT Las Vegas tersebut
Struktur dasar sandbox Python Gemini
- Saat itu Gemini menyediakan Python Sandbox Interpreter untuk menjalankan kode Python buatan AI atau skrip yang ditulis langsung oleh pengguna di dalam lingkungan Gemini
- Sandbox dibangun berbasis gVisor Google dan GRTE (Google Runtime Environment)
- gVisor adalah kernel ruang pengguna yang mencegat system call antara aplikasi dalam container dan sistem operasi host
- Alih-alih hanya bergantung pada isolasi level OS tradisional, gVisor mengimplementasikan subset fungsi kernel yang diminimalkan untuk mengurangi permukaan serangan
- Para peneliti memandang escape dari sandbox gVisor sebagai masalah sulit tersendiri, dan sandbox escape dapat memenuhi syarat untuk bounty hingga $100k
- Pendekatan kali ini bukan keluar dari sandbox, melainkan mencari apakah ada data di dalam sandbox yang seharusnya tidak terekspos ke luar
- Batasan utamanya adalah sandbox hanya dapat menjalankan binary Python yang dikompilasi khusus
Pemetaan filesystem dan penemuan entry_point
- Dari frontend, kode Python dapat ditulis ulang sepenuhnya sehingga versi arbitrer bisa dijalankan di sandbox
- Shell tidak bisa dijalankan, tetapi binary Python khusus tersebut menyertakan modul
os, sehingga pemetaan filesystem memungkinkan - Para peneliti menulis fungsi Python untuk mencantumkan file dan direktori secara rekursif, sekaligus mencetak ukuran dan izinnya
- Hasil pemanggilan
lslR("/usr")menemukan file binary di/usr/bin/entry/entry_point - File ini berukuran 579MB dan kemudian menjadi target utama analisis
Cara membocorkan binary tanpa jaringan
- Saat mencoba langsung melakukan encoding base64 pada
entry_pointdan mencetaknya ke frontend, sandbox berhenti merespons dan akhirnya timeout - Semua upaya eksfiltrasi melalui TCP, HTTP, dan DNS gagal, dan sandbox tampak sepenuhnya terisolasi dari jaringan eksternal
- Dengan panggilan keluar diblokir, para peneliti memilih metode membocorkan binary dalam potongan melalui output konsol
- Mereka membaca binary dengan memindahkan posisi menggunakan
seek(), meng-encode dengan base64, lalu mencetaknya sebagai chunk 10MB - Caido digunakan sebagai proxy untuk menangkap permintaan pemanggilan sandbox dan hasilnya, lalu fitur Automate dipakai untuk mengirim permintaan berulang
- Automate adalah fitur untuk mengirim banyak permintaan dan mengubah parameter tertentu dengan cepat
- Setelah semua chunk base64 dikumpulkan, file utuh direkonstruksi secara lokal
Hasil analisis entry_point
- Perintah
filemengidentifikasi file tersebut sebagai binary dynamic-linked dengan formatELF 64-bit LSB shared object, x86-64, version 1 (SYSV) - Output perintah
stringsmemunculkan beberapa referensi google3 yang mengarah ke repositori internal Google - Referensi ini mengindikasikan adanya jalur data internal dan potongan kode, serta menunjukkan bahwa jejak perangkat lunak proprietary Google ada di dalam binary
- Binwalk memberikan petunjuk penentu
- Mengekstrak seluruh struktur file dari dalam binary
- Hasil ekstraksi mengungkap layout sandbox dan komponen internalnya
Direktori google3 dan kode Python terkait Gemini
- Di dalam direktori yang diekstrak dengan Binwalk terdapat direktori
google3, yang mencakup subdirektori sepertiassistant,base,devtools,file,google,net,pyglib,testing,third_party, danutil - Di direktori
assistant, ditemukan kode Gemini terkait RPC yang digunakan untuk memproses permintaan alat seperti YouTube, Google Flights, dan Google Maps - Khususnya di bawah
google3/assistant/boq/lamda/execution_box/, terdapat file Python yang terkait dengan eksekusi sandbox, pemrosesan gambar, penggunaan alat, dan antarmuka RPC google3/assistant/boq/lamda/execution_box/images/py_interpreter.pymemuat kode yang tampaknya berupa string untuk mendeteksi dump skrip tanpa izin- String tersebut adalah
"3AVp#dzcQj$U?uLOj+Gl]GlY<+Z8DnKh"
- String tersebut adalah
- Dalam peninjauan berikutnya, penyertaan internal Google3 pada kode Python ini diputuskan sebagai pilihan yang telah disetujui Google Security Team untuk eksposur publik sebelum rilis
- Kode tersebut memiliki elemen yang tampak seperti mekanisme anti-dump, tetapi eksposur publiknya sendiri sudah disetujui
Struktur RPC antara sandbox dan alat Google
- Analisis lebih dalam mengonfirmasi bahwa sandbox berkomunikasi dengan server Google eksternal untuk mengambil data layanan Google seperti Google Flights
- Komunikasi ini diimplementasikan melalui kelas Python di
google3.assistant.boq.lamda.execution_box.sandbox_interface - Fungsi seperti
_set_reader_and_writermengatur handle reader dan writer untuk RPC- Perilaku defaultnya tampak menggunakan
/dev/fd/3dan/dev/fd/4
- Perilaku defaultnya tampak menggunakan
run_tool(name, operation_id, parameters)menerima nama alat, ID operasi, dan parameter, lalu membuatRunToolRequestdan mengirimkannya sebagai permintaan RPC- Fungsi-fungsi tersebut bekerja dengan menserialisasi data ke format kompatibel protobuf, menulisnya ke file descriptor lokal
5, dan membaca respons dari file descriptor7 - Dengan proto yang ditemukan di binary besar tersebut, para peneliti dapat membuat pesan untuk bertukar dengan server RPC dan memanggil alat Google secara langsung
Sandbox agen dan perbedaan hak akses
- Tidak semua sandbox dapat mengakses kumpulan layanan Google yang sama
- Perbedaannya bergantung pada apakah sandbox dibuat untuk menjalankan kode sumber Python dari frontend, atau dibuat oleh Google Agent
- Tim Google menunjukkan riset yang menjadi dasar Gemini, yaitu REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS
- Pendekatan ReAct memiliki struktur di mana model bahasa bergantian menghasilkan jejak penalaran dan menjalankan tindakan tertentu
- Model menyelesaikan masalah dengan membuat rencana dan berinteraksi dengan sumber eksternal untuk mengambil data yang diperlukan
- Pendekatan ini diperkenalkan sebagai framework yang diterapkan pada tugas seperti tanya jawab, pemeriksaan fakta, game berbasis teks, dan penjelajahan web
- Jika pengguna menanyakan penerbangan paling awal antara Toronto dan New York, Gemini kira-kira dapat memiliki alur berikut
- Menafsirkan maksud pengguna sebagai pencarian penerbangan
- Merencanakan kode Python untuk terhubung ke alat Google Flights
- Membuat kode untuk mencari penerbangan dari YYZ ke JFK dari hari ini hingga pekan depan dan mengurutkannya berdasarkan tanggal
- Membuat sandbox dengan izin yang diperlukan dan menjalankan kode
- Memproses output dan menjawab pengguna
Eksperimen prompt injection sekunder dan batasannya
- Para peneliti bereksperimen memasang prompt injection sekunder pada tahap perencanaan Gemini untuk melihat apakah mereka dapat mengakses sandbox dengan hak lebih tinggi
- Berdasarkan pengujian dengan bantuan Google Security Team, bergantung pada faktor probabilistik seperti seed generasi dan temperature, mereka kadang dapat mengakses lingkungan yang tampak seperti sandbox dengan hak lebih tinggi
- Sandbox dengan hak lebih tinggi di sini berarti lingkungan yang dapat menggunakan dua file descriptor baru untuk mengakses ekstensi
- File descriptor itu sendiri selalu ada, tetapi tidak selalu benar-benar melakukan listen
- Saat agen memanggil sandbox, panggilan ekstensi layanan Google dapat dipantau sehingga API bisa diinteraksikan
- Jika diakses dari interpreter Python, ekstensi tersebut tidak dapat diakses
- Para peneliti menduga handler pesan tertentu mungkin memungkinkan pembacaan file dari infrastruktur internal Google, sehingga mereka berharap ada kemungkinan P0
- Hasil peninjauan Google Security Team memastikan bahwa handler yang dicurigai tersebut tidak dapat digunakan melalui RPC dan hanya dapat dipanggil dari luar
- Meski eksperimennya terbatas, eksekusi kode dapat membuka kemungkinan berikut
- Reliability: menjalankan kode dapat memicu perilaku secara lebih konsisten
- Chaining/Complexity: pengendalian beberapa alat atau penyesuaian parameter dapat disusun lebih kompleks dibandingkan teks
- Tool Output Poisoning: manipulasi output alat dapat dicoba dengan lebih efektif
- Leaks: jika bagian tersembunyi dari lingkungan terekspos, hal itu dapat memberi keuntungan tambahan
File proto yang benar-benar terekspos
- Para peneliti mengonfirmasi bahwa file proto dapat dibocorkan dengan beberapa cara
- File proto adalah file Protocol Buffer yang berperan sebagai blueprint untuk mendefinisikan struktur pesan sistem dan cara pertukaran informasi
- Setelah menjalankan
strings entry_point > stringsoutput.txt, mereka mencariDogfooddan menemukan sebagian proto internal - Sebagian konten yang diekstrak memuat deskripsi metadata proto yang sangat sensitif
- Tidak mencakup data pengguna itu sendiri
- Melainkan kategori internal yang digunakan Google untuk mengklasifikasikan data pengguna
Dogfoodmerujuk pada praktik di Google untuk menggunakan produk dan prototipe sendiri secara internal sebelum rilis publik, guna menguji dan memperbaikinya- Salah satu file yang terekspos adalah
privacy/data_governance/attributes/proto/classification.proto- File ini membahas bagaimana data diklasifikasikan secara internal di Google
- File tersebut juga menyertakan referensi dokumentasi terkait, tetapi dokumen-dokumen itu bersifat rahasia dan tidak ditujukan untuk akses publik
Eksposur definisi proto keamanan internal
- Dari output
stringsyang sama, beberapa file proto internal yang seharusnya tidak dipublikasikan juga terlihat - Dengan perintah
cat stringsoutput.txt| grep '\.proto' | grep 'security', muncul jalur file sensitif berikutsecurity/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
- Dengan memeriksa
security/credentials/proto/authenticator.protodi string binary, terlihat bahwa data tersebut benar-benar terekspos
Mengapa proto masuk ke dalam binary
- Google Security Team telah meninjau isi sandbox dan memberi persetujuan untuk disclosure publik
- Namun pipeline build kompilasi binary sandbox memiliki tahap otomatis yang menambahkan file proto keamanan ke binary jika dianggap mungkin diperlukan untuk penegakan aturan internal
- Dalam kasus ini, tahap tersebut tidak diperlukan, tetapi akibatnya proto internal yang sangat rahasia ikut disertakan tanpa sengaja
- Karena para peneliti mengetahui bahwa Google memperlakukan proto semacam ini sebagai informasi sangat rahasia yang tidak boleh dipublikasikan, mereka melaporkannya sebagai bug
- Untuk mengidentifikasi dan melaporkan eksposur yang subtil seperti ini, diperlukan pemahaman mendalam tentang aturan bisnis dan prioritas keamanan organisasi target
Kesimpulan dan implikasi praktis
- Sistem AI mutakhir sebelum rilis perlu diuji secara menyeluruh tidak hanya pada perilaku fitur, tetapi juga artefak internalnya
- Sandbox yang tampak sederhana pun, ketika terhubung dengan berbagai ekstensi, dapat menciptakan jalur eksposur yang tidak terduga
- Saat beberapa komponen bekerja bersama, kelalaian kecil dapat membentuk jalur masalah baru
- Dalam kasus ini, kode internal yang telah disetujui untuk dipublikasikan dibedakan dari proto rahasia yang tidak sengaja ikut disertakan, dan yang terakhir menjadi inti laporan keamanan sebenarnya
- Dalam lingkungan yang menggabungkan agen AI, eksekusi sandbox, pemanggilan alat, dan RPC internal, yang perlu ditinjau bukan hanya isolasi eksekusi, tetapi juga aset di dalam sandbox dan artefak build
Belum ada komentar.