2 poin oleh GN⁺ 2023-12-16 | 1 komentar | Bagikan ke WhatsApp

Rekayasa balik pengontrol lampu LED Bluetooth LE, atau bagaimana saya merusak lampu Natal saya

  • Perangkat yang berkomunikasi melalui Bluetooth LE dan memiliki aplikasi layak diintegrasikan ke dalam sistem otomasi rumah.
  • Menghabiskan cukup banyak waktu untuk merekayasa balik dan mengotomatisasi strip lampu LED yang ramah anggaran.
  • Baru-baru ini berhasil menghubungkan strip 5M non-addressable termurah seharga £2.38 dengan kontrol Bluetooth LE ke Home Assistant hanya dalam beberapa jam.

Langkah 1. Byte melalui kabel

  • Untuk mengendalikan perangkat dengan perangkat lunak sendiri, langkah pertama adalah memeriksa byte Bluetooth yang dikirim aplikasi ke perangkat.
  • Android mempermudah proses ini. Aktifkan mode pengembang, pasang aplikasi lampu, lalu aktifkan Bluetooth HCI snoop di pengaturan pengembang untuk merekam log.
  • Buka log dengan Wireshark untuk melihat byte yang tepat, lalu cari pola nilainya untuk mengidentifikasi rangkaian byte untuk setiap tindakan.

Langkah 2. Serangan replay

  • Jika tujuannya hanya menyalakan dan mematikan lampu, rangkaian byte berulang yang diamati mungkin sudah cukup untuk kontrol daya.
  • Anda dapat menguji dengan menghubungkan ke perangkat BLE menggunakan gatttool dan mengirimkan byte tersebut.

Langkah 3. Mendekompilasi aplikasi Android

  • Unduh APK aplikasi dan buka di jadx untuk melihat rahasia di dalamnya.
  • Menemukan referensi ke AES di dalam source, yang mengisyaratkan kemungkinan adanya protokol terenkripsi.
  • Data terenkripsi tidak berubah setiap saat, diperlukan dekripsi cepat pada MCU berdaya rendah, dan kemungkinan ada kunci tetap yang tidak unik untuk tiap perangkat.

Langkah 4. Semua fungsi

  • Menelusuri setiap fungsi aplikasi sambil mencatat byte yang dikirim.
  • Ini membantu merekam setiap tindakan, mengulanginya, menemukan pola, dan mengorelasikan byte yang tertangkap dengan catatan.

Langkah 5. Mesin pembuat limbah elektronik otomatis

  • Saat menelusuri perubahan warna, teramati bahwa aplikasi tidak pernah mengirim nilai di atas 0x1F untuk merah, hijau, dan biru.
  • Mencoba nilai 8-bit dan menemukan bahwa warna yang lebih terang bekerja dengan baik.
  • Karena penasaran apakah ada efek tambahan, hal itu dicoba dengan sebuah loop sederhana.
  • Hingga efek ke-10 semuanya berjalan baik, tetapi pada efek ke-11 ditemukan mode rahasia, dan pada efek ke-12 kegelapan pun datang.
  • Mencoba reboot, tetapi lampu tidak menyala lagi, dan juga tidak lagi melakukan iklan Bluetooth sehingga tidak bisa dihubungkan lagi.
  • Diduga firmware rusak akibat buffer overflow.
  • Namun LED-nya sendiri adalah LED addressable standar, jadi masih bisa digunakan dengan menghubungkannya ke mikrokontroler lain.

Bagaimana saya bisa merusak lampu saya

  • Meski masalah terjadi, sebagian besar protokol berhasil didokumentasikan dan dibuatkan proyek Github yang mencakup komponen kustom Home Assistant.
  • Ini berfungsi, tetapi Anda harus melanjutkannya dengan menanggung risikonya sendiri.

Opini GN⁺

  • Hal terpenting dari tulisan ini adalah semangat DIY dan antusiasme terhadap rekayasa balik untuk mengintegrasikan lampu pintar rumahan ke dalam sistem otomasi.
  • Proses rekayasa balik tidak hanya memerlukan pengetahuan teknis tetapi juga kemampuan pemecahan masalah dan kreativitas, sehingga menjadi topik yang sangat menarik bahkan bagi insinyur perangkat lunak pemula.
  • Berbagi pengalaman kegagalan membantu orang lain agar tidak mengulangi kesalahan yang sama, dan keterbukaan berbagi pengetahuan seperti ini adalah salah satu nilai inti komunitas open source.

1 komentar

 
GN⁺ 2023-12-16
Pendapat Hacker News
  • Analisis paket yang berhasil didekode

    • Hasil upaya mendekode paket menunjukkan adanya header tetap, dan byte ke-5 berubah antara 1 dan 0 untuk menandakan nyala dan mati, sementara sisanya diisi 0. Ini diduga merepresentasikan panjang perintah, perintah ("TURN"), argumen (0 atau 1), lalu dipadatkan menjadi 16 byte.
  • Masalah catu daya

    • Strip LED WS281x menyala sangat terang dan mengonsumsi arus besar. Catu daya 12V, 3A nyaris cukup untuk menjalankan seluruh 100 strip pada kecerahan maksimum. Fakta bahwa firmware tampaknya hanya menggunakan 31 dari kecerahan maksimum 255 mengisyaratkan kemungkinan sekring putus.
  • Upaya reverse engineering lampu terenkripsi

    • Pernah mencoba melakukan reverse engineering pada lampu LED baterai Aputure 60d dan SmallRig RM75, tetapi ternyata keduanya terenkripsi. Keduanya menggunakan proses negosiasi yang sama, tetapi memakai library yang berbeda. Sempat mencoba meniru proses pertukaran kunci Diffie-Hellman, namun menyerah karena tidak dapat memahami tujuan angka yang tampak acak pada langkah tambahan itu (mungkin kunci lain?). Membaca tulisan ini membuat saya ingin mencoba kunci yang di-hardcode.
  • Pendapat tentang lampu BLE

    • Sudah cukup banyak membaca tentang set lampu yang menggunakan BLE, dan berterima kasih atas penyebutan penulis. Ini mengingatkan pada video Analog Technology Connections.
  • Upaya otomatisasi lampu Natal terhubung BLE

    • Pernah mencoba mengotomatisasi lampu Natal yang terhubung lewat BLE, tetapi malah menghasilkan limbah elektronik. Sekarang Anda juga bisa membuatnya.
  • Pertanyaan tentang enkripsi pesan

    • Mempertanyakan mengapa pesan dienkripsi dan apakah ini merupakan standar.
  • Komentar tentang enkripsi

    • "Anda tidak bisa mengirim plaintext lewat udara, itu tidak aman" dan komentar "Tenang saja, kami menambahkan enkripsi AES".
  • Komentar humor tentang peretasan lampu

    • Reaksi "Haha! Suka sekali" terhadap ucapan "Beri tahu saya bagaimana saya bisa meretas lampu saya".
  • Pertanyaan pemula tentang reverse engineering lampu Govee

    • Pertanyaan dari pemula tentang mengapa lampu WiFi seperti Govee tidak bisa di-reverse engineer, dan apakah MITM (serangan man-in-the-middle) memang lebih sulit.