- Rabbit R1 adalah perangkat berbasis aplikasi yang berjalan di atas Android 13 AOSP seperti mode kiosk, dan berhasil dibuat jailbreak tethered untuk mendapatkan root shell tanpa membuka kunci bootloader atau mengubah penyimpanan internal
- Jailbreak ini tetap melewati verifikasi rantai boot MediaTek, lalu mengganti image kustom yang diunggah lewat USB di memori tepat sebelum image
boot terverifikasi benar-benar digunakan
- R1 memakai MediaTek MT6765, DRAM 4GB, dan eMMC 128GB, dan akses
uid=0(root) melalui TCP bind shell tetap dimungkinkan meski ro.boot.verifiedbootstate berada pada status green
- Log di penyimpanan internal menyimpan lokasi GPS, nama WiFi, ID BTS di sekitar, IP eksternal, token pengguna untuk API backend Rabbit, serta MP3 suara Rabbit dan transkripsinya; pada RabbitOS v0.8.112 ditambahkan pengurangan logging dan opsi reset pabrik
- Rabbit Inc. belum merilis source code driver roda gulir hall-effect dan motor kamera berputar yang ditautkan statis ke kernel Linux, sehingga berada dalam kondisi melanggar GPL2, dan belum menanggapi pertanyaan terkait per 22 Juli
Titik awal analisis Rabbit R1
- Rabbit R1 mendapat penilaian negatif dari para pengulas, dan di pasar barang bekas unit baru tersegel dijual di bawah harga resmi 200 dolar
- RabbitOS bukan model AI lokal terpisah, melainkan aplikasi yang berjalan di Android 13 AOSP seperti mode kiosk, dan berkomunikasi dengan cloud lewat API JSON di atas websocket
- API key yang sebelumnya diberitakan bocor diketahui berasal dari source code sisi server, dan tidak disimpan di dalam perangkat
- Setelah itu, pembaruan aplikasi diberi alat obfuscation komersial serta memuat logika untuk mendeteksi alat analisis seperti Magisk dan Frida, sekaligus memverifikasi apakah perangkat itu benar-benar R1
- Karena pelacakan menjadi merepotkan bila hanya mengandalkan analisis statis, penulis membeli R1 di eBay seharga £122 dan melakukan analisis runtime sambil menjaga firmware pabrik sedekat mungkin dengan kondisi aslinya
Perangkat keras R1 dan status keamanan dasarnya
- R1 menggunakan SoC MediaTek MT6765, DRAM 4GB, dan penyimpanan eMMC 128GB
- MT6765 memiliki bootrom exploit
kamakiri yang telah dikenal sejak 2019
- Penyimpanan 128GB terlihat sebagai pilihan yang tidak biasa untuk perangkat yang tampaknya tidak banyak menyimpan data lokal
- Pemilik R1 telah memastikan bahwa mereka bisa membuka kunci bootloader dengan
mtkclient, mem-flash custom ROM, atau melakukan root
- Tujuan analisis bukanlah menjalankan image sistem Android kustom, melainkan melihat isi perangkat sambil mempertahankan firmware yang dipasang pabrik sedekat mungkin dengan kondisi asli
- Pendekatan membuka kunci bootloader dan memasang Magisk memiliki beberapa masalah
- Pembaruan OTA delta bisa rusak
- Bisa terdeteksi oleh kode anti-analisis yang ada saat ini
- Pembaruan di masa depan bisa mendeteksinya dengan memeriksa nilai seperti
ro.boot.verifiedbootstate
- Karena itu diperlukan cara untuk mendapatkan hak root lokal sambil meminimalkan titik perubahan, sehingga permukaan yang bisa dideteksi logika anti-analisis juga sekecil mungkin
Rantai boot berbasis MediaTek
- Rantai boot disusun dengan logika MediaTek, dan titik awalnya adalah bootrom yang tertanam di silikon CPU
- Setelah inisialisasi perangkat keras dasar, bootrom memuat
Preloader dari partisi eMMC boot0 ke SRAM
- Preloader ditandatangani, dan tandatangannya diverifikasi oleh bootrom
- Namun pada R1, ada kemungkinan verifikasi itu sebenarnya tidak dijalankan, sehingga perlu pemeriksaan tambahan
- Preloader menginisialisasi DRAM lalu memuat tiga image dari partisi GPT eMMC ke DRAM
tee: Arm Trusted Firmware, EL3
gz: GenieZone Hypervisor, EL2
lk: Little Kernel, EL1
- LK mengimplementasikan Android Verified Boot 2.0 dan
dm-verity
- Jika bootloader dalam keadaan locked, kegagalan verifikasi akan membuat boot ditolak
- Jika unlocked, sistem menampilkan peringatan dan menetapkan flag terkait orange state
- Jika verifikasi
dm-verity gagal, boot tetap tidak akan berjalan meski bootloader unlocked
- Jika verifikasi lolos, LK akan mengekstrak kernel Linux dan melakukan boot, lalu kernel menjalankan
/init dari initramfs
- R1 menggunakan partisi A/B, sehingga
boot adalah boot_a atau boot_b tergantung slot aktif
- Status lock/unlock bootloader disimpan di partisi GPT
seccfg
seccfg terdiri dari beberapa flag dan hash terenkripsi
- Byte terakhir partisi
frp berpengaruh pada apakah unlock bootloader seperti fastboot flashing unlock diizinkan
carroot: jailbreak tethered tanpa menyentuh penyimpanan
- Root of trust dari rantai kepercayaan berada pada hash sertifikat di efuse CPU dan kode bootrom yang memverifikasinya
- MT6765 memang memiliki bootrom exploit
kamakiri, tetapi pada R1 bahkan tanpa exploit pun mode USB bootloader di brom dan Preloader menerima image DA unsigned untuk dijalankan di memori
- Dibuat payload DA sendiri agar dimuat oleh Preloader ke DRAM
- Alur kerjanya sebagai berikut
- Mengunggah image Android
boot kustom ke DRAM melalui USB
- Memasang hook tepat sebelum Preloader melompat ke LK
- Kembali ke Preloader untuk melanjutkan proses boot normal
- Preloader memuat dan memverifikasi image
tee, gz, dan lk dari eMMC
- Tepat sebelum masuk ke LK, hook dijalankan untuk memasang hook dan patch tambahan di dalam LK
- LK memuat dan memverifikasi partisi
boot asli dari eMMC
- Saat image
boot disalin dari kode AVB ke kode boot Linux, hook menggantinya dengan image boot kustom yang diunggah lewat USB
- Pesan kustom juga ditampilkan di layar
- Intinya, data yang menjadi target verifikasi tetap diverifikasi apa adanya, lalu data yang telah dipatch diganti setelah verifikasi selesai tetapi tepat sebelum digunakan
- Penyimpanan flash sama sekali tidak dimodifikasi, dan seluruh proses jailbreak berlangsung hanya di memori
- Setelah reboot, perangkat kembali ke keadaan bersih
- Ini memudahkan pemulihan ke kondisi semula selama proses reverse engineering
- Image
boot kustom memakai flashable-android-rootkit
- Ia mengganti biner
/init bawaan untuk menyuntikkan payload berupa layanan user space dengan hak tertinggi
- Alat patch image
magiskboot diambil dari proyek Magisk
- Untuk membangun dan menjalankan
magiskboot di Linux biasa, digunakan magiskboot_build
- Payload-nya adalah TCP bind shell sederhana
- Ini bukan cara yang diam-diam dan bisa saja terdeteksi oleh aplikasi Rabbit
- Jika perlu, pendekatan ini bisa disempurnakan nanti
Alat jailbreak berbasis WebSerial dan hasil eksekusinya
- Untuk memanipulasi perangkat MediaTek, mtkclient sebenarnya sudah menyediakan fungsi yang diperlukan, tetapi demi memahami cara kerjanya penulis membuat klien USB Python sendiri
- Lalu ini di-port ke js/WebSerial sehingga Rabbit R1 yang terhubung secara fisik bisa di-jailbreak langsung dari halaman web
- Nama jailbreak ini dipilih sebagai carroot, permainan kata dari rabbit
- Alat eksperimental ini dipublikasikan di r1_jailbreak
- Hasil setelah boot dan terhubung lewat TCP bind shell adalah sebagai berikut
$ rlwrap nc 192.168.0.69 1337
# id
uid=0(root) gid=0(root) groups=0(root) context=u:r:rootkit:s0
# getprop ro.boot.verifiedbootstate
green
- Sistem menganggap secure boot berada pada status
green, tetapi tetap mengizinkan akses root shell
- Domain SELinux
rootkit disetel oleh flashable-android-rootkit
Antarmuka perangkat yang dipakai untuk analisis dan referensi
- Foto bongkaran iFixit untuk R1 menunjukkan test pad bertanda TX dan RX, yang merupakan test pad UART
- UART menyediakan log debug di seluruh rantai boot
- tahap brom menggunakan 115200 baud
- tahap setelahnya menggunakan 921600 baud
- level logika adalah 1.8V, tetapi pada perangkat analisis 3.3V juga bekerja tanpa kerusakan
- Preloader menonaktifkan UART logging jika tombol volume-up tidak ditekan
- Karena R1 tidak memiliki tombol volume-up, Preloader dipatch untuk menonaktifkan pemeriksaan ini
- Preloader yang telah dipatch bisa di-boot melalui USB download mode milik bootrom
- Pada command line kernel Linux, flag berikut dipatch agar log kernel keluar lewat UART
earlycon console=ttyS1,921600
- Dengan kombinasi patch ini, dikumpulkan log UART dari seluruh proses boot
- Dengan menarik test pad di samping tombol reset yang dapat diakses lewat slot SIM ke GND saat reset, perangkat bisa di-boot ke brom USB mode
- Referensi utamanya sebagai berikut
Data pribadi yang ditemukan dalam log internal
- R1 menyimpan log teks harian di
Android/data/tech.rabbit.r1launcher.r1/files/logs/ pada penyimpanan internal
- Per 7 Juli 2024, direktori log berisi file
.log dari berbagai tanggal, dan beberapa file berukuran beberapa MB
- Log tersebut memuat data berikut
- Lokasi GPS yang akurat
- Nama jaringan WiFi
- ID BTS di sekitar yang dikumpulkan bahkan tanpa kartu SIM
- Alamat IP yang menghadap ke internet
- Token pengguna yang dipakai untuk autentikasi API backend Rabbit
- MP3 yang di-encode Base64 dari semua ucapan Rabbit kepada pengguna dan transkrip teksnya
- Dari data ini, lokasi GPS dan ID BTS di sekitar juga dikirim ke server Rabbit
- Ada dua masalah utama
- Perangkat tanpa keamanan perangkat keras yang berarti ini melakukan logging data yang terlalu rinci
- Pengguna biasa tidak punya cara untuk melakukan reset pabrik, sehingga log praktis tersisa secara permanen
- Dalam situasi perdagangan barang bekas yang aktif, log pengguna sebelumnya bisa tertinggal saat perangkat dijual, disumbangkan, atau dibuang
- Melalui advisori keamanan, RabbitOS v0.8.112 mengurangi logging dan menambahkan opsi reset pabrik di pengaturan
- Respons ini dilakukan dengan cepat, dan dinilai sebagai contoh pertama Rabbit yang relatif proaktif dalam menangani masalah privasi dan keamanan pengguna
Seberapa jauh sebenarnya kustomisasi AOSP
- Rabbit pernah menjelaskan, menanggapi laporan bahwa RabbitOS hanyalah aplikasi biasa, bahwa sistem tersebut adalah AOSP yang sangat dikustomisasi dengan “lower level firmware modifications”
- Kustomisasi yang sejauh ini terkonfirmasi terutama berupa penghapusan fitur Android untuk mempertahankan mode kiosk satu aplikasi
- tidak ada navigation bar
- tidak ada notification bar
- ada langkah-langkah untuk mencegah ADB diaktifkan
- Aplikasi bernama
Judy berjalan di latar belakang dan akan menonaktifkan ADB bila sedang aktif
- Pada 4 Juli, @MarcelD505 mempublikasikan metode escape dari kiosk yang dimulai dari browser login captive portal WiFi lalu masuk ke aplikasi Android system settings
- Rabbit menutup jalur ini di pembaruan terbaru dengan menghapus sepenuhnya aplikasi Android system settings dari perangkat
- Perubahan AOSP bespoke yang sejauh ini teramati lebih dekat ke arah menghapus fitur daripada menambahkan kemampuan baru
- Sampai saat ini belum ditemukan alasan teknis yang menunjukkan implementasi RabbitOS saat ini tidak mungkin diwujudkan sebagai aplikasi smartphone biasa
Hal yang perlu diperhatikan pengguna R1 biasa
- Jika khawatir perangkat mungkin telah dijailbreak tanpa diinginkan, cukup matikan lalu nyalakan kembali
- Jika perangkat boot normal tanpa pesan peringatan, umumnya kemungkinan aman
- Namun jika brom diatur untuk mem-boot image Preloader unsigned dari eMMC, ini belum bisa dipastikan dan perlu pengujian tambahan
- Akan lebih baik jika bisa mem-flash ulang dengan image stock firmware tepercaya yang disediakan vendor, tetapi Rabbit tidak menyediakan sarana itu
- Jika R1 dibiarkan tanpa pengawasan, data yang tersimpan di perangkat bisa dengan mudah diekstrak oleh orang yang memiliki pengetahuan terkait
- Sebelum dijual, disumbangkan, atau dibuang, lakukan reset pabrik terlebih dahulu menggunakan opsi pengaturan yang baru ditambahkan
Pelanggaran GPL dan kesimpulan
- Selain roda gulir dan kamera berputar, Rabbit R1 lebih mirip perangkat Android MediaTek biasa daripada perangkat dengan hardware khusus
- Kustomisasi AOSP sebagian besar berbentuk penghapusan fitur bawaan untuk memaksakan mode kiosk satu aplikasi
- Keamanan rantai boot tidak efektif, sehingga perangkat sulit ditinggalkan dalam keadaan aman
- Rabbit Inc. melanggar lisensi GPL2 kernel Linux
- driver deteksi roda gulir hall-effect masih bersifat closed-source
- driver pengendali stepper motor untuk putaran kamera juga masih closed-source
- kedua driver tersebut ditautkan statis ke image kernel GPL
- Pada 12 Juli penulis meminta komentar Rabbit Inc. terkait isi artikel dan rencana kepatuhan GPL, tetapi hingga 22 Juli belum ada tanggapan
- Alat jailbreak tethered yang dipublikasikan adalah alat eksperimental untuk membantu peneliti mengakses R1 miliknya sendiri, dan ke depan dapat membantu pengguna tingkat lanjut memperluas fungsi perangkat
1 komentar
Opini Hacker News
GPL mengharuskan lisensi dan kode sumber dibuka saat diminta, tetapi Truth Social bahkan tidak memublikasikan lisensinya sampai terungkap bahwa mereka memakai kode AGPL, baru setelah itu mereka merilis sumbernya
Penasaran apakah Rabbit juga akan lolos dengan cara yang sama
Dalam praktiknya, pelanggaran yang tidak diketahui pemegang hak tidak bisa dilacak, dan biasanya fokusnya lebih pada membuat pelanggar menjadi patuh daripada menuntut ganti rugi
https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
Saya kira modul kernel punya pengecualian GPL di sisi Linux terlepas dari cara linking-nya, selama tidak perlu memodifikasi kernel itu sendiri
Isi log ini cukup berantakan: ada lokasi GPS yang akurat, nama jaringan WiFi, ID BTS sekitar meski tanpa kartu SIM, alamat IP yang terekspos ke luar, token pengguna untuk autentikasi API backend Rabbit, bahkan MP3 yang dienkode Base64 dari semua hal yang Rabbit katakan kepada pengguna beserta transkrip teksnya
Tidak mengherankan jika perangkat yang dibuat untuk menjawab pertanyaan seperti “restoran enak di dekat sini apa?” mengirim konteks lokasi bersama permintaan, tetapi kalau perangkat terus-menerus melakukan streaming lokasi tanpa alasan, itu patut dikhawatirkan
Nama WiFi memang perlu disimpan untuk koneksi ulang, dan alamat IP yang terlihat di log lokal juga tidak terlalu aneh
Token akses pengguna juga mau tidak mau harus disimpan di perangkat agar bisa terhubung ulang tanpa login setiap kali. Namun meninggalkan token apa adanya di log adalah praktik buruk, dan jika log itu berada di storage yang sama dengan DB atau file konfigurasi terkait, itu sendiri bukan masalah yang sepenuhnya baru. Kalau log langsung diunggah ke server, tentu itu masalah
Kalau ingin perangkat seperti ini bekerja mulus dan terasa ajaib, ia harus terus mendengar, melihat, dan mengirim lokasi. Agar ini benar-benar berjalan baik, dibutuhkan inferensi lokal, dan saya tidak tahu kenapa orang mau membayar untuk benda yang lima tahun lagi akan dibuat Apple dalam versi yang jauh lebih baik, tetapi kalau memang membelinya, cara seperti ini diperlukan
Tidak bisa membenci perusahaan raksasa sambil berharap startup membuat produk bagus tanpa data. Jika Rabbit ingin punya peluang membuat sesuatu yang lebih baik di masa depan, mereka membutuhkan data seperti ini
Kalau mau bilang ini tidak nyaman, harus dijelaskan secara spesifik kenapa tidak nyaman. Sebagian besar bukan sesuatu yang sangat mengkhawatirkan dengan sendirinya
Lucu juga. Saya pernah bekerja di Rabbit, membaca codebase-nya, lalu keluar setelah di-gaslight oleh para eksekutif
Dari jailbreak dan kerentanan yang terlihat dari luar saja, rasanya itu baru puncak gunung es
Rabbit tidak menjawab mungkin karena para pengacaranya sedang meninjau bagaimana cara menggugat
Mereka nyaris tidak diberi jam kerja yang realistis untuk menjawab
Pengembang RabbitOS bisa menambal masalah ini dengan mengatur eFuse agar akses bootloader lewat USB diblokir
Moto juga menangani ini seperti itu beberapa tahun lalu ketika perangkat MediaTek mereka rentan terhadap permukaan serangan bootrom yang sama. Kalau ingatan saya benar, eFuse ini diatur pada tahap LK dan diterapkan lewat pembaruan firmware nirkabel biasa
Artikelnya keren
Perangkat lunaknya terlihat seperti sampah, dan perusahaannya sejauh ini juga tidak tampak bagus
Namun kalau aplikasi kustom bisa dijalankan dengan mudah meski hanya dalam mode kios, form factor ini bisa punya penggunaan yang cukup menarik
Kalau PWA bisa ditempel seadanya, itu jauh lebih cepat daripada merakit sendiri ESP32, baterai, dan layar, dan terlihat seperti perangkat all-in-one yang cukup lumayan
Idealnya, akan bagus kalau bisa berjalan lebih aman tanpa layanan Google, mungkin arah seperti GrapheneOS akan cocok
Saya belum sempat mencari, tetapi penasaran apakah ada contoh penggunaan atau referensi untuk aplikasi kustom satu tujuan seperti ini
Kalau harganya turun ke di bawah 50 dolar, misalnya setelah servernya dimatikan, saat itu saya bisa setuju bahwa ini platform hardware yang lumayan
Sayang sekali, padahal akan bagus kalau produk ini berhasil
Saya harap ini tidak menjadi batu sandungan bagi eksperimen antarmuka pengguna hardware + AI di masa depan. Saya masih setuju dengan gagasan ala Bret Victor bahwa kita bisa melakukan sesuatu yang lebih baik daripada mengetuk dan menggeser persegi panjang kaca
Lebih praktis lagi, smartwatch juga bisa meneruskan kueri ke ponsel
Humane, meski tampaknya tidak benar-benar memecahkan masalah nyata, setidaknya pantas dihargai sampai batas tertentu karena benar-benar mencoba sesuatu yang berbeda. Rabbit R1 hanyalah barang rongsokan murah
Agak lucu bahwa semua atau sebagian besar kesan positif awal terhadap Rabbit berasal dari desain Teenage Engineering
Semoga TE ke depannya lebih selektif memilih klien. Orang di balik Rabbit adalah penipu yang sudah dikenal
Saya bisa saja mencari namanya, tetapi kualitas pencarian sekarang terlalu buruk, jadi sepertinya saya tidak akan melakukannya. Akan berguna kalau ada tautan yang menunjukkan kritiknya lebih detail
Ini seperti Juicero-nya dunia asisten AI
Hanya saja mereka mengira orang akan membayar uang yang tidak masuk akal untuk mesin yang memeras kantong campuran buah pra-potong khusus perusahaan. Semuanya bekerja persis seperti yang dimaksudkan; yang tidak masuk akal adalah model bisnis aslinya
Saya tadinya berharap ada asisten AI open-source yang menjaga privasi, semacam gabungan Mycroft(https://en.wikipedia.org/wiki/Mycroft_(software)) dan Leon(https://getleon.ai)