2 poin oleh GN⁺ 2024-07-02 | 1 komentar | Bagikan ke WhatsApp
  • 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/scripts pada 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
  • 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, bagian run set_bootargs; dihapus agar argumen boot dapat diatur secara manual
  • Skrip /init berada di bootrom yang di-hash sehingga tidak bisa diubah langsung, jadi isi /init diubah saat runtime melalui bootargs
    • 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
  • 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
  • Setelah itu, partisi root di-remount ke mode baca/tulis dan berkas /root/let_me_root dibuat agar akses tetap bertahan tanpa USB

Menyiapkan akses SSH

  • Setelah mendapatkan prompt root, kunci publik SSH ditambahkan ke /root/.ssh/authorized_keys untuk 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 memakai ed25519
  • Setelah kunci publik ditambahkan, koneksi diuji dengan bentuk ssh root@$hub_ip -i <path to id_ed25519>
  • Jika koneksi gagal, format authorized_keys dan 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 simpleHTTPServer yang menyediakan fungsi yang dibutuhkan
  • script_server.py membuka server HTTP pada port 8000 dan menjalankan skrip di dalam /bam/scripts
    • Jalur URL menjadi nama skrip
    • Beberapa parameter kueri arg dapat 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 /init dari 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 /etc asli yang akan disalin setelah reboot dapat diubah
  • Buat skrip init berupa script_server.sh, salin ke Hub, lalu tempatkan di tmp/etc/init.d pada partisi root asli
  • Tambahkan symbolic link ke rc0.d, rc3.d, rc4.d, rc5.d, dan rc6.d agar dijalankan saat startup dan shutdown
  • Jika setelah reboot informasi status Hub muncul saat mengakses http://$hub_ip:8000/bamstat di browser, berarti server bekerja normal

Kontrol yang tersedia melalui skrip /bio

  • /bio tampaknya 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 tidur
    • PSNl, PSNr: membaca nilai saat ini sisi kiri dan kanan
    • PSNX: membaca nilai pengaturan terakhir dan nilai saat ini untuk kedua sisi
    • PSNS&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 privasi
    • SPAU&arg=on: mengaktifkan pengaturan privasi, nonaktifkan dengan off
    • LBPL, 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 sisi
    • LRLE&arg=on, LRRE&arg=off: mengubah pengaturan Responsive Air kiri/kanan
    • MFST: membaca posisi kepala dan kaki
    • MFUL, MFUR, MFFL, MFFR: mengatur posisi kepala dan kaki kiri/kanan
    • MFO3, MFSO: mengatur status serta kecerahan/timer lampu bawah atau stopkontak
    • FWGL, FWGR, FWSL, FWSR: membaca/mengatur level dan timer pemanas kaki kiri/kanan
    • SBAS: mengatur nilai dasar tempat tidur
  • /bio?arg=help menampilkan daftar perintah yang dapat dijalankan
    • Jika pada pemanggilan help ditambahkan argumen kedua berupa nama perintah, akan muncul informasi rinci tentang perintah tersebut
  • Skrip bio juga mencakup preset foundation, pengaturan dengkuran, kontrol DualTemp, dan informasi status
    • Perintah destruktif seperti factory reset atau kontrol radio perlu digunakan dengan hati-hati
    • Pada versi bio yang dipakai penulis, urutan item MFSO di LIST salah, sehingga untuk memanggilnya harus dipindah beberapa baris ke atas

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

 
GN⁺ 2024-07-02
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

    • Setiap kali merasa “ini kerumitan berlebihan yang tidak masuk akal”, saya mencoba membayangkan seberapa besar hal itu bisa menyederhanakan hidup seseorang
      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
    • Kalau ranjang seperti ini, saya akan membelinya. Aneh kalau sampai harus menambahkan kemampuan akses Wi‑Fi ke ranjang. Itu berarti butuh hardware lebih banyak daripada sekadar dicolokkan ke stopkontak, menurut saya itu gila
  • 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 lama: serangan SIM swapping yang menargetkan pemilik kripto
      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 ;)
    • Kalau fakta seperti itu tidak diberitahukan sebelum pembelian, bukankah pemilik ranjang seharusnya menggugat? Mengakses jaringan tanpa izin dan menanam backdoor itu bukankah tindak pidana?
  • 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

    • Ranjang tidak perlu rumit. Dulu, dengan Z80 dan RAM 32K saja sudah cukup untuk semua hal yang perlu dilakukan di ranjang. Hari ketika saya membeli ranjang multitasking kooperatif pertama benar-benar bersejarah, dan selimut berdensitas tinggi mengubah segalanya
      Namun saya tidak rindu harus membawa piringan vinyl kosong ke perpustakaan umum untuk mengambil update software. Kalau lupa, bisa muncul kutu kasur
    • https://imgur.com/6wbgy2L
      “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”
    • Alasan ranjang menjalankan Linux adalah karena kita hidup di era ketika segala sesuatu mengukur dirinya sendiri demi hasil yang lebih baik
      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
    • Saya juga merasakan hal yang sama. Untungnya, tren ini membuat saya membeli barang yang lebih tua, bekas, dan bisa diperbaiki dengan harga jauh lebih murah, serta sedikit demi sedikit belajar perbaikan kecil pada elektronik lama
      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
    • Setidaknya tidak menjalankan Windows
  • 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

    • Nama Sleep Number berasal dari nilai pengaturan kekerasan kasurnya. Anda memilih “sleep number” Anda sendiri, dan pasangan Anda memilih nilainya sendiri di sisi ranjang yang lain
    • Saya menganggapnya kebetulan yang lucu, tetapi sepertinya Eight Sleep memilih nama yang cukup mudah tertukar dengan Sleep Number namun tidak sampai langsung digugat
    • Merek Sleep Number mungkin sudah ada sejak era 80-an. Saya sendiri belum pernah memakainya, tapi yang jelas itu merek lama. Kalau Anda berada di luar AS, mungkin Anda belum pernah mendengarnya
    • Ranjang Sleep Number pada dasarnya adalah kantong udara persegi panjang raksasa berbentuk kasur yang dimasukkan ke dalam kuburan foam
      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
    • Karena baru pertama kali mendengar keduanya, saya kira judulnya adalah metafora tentang “cara mendapatkan hak root ke otak untuk meningkatkan kualitas tidur”
      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

    • Ironisnya, melihat ini justru membuat saya ingin membelinya. Kalau perangkat pintar bisa dilokalkan atau dibuat bisa dikendalikan dengan Home Assistant, lalu koneksi internetnya bisa diputus, kelihatannya tidak terlalu buruk
      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

    • Neraka baru macam apa ini. Kenapa harus terhubung ke internet?
    • Dalam kasus saya, selimut menyelesaikan 95% masalahnya, dan di pondok ski, bantalan kasur listrik murah menangani 5% sisanya
    • Saya sempat ingin membeli Eight Sleep, tetapi begitu tahu mereka melakukan hal seperti ini, minat saya langsung hilang. Saya tidak mau membayar lebih dari 1.000 dolar untuk cover kasur, lalu masih harus membayar “sewa” agar barangnya bisa berfungsi
  • 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”

    • Hukum di atas kertas dan hukum di lapangan itu berbeda. Jika produsen menolak memenuhi garansi, sangat sedikit yang bisa dilakukan pelanggan
  • Berikutnya mungkin ransomware. “Bayar 1.000 dolar, atau selama sebulan ke depan kamu tidak akan bisa tidur di tempat tidurmu”

    • Bukankah berikutnya model berlangganan?
  • 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

    • Benarkah detak jantung bisa dideteksi dengan sensor tekanan? Sepertinya noise-nya terlalu banyak sampai datanya tidak berguna
      Setelah saya cari, tampaknya mereka menggabungkannya dengan analisis statistik yang cukup masuk akal sehingga bisa mendapatkan data yang cukup akurat. Menarik