- Dengan memperoleh akses root dari Sleep Number Hub menggunakan konsol UART dan variabel lingkungan U-Boot, dimungkinkan membuat jalur kontrol lokal tanpa melewati server SleepIQ
- Plugin Homebridge lama memanggil API SleepIQ setiap 5 detik, dan pada skala ribuan pengguna hal itu membebani jaringan Sleep Number sehingga diminta untuk dinonaktifkan
- Perangkat yang menjadi sasaran adalah Sleep Number Hub 360SIQ01D; syarat utamanya meliputi pin UART J16, konsol 115200 baud, drive USB FAT32 atau Ext3, dan pendaftaran kunci publik SSH
- Setelah mendapat akses root, Python 2.7.18 dan
/bam/scriptspada Hub dapat dimanfaatkan untuk menangani pengaturan dan status tempat tidur di jaringan lokal melalui server HTTP pada port 8000 - Hub dapat membuka reverse SSH tunnel ke server Sleep Number, sehingga jika kontrol lokal sudah memadai, lebih aman memutus koneksi internet eksternal dan menggunakan Bluetooth atau kontrol internal
Alasan mencari akses lokal
- Tujuannya adalah mengendalikan tempat tidur Sleep Number di jaringan lokal tanpa melewati server SleepIQ
- Plugin homebridge yang dibuat sebelumnya memungkinkan pengendalian pengaturan tempat tidur dari HomeKit atau otomatisasi
- Khususnya, nilai bed presence yang menunjukkan ada orang di tempat tidur berguna untuk otomatisasi seperti mematikan lampu atau mengunci pintu
- Plugin tersebut memanggil API SleepIQ setiap 5 detik, dan ketika jumlah pengguna bertambah menjadi ribuan, ini membebani jaringan Sleep Number
- Sleep Number meminta agar plugin dinonaktifkan
- Ada juga masalah bahwa branding repositorinya bisa terlihat seperti alat resmi Sleep Number
- Setelah itu, pekerjaan sebelumnya dilanjutkan ke plugin baru homebridge-bed-control
- Plugin baru ini menonaktifkan pemantauan bed presence secara default dan menambahkan peringatan sebelum diaktifkan
Jalur akses yang ditemukan pada perangkat keras Hub
- Awalnya header J10 di dekat CPU diperiksa, tetapi tidak didapatkan data UART
- Pada konfigurasi CPU tersebut, jalur UART tidak dikeluarkan
- Untuk mencari sinyal UART pada header J16 di bagian bawah papan, logic analyzer dihubungkan ke 10 pin header
- Setelah perangkat UART-TTY dihubungkan, akses ke konsol perangkat pun didapatkan
- Flash sempat di-dump untuk memeriksa sistem berkas dan kerentanan, tetapi tidak ditemukan backdoor yang memungkinkan siapa pun login tanpa UART
- Sebagai gantinya, ditemukan backdoor pemeliharaan yang memungkinkan Sleep Number terhubung ke Hub melalui SSH
- Karena Hub terhubung ke jaringan rumah internal, jalur akses ini dapat mengarah ke jaringan internal
- Disarankan memutus koneksi Wi-Fi dan sebisa mungkin memakai kontrol Bluetooth
Perlengkapan dan perangkat target
- Prosedur ini dilakukan pada model Sleep Number Hub 360SIQ01D
- Peralatan yang diperlukan adalah perangkat UART-TTY dan alat untuk menghubungkannya ke papan
- USB-C to UART atau USB-A to UART
- Raspberry Pi Pico W dapat dipasang permanen di dalamnya untuk akses konsol jarak jauh saat SSH tidak berfungsi
- Pin header 2.54mm dan solder, atau penjepit klip PCB
- Untuk berkomunikasi dengan papan, diperlukan konsol serial
- Di Linux dan Mac dapat menggunakan
minicom - Di Windows dapat menggunakan PuTTY
- Di Linux dan Mac dapat menggunakan
- Flash drive USB-A harus berformat FAT32 atau Ext3
- Jika pada Hub yang digunakan sudah ada perangkat USB terpasang, itu mungkin dongle Wi-Fi, dan tanpa perangkat ini bisa terjadi boot loop
Alur inti prosedur akses root
- Perangkat UART dihubungkan ke header J16 pada papan
- pin 1: TX, sinyal masuk ke Hub
- pin 2: RX, sinyal keluar dari Hub
- pin 3: ground
- Konsol serial diatur ke 115200 baud
- Setelah Hub dinyalakan, tekan tombol Space dalam 2 detik untuk menghentikan boot otomatis
- Variabel lingkungan U-Boot sebaiknya dibackup terlebih dahulu dengan
printenv -a- Karena mungkin perlu memulihkan nilai default, perubahan terhadap lingkungan saat ini harus dicatat
- Pada
bootcmd, bagianrun set_bootargs;dihapus agar argumen boot dapat diatur secara manual - Skrip
/initberada di bootrom yang di-hash sehingga tidak bisa diubah langsung, jadi isi/initdiubah saat runtime melaluibootargs- Skrip default mencari berkas terenkripsi yang didekripsi dengan frasa
let_me_root - Dengan mengganti baris dekripsi menggunakan nilai hasil dekripsi, syarat berkas terenkripsi bisa dilewati
- Skrip default mencari berkas terenkripsi yang didekripsi dengan frasa
- Saat boot pertama, diperlukan drive USB yang berisi berkas
let_me_root- Jika setelah boot muncul prompt
root@bam-se:~#di konsol, berarti sudah masuk ke shell root
- Jika setelah boot muncul prompt
- Setelah itu, partisi root di-remount ke mode baca/tulis dan berkas
/root/let_me_rootdibuat agar akses tetap bertahan tanpa USB
Menyiapkan akses SSH
- Setelah mendapatkan prompt root, kunci publik SSH ditambahkan ke
/root/.ssh/authorized_keysuntuk menyiapkan akses jaringan - Kunci SSH harus dibuat di mesin lokal yang akan terhubung
- Contoh perintahnya adalah
ssh-keygen -t ed25519 - Kalimat penjelasannya merekomendasikan kunci
ecdsa, tetapi contoh aktualnya memakaied25519
- Contoh perintahnya adalah
- Setelah kunci publik ditambahkan, koneksi diuji dengan bentuk
ssh root@$hub_ip -i <path to id_ed25519> - Jika koneksi gagal, format
authorized_keysdan isi berkas perlu diperiksa- Disebutkan bahwa berkas itu seharusnya berisi dua kunci
Membuat server kontrol jaringan lokal
- Akses root saja belum cukup untuk menggantikan fungsi kontrol dari aplikasi tempat tidur, sehingga dijalankan server HTTP lokal di dalam Hub
- Hub menyertakan Python 2.7.18
- Pembaruan terakhir Hub tampaknya berasal dari 2018
- Python 2.7.18 memiliki paket
simpleHTTPServeryang menyediakan fungsi yang dibutuhkan
script_server.pymembuka server HTTP pada port 8000 dan menjalankan skrip di dalam/bam/scripts- Jalur URL menjadi nama skrip
- Beberapa parameter kueri
argdapat dikirim untuk digunakan sebagai argumen skrip - Hasil eksekusi ditampilkan di browser
- Skrip disalin ke Hub dengan bentuk
scp -O script_server.py root@$hub_ip:~ - Agar otomatis berjalan setelah reboot, skrip itu perlu ditempelkan ke skrip startup atau ditambahkan sebagai skrip
rc.d
Menyiapkan eksekusi otomatis setelah reboot
- Instance OS yang sedang berjalan beroperasi di dalam chroot yang dibuat oleh skrip
/initdari bootloader - Banyak berkas sistem disimpan pada partisi
tmpfs, sehingga perubahan langsung tidak akan bertahan setelah reboot - Jika partisi disk yang berisi berkas asli di-mount terpisah, berkas
/etcasli yang akan disalin setelah reboot dapat diubah - Buat skrip init berupa
script_server.sh, salin ke Hub, lalu tempatkan ditmp/etc/init.dpada partisi root asli - Tambahkan symbolic link ke
rc0.d,rc3.d,rc4.d,rc5.d, danrc6.dagar dijalankan saat startup dan shutdown - Jika setelah reboot informasi status Hub muncul saat mengakses
http://$hub_ip:8000/bamstatdi browser, berarti server bekerja normal
Kontrol yang tersedia melalui skrip /bio
/biotampaknya merupakan skrip kontrol utama untuk tempat tidur- Perintah dikirim dalam bentuk
/bio?arg=XXXX - Nilai Sleep Number dapat dibaca dan diatur
PSNL,PSNR: membaca nilai pengaturan terakhir sisi kiri dan kanan tempat tidurPSNl,PSNr: membaca nilai saat ini sisi kiri dan kananPSNX: membaca nilai pengaturan terakhir dan nilai saat ini untuk kedua sisiPSNS&arg=L100: mengatur nilai Sleep Number kiri ke 100, dengan rentang nilai 5..100
- Deteksi keberadaan dan pengaturan privasi juga dapat ditangani
SPAU: membaca pengaturan privasiSPAU&arg=on: mengaktifkan pengaturan privasi, nonaktifkan denganoffLBPL,LBPR,LBPX: membaca nilai keberadaan kiri, kanan, atau keduanya
- Fitur Responsive Air, posisi tempat tidur, lampu, dan penghangat kaki juga termasuk
LRSG: membaca pengaturan Responsive Air untuk kedua sisiLRLE&arg=on,LRRE&arg=off: mengubah pengaturan Responsive Air kiri/kananMFST: membaca posisi kepala dan kakiMFUL,MFUR,MFFL,MFFR: mengatur posisi kepala dan kaki kiri/kananMFO3,MFSO: mengatur status serta kecerahan/timer lampu bawah atau stopkontakFWGL,FWGR,FWSL,FWSR: membaca/mengatur level dan timer pemanas kaki kiri/kananSBAS: mengatur nilai dasar tempat tidur
/bio?arg=helpmenampilkan daftar perintah yang dapat dijalankan- Jika pada pemanggilan
helpditambahkan argumen kedua berupa nama perintah, akan muncul informasi rinci tentang perintah tersebut
- Jika pada pemanggilan
- Skrip
biojuga mencakup preset foundation, pengaturan dengkuran, kontrol DualTemp, dan informasi status- Perintah destruktif seperti
factory resetatau kontrol radio perlu digunakan dengan hati-hati - Pada versi
bioyang dipakai penulis, urutan itemMFSOdiLISTsalah, sehingga untuk memanggilnya harus dipindah beberapa baris ke atas
- Perintah destruktif seperti
Area yang bisa diperiksa setelah akses didapat dan kekhawatiran keamanan
- Fungsi kontrol tempat tidur terkonsentrasi di direktori root
/bam- Dengan memeriksa berbagai skrip di dalamnya, dapat dilihat cara kerja Hub
- Upaya dilakukan untuk mencari backdoor yang bisa diakses tanpa UART, tetapi jalur akses yang jelas sudah ditutup
- Saat berkomunikasi dengan server Sleep Number, Hub membuka SSH tunnel dan menyediakan reverse tunnel yang dapat dipakai pengembang untuk pemeliharaan
- Ada kemungkinan pihak luar dapat terhubung langsung ke jaringan rumah internal, sehingga jika skrip kontrol jaringan internal sudah cukup, layak mempertimbangkan memutus koneksi internet eksternal Hub
- Progressive Web App sederhana yang bisa langsung menggantikan aplikasi SleepIQ juga menjadi kandidat langkah berikutnya
1 komentar
Opini Hacker News
Cukup absurd. Dulu saya pernah memakai ranjang seperti ini, tapi itu sebelum semuanya menjadi smart. Ada dua controller berkabel yang terhubung ke pompa, dan di controller ada tampilan angka serta tombol naik/turun
Tidak perlu internet, tidak perlu mikrokontroler berbasis Linux, ranjang tidak mungkin diretas, dan saya bisa tidur dengan nyaman
Misalnya, jika seseorang memiliki gangguan gerak apa pun, dari Parkinson sampai kelumpuhan empat anggota tubuh, terhubung ke controller umum yang bisa bekerja lewat suara atau metode input standar bisa menjadi keuntungan besar. Mereka tidak perlu menghadapi batasan aksesibilitas yang berbeda-beda di tiap produk
Bagi orang yang tidak memiliki disabilitas fisik, sebagian besar perangkat smarthome mungkin tampak nyaris tidak berguna, tetapi bagi orang lain bisa menjadi penyelamat
Saya penasaran dengan bagian “ketika hub berkomunikasi dengan server Sleep Number, ia membuka tunnel SSH dan menyediakan reverse tunnel agar developer bisa mengakses hub untuk maintenance saat diperlukan”
Saya ingin melihat apakah mereka memakai autentikasi public key atau password, dan apakah memakai IP atau DNS saat melakukan tunneling ke rumah. Jika kondisinya pas, sepertinya bisa terbentuk konfigurasi DNS hijacking paling lucu dalam sejarah manusia
Meminjam ungkapan abadi Homer Simpson, ranjang naik dan ranjang turun
Cara baru: karena ranjang Sleep Number terhubung dengan informasi pesanan, bobol Sleep Number untuk menemukan target, masuk ke ranjang orang itu lewat SSH, lalu pivot ke jaringan rumahnya untuk mencuri wallet kripto
Toh uang memang selalu disembunyikan di bawah kasur ;)
Kenapa ranjang harus menjalankan Linux? Kenapa?
Rasanya kita hidup di timeline paling bodoh dari semua timeline yang mungkin. Apa masalahnya dengan ranjang biasa yang tidak berisi RAM 1GB dan sistem operasi lengkap? Di mana-mana sama saja. Mencari mesin cuci yang tidak terhubung ke Wi‑Fi saja sudah jadi pekerjaan, dan membayangkan harus melakukan itu lagi 10 tahun lagi rasanya mengerikan
Sebagai orang yang pernah membobol sekitar O(1000) perangkat “smart”, entah untuk iseng atau mencari uang, saya tidak ingin membawa benda seperti ini ke rumah. Tapi karena kegilaan seperti ranjang bertenaga Linux ini, menghindarinya makin lama makin sulit. Tolong berhenti
Namun saya tidak rindu harus membawa piringan vinyl kosong ke perpustakaan umum untuk mengambil update software. Kalau lupa, bisa muncul kutu kasur
“Produk teknologi paling baru yang saya miliki adalah printer keluaran 2004, dan saya menyiapkan pistol berisi peluru untuk langsung menembaknya kalau mengeluarkan suara yang tidak terduga”
Seabad lalu kita menemukan antibiotik, dan itu kemajuan besar. Setelah itu kita menemukan banyak penyakit yang jelas dan pengobatan yang jelas, dan sekarang yang tersisa adalah hal-hal yang rumit dan subtil. Ranjang ini menjalankan Linux untuk memberi tahu kondisi tidur Anda
Jika tidur Anda buruk, biasanya akan muncul berbagai dampak negatif yang ringan tetapi banyak, dan jika mengetahuinya Anda bisa memperbaikinya. Ini seperti menjalani tes tidur intensitas rendah setiap malam, jadi bisa menjadi informasi yang bernilai
Ranjang Sleep Number harganya ribuan dolar, jadi rasanya kalau ingin menghindarinya, itu masih sangat mungkin
Ini sangat menguntungkan dompet, dan ada kepuasan besar karena tidak mengirim barang yang masih baik ke TPA. Kurangi, gunakan kembali, daur ulang—urutannya memang sesuai tingkat kepentingannya
Awalnya saya benar-benar mengira tulisan ini membahas peretasan ranjang Eight Sleep oleh seseorang yang tidak mau menyebut nama perusahaan secara langsung karena alasan hukum
Lalu saya melihat foto “Number Sleep Hub” yang tampaknya benar-benar ada, dan saya nyaris hilang akal. Ada dua perusahaan yang membuat ranjang berpendingin air, satu Eight Sleep dan satu lagi Sleep Number—timeline ini terlalu aneh. Rasanya generator angka acak pada instance ini mendapat seed yang buruk
https://i.ytimg.com/vi/pMiTq6YkJ2c/maxresdefault.jpg
Jadi orang-orang benar-benar membayar ribuan dolar untuk airbed adjustable kelas atas yang diberi lapisan foam di atasnya
Saya berharap ranjang seperti ini memiliki kontrol fisik yang bisa diraba dan digunakan dalam gelap. Kalau saat sedang berusaha tidur saya harus mengeluarkan smartphone di depan wajah untuk mengaturnya, saya jadi ragu apakah pembuat ranjang dan kasur benar-benar tahu apa yang baik dan buruk untuk kualitas tidur
Ada cara serupa untuk masuk ke Eight Sleep Pod 3 [0]. Beberapa model memiliki kartu MicroSD yang bisa dimodifikasi, sehingga membutuhkan lebih sedikit perangkat keras tambahan
Metode dalam artikel ini mungkin bisa menjadi cara yang bagus untuk mendapatkan akses root pada Pod yang tidak memiliki kartu. Namun, yang baru saja saya ketahui adalah bahwa Eight Sleep memang menandatangani pembaruan firmware, tetapi private key yang dipakai untuk menandatangani pembaruan itu juga dikirim dalam paket yang sama
[0]: https://github.com/bobobo1618/ninesleep
Memang 2.000–4.000 dolar itu mahal, tetapi jika itu biaya sekali bayar untuk dipakai sekitar 10 tahun, masih masuk akal. Namun kalau sudah membayar 4.000 dolar lalu masih diminta membayar 25 dolar per bulan, itu tidak masuk akal
Saya penasaran apakah ada orang yang melakukan hal yang sama di Eight Sleep. Sungguh sangat mengganggu kalau suhu tempat tidur tidak bisa diatur hanya karena internet terputus
Saya tidak akan membeli Sleep Number
Selama beberapa tahun saya tidur di kasur angin, tetapi setelah produsennya mulai mengalihdayakan produksi ke China, jahitan sekat internalnya pecah di dua kasur
Saya berharap orang berhenti menyebarkan omong kosong seperti “mengikuti panduan ini mengharuskan Anda memodifikasi file internal hub Sleep Number dan akan membatalkan garansi”
Sama seperti stiker “garansi batal jika dilepas” yang tidak dapat ditegakkan secara hukum, tidak ada hal yang otomatis membatalkan garansi produk selain penyalahgunaan atau perawatan yang buruk
Jika smart bed rusak, produsen tidak bisa lepas dari kewajiban garansi hanya karena Anda pernah mengutak-atik kontrolernya. Itu juga mencakup garansi tersirat. Beban pembuktian ada pada produsen untuk menunjukkan bahwa konsumen merusak produk, menggunakannya dengan cara yang “tidak wajar”, atau tidak merawatnya dengan benar
Kalau Anda mencoba menyambungkan JTAG lalu tanpa sengaja menjembatani 5V ke rangkaian logika 3,3V dan membakar otak tempat tidurnya, itu tanggung jawab Anda sendiri
Namun kalau catu daya meledak dan kontrolernya rusak, fakta bahwa Anda memasang header JTAG, menempelkan stiker mata, dan mengecatnya merah muda tidak relevan. Mereka harus memperbaikinya
Bahkan jika Anda memodifikasi firmware, produsen harus membuktikan bahwa modifikasi itu adalah penyebab kerusakan
Kita tidak berharap garansi laptop batal hanya karena dipakai bermain gim sehingga menghasilkan banyak panas. Begitu juga jika memasang Firefox atau Linux. Tidak ada alasan untuk berpikir aturannya berubah hanya karena perangkatnya sedikit lebih “bodoh”
Berikutnya mungkin ransomware. “Bayar 1.000 dolar, atau selama sebulan ke depan kamu tidak akan bisa tidur di tempat tidurmu”
Mari lihat beberapa fakta
Tempat tidur Sleep Number memiliki sensor yang mendeteksi detak jantung. Caranya dengan mendeteksi perbedaan tekanan di dalam kasur angin. Pada dasarnya itu tidak jauh berbeda dari mikrofon, dan cukup sensitif
Setelah saya cari, tampaknya mereka menggabungkannya dengan analisis statistik yang cukup masuk akal sehingga bisa mendapatkan data yang cukup akurat. Menarik