- Dua mahasiswa keamanan siber mencoba meretas mesin cuci demi kesenangan dan tantangan
- Mereka menganalisis aplikasi mobile mesin cuci lewat reverse engineering untuk mempelajari API dan metode enkripsi
- Dengan menemukan kunci enkripsi XOR, mereka mengimplementasikan cara untuk membaca dan mendekripsi data status mesin cuci secara real-time
- Mereka membuat bot notifikasi yang mengotomatiskan status operasi dan pemberitahuan selesai mesin cuci dengan memanfaatkan webhook Discord
- Ke depannya, mereka berencana menerapkan otomatisasi smart home serupa pada perangkat rumah tangga "bodoh" lainnya
Pendahuluan
- Penulis menjalankan proyek meretas mesin cuci bersama temannya di rumah baru tempat ia pindah
- Tujuannya lebih pada kesenangan dan tantangan teknis daripada kegunaan murni
- Rasa penasaran untuk menghubungkan mesin cuci dan perangkat rumah tangga lain ke sistem smart home menjadi titik awalnya
- Pengalaman yang didapat dari meretas langsung juga membantu sebagai latihan reverse engineering di dunia nyata
Latar belakang
- Di rumah sudah tersedia mesin cuci pintar dengan dukungan Wi-Fi
- Mesin cuci ini bisa mengirim notifikasi progres melalui aplikasi mobile
- Hanya satu orang yang bisa ditautkan ke aplikasi pada satu waktu, sehingga tidak nyaman untuk dipakai bersama
- Mereka melihat masalah ini sebagai peluang, lalu memutuskan untuk membuat agar banyak orang bisa menerima notifikasi status tanpa batasan aplikasi
Kasus bel pintu
- Bel pintu rumah menggunakan sistem yang mengirim notifikasi lewat sinyal nirkabel 433MHz
- Temannya membuat sistem yang mendeteksi sinyal bel pintu dan mengirim notifikasi ke server Discord
- Selain bunyi bel pintu asli, sistem ini juga dimanfaatkan sebagai notifikasi cadangan
- Setelah melihat contoh sukses ini, mereka pun mencoba menghubungkan notifikasi otomatis mesin cuci dengan cara yang sama
Rencana dan persiapan
- Penulis memutuskan untuk melakukan reverse engineering pada aplikasi mobile guna memahami cara kerja API
- Ia memanfaatkan router OpenWRT untuk menangkap trafik jaringan secara langsung dari mesin cuci pintar
- Mesin cuci dihubungkan ke Wi-Fi sementara untuk mencoba menangkap paket dan memahami pola komunikasinya
Analisis trafik mesin cuci
- Mesin cuci mengirim dan menerima trafik melalui berbagai jalur, termasuk IP-nya sendiri, 255.255.255.255 (broadcast), server eksternal (HTTP API, trafik terenkripsi), serta komunikasi HTTP langsung dengan aplikasi (port 80)
- Mereka terutama memusatkan perhatian pada bagian yang berkomunikasi langsung dengan aplikasi mobile, lalu menganalisis bagian ini secara mendalam
Reverse engineering API mesin cuci
- Aplikasi berulang kali memakai dua endpoint:
/http-read.json?encrypted=1 (membaca status) dan /http-write.json?encrypted=1 (mengirim perintah)
- Yang menjadi fokus adalah endpoint baca, tetapi data respons terenkripsi (HEX, tipe HTML)
- Bahkan saat diberi query parameter
encrypted=0, hasilnya hanya gagal dekripsi atau error 400
Analisis enkripsi dan mendapatkan kunci
- Dengan dugaan bahwa ini adalah enkripsi sederhana berbasis XOR, mereka mencoba brute force menggunakan alat online seperti CyberChef
- Dari proyek referensi (CandySimplyFi-tool), mereka menemukan kode yang sudah berhasil mengekstrak kunci, lalu memanfaatkannya untuk memulihkan kunci dan mendekripsi data dalam hitungan detik
- Untuk memahami skema data lebih lanjut, mereka juga merujuk pada kode open source ofalvai/home-assistant-candy
Eksperimen nilai status mesin cuci
- Mereka memeriksa perubahan data saat berbagai kontrol fisik mesin cuci dioperasikan (mengubah program, menyesuaikan suhu dan kecepatan, menjalankan/berhenti/selesai)
- Field utama nilai status:
- Pr: status knob pemilihan program
- PrPh: siklus pencucian yang sedang berjalan
- Temp: suhu yang disetel
- SpinSp: kecepatan putar yang disetel
- RemTime: sisa waktu (menit, kadang terjadi kondisi tetap di 10 menit)
- Kekurangannya: beberapa nilai (misalnya
SpinSp) bisa berbeda dari nilai sebenarnya
Pengembangan skrip otomatisasi notifikasi
- Implementasi untuk skema API mesin cuci, kunci enkripsi, pembacaan dan dekripsi data, hingga penentuan status telah selesai dibuat
- Mereka kemudian membuat skrip bot notifikasi yang memanfaatkan webhook Discord
- Urutan kerja utama:
- Melakukan polling ke mesin cuci
- Jika tidak ada perubahan status, tidur lalu ulangi
- Jika perubahan terdeteksi, perbarui pesan terakhir atau kirim pesan baru
- Ulangi
Penutup dan rencana selanjutnya
- Mereka sudah berhasil mengotomatiskan notifikasi bel pintu dan mesin cuci
- Berikutnya mereka membayangkan penerapan otomatisasi serupa pada mesin pencuci piring, pengering, TV dan lainnya (smart plug, sensor getar, IR blaster)
- Mereka juga berencana bereksperimen dengan sistem keamanan sederhana berbasis webcam
Kesimpulan
- Melalui pengalaman proyek ini, mereka mempelajari dasar-dasar reverse engineering IoT di dunia nyata dan peretasan smart home sederhana
- Ini menjadi contoh yang memberi pengalaman sekaligus kegunaan praktis dan kesenangan
1 komentar
Opini Hacker News
Pertama-tama, ini bukan kritik terhadap tulisan aslinya; menurut saya ini benar-benar memperkenalkan proses analisis perangkat yang sangat menarik dengan sangat baik.
Kalau perangkat berkomunikasi dengan aplikasi Android, saya merekomendasikan apk-mitm.
Alat ini menghapus hampir semua certificate pinning yang diketahui dari apk dan menulis ulang manifest agar sertifikat lokal juga bisa digunakan tanpa root.
Setelah menghapus aplikasi asli lalu sideload hasil dari apk-mitm,
mitmproxybisa dipakai di perangkat stok biasa.Hal penting lainnya, jika aplikasi mengirim data terenkripsi lalu mendekripsinya untuk ditampilkan, berarti kuncinya ada di suatu tempat di aplikasi atau diambil dari suatu tempat.
Kalau menganalisis apk dengan jadx, Anda hampir bisa melihatnya dalam bentuk kode Java, jadi kadang kuncinya juga bisa ditemukan.
Namun beberapa produsen memindahkan proses enkripsi ke native code, jadi dalam kasus seperti itu perlu dilakukan reverse engineering dengan Ghidra atau semacamnya.
Proses seperti ini bisa sangat membosankan, tapi juga bisa sangat menyenangkan.
Menurut saya, meskipun penulis bertumpu pada hasil riset orang lain yang sudah ada, pekerjaan seperti ini tetap sangat layak dicoba meski belum pernah dilakukan siapa pun sebelumnya.
Pada akhirnya, Anda bisa belajar banyak sambil memahami cara kerja perangkat yang Anda miliki.
Pada akhirnya, akses ke server diblokir, lalu saya kebetulan tahu soal certificate pinning dan mencoba repo ini; hasilnya benar-benar menyelesaikan masalah dengan rapi.
Iklan juga jadi tidak muncul, mungkin karena URL iklan lama.
Pengembangnya sendiri juga cuma tampak fokus membuat aplikasinya makin buruk, jadi saya tidak merasa rugi.
Saya memakai mesin cuci Bosch untuk memantau progres pencucian dari sisi lain rumah (tidak seperti tulisan aslinya).
Berkat API Bosch, saya bisa mengetahui apakah siklus cucinya sudah selesai dan apakah pintunya sudah dibuka.
Saat ini saya masih memakai versi API bawaan, tetapi PoC-nya sudah selesai jadi berikutnya saya berencana pindah ke opsi local hosting.
Dengan Home Assistant, kalau siklus sudah selesai tetapi pintu belum dibuka, itu berarti masih ada cucian basah di dalam.
Karena itu saya membuat notifikasi cucian terkirim ke ponsel saya setiap 15 menit, dan ke ponsel istri saya hanya saat dia sedang di rumah.
Sangat sederhana dan bekerja dengan sempurna.
Mesin cuci saya model lawas dari era 90-an, jadi bekerja berdasarkan dial timer.
Tidak ada komputer atau sensor, hanya tambahan deteksi pada tahap pengisian air.
Saya cukup selalu menyetel timer 40 menit dan selesai, bahkan ada fungsi mematikan alarm, jadi rasanya tidak bisa lebih sederhana lagi.
Saya juga berencana menerapkan hal serupa pada oven kecil.
Tidak ada API atau konektivitas, tapi saya akan menancapkannya ke smart plug untuk mengukur penggunaan daya, lalu memantau dan memberi tahu status siaga/berjalan.
Saya cukup sering menyalakan mesin cuci sebelum tidur lalu menundanya sampai keesokan hari, dan mesin cuci saya punya fitur seperti "extended tumble" yang menjaga cucian tetap segar semalaman.
Memang memakai sedikit lebih banyak air, tapi fitur itu menyelamatkan rutinitas malam saya, sekaligus membantu memakai listrik pada jam malam.
Saya sangat suka Electrolux saya, dan saya kira merek lain mungkin juga punya fitur serupa.
Saya sudah lebih dari 15 tahun memakai jam G-Shock 5600 sebagai pengingat timer mesin cuci.
Saat mulai mencuci, saya set timer jam sesuai total durasi, lalu ketika selesai jamnya akan berbunyi bip.
Terlepas dari ada tidaknya API, cara ini bisa dipakai tanpa peduli mereknya.
Solusi yang benar-benar elegan.
Logikanya sederhana, tapi dampak perbaikannya di kehidupan nyata sangat jelas.
Saya sedang melakukan hardware hacking pada kulkas.
Bukan sisi perangkat lunaknya, melainkan kulkas mahal untuk camper van yang mendukung gas/12v/220v.
Bagian kontrol elektroniknya sempat terbakar sehingga kabel dan bagian dalamnya rusak, tetapi kulkasnya sendiri masih baik.
Jadi karena semua komponennya memang harus diganti, daripada membeli control board baru seharga 250 dolar, saya ingin merakit sistem baru dari komponen boiler gas lama.
Motherboard boiler sudah memiliki perangkat penyalaan, jadi kalau logika dan pengamanannya dirancang dengan baik, sepertinya itu bisa dipakai untuk mode operasi gas.
Saya jadi tidak perlu membeli kulkas baru, dan ini juga proyek bagus untuk mengajari anak saya yang berusia 9 tahun tentang elektronika.
Tentu saja karena ini melibatkan gas, risikonya bisa berbahaya, tetapi pada akhirnya selalu menyenangkan, dan setelah proses hacking selesai biasanya kritik juga mereda.
Kalau ada yang tertarik dengan prosesnya, saya bisa menuliskannya sebagai posting lengkap.
Saya menempelkan sensor getaran Zigbee pada mesin cuci/pengering dan menghubungkannya ke Home Assistant.
Saya belum kepikiran metode memantau arus/tegangan lewat smart plug, jadi menurut saya itu ide yang bagus.
Dengan kondisi trigger sederhana, pembaruan dashboard dan notifikasi email saat mesin cuci mulai/selesai pun berjalan otomatis.
Ada juga fitur aplikasi dan Bluetooth, tetapi aplikasinya meminta akses ke kamera, audio, dan kontak di ponsel saya, jadi saya tidak berniat memakainya.
Sepertinya pekerjaan terkait integrasi HA juga sedang berlangsung di tautan berikut.
https://github.com/home-assistant-HomeWhiz/home-assistant-HomeWhiz/blob/main/README.md
Menurut saya, tulisan seperti inilah esensi Hacker News.
Saya berharap lebih banyak tulisan seperti ini, semacam hacking sungguhan (modifikasi sebagai hobi); belakangan rasanya isinya cuma penuh cerita AI/LLM.
Kalau suka hardware hacking semacam ini, saya juga sangat merekomendasikan https://hackaday.com/.
Memasang sertifikat pribadi di Android yang tidak di-root memang cukup merepotkan.
Itu hanya bisa ditambahkan ke system certificate store, dan biasanya memerlukan modul Magisk.
Cara yang lebih mudah adalah menjalankan emulator Android lama di PC, memasang sertifikat di sana, lalu meneruskan trafik ke Burpsuite atau
mitmproxy.Tidak perlu ganti perangkat juga.
Kalau menganalisis kode aplikasi dengan APKLab atau Jadx, mungkin setidaknya algoritma derivasi kuncinya bisa ditemukan.
Saya penasaran apakah aplikasi dan mesin cucinya hanya bekerja saat berada di jaringan yang sama; saya suka bagian itu.
Saya terkejut melihat ungkapan siklus cuci "3 jam" (yang sebenarnya 4~5 jam), jadi saya bertanya.
Mesin cuci saya dalam mode eco biasa bahkan tidak sampai 30 menit, dan ketika selesai ia memberi notifikasi dengan suara yang sangat keras.
Berkat kombinasi siklus pendek dan notifikasi itu, saya tidak memerlukan solusi teknis yang rumit.
Mungkin penulis komentar itu orang Amerika.
Mesin cuci di Eropa memakan waktu lebih lama karena tuntutan penggunaan air/listrik yang lebih rendah.
Perangkat di tulisan itu tampaknya juga model washer-dryer combo, jadi lebih lama lagi.
Di rumah kami, mode normal saja 104 menit, dan kalau muatannya berlebihan bisa sampai 3 jam.
Siklus yang panjang membuat eliminasi mikroorganisme lebih andal bila memakai deterjen enzim dan bahan pemutih berbasis oksigen aktif.
Program 30 menit itu pada dasarnya cuma seperti "membilas" cucian.
https://pubmed.ncbi.nlm.nih.gov/25207988/
Pengering saya model tanpa duct (jujur saja, ini keluhan), jadi butuh 3 jam.
Dari mencuci sampai mengeringkan habis 4,5 jam.
Ini perangkat rumah tangga yang paling tidak memuaskan yang pernah saya pakai.
Kadang pengeringannya juga tidak benar-benar tuntas.
Ada yang menunjukkan bahwa enkripsinya tidak terlihat.
Ia menganalisis bahwa data di input window pada tangkapan layar pertama (
cyberchef.avif) hanyalah hex ASCII biasa yang tidak terenkripsi.Sebagai contoh, ia menjelaskan bahwa
7Dadalah{,0D0Aadalah CRLF,09adalah TAB,22adalah", dan seterusnya.Artinya itu adalah plaintext yang sudah didekodekan, jadi ia merasa penjelasan tentang enkripsi XOR atau sejenisnya tidak cocok.
Ia juga menganalisis bahwa nilai kunci pada tangkapan layar tidak cocok pada batas byte dan penyelarasan, serta tidak sesuai dengan gap input yang sebenarnya.
Karena itu ia mempertanyakan apakah tangkapan layarnya dimanipulasi atau diedit.
Ia mengatakan penasaran apa alasannya dan sebenarnya apa yang terjadi.
Ada yang memberi tahu bahwa tautan gambar bertuliskan “For now, I plugged this key into CyberChef, and was able to decrypt the data.” rusak.
Ia bahkan menyebutkan elemen HTML tertentu dan tautan terkaitnya secara rinci.
Mengenai bagian "mesin cuci itu banyak sekali berkomunikasi dengan dirinya sendiri", ada yang menyoroti bahwa ini tampaknya terjadi karena perancang network stack tidak memahami konsep loopback interface.
Katanya perangkat itu banyak mengirim paket ke IP-nya sendiri, dan juga mengirim paket ke
255.255.255.255setiap detik, tetapi ia sendiri tidak terlalu mempermasalahkannya.Saya sering melihat perilaku seperti ini pada perangkat IoT, dan kadang dipakai untuk mendeteksi konflik/perubahan IP.
Saya juga punya pemikiran yang mirip.