2 poin oleh GN⁺ 2025-03-29 | Belum ada komentar. | Bagikan ke WhatsApp
  • Lupin dan Justin meneliti sandbox Python di pratinjau Gemini pada Google LLM bugSWAT 2024 di Las Vegas, mengekstrak /usr/bin/entry/entry_point serta 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_point berukuran 579MB mengalami timeout jika dicetak langsung, jadi mereka membuat chunk 10MB dengan seek() dan encoding base64, lalu mengirim permintaan berulang menggunakan Caido Automate dan merakit ulangnya secara lokal
  • Analisis Binwalk mengungkap direktori google3 dan kode Python terkait sandbox Gemini; berbeda dari kode yang disetujui untuk dipublikasikan, classification.proto serta 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_point dan 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 file mengidentifikasi file tersebut sebagai binary dynamic-linked dengan format ELF 64-bit LSB shared object, x86-64, version 1 (SYSV)
  • Output perintah strings memunculkan 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 seperti assistant, base, devtools, file, google, net, pyglib, testing, third_party, dan util
  • 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.py memuat kode yang tampaknya berupa string untuk mendeteksi dump skrip tanpa izin
    • String tersebut adalah "3AVp#dzcQj$U?uLOj+Gl]GlY<+Z8DnKh"
  • 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_writer mengatur handle reader dan writer untuk RPC
    • Perilaku defaultnya tampak menggunakan /dev/fd/3 dan /dev/fd/4
  • run_tool(name, operation_id, parameters) menerima nama alat, ID operasi, dan parameter, lalu membuat RunToolRequest dan 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 descriptor 7
  • 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 mencari Dogfood dan 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
  • Dogfood merujuk 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 strings yang sama, beberapa file proto internal yang seharusnya tidak dipublikasikan juga terlihat
  • Dengan perintah cat stringsoutput.txt| grep '\.proto' | grep 'security', muncul jalur file sensitif berikut
    • 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
  • Dengan memeriksa security/credentials/proto/authenticator.proto di 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.

Belum ada komentar.